syslog 作为一种通用的日志收集协议,有广泛的应用。强大的 fluentd 可以用来进行日志收集,就是需要安装一个又一个的 ruby 插件,不便于部署。发现 filebeat 越来越成熟,支持的 input 协议和 output 协议很多,也不需要安装额外的插件。
本文介绍使用 filebeat 收集远程Linux 和 思科 网络设备的 syslog,并根据需求写入到 elasticsearch 的 不同的索引中。
filebeat 版本: 7.6
filebeat.yaml
filebeat.inputs:
- type: syslog
protocol.udp:
host: "0.0.0.0:514"
- type: log
enabled: false
paths:
- /var/log/*.log
#============================= 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 ==========================
#setup.template.settings:
index.number_of_shards: 1
#index.codec: best_compression
setup.ilm.enabled: false
output.elasticsearch:
hosts: ["localhost:9200"]
#index: "filebeat-%{[agent.version]}-%{+yyyy.MM.dd}"
indices:
- index: "golang-%{[process.program]}-%{[agent.version]}-%{+yyyy.MM.dd}"
when.contains:
message: '"app_name":'
- index: "sec-host-%{[process.program]}-%{[agent.version]}-%{+yyyy.MM.dd}"
when.equals:
process.program: "kernel"
- index: "sec-host-%{[process.program]}-%{[agent.version]}-%{+yyyy.MM.dd}"
when.equals:
process.program: "crond"
- index: "sec-host-%{[process.program]}-%{[agent.version]}-%{+yyyy.MM.dd}"
when.equals:
process.program: "sshd"
- index: "sec-host-%{[process.program]}-%{[agent.version]}-%{+yyyy.MM.dd}"
when.equals:
process.program: "systemd"
- index: "sec-host-%{[process.program]}-%{[agent.version]}-%{+yyyy.MM.dd}"
when.equals:
process.program: "sudo"
- index: "sec-host-%{[process.program]}-%{[agent.version]}-%{+yyyy.MM.dd}"
when.equals:
process.program: "bash"
- index: "sec-network-%{[agent.version]}-%{+yyyy.MM.dd}"
when.regexp:
message: "^<.+>.+:"
processors:
- add_host_metadata: ~
- add_cloud_metadata: ~
- add_docker_metadata: ~
- add_kubernetes_metadata: ~
说明: indices 的 条件判断是,从上到下进行,满足哪个条件,日志就会存到相应的索引。
如果所有的条件都不满足,就存到默认的索引里面。
遇到的问题:配置了自定义的 setup.template.name 和默认的 index 可能就无法写入。
额外的配置:
通过 kibana 配置 Index Lifecycle Policies,自动定期清理历史日志。
参考文档:
https://www.elastic.co/guide/en/beats/filebeat/current/elasticsearch-output.html
ES 7.6 默认的 堆内存是 1G,可根据实际内存大小,适当增加
/etc/elasticsearch/jvm.options
-Xms4g
-Xmx4g