Filebeat 核心配置详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Filebeat 核心配置详解相关的知识,希望对你有一定的参考价值。

参考技术A 官方说明: https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-overview.html

Filebeat 有两大部分, inputs 和 harvesters , inputs 负责找文件(类似 find 命令)和管理 harvesters ,一个 harvester 则和一个文件一一对应,一行行读然后发送给 output (类似 tail -f )。

官方说明: https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-input-log.html

基本例子

场景1:路径下的历史文件可能很多,比如配置了按天分割,显然旧文件我们一般是不需要的。
场景2:扫描频率如何控制,通配设置复杂的话频繁扫文件也是很大的开销。

场景1是通过 ignore_older 参数解决,意思是多久前的旧文件不扫描。
比如设置为 1h,表示文件时间在 1h 之前的日志都不会被 input 模块搜集,直到有新日志产生。

场景2是通过 scan_frequency 参数控制,表示多久扫描一次是否有新文件产生。
比如设置 10s(默认),一个新文件产生 10s 后会被发现,或者一个旧文件(上面 ignore_older )新产生了一行日志 10s 才发现这个文件。

被 harvester 获取的文件就一直拿着不放吗?文件重命名或者被删除后怎么办呢?

The close_* configuration options are used to close the harvester after a certain criteria or time. Closing the harvester means closing the file handler.

close_inactive
多久关闭文件,比如一个日志文件,10 分钟都没有读到新的内容就把文件句柄关闭。

这里的时间不是取决于文件的最后更新时间,而是 Filebeat 内部记录的时间,上次读到文件和这次尝试读文件的时间差。

官方建议设置的时间是比文件产生数据频率高一个数量级(默认5m),比如每秒都有日志产生,这个值就可以设置为 1m。

close_renamed
是否关闭 rename 的文件。

close_removed
默认开启。
文件被删除后,就关闭文件句柄。

这个符合正常场景,一般日志清理程序都是清理很多天前的日志,这个时间远远大于 ignore_older 和 close_inactive 。

The clean_* options are used to clean up the state entries in the registry file.

Filebeat 内部记录了很多文件状态,保存在 data/registry/filebeat/data.json。如果不清理的话这个文件会越来越大,影响效率。

clean_inactive
多久清理一次注册信息。默认值是0(不开启clean_*相关功能)

清理的文件信息需要保证这个文件已经不活跃了,所以这个值需要大于 ignore_older + scan_frequency 。
不然的话清理后这个文件又被发现,则会重头开始读取,这样就重了。

clean_removed
文件被删除后是否清理注册信息,默认开启。
需要和 close_removed 值保持一致

简单总结几个时间配置:
clean_inactive > ignore_older + scan_frequency > close_inactive

推荐配置:

在日志非常多机器负载高的时候加重机器负担,建议生产环境上需要对 Filebeat 资源进行限制:
max_procs 最多使用多少核,默认会全部使用,按机器情况限制为1-4核,不太会影响推送效率。

官方说明: https://www.elastic.co/guide/en/beats/filebeat/current/_live_reloading.html

具体的 input 配置文件放在 configs 文件夹下,例如:

filebeat 配置文件详解

Filebeat Configuration Example 


############### Filebeat #############

filebeat:

  # List of prospectors to fetch data.

  prospectors:

    -

      # paths指定要监控的日志

      paths:

        - /var/log/*.log


      #指定被监控的文件的编码类型使用plain和utf-8都是可以处理中文日志的。

      # Some sample encodings:

      #   plain, utf-8, utf-16be-bom, utf-16be, utf-16le, big5, gb18030, gbk,

      #    hz-gb-2312, euc-kr, euc-jp, iso-2022-jp, shift-jis, ...

      #encoding: plain


      #指定文件的输入类型log(默认)或者stdin。

      input_type: log


      # 在输入中排除符合正则表达式列表的那些行

      # exclude_lines: ["^DBG"]


      # 包含输入中符合正则表达式列表的那些行默认包含所有行include_lines执行完毕之后会执行exclude_lines。

      # include_lines: ["^ERR", "^WARN"]


      # 忽略掉符合正则表达式列表的文件默认为每一个符合paths定义的文件都创建一个harvester。

      # exclude_files: [".gz$"]


      # 向输出的每一条日志添加额外的信息比如“level:debug”方便后续对日志进行分组统计。默认情况下会在输出信息的fields子目录下以指定的新增fields建立子目录例如fields.level。

      #fields:

      #  level: debug

      #  review: 1


      # 如果该选项设置为true则新增fields成为顶级目录而不是将其放在fields目录下。自定义的field会覆盖filebeat默认的field。

      #fields_under_root: false


      # 可以指定Filebeat忽略指定时间段以外修改的日志内容比如2h两个小时或者5m(5分钟)。

      #ignore_older: 0


      # 如果一个文件在某个时间段内没有发生过更新则关闭监控的文件handle。默认1h,change只会在下一次scan才会被发现

      #close_older: 1h


      # i设定Elasticsearch输出时的document的type字段也可以用来给日志进行分类。Default: log

      #document_type: log


      # Filebeat以多快的频率去prospector指定的目录下面检测文件更新比如是否有新增文件如果设置为0s则Filebeat会尽可能快地感知更新占用的CPU会变高。默认是10s。

      #scan_frequency: 10s


      # 每个harvester监控文件时使用的buffer的大小。

      #harvester_buffer_size: 16384


      # 日志文件中增加一行算一个日志事件max_bytes限制在一次日志事件中最多上传的字节数多出的字节会被丢弃。The default is 10MB.

      #max_bytes: 10485760


      # 适用于日志中每一条日志占据多行的情况比如各种语言的报错信息调用栈。这个配置的下面包含如下配置

      #multiline:


        # The regexp Pattern that has to be matched. The example pattern matches all lines starting with [

        #pattern: ^\[


        # Defines if the pattern set under pattern should be negated or not. Default is false.

        #negate: false


        # Match can be set to "after" or "before". It is used to define if lines should be append to a pattern

        # that was (not) matched before or after or as long as a pattern is not matched based on negate.

        # Note: After is the equivalent to previous and before is the equivalent to to next in Logstash

        #match: after


        # The maximum number of lines that are combined to one event.

        # In case there are more the max_lines the additional lines are discarded.

        # Default is 500

        #max_lines: 500


        # After the defined timeout, an multiline event is sent even if no new pattern was found to start a new event

        # Default is 5s.

        #timeout: 5s


      # 如果设置为trueFilebeat从文件尾开始监控文件新增内容把新增的每一行文件作为一个事件依次发送而不是从文件开始处重新发送所有内容。

      #tail_files: false


      # Filebeat检测到某个文件到了EOF之后每次等待多久再去检测文件是否有更新默认为1s。

      #backoff: 1s


      # Filebeat检测到某个文件到了EOF之后等待检测文件更新的最大时间默认是10秒。

      #max_backoff: 10s


      # 定义到达max_backoff的速度默认因子是2到达max_backoff后变成每次等待max_backoff那么长的时间才backoff一次直到文件有更新才会重置为backoff。

      #backoff_factor: 2


      # 这个选项关闭一个文件,当文件名称的变化。#该配置选项建议只在windows。

      #force_close_files: false


    # Additional prospector

    #-

      # Configuration to use stdin input

      #input_type: stdin


  # spooler的大小spooler中的事件数量超过这个阈值的时候会清空发送出去不论是否到达超时时间。

  #spool_size: 2048


  # 是否采用异步发送模式(实验!)

  #publish_async: false


  # spooler的超时时间如果到了超时时间spooler也会清空发送出去不论是否到达容量的阈值。

  #idle_timeout: 5s


  # 记录filebeat处理日志文件的位置的文件

  registry_file: /var/lib/filebeat/registry


  # 如果要在本配置文件中引入其他位置的配置文件可以写在这里需要写完整路径但是只处理prospector的部分。

  #config_dir:



############################# Output ##########################################


# 输出到数据配置.单个实例数据可以输出到elasticsearch或者logstash选择其中一种注释掉另外一组输出配置。

output:


  ### 输出数据到Elasticsearch

  elasticsearch:

    # IPv6 addresses should always be defined as: https://[2001:db8::1]:9200

    hosts: ["localhost:9200"]


    # 输出认证.

    #protocol: "https"

    #username: "admin"

    #password: "s3cr3t"


    # 启动进程数.

    #worker: 1


    # 输出数据到指定index default is "filebeat"  可以使用变量[filebeat-]YYYY.MM.DD keys.

    #index: "filebeat"


    # 一个模板用于设置在Elasticsearch映射默认模板加载是禁用的,没有加载模板这些设置可以调整或者覆盖现有的加载自己的模板

    #template:


      # Template name. default is filebeat.

      #name: "filebeat"


      # Path to template file

      #path: "filebeat.template.json"


      # Overwrite existing template

      #overwrite: false


    # Optional HTTP Path

    #path: "/elasticsearch"


    # Proxy server url

    #proxy_url: http://proxy:3128


    # 发送重试的次数取决于max_retries的设置默认为3

    #max_retries: 3


    # 单个elasticsearch批量API索引请求的最大事件数。默认是50。

    #bulk_max_size: 50


    # elasticsearch请求超时事件。默认90秒.

    #timeout: 90


    # 新事件两个批量API索引请求之间需要等待的秒数。如果bulk_max_size在该值之前到达额外的批量索引请求生效。

    #flush_interval: 1


    # elasticsearch是否保持拓扑。默认false。该值只支持Packetbeat。

    #save_topology: false


    # elasticsearch保存拓扑信息的有效时间。默认15秒。

    #topology_expire: 15


    # 配置TLS参数选项如证书颁发机构等用于基于https的连接。如果tls丢失主机的CAs用于https连接elasticsearch。

    #tls:

      # List of root certificates for HTTPS server verifications

      #certificate_authorities: ["/etc/pki/root/ca.pem"]


      # Certificate for TLS client authentication

      #certificate: "/etc/pki/client/cert.pem"


      # Client Certificate Key

      #certificate_key: "/etc/pki/client/cert.key"


      # Controls whether the client verifies server certificates and host name.

      # If insecure is set to true, all server host names and certificates will be

      # accepted. In this mode TLS based connections are susceptible to

      # man-in-the-middle attacks. Use only for testing.

      #insecure: true


      # Configure cipher suites to be used for TLS connections

      #cipher_suites: []


      # Configure curve types for ECDHE based cipher suites

      #curve_types: []


      # Configure minimum TLS version allowed for connection to logstash

      #min_version: 1.0


      # Configure maximum TLS version allowed for connection to logstash

      #max_version: 1.2



  ### 发送数据到logstash 单个实例数据可以输出到elasticsearch或者logstash选择其中一种注释掉另外一组输出配置。

  #logstash:

    # Logstash 主机地址

    #hosts: ["localhost:5044"]


    # 配置每个主机发布事件的worker数量。在负载均衡模式下最好启用。

    #worker: 1


    # #发送数据压缩级别

    #compression_level: 3


    # 如果设置为TRUE和配置了多台logstash主机输出插件将负载均衡的发布事件到所有logstash主机。

    #如果设置为false输出插件发送所有事件到随机的一台主机上如果选择的不可达将切换到另一台主机。默认是false。

    #loadbalance: true


    # 输出数据到指定index default is "filebeat"  可以使用变量[filebeat-]YYYY.MM.DD keys.

    #index: filebeat


    # Optional TLS. By default is off.

    #配置TLS参数选项如证书颁发机构等用于基于https的连接。如果tls丢失主机的CAs用于https连接elasticsearch。

    #tls:

      # List of root certificates for HTTPS server verifications

      #certificate_authorities: ["/etc/pki/root/ca.pem"]


      # Certificate for TLS client authentication

      #certificate: "/etc/pki/client/cert.pem"


      # Client Certificate Key

      #certificate_key: "/etc/pki/client/cert.key"


      # Controls whether the client verifies server certificates and host name.

      # If insecure is set to true, all server host names and certificates will be

      # accepted. In this mode TLS based connections are susceptible to

      # man-in-the-middle attacks. Use only for testing.

      #insecure: true


      # Configure cipher suites to be used for TLS connections

      #cipher_suites: []


      # Configure curve types for ECDHE based cipher suites

      #curve_types: []



  ### 文件输出将事务转存到一个文件每个事务是一个JSON格式。主要用于测试。也可以用作logstash输入。

  #file:

    # 指定文件保存的路径。

    #path: "/tmp/filebeat"


    # 文件名。默认是 Beat 名称。上面配置将生成 packetbeat, packetbeat.1, packetbeat.2 等文件。

    #filename: filebeat


    # 定义每个文件最大大小。当大小到达该值文件将轮滚。默认值是1000 KB

    #rotate_every_kb: 10000


    # 保留文件最大数量。文件数量到达该值将删除最旧的文件。默认是7一星期。

    #number_of_files: 7



  ### Console output 标准输出JSON 格式。

  # console:

    #如果设置为TRUE事件将很友好的格式化标准输出。默认false。

    #pretty: false



############################# Shipper #########################################


shipper:

  # #日志发送者信息标示

  # 如果没设置以hostname名自居。该名字包含在每个发布事务的shipper字段。可以以该名字对单个beat发送的所有事务分组。

  #name:


  # beat标签列表包含在每个发布事务的tags字段。标签可用很容易的按照不同的逻辑分组服务器。

  #例如一个web集群服务器可以对beat添加上webservers标签然后在kibana的visualisation界面以该标签过滤和查询整组服务器。

  #tags: ["service-X", "web-tier"]


  # 如果启用了ignore_outgoing选项beat将忽略从运行beat服务器上所有事务。

  #ignore_outgoing: true


  # 拓扑图刷新的间隔。也就是设置每个beat向拓扑图发布其IP地址的频率。默认是10秒。

  #refresh_topology_freq: 10


  # 拓扑的过期时间。在beat停止发布其IP地址时非常有用。当过期后IP地址将自动的从拓扑图中删除。默认是15秒。

  #topology_expire: 15


  # Internal queue size for single events in processing pipeline

  #queue_size: 1000


  # GeoIP数据库的搜索路径。beat找到GeoIP数据库后加载然后对每个事务输出client的GeoIP位置目前只有Packetbeat使用该选项。

  #geoip:

    #paths:

    #  - "/usr/share/GeoIP/GeoLiteCity.dat"

    #  - "/usr/local/var/GeoIP/GeoLiteCity.dat"



############################# Logging #########################################



# 配置beats日志。日志可以写入到syslog也可以是轮滚日志文件。默认是syslog。

logging:


  # 如果启用发送所有日志到系统日志。

  #to_syslog: true


  # 日志发送到轮滚文件。

  #to_files: false


  # 

  files:

    # 日志文件目录。

    #path: /var/log/mybeat


    # 日志文件名称

    #name: mybeat


    # 日志文件的最大大小。默认 10485760 (10 MB)。

    rotateeverybytes: 10485760 # = 10MB


    # 保留日志周期。 默认 7。值范围为2 到 1024。

    #keepfiles: 7


  # Enable debug output for selected components. To enable all selectors use ["*"]

  # Other available selectors are beat, publish, service

  # Multiple selectors can be chained.

  #selectors: [ ]


  # 日志级别。debug, info, warning, error 或 critical。如果使用debug但没有配置selectors* selectors将被使用。默认error。

  #level: error


  #参考文档

  #http://www.ttlsa.com/elk/elk-beats-common-configure-section-describe/


本文出自 “康建华” 博客,请务必保留此出处http://michaelkang.blog.51cto.com/1553154/1864225

以上是关于Filebeat 核心配置详解的主要内容,如果未能解决你的问题,请参考以下文章

ELK--filebeat详解

filebeat 配置文件

kafka相关证书配置

filebeat采集多个文件配置参考

filebeat SSL配置debug

使用filebeat替换logstash