3个开源产品的组合:ELK
优采云 发布时间: 2021-08-07 02:083个开源产品的组合:ELK
一个背景
ELK 是 3 个开源产品的组合:
ELK = Elasticsearch、Logstash、Kibana 是一套实时数据采集、存储、索引、检索、统计分析和可视化解决方案。最新版本已更名为 Elastic Stack,并添加了 Beats 项目。
中文官网地址:
当你不得不面对成百上千的服务器、虚拟机和容器产生的日志时,请告别SSH。 Filebeat 将为您提供一种轻量级的日志和文件转发和汇总方法,让简单的事情不再复杂。
filebeat采集的数据可以发送到Elasticsearch或者Logstash。在 Kibana 中进行可视化。
也是小型互联网公司常用的开源解决方案。 RBI 将根据自己的业务需求制造轮子。本文记录filebeat的安装和采集规则:
二次安装
对于Linux系统,推荐官网:
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.5.1-linux-x86_64.tar.gz
tar xzvf filebeat-7.5.1-linux-x86_64.tar.gz
针对不同的下载个人习惯,也可以切换到wget,比较轻巧。就是下载解压。
我们使用的是以前的6.7 版本。
为了统一运维,每个版本去掉了版本号。
mv filebeat-6.7.1-linux-x86_64 filebeat
cdfilebeat
三种配置
在详细配置参数之前,先来大致了解一下素养和一般原理,以便更好的理解配置参数;
Filebeat 涉及两个组件:finder prospector 和采集器harvester,读取尾文件并将事件数据发送到指定的输出。
当您启动 Filebeat 时,它会启动一个或多个搜索器来查看您为日志文件指定的本地路径。对于探矿者所在的每个日志文件,探矿者启动收割机。每个收割机读取新内容的单个日志文件,并将新日志数据发送到 libbeat,后者聚合事件并将聚合数据发送到您为 Filebeat 配置的输出。
配置文件:$FILEBEAT_HOME/filebeat.yml。 Filebeat可以一次性读取某个文件夹中所有后缀为log的文件,也可以读取指定后缀log的文件。
paths:指定需要监控的日志,目前按照Go语言的glob函数处理。配置目录没有递归处理,比如配置为:
/var/log/* /*.log
它只会搜索/var/log目录下所有子目录中以“.log”结尾的文件,而不会搜索/var/log目录下以“.log”结尾的文件。
encoding:指定监控文件的编码类型。普通和utf-8都可以处理中文日志。
input_type:指定文件日志(默认)或标准输入的输入类型。
exclude_lines:从输入中排除那些符合正则表达式列表的行。
include_lines:在输入中收录那些匹配正则表达式列表的行(默认收录所有行),在include_lines执行后会执行exclude_lines。
exclude_files:忽略符合正则表达式列表的文件(默认情况下,为每个符合路径定义的文件创建一个收割机)。
fields:为每个日志输出添加附加信息,例如“level:debug”,方便后续日志的分组和统计。默认情况下,会在输出信息的fields子目录下创建指定新字段的子目录,
fields_under_root:如果这个选项设置为true,新添加的字段将成为顶级目录,而不是放在fields目录中。自定义字段将覆盖 filebeat 的默认字段。
ignore_older:可以指定Filebeat忽略指定时间段外修改的日志内容,例如2h(两小时)或5m(5分钟)。
close_older:如果某个文件在一定时间内没有更新,则关闭被监控的文件句柄。默认为 1 小时。
force_close_files:Filebeat 将保留文件的句柄,直到它到达 close_older。如果在这个时间窗口内删除文件,就会出现问题,所以可以设置force_close_files为true。只要filebeat检测到文件名改变了,就会关闭。放下这个把手。
scan_frequency:Filebeat多久去探矿者指定的目录检测文件更新(比如是否有新文件),如果设置为0s,Filebeat会尽快感知更新(被占用的CPU会变得更高)。默认为 10 秒。
document_type:设置Elasticsearch输出时文档的type字段,也可以用来分类日志。
harvester_buffer_size:每个收割机监控文件时使用的缓冲区大小。
max_bytes:在日志文件中添加一行算作日志事件,max_bytes 限制为日志事件中上传的最大字节数,多余的字节将被丢弃。默认为 10MB。
multiline:适用于日志中每个日志占用多行的情况,比如各种语言的错误信息的调用栈。这个配置下面收录如下配置:
pattern:匹配多行日志开头行的模式
negate:是否需要使用模式条件转置,不翻转为真,翻转为假。
match:匹配模式后,与前后内容合并成日志
max_lines:合并的最大行数(包括与模式匹配的行),默认为500行。
timeout:超时后,即使新模式不匹配(新事件发生),匹配的日志事件也会被发送出去
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算法,每次backoff时间都会执行backoff。
spool_size:假脱机程序的大小。当spooler中的事件数超过该阈值时,会被清空并发出(无论是否达到超时时间),默认为1MB。
idle_timeout:spooler 的超时时间。如果达到超时时间,spooler会被清空并发出(无论是否达到容量阈值),默认为1s。
registry_file:记录filebeat处理日志文件位置的文件
config_dir:如果要在这个配置文件中引入其他位置的配置文件,可以在这里写(需要写全路径),但只处理prospector部分。
publish_async:是否使用异步发送模式(实验性功能)。
其实我们用的是yaml的配置,主要是path,json相关,以及写入ES的index和参数。许多排除和退避没有配置。
#keys_under_root 可以让字段位于根节点,默认为false
json.keys_under_root: 真
#对于同名的key,覆盖原来的key值
json.overwrite_keys: 真
#在error.message字段中存储解析错误的消息记录
json.add_error_key: 真
#message_key 用于合并多行json日志,
json.message_key:消息
配置参数很多,推荐官网:
开始:
cd filebeat
nohup ./filebeat -c product.yml >/dev/null 2>&1
同一台机器上可以启动多个filebats,但是一般不建议运维使用。 (对于高负载:更多的日志,通常启动kibana后就可以立即看到,但是对于多次启动filebeat,后者可能需要2分钟才能看到,这是前一个队列的日志没有被处理过)
停止:
ps -ef|grep filebeat
杀死 -9 XXX
参考:
官网: