-
filebeat
2020-09-08 15:50:27filebeat是什么,可以用来干嘛 filebeat的原理是怎样的,怎么构成的 filebeat应该怎么玩 回到顶部 一、filebeat是什么 1.1、filebeat和beats的关系 首先filebeat是Beats中的一员。 Beats在是一个轻量级...- filebeat是什么,可以用来干嘛
- filebeat的原理是怎样的,怎么构成的
- filebeat应该怎么玩
一、filebeat是什么
1.1、filebeat和beats的关系
首先filebeat是Beats中的一员。
Beats在是一个轻量级日志采集器,其实Beats家族有6个成员,早期的ELK架构中使用Logstash收集、解析日志,但是Logstash对内存、cpu、io等资源消耗比较高。相比Logstash,Beats所占系统的CPU和内存几乎可以忽略不计。
目前Beats包含六种工具:- Packetbeat:网络数据(收集网络流量数据)
- Metricbeat:指标(收集系统、进程和文件系统级别的CPU和内存使用情况等数据)
- Filebeat:日志文件(收集文件数据)
- Winlogbeat:windows事件日志(收集Windows事件日志数据)
- Auditbeat:审计数据(收集审计日志)
- Heartbeat:运行时间监控(收集系统运行时的数据)
1.2、filebeat是什么
Filebeat是用于转发和集中日志数据的轻量级传送工具。Filebeat监视您指定的日志文件或位置,收集日志事件,并将它们转发到Elasticsearch或 Logstash进行索引。
Filebeat的工作方式如下:启动Filebeat时,它将启动一个或多个输入,这些输入将在为日志数据指定的位置中查找。对于Filebeat所找到的每个日志,Filebeat都会启动收集器。每个收集器都读取单个日志以获取新内容,并将新日志数据发送到libbeat,libbeat将聚集事件,并将聚集的数据发送到为Filebeat配置的输出。
工作的流程图如下:
1.3、filebeat和logstash的关系
因为logstash是jvm跑的,资源消耗比较大,所以后来作者又用golang写了一个功能较少但是资源消耗也小的轻量级的logstash-forwarder。不过作者只是一个人,加入http://elastic.co公司以后,因为es公司本身还收购了另一个开源项目packetbeat,而这个项目专门就是用golang的,有整个团队,所以es公司干脆把logstash-forwarder的开发工作也合并到同一个golang团队来搞,于是新的项目就叫filebeat了。
二、filebeat原理是什么
2.1、filebeat的构成
filebeat结构:由两个组件构成,分别是inputs(输入)和harvesters(收集器),这些组件一起工作来跟踪文件并将事件数据发送到您指定的输出,harvester负责读取单个文件的内容。harvester逐行读取每个文件,并将内容发送到输出。为每个文件启动一个harvester。harvester负责打开和关闭文件,这意味着文件描述符在harvester运行时保持打开状态。如果在收集文件时删除或重命名文件,Filebeat将继续读取该文件。这样做的副作用是,磁盘上的空间一直保留到harvester关闭。默认情况下,Filebeat保持文件打开,直到达到close_inactive
关闭harvester可以会产生的结果:
- 文件处理程序关闭,如果harvester仍在读取文件时被删除,则释放底层资源。
- 只有在scan_frequency结束之后,才会再次启动文件的收集。
- 如果该文件在harvester关闭时被移动或删除,该文件的收集将不会继续
一个input负责管理harvesters和寻找所有来源读取。如果input类型是log,则input将查找驱动器上与定义的路径匹配的所有文件,并为每个文件启动一个harvester。每个input在它自己的Go进程中运行,Filebeat当前支持多种输入类型。每个输入类型可以定义多次。日志输入检查每个文件,以查看是否需要启动harvester、是否已经在运行harvester或是否可以忽略该文件
2.2、filebeat如何保存文件的状态
Filebeat保留每个文件的状态,并经常将状态刷新到磁盘中的注册表文件中。该状态用于记住harvester读取的最后一个偏移量,并确保发送所有日志行。如果无法访问输出(如Elasticsearch或Logstash),Filebeat将跟踪最后发送的行,并在输出再次可用时继续读取文件。当Filebeat运行时,每个输入的状态信息也保存在内存中。当Filebeat重新启动时,来自注册表文件的数据用于重建状态,Filebeat在最后一个已知位置继续每个harvester。对于每个输入,Filebeat都会保留它找到的每个文件的状态。由于文件可以重命名或移动,文件名和路径不足以标识文件。对于每个文件,Filebeat存储唯一的标识符,以检测文件是否以前被捕获。
2.3、filebeat何如保证至少一次数据消费
Filebeat保证事件将至少传递到配置的输出一次,并且不会丢失数据。是因为它将每个事件的传递状态存储在注册表文件中。在已定义的输出被阻止且未确认所有事件的情况下,Filebeat将继续尝试发送事件,直到输出确认已接收到事件为止。如果Filebeat在发送事件的过程中关闭,它不会等待输出确认所有事件后再关闭。当Filebeat重新启动时,将再次将Filebeat关闭前未确认的所有事件发送到输出。这样可以确保每个事件至少发送一次,但最终可能会有重复的事件发送到输出。通过设置shutdown_timeout选项,可以将Filebeat配置为在关机前等待特定时间
三、filebeat怎么玩
3.1、压缩包方式安装
本文采用压缩包的方式安装,linux版本,filebeat-7.7.0-linux-x86_64.tar.gz
curl-L-Ohttps://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.7.0-linux-x86_64.tar.gz tar -xzvf filebeat-7.7.0-linux-x86_64.tar.gz
配置示例文件:filebeat.reference.yml(包含所有未过时的配置项)
配置文件:filebeat.yml3.2、基本命令
详情见官网:https://www.elastic.co/guide/en/beats/filebeat/current/command-line-options.html
export #导出 run #执行(默认执行) test #测试配置 keystore #秘钥存储 modules #模块配置管理 setup #设置初始环境
例如:./filebeat test config #用来测试配置文件是否正确
3.3、输入输出
支持的输入组件:
Multilinemessages,Azureeventhub,CloudFoundry,Container,Docker,GooglePub/Sub,HTTPJSON,Kafka,Log,MQTT,NetFlow,Office365ManagementActivityAPI,Redis,s3,Stdin,Syslog,TCP,UDP(最常用的额就是log)
支持的输出组件:
Elasticsearch,Logstash,Kafka,Redis,File,Console,ElasticCloud,Changetheoutputcodec(最常用的就是Elasticsearch,Logstash)
3.4、keystore的使用
keystore主要是防止敏感信息被泄露,比如密码等,像ES的密码,这里可以生成一个key为ES_PWD,值为es的password的一个对应关系,在使用es的密码的时候就可以使用${ES_PWD}使用
创建一个存储密码的keystore:filebeat keystore create 然后往其中添加键值对,例如:filebeatk eystore add ES_PWD 使用覆盖原来键的值:filebeat key store add ES_PWD–force 删除键值对:filebeat key store remove ES_PWD 查看已有的键值对:filebeat key store list
例如:后期就可以通过${ES_PWD}使用其值,例如:
output.elasticsearch.password:"${ES_PWD}"
3.5、filebeat.yml配置(log输入类型为例)
详情见官网:https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-input-log.html
type: log #input类型为log enable: true #表示是该log类型配置生效 paths: #指定要监控的日志,目前按照Go语言的glob函数处理。没有对配置目录做递归处理,比如配置的如果是: - /var/log/* /*.log #则只会去/var/log目录的所有子目录中寻找以".log"结尾的文件,而不会寻找/var/log目录下以".log"结尾的文件。 recursive_glob.enabled: #启用全局递归模式,例如/foo/**包括/foo, /foo/*, /foo/*/* encoding:#指定被监控的文件的编码类型,使用plain和utf-8都是可以处理中文日志的 exclude_lines: ['^DBG'] #不包含匹配正则的行 include_lines: ['^ERR', '^WARN'] #包含匹配正则的行 harvester_buffer_size: 16384 #每个harvester在获取文件时使用的缓冲区的字节大小 max_bytes: 10485760 #单个日志消息可以拥有的最大字节数。max_bytes之后的所有字节都被丢弃而不发送。默认值为10MB (10485760) exclude_files: ['\.gz$'] #用于匹配希望Filebeat忽略的文件的正则表达式列表 ingore_older: 0 #默认为0,表示禁用,可以配置2h,2m等,注意ignore_older必须大于close_inactive的值.表示忽略超过设置值未更新的 文件或者文件从来没有被harvester收集 close_* #close_ *配置选项用于在特定标准或时间之后关闭harvester。 关闭harvester意味着关闭文件处理程序。 如果在harvester关闭 后文件被更新,则在scan_frequency过后,文件将被重新拾取。 但是,如果在harvester关闭时移动或删除文件,Filebeat将无法再次接收文件 ,并且harvester未读取的任何数据都将丢失。 close_inactive #启动选项时,如果在制定时间没有被读取,将关闭文件句柄 读取的最后一条日志定义为下一次读取的起始点,而不是基于文件的修改时间 如果关闭的文件发生变化,一个新的harverster将在scan_frequency运行后被启动 建议至少设置一个大于读取日志频率的值,配置多个prospector来实现针对不同更新速度的日志文件 使用内部时间戳机制,来反映记录日志的读取,每次读取到最后一行日志时开始倒计时使用2h 5m 来表示 close_rename #当选项启动,如果文件被重命名和移动,filebeat关闭文件的处理读取 close_removed #当选项启动,文件被删除时,filebeat关闭文件的处理读取这个选项启动后,必须启动clean_removed close_eof #适合只写一次日志的文件,然后filebeat关闭文件的处理读取 close_timeout #当选项启动时,filebeat会给每个harvester设置预定义时间,不管这个文件是否被读取,达到设定时间后,将被关闭 close_timeout 不能等于ignore_older,会导致文件更新时,不会被读取如果output一直没有输出日志事件,这个timeout是不会被启动的, 至少要要有一个事件发送,然后haverter将被关闭 设置0 表示不启动 clean_inactived #从注册表文件中删除先前收获的文件的状态 设置必须大于ignore_older+scan_frequency,以确保在文件仍在收集时没有删除任何状态 配置选项有助于减小注册表文件的大小,特别是如果每天都生成大量的新文件 此配置选项也可用于防止在Linux上重用inode的Filebeat问题 clean_removed #启动选项后,如果文件在磁盘上找不到,将从注册表中清除filebeat 如果关闭close removed 必须关闭clean removed scan_frequency #prospector检查指定用于收获的路径中的新文件的频率,默认10s tail_files:#如果设置为true,Filebeat从文件尾开始监控文件新增内容,把新增的每一行文件作为一个事件依次发送, 而不是从文件开始处重新发送所有内容。 symlinks:#符号链接选项允许Filebeat除常规文件外,可以收集符号链接。收集符号链接时,即使报告了符号链接的路径, Filebeat也会打开并读取原始文件。 backoff: #backoff选项指定Filebeat如何积极地抓取新文件进行更新。默认1s,backoff选项定义Filebeat在达到EOF之后 再次检查文件之间等待的时间。 max_backoff: #在达到EOF之后再次检查文件之前Filebeat等待的最长时间 backoff_factor: #指定backoff尝试等待时间几次,默认是2 harvester_limit:#harvester_limit选项限制一个prospector并行启动的harvester数量,直接影响文件打开数 tags #列表中添加标签,用过过滤,例如:tags: ["json"] fields #可选字段,选择额外的字段进行输出可以是标量值,元组,字典等嵌套类型 默认在sub-dictionary位置 filebeat.inputs: fields: app_id: query_engine_12 fields_under_root #如果值为ture,那么fields存储在输出文档的顶级位置 multiline.pattern #必须匹配的regexp模式 multiline.negate #定义上面的模式匹配条件的动作是 否定的,默认是false 假如模式匹配条件'^b',默认是false模式,表示讲按照模式匹配进行匹配 将不是以b开头的日志行进行合并 如果是true,表示将不以b开头的日志行进行合并 multiline.match # 指定Filebeat如何将匹配行组合成事件,在之前或者之后,取决于上面所指定的negate multiline.max_lines #可以组合成一个事件的最大行数,超过将丢弃,默认500 multiline.timeout #定义超时时间,如果开始一个新的事件在超时时间内没有发现匹配,也将发送日志,默认是5s max_procs #设置可以同时执行的最大CPU数。默认值为系统中可用的逻辑CPU的数量。 name #为该filebeat指定名字,默认为主机的hostname
3.6、实例一:logstash作为输出
filebeat.yml配置
#=========================== Filebeat inputs ============================= filebeat.inputs: # Each - is an input. Most options can be set at the input level, so # you can use different inputs for various configurations. # Below are the input specific configurations. - type: log # Change to true to enable this input configuration. enabled: true # Paths that should be crawled and fetched. Glob based paths. paths: #配置多个日志路径 - /var/logs/es_aaa_index_search_slowlog.log - /var/logs/es_bbb_index_search_slowlog.log - /var/logs/es_ccc_index_search_slowlog.log - /var/logs/es_ddd_index_search_slowlog.log #- c:\programdata\elasticsearch\logs\* # Exclude lines. A list of regular expressions to match. It drops the lines that are # matching any regular expression from the list. #exclude_lines: ['^DBG'] # Include lines. A list of regular expressions to match. It exports the lines that are # matching any regular expression from the list. #include_lines: ['^ERR', '^WARN'] # Exclude files. A list of regular expressions to match. Filebeat drops the files that # are matching any regular expression from the list. By default, no files are dropped. #exclude_files: ['.gz$'] # Optional additional fields. These fields can be freely picked # to add additional information to the crawled log files for filtering #fields: # level: debug # review: 1 ### Multiline options # Multiline can be used for log messages spanning multiple lines. This is common # for Java Stack Traces or C-Line Continuation # The regexp Pattern that has to be matched. The example pattern matches all lines starting with [ #multiline.pattern: ^\[ # Defines if the pattern set under pattern should be negated or not. Default is false. #multiline.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 #multiline.match: after #================================ Outputs ===================================== #----------------------------- Logstash output -------------------------------- output.logstash: # The Logstash hosts #配多个logstash使用负载均衡机制 hosts: ["192.168.110.130:5044","192.168.110.131:5044","192.168.110.132:5044","192.168.110.133:5044"] loadbalance: true #使用了负载均衡 # Optional SSL. By default is off. # List of root certificates for HTTPS server verifications #ssl.certificate_authorities: ["/etc/pki/root/ca.pem"] # Certificate for SSL client authentication #ssl.certificate: "/etc/pki/client/cert.pem" # Client Certificate Key #ssl.key: "/etc/pki/client/cert.key"
./filebeat -e #启动filebeat
logstash的配置
input { beats { port => 5044 } } output { elasticsearch { hosts => ["http://192.168.110.130:9200"] #这里可以配置多个 index => "query-%{yyyyMMdd}" } }
3.7、实例二:elasticsearch作为输出
filebeat.yml的配置:
###################### Filebeat Configuration Example ######################### # This file is an example configuration file highlighting only the most common # options. The filebeat.reference.yml file from the same directory contains all the # supported options with more comments. You can use it as a reference. # # You can find the full configuration reference here: # https://www.elastic.co/guide/en/beats/filebeat/index.html # For more available modules and options, please see the filebeat.reference.yml sample # configuration file. #=========================== Filebeat inputs ============================= filebeat.inputs: # Each - is an input. Most options can be set at the input level, so # you can use different inputs for various configurations. # Below are the input specific configurations. - type: log # Change to true to enable this input configuration. enabled: true # Paths that should be crawled and fetched. Glob based paths. paths: - /var/logs/es_aaa_index_search_slowlog.log - /var/logs/es_bbb_index_search_slowlog.log - /var/logs/es_ccc_index_search_slowlog.log - /var/logs/es_dddd_index_search_slowlog.log #- c:\programdata\elasticsearch\logs\* # Exclude lines. A list of regular expressions to match. It drops the lines that are # matching any regular expression from the list. #exclude_lines: ['^DBG'] # Include lines. A list of regular expressions to match. It exports the lines that are # matching any regular expression from the list. #include_lines: ['^ERR', '^WARN'] # Exclude files. A list of regular expressions to match. Filebeat drops the files that # are matching any regular expression from the list. By default, no files are dropped. #exclude_files: ['.gz$'] # Optional additional fields. These fields can be freely picked # to add additional information to the crawled log files for filtering #fields: # level: debug # review: 1 ### Multiline options # Multiline can be used for log messages spanning multiple lines. This is common # for Java Stack Traces or C-Line Continuation # The regexp Pattern that has to be matched. The example pattern matches all lines starting with [ #multiline.pattern: ^\[ # Defines if the pattern set under pattern should be negated or not. Default is false. #multiline.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 #multiline.match: after #============================= Filebeat modules =============================== filebeat.config.modules: # Glob pattern for configuration loading path: ${path.config}/modules.d/*.yml # Set to true to enable config reloading reload.enabled: false # Period on which files under path should be checked for changes #reload.period: 10s #==================== Elasticsearch template setting ========================== #================================ General ===================================== # The name of the shipper that publishes the network data. It can be used to group # all the transactions sent by a single shipper in the web interface. name: filebeat222 # The tags of the shipper are included in their own field with each # transaction published. #tags: ["service-X", "web-tier"] # Optional fields that you can specify to add additional information to the # output. #fields: # env: staging #cloud.auth: #================================ Outputs ===================================== #-------------------------- Elasticsearch output ------------------------------ output.elasticsearch: # Array of hosts to connect to. hosts: ["192.168.110.130:9200","92.168.110.131:9200"] # Protocol - either `http` (default) or `https`. #protocol: "https" # Authentication credentials - either API key or username/password. #api_key: "id:api_key" username: "elastic" password: "${ES_PWD}" #通过keystore设置密码
./filebeat -e #启动filebeat
查看elasticsearch集群,有一个默认的索引名字filebeat-%{[beat.version]}-%{+yyyy.MM.dd}
3.8、filebeat模块
官网:https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-modules.html
这里我使用elasticsearch模式来解析es的慢日志查询,操作步骤如下,其他的模块操作也一样:
前提: 安装好Elasticsearch和kibana两个软件,然后使用filebeat
具体的操作官网有:https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-modules-quickstart.html
第一步,配置filebeat.yml文件
#============================== Kibana ===================================== # Starting with Beats version 6.0.0, the dashboards are loaded via the Kibana API. # This requires a Kibana endpoint configuration. setup.kibana: # Kibana Host # Scheme and port can be left out and will be set to the default (http and 5601) # In case you specify and additional path, the scheme is required: http://localhost:5601/path # IPv6 addresses should always be defined as: https://[2001:db8::1]:5601 host: "192.168.110.130:5601" #指定kibana username: "elastic" #用户 password: "${ES_PWD}" #密码,这里使用了keystore,防止明文密码 # Kibana Space ID # ID of the Kibana Space into which the dashboards should be loaded. By default, # the Default Space will be used. #space.id: #================================ Outputs ===================================== # Configure what output to use when sending the data collected by the beat. #-------------------------- Elasticsearch output ------------------------------ output.elasticsearch: # Array of hosts to connect to. hosts: ["192.168.110.130:9200","192.168.110.131:9200"] # Protocol - either `http` (default) or `https`. #protocol: "https" # Authentication credentials - either API key or username/password. #api_key: "id:api_key" username: "elastic" #es的用户 password: "${ES_PWD}" # es的密码 #这里不能指定index,因为我没有配置模板,会自动生成一个名为filebeat-%{[beat.version]}-%{+yyyy.MM.dd}的索引
第二步:配置elasticsearch的慢日志路径
1
cd filebeat-7.7.0-linux-x86_64/modules.d
vim elasticsearch.yml
第三步:生效es模块
./filebeat modules elasticsearch
查看生效的模块
./filebeat modules list
第四步:初始化环境
./filebeat setup -e
第五步:启动filebeat
./filebeat -e
查看elasticsearch集群,如下图所示,把慢日志查询的日志都自动解析出来了:
到这里,elasticsearch这个module就实验成功了
参考
官网:https://www.elastic.co/guide/en/beats/filebeat/current/index.html
-
FileBeat
2020-10-31 13:54:31一、fileBeat安装 https://blog.csdn.net/jeikerxiao/article/details/84841792 1.linux安装部署 启动: ./filebeat -e -c mytest.yml filebeat 5.5配置: filebeat.prospectors: - input_type: log enabled: true ... -
Filebeat
2020-03-12 23:07:46Filebeat 简介 filebeat概述 Filebeat是本地文件的日志数据发送者。作为服务器上的代理安装,Filebeat监视日志目录或特定的日志文件,tails文件,并转发到Elasticsearch或Logstash索引。Filebeat是一个Beat,它是...Filebeat 简介
filebeat概述
Filebeat是本地文件的日志数据发送者。作为服务器上的代理安装,Filebeat监视日志目录或特定的日志文件,tails文件,并转发到Elasticsearch或Logstash索引。Filebeat是一个Beat,它是基于libbeat框架。
工作原理:
Filebeat由两个主要组件组成:prospector(查找器) 和harvester(采集器)。这些组件一起工作来读取文件(tail file)并将事件数据发送到您指定的输出
启动Filebeat时,它会启动一个或多个Prospectors(查找器),查看日志文件指定的本地路径。对于prospector所在的每个日志文件,Filebeat启动harvester(采集器)。每个采集器都会为新内容读取一个日志文件,并将新的日志数据发送到libbeat,后者将聚合这些事件并将聚合的数据发送到为Filebeat配置的输出
- 读取日志文件,但不做数据的解析处理
- 保证数据“At Least Once” 至少被读取一次,即数据不会丢失
- 其他能力
- 处理多行数据
- 解析JSON格式数据
- 简单的过滤功能
harvester
harvester :负责读取单个文件的内容。读取每个文件,并将内容发送到 the output
每个文件启动一个harvester, harvester 负责打开和关闭文件,这意味着在运行时文件描述符保持打开状态
如果文件在读取时被删除或重命名,Filebeat将继续读取文件。
这有副作用,即在harvester关闭之前,磁盘上的空间被保留。默认情况下,Filebeat将文件保持打开状态,直到达到close_inactive状态关闭harvester会产生以下结果:
1)如果在harvester仍在读取文件时文件被删除,则关闭文件句柄,释放底层资源。
2)文件的采集只会在scan_frequency过后重新开始。
3)如果在harvester关闭的情况下移动或移除文件,则不会继续处理文件。要控制收割机何时关闭,请使用close_ *配置选项
prospector
prospector 负责管理harvester并找到所有要读取的文件来源。
如果输入类型为日志,则查找器将查找路径匹配的所有文件,并为每个文件启动一个harvester。
每个prospector都在自己的Go协程中运行。以下示例将Filebeat配置为从与指定的匹配的所有日志文件中收集行:
Filebeat 配置 - filebeat.yml
Filebeat 配置模板 - index template
modules
使用Filebeat模块是可选的,提供了一种快速处理常见日志格式的方法。它们包含默认配置、 Elasticsearch的节点管道定义,以及Kibana指示板。
Filebeat提供了几种不同的方式来启用模块:- 在modules.d目录下启用模块配置
./filebeat modules enable apache2 #启用apache2模块 ./filebeat modules list #查看启用和禁用模块的列表
# filebeat modules list Enabled: apache2 #解析由Apache HTTP服务器创建的访问和错误日志 Disabled: auditd #收集并分析来自审计守护进程(auditd)的日志 icinga #解析Icinga的主要日志,调试日志和启动日志 (监控) kafka #收集并分析由Kafka创建的日志 logstash #解析logstash常规日志和慢日志,支持纯文本格式和JSON格式 mysql #收集并分析由MySQL创建的慢日志和错误日志 nginx #分析由Nginx HTTP服务器创建的访问和错误日志 osquery #收集并解码由osqueryd 以JSON格式编写的结果日志 。要设置osqueryd,请遵循操作系统的osquery安装说明并配置filesystem日志记录驱动程序(默认设置)。确保UTC时间戳已启用 postgresql #收集并分析由PostgreSQL创建的日志 redis #分析由Redis创建的日志和缓慢日志 system #收集和分析由基于Unix / Linux的常见发行版的系统日志记录服务创建的日志 traefik #分析由Træfik创建的访问日志 (反向代理和负载均衡)
- 运行Filebeatedit时启用模块
./filebeat -e --modules nginx,apache2
- 在filebeat.yml文件中启用模块配置
推荐使用modules.d目录中的配置文件,在filebeat.yml文件中配置模块,将无法使用modules命令启用和禁用配置。要启用filebeat.yml配置文件中的特定模块,可以将条目添加到filebeat.modules列表中
通过在文件中指定变量设置- module: apache2 # Access logs access: enabled: true var.paths: ["/var/log/httpd/access_log*"] # Error logs error: enabled: true var.paths: ["/var/log/httpd/error_log*"]
filebeat --modules apache2 -M "apache.access.var.paths=["/var/log/httpd/access_log*"]" -M "apache.error.var.paths=["/var/log/httpd/error_log*"]"
实时重新加载
可以配置Filebeat以在发生更改时动态地重新加载配置文件。该功能仅适用于prospector和模块配置文件,要配置此功能,请指定一个路径(Glob)来监视配置更改。 当Glob找到的文件发生变化时,根据配置文件的变化启动和停止新的prospectors and/or模块。
此功能在容器环境中特别有用,其中一个容器用于在同一主机上的其他容器中运行服务的日志。要启用动态配置重新加载,请在filebeat.config.prospectors或filebeat.config.modules部分下指定路径和重新加载选项,如filebeat.config.modules: path: ${path.config}/modules.d/*.yml #定义要检查更改的文件的Glob reload.enabled: true #设置为true时,启用动态配置重新加载。 reload.period: 10s #指定文件检查更改的频率。 不要将周期设置为小于1秒,因为文件的修改时间通常以秒为单位存储。
配置日志输出
官方文档:https://www.elastic.co/guide/en/beats/filebeat/current/configuration-logging.html
filebeat.yml配置文件的日志记录部分包含用于配置Beats日志记录输出的选项。 日志系统可以将日志写入系统日志或旋转日志文件。 如果未明确配置日志记录,则在Windows系统上使用文件输出,在Linux和OS X上使用syslog输出。logging.level: info #输出的日志级别debug, info, warning, error, or critical logging.to_files: true #如果为true,则将所有日志记录输出写入文件。 当达到日志文件大小限制时,日志文件会自动旋转 logging.to_syslog: false #如果为true,则将所有日志输出写入syslog logging.files: path: /var/log/filebeat name: filebeat keepfiles: 7 permissions: 0644
常见实践架构
-
- filebeat–>logstash–>elasticsearch–>kibana
- filebeat–>logstash–>elasticsearch–>kibana
-
- filebeat–>elasticsearch–>kibana
-
- filebeat–>elasticsearch–>kibana
Ingest Node:5.x新增的一个节点类型:
-在数据写入es前(bulk/index操作)对数据进行处理- 可设立独立的ingest node专门进行数据转换处理
node.ingest: true
- api endpoint为pipeline
Ingest Node - Pipeline:
Pipeline由一系列processor组成,类似logstash的filter plugin:
Processor对应logstash的filter Plugin,基本都涵盖了:Convert、Grok、Date、Gsub、Join、Json、Remove、Script{ "description":"...", "processors": [...] }
Pipeline的API比较简单,主要有如下四个:
- 创建PUT
- 获取GET
- 删除DELETE
- 模拟调试SIMULATE
为了能够filebeat把这个log数据传输到Elasticsearch,我们可以使用如下的配置文件。我们创建一个叫做filebeat.yml文件:
filebeat.inputs: - type: log enabled: true fields: apache: true paths: - *** output.elasticsearch: hosts: ["localhost:9200"] pipeline: "my_pipeline_id"
在es 中配置
- 添加一个pipeline
PUT _ingest/pipeline/my_pipeline_id { "description": "for test", "processors": [ { "set": { "field": "name", "value": "alfred" } } ] } GET _ingest/pipeline/my_pipeline_id //删除 DELETE _ingest/pipeline/my_pipeline_id //模拟 GET _ingest/pipeline/my_pipeline_id/_simulate { "docs": [ { "_source":{ "message":"my message" } } ] }
- 注意处理解析错误的情况:(可以存进index里面,或者转化为字段)
Pipeline实践处理nginx日志:
日志处理中常用到两个es的插件(es > 7.6 自带,不用安装):
./bin/elasticsearch-plugin install ingest-geoip ./bin/elasticsearch-plugin install ingest-user-agent
插件必须安装在群集中的每个节点上,并且每个节点必须在安装后重新启动(supervisor)。
PUT _ingest/pipeline/nginx_log { "description": "Pipeline for parsing Nginx access logs. Requires the geoip and user_agent plugins.", "processors": [{ "grok": { "field": "message", "patterns":[ "\"?%{IP_LIST:nginx.access.remote_ip_list} - %{DATA:nginx.access.user_name} \\[%{HTTPDATE:nginx.access.time}\\] \"%{WORD:nginx.access.method} %{DATA:nginx.access.url} HTTP/%{NUMBER:nginx.access.http_version}\" %{NUMBER:nginx.access.response_code} %{NUMBER:nginx.access.body_sent.bytes} \"%{DATA:nginx.access.referrer}\" \"%{DATA:nginx.access.agent}\"" ], "pattern_definitions": { "IP_LIST": "%{IP}(\"?,?\\s*%{IP})*" }, "ignore_missing": true } }, { "split": { "field": "nginx.access.remote_ip_list", "separator": "\"?,?\\s+" } }, { "script": { "lang": "painless", "inline": "boolean isPrivate(def ip) { try { StringTokenizer tok = new StringTokenizer(ip, '.'); int firstByte = Integer.parseInt(tok.nextToken()); int secondByte = Integer.parseInt(tok.nextToken()); if (firstByte == 10) { return true; } if (firstByte == 192 && secondByte == 168) { return true; } if (firstByte == 172 && secondByte >= 16 && secondByte <= 31) { return true; } if (firstByte == 127) { return true; } return false; } catch (Exception e) { return false; } } def found = false; for (def item : ctx.nginx.access.remote_ip_list) { if (!isPrivate(item)) { ctx.nginx.access.remote_ip = item; found = true; break; } } if (!found) { ctx.nginx.access.remote_ip = ctx.nginx.access.remote_ip_list[0]; }" } }, { "remove":{ "field": "message" } }, { "rename": { "field": "@timestamp", "target_field": "read_timestamp" } }, { "date": { "field": "nginx.access.time", "target_field": "@timestamp", "formats": ["dd/MMM/YYYY:H:m:s Z"] } }, { "remove": { "field": "nginx.access.time" } }, { "user_agent": { "field": "nginx.access.agent", "target_field": "nginx.access.user_agent" } }, { "remove": { "field": "nginx.access.agent" } }, { "geoip": { "field": "nginx.access.remote_ip", "target_field": "nginx.access.geoip" } }], "on_failure" : [{ "set" : { "field" : "error.message", "value" : "{{ _ingest.on_failure_message }}" } }] }
nginx_log的写法其实就是filebeat中nginx模块ingest的配置:
nginx/access/ingest/default.json
案例:使用apache2模块
解析由Apache HTTP服务器创建的访问和错误日志
当你运行这个模块时,它会在下面执行一些任务:
- 设置日志文件的默认路径(可以覆盖默认值)
- 确保每个多行日志事件都作为单个事件发送
- 使用摄入节点来解析和处理日志行,将数据整形为适合在Kibana中可视化的结构
- 部署仪表板以可视化日志数据
兼容性:
设置并运行模块:
在执行这些步骤之前,确保Elasticsearch和Kibana安装完成并正在运行,并且Elasticsearch已准备好从Filebeat接收数据。
============= Kibana ================ setup.kibana: host: "192.168.20.60:5601" ============= Outputs =========== output.elasticsearch: # Array of hosts to connect to. hosts: ["192.168.20.60:9200"]
1.启用模块:
./filebeat modules enable apache2
2.查看启用和禁用模块的列表:
./filebeat modules list
3.建立初始环境:
./filebeat setup -e
该setup命令加载用于写入Elasticsearch的推荐索引模板,并部署示例仪表板以在Kibana中可视化数据。这是一次性设置步骤。
-e标志是可选的,并将输出发送到标准错误而不是syslog
4.配置模块:
方法1:通过在文件中指定变量设置- module: apache2 # Access logs access: enabled: true var.paths: ["/var/log/httpd/access_log*"] # Error logs error: enabled: true var.paths: ["/var/log/httpd/error_log*"]
方法二:在命令行中覆盖设置
filebeat --modules apache2 -M "apache.access.var.paths=["/var/log/httpd/access_log*"]" -M "apache.error.var.paths=["/var/log/httpd/error_log*"]
5.运行Filebeat:
/etc/init.d/filebeat start
6.探索kibana中的数据
打开浏览器并导航到Kibana中的仪表板概览 -
28.Filebeat的高级配置-Filebeat部分
2016-04-24 14:13:20介绍Filebeat的高级配置,尤其介绍了Filebeat组件自己的配置选项的意义。转载*请注明原始出处:http://blog.csdn.net/a464057216/article/details/51233375
后续此博客不再更新,欢迎大家搜索关注微信公众号“测开之美”,测试开发工程师技术修炼小站,持续学习持续进步。
在Filebeat安装完成准备使用前,最好先对Filebeat进行一些详细的配置再使用,下面来详细讲解一下相关内容。Filebeat的配置文件是/etc/filebeat/filebeat.yml,遵循YAML语法。具体可以配置如下几个项目:
- Filebeat
- Output
- Shipper
- Logging(可选)
- Run Options(可选)
这个Blog主要讲解Filebeat的配置部分,其他部分后续会有新的Blog介绍。
Filebeat的部分主要定义prospector的列表,定义监控哪里的日志文件,关于如何定义的详细信息可以参考filebeat.yml中的注释,下面主要介绍一些需要注意的地方。
- paths:指定要监控的日志,目前按照Go语言的glob函数处理。没有对配置目录做递归处理,比如配置的如果是:
/var/log/* /*.log
则只会去/var/log目录的所有子目录中寻找以".log"结尾的文件,而不会寻找/var/log目录下以".log"结尾的文件。
-
encoding:指定被监控的文件的编码类型,使用plain和utf-8都是可以处理中文日志的。
-
input_type:指定文件的输入类型log(默认)或者stdin。
-
exclude_lines:在输入中排除符合正则表达式列表的那些行。
-
include_lines:包含输入中符合正则表达式列表的那些行(默认包含所有行),include_lines执行完毕之后会执行exclude_lines。
-
exclude_files:忽略掉符合正则表达式列表的文件(默认为每一个符合paths定义的文件都创建一个harvester)。
-
fields:向输出的每一条日志添加额外的信息,比如“level:debug”,方便后续对日志进行分组统计。默认情况下,会在输出信息的fields子目录下以指定的新增fields建立子目录,例如fields.level。
fields:
level: debug则在Kibana看到的内容如下:
- fields_under_root:如果该选项设置为true,则新增fields成为顶级目录,而不是将其放在fields目录下。自定义的field会覆盖filebeat默认的field。例如添加如下配置:
fields:
level: debug
fields_under_root: true则在Kibana看到的内容如下:
-
ignore_older:可以指定Filebeat忽略指定时间段以外修改的日志内容,比如2h(两个小时)或者5m(5分钟)。
-
close_older:如果一个文件在某个时间段内没有发生过更新,则关闭监控的文件handle。默认1h。
-
force_close_files:Filebeat会在没有到达close_older之前一直保持文件的handle,如果在这个时间窗内删除文件会有问题,所以可以把force_close_files设置为true,只要filebeat检测到文件名字发生变化,就会关掉这个handle。
-
scan_frequency:Filebeat以多快的频率去prospector指定的目录下面检测文件更新(比如是否有新增文件),如果设置为0s,则Filebeat会尽可能快地感知更新(占用的CPU会变高)。默认是10s。
-
document_type:设定Elasticsearch输出时的document的type字段,也可以用来给日志进行分类。
-
harvester_buffer_size:每个harvester监控文件时,使用的buffer的大小。
-
max_bytes:日志文件中增加一行算一个日志事件,max_bytes限制在一次日志事件中最多上传的字节数,多出的字节会被丢弃。
-
multiline:适用于日志中每一条日志占据多行的情况,比如各种语言的报错信息调用栈。这个配置的下面包含如下配置:
pattern:多行日志开始的那一行匹配的pattern negate:是否需要对pattern条件转置使用,不翻转设为true,反转设置为false match:匹配pattern后,与前面(before)还是后面(after)的内容合并为一条日志 max_lines:合并的最多行数(包含匹配pattern的那一行) timeout:到了timeout之后,即使没有匹配一个新的pattern(发生一个新的事件),也把已经匹配的日志事件发送出去
-
tail_files:如果设置为true,Filebeat从文件尾开始监控文件新增内容,把新增的每一行文件作为一个事件依次发送,而不是从文件开始处重新发送所有内容。
-
backoff:Filebeat检测到某个文件到了EOF之后,每次等待多久再去检测文件是否有更新,默认为1s。
-
max_backoff:Filebeat检测到某个文件到了EOF之后,等待检测文件更新的最大时间,默认是10秒。
-
backoff_factor:定义到达max_backoff的速度,默认因子是2,到达max_backoff后,变成每次等待max_backoff那么长的时间才backoff一次,直到文件有更新才会重置为backoff。比如:
如果设置成1,意味着去使能了退避算法,每隔backoff那么长的时间退避一次。
-
spool_size:spooler的大小,spooler中的事件数量超过这个阈值的时候会清空发送出去(不论是否到达超时时间)。
-
idle_timeout:spooler的超时时间,如果到了超时时间,spooler也会清空发送出去(不论是否到达容量的阈值)。
-
registry_file:记录filebeat处理日志文件的位置的文件
-
config_dir:如果要在本配置文件中引入其他位置的配置文件,可以写在这里(需要写完整路径),但是只处理prospector的部分。
-
publish_async:是否采用异步发送模式(实验功能)。
如果觉得我的文章对您有帮助,欢迎关注我(CSDN:Mars Loo的博客)或者为这篇文章点赞,谢谢!
-
filebeat安装包
2018-11-21 09:33:15Filebeat是一个日志文件托运工具,在你的服务器上安装客户端后,filebeat会监控日志目录或者指定的日志文件,追踪读取这些文件(追踪文件的变化,不停的读),并且转发这些信息到elasticsearch或者logstarsh中存放。 -
ELK+filebeat
2020-12-18 13:33:59elasticsearch logstash kibana filebeat -
Filebeat配置
2020-09-07 17:06:15文章目录filebeat脚本 filebeat脚本 #!/bin/bash FILEBEAT_HOME=/gcs/apps/filebeat-6.2.1-linux-x86_64 FILEBEAT_LOG_HOME=/gcs/log/filebeat agent="$FILEBEAT_HOME/filebeat" args="-c $FILEBEAT_HOME/filebeat... -
filebeat.yml
2020-07-27 21:58:36对于filebeat初学者,配置filebeat总会遇到各种疑难,特提该配置,可以搭建正常的运行环境