字数 1018,阅读大约需 6 分钟
ELK:Filebeat轻量化的日志数据采集器
核心:从安全设备、云、容器、主机还是 OT 进行数据收集,Filebeat提供一种轻量型方法
,用于转发和汇总日志与文件。
Filebeat 是 Elastic Stack(以前称为 ELK Stack)的一部分,是一个轻量级的、开源的日志数据采集器(或称为传送工具)。它通常作为代理程序安装在需要收集日志的服务器上,用于监控指定的日志文件或位置,收集日志事件,并将它们转发到 Elasticsearch、Logstash 或 Kafka 等目标进行后续存储、处理和分析。
主要功能和特点
轻量高效:Filebeat 使用 Go 语言编写,资源占用少,对服务器性能影响极小,适合部署在生产环境的边缘节点上。
实时监控:它可以实时监控日志文件的变化,并及时收集新增的日志行。
可靠传输:Filebeat 能够跟踪文件的读取位置(偏移量),确保在程序重启或网络中断后可以从上次中断的地方继续收集,避免数据丢失或重复。
输出多样:除了 Elasticsearch 和 Logstash,它还可以将数据输出到 Kafka 等其他系统。
集成 Elastic Stack:Filebeat 与 ELK Stack(Elasticsearch、Logstash、Kibana)无缝集成,是整个日志分析流程中的重要一环。
在 ELK Stack 中的作用
在典型的 ELK 架构中,Filebeat 扮演着数据收集和传输的入口角色:
收集:部署在各个应用服务器上的 Filebeat 负责收集本地的日志文件。
传输:将收集到的日志数据安全、可靠地传输到 Logstash(进行进一步处理和解析)或直接传输到 Elasticsearch。
存储与分析:数据最终存储在 Elasticsearch 中,并通过 Kibana 进行可视化分析和管理。
Filebeat 的核心价值在于提供了一种高效、可靠的方式,将分散在各个服务器上的日志数据集中起来,以便进行统一的分析和监控。
数据管道
Filebeat 使用背压敏感协议,以应对更多的数据量。如果 Logstash 正在忙于处理数据,则会告诉 Filebeat 减慢读取速度。一旦拥堵得到解决,Filebeat 就会恢复到原来的步伐并继续传输数据
演示说明
以开发环境:自定义treafik插件,并部署traefik,将http的request和response为例,将日志通过filebeat采集,推送到ES,在kibana里查看该日志信息为例:
容器部署
filebeat:
image: docker.elastic.co/beats/filebeat:7.15.0
container_name: filebeat
user: root
command: filebeat -e -strict.perms=false
volumes:
- ./config/filebeat.yml:/usr/share/filebeat/filebeat.yml:ro
- /var/lib/docker/containers:/var/lib/docker/containers:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
depends_on:
- elasticsearch
networks:
- platform-common-net
配置filebeat的filebeat.yml
filebeat.inputs:
# 采集 Traefik 访问日志
- type: log
enabled: false
paths:
- /var/log/traefik/access.log
fields:
log_type: traefik_access
service: traefik
fields_under_root: true
json.keys_under_root: true
json.add_error_key: true
# 采集 Traefik 应用日志
- type: log
enabled: false
paths:
- /var/log/traefik/traefik.log
fields:
log_type: traefik_app
service: traefik
fields_under_root: true
json.keys_under_root: true
json.add_error_key: true
# 直接从容器标准输出采集
- type: container
enabled: true
paths:
- "/var/lib/docker/containers/*/*.log"
processors:
- add_docker_metadata:
host: "unix:///var/run/docker.sock"
- drop_event:
when:
not:
equals:
container.name: "traefik-docker-traefik-1"
- decode_json_fields:
fields: ["message"]
target: "json"
overwrite_keys: true
- drop_event:
when:
not:
equals:
stream: "stdout"
# 解析到 app 命名空间,避免所有字段冲突
- decode_json_fields:
fields: ["log"]
target: "app"
overwrite_keys: false
- drop_fields:
fields: ["log", "stream", "time", "container","json","agent"]
ignore_missing: true
# - include_fields:
# fields:
# # - "@timestamp"
# - "app"
# 输出到 Elasticsearch
output.elasticsearch:
hosts: ["elasticsearch:9200"]
index: "traefik-logs-%{+yyyy.MM.dd}"
# 索引模板设置
setup.template.name: "traefik-logs"
setup.template.pattern: "traefik-logs-*"
setup.ilm.enabled: false
# Kibana 配置(用于自动导入 Dashboard)
setup.kibana:
host: "kibana:5601"
# 日志级别
logging.level: info
logging.to_files: true
logging.files:
path: /var/log/filebeat
name: filebeat
keepfiles: 7
permissions: 0644
检查日志采集
在treaifk查看标准输入输出,这里是插件输出的request等信息
在kibana查看对应日志索引,检查是否有traefik的日志信息
可以看到:traefik的标准输出日志被filebeat成功采集并在kibana里可视化,在message字段里对应的json就是请求通过traefik的插件记录的request和response信息;✌️
评论区