在搭建ELK系统之前,你有必要去了解下,为何大家在agent端普遍青睐filebeat,而把logstash放置于更加靠后端。
轻量级的filebeat,作为agent角色,是安装在每台虚拟机上。
filebeat的学习分为两大部分:
本文主要介绍docker安装方式,对于其二进制安装,请参考其他文章。这类资料比较多。
https://www.elastic.co/cn/beats/filebeat 这是它的官网地址。
下面是它的docker-compose安装:
version: "3"
services:
filebeat:
container_name: filebeat
image: elastic/filebeat:7.9.3
restart: always
user: root
volumes:
- ./filebeat/logs:/usr/share/filebeat/logs
- ./filebeat/data:/usr/share/filebeat/data
- ./filebeat/conf/filebeat.yml:/usr/share/filebeat/filebeat.yml
建议做持久化的时候,使用相对路径,便于不同机器上的部署。
vi filebeat/conf/filebeat.yml
filebeat.inputs:
- type: log
enabled: true
backoff: "1s"
tail_files: false
paths:
- /usr/share/filebeat/logs/*.log
multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
multiline.negate: true
multiline.match: after
document_type: jvm
output.logstash:
enabled: true
hosts: ["logstash:5044"]
官网文档地址:https://www.elastic.co/guide/en/beats/filebeat/current/configuration-filebeat-options.html
multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
paths:
- /usr/share/filebeat/logs/*.log
注意:如果你是docker安装filebeat的话,需要把宿主机上的路径挂载到容器。
那么,采集宿主机上的相对路径./filebeat/logs/下的所有.log文件。
volumes:
- ./filebeat/logs:/usr/share/filebeat/logs
本文踩过的坑就是:filebeat.yml配置的paths路径,忘记了挂载到容器外,这样的话,filebeat始终读取不到log日志。
观察filebeat容器的日志,自然就采集不到最新的log日志,后台一直在打印下面的日志:
2023-12-27T06:55:04.273Z INFO [monitoring] log/log.go:153 Total non-zero metrics {“monitoring”: {“metrics”: {“beat”:{“cpu”:{“system”:{“ticks”:8670,“time”:{“ms”:8678}},“total”:{“ticks”:16000,“time”:{“ms”:16016},“value”:16000},“user”:{“ticks”:7330,“time”:{“ms”:7338}}},“handles”:{“limit”:{“hard”:1048576,“soft”:1048576},“open”:8},“info”:{“ephemeral_id”:“87e71d20-5d3d-452f-a51e-cc2f47612d45”,“uptime”:{“ms”:16309343}},“memstats”:{“gc_next”:15193216,“memory_alloc”:8772880,“memory_total”:212097656,“rss”:46182400},“runtime”:{“goroutines”:10}},“filebeat”:{“events”:{“added”:1,“done”:1},“harvester”:{“open_files”:0,“running”:0}},“libbeat”:{“config”:{“module”:{“running”:0}},“output”:{“type”:“kafka”},“pipeline”:{“clients”:0,“events”:{“active”:0,“filtered”:1,“total”:1}}},“registrar”:{“states”:{“current”:1,“update”:1},“writes”:{“success”:1,“total”:1}},“system”:{“cpu”:{“cores”:8},“load”:{“1”:0.27,“15”:0.35,“5”:0.3,“norm”:{“1”:0.0338,“15”:0.0438,“5”:0.0375}}}}}}
所以我后面在./filebeat/logs新建sample.log日志文件,此时filebeat才能采集到日志。
官网文档地址:https://www.elastic.co/guide/en/beats/filebeat/current/logstash-output.html
output.file:
path: "/tmp"
filename: "test_filebeat.txt"
filebeat内置有多种模块(auditd、Apache、NGINX、System、MySQL 等等),可针对常见格式的日志大大简化收集、解析和可视化过程,只需一条命令即可。
它可以将数据直接发送给Elasticsearch;或者通过Logstash,在Kibana中可视化数据之前,在Logstash中进一步处理和增强数据。
官方文档比较简单,https://www.elastic.co/guide/en/beats/filebeat/current/advanced-settings.html
这块比较丰富,你可以进行限流、替换、重命名、丢弃等操作。
详请参考:https://www.elastic.co/guide/en/beats/filebeat/current/filtering-and-enhancing-data.html
因为在整个日志中心,我们有logstash组件,所以filebeat不承担多少处理的工作。
filebeat仅采集,配置的时候比较简单,没有用到过多的复杂语句。
下文将讲述logstash。