起因 业务需求,已经转成json格式的nginx日志直接通过filebeat传入了Elasticsearch中,而其他程序日志需要通过filebeat传入logstash进行二次过滤。就需要解决多output的问题。而根据官方文档 :
You configure Filebeat to write to a specific output by setting options in the Outputs section of the filebeat.yml
config file. Only a single output may be defined.
可知filebeat.yml
中output有且只能有一个。当然你可以在filebeat.yml
input模块中添加多个tags,并传递给logstash,并在logstash上通过不同的标签区分后传入不同的index中。
配置单机多实例 filebeat介绍 logstash 和filebeat都具有日志收集功能,因为filebeat由Golang编写相较于logstash更轻量,占用资源更少。所以决定在同一台机器上启动两个filebeat实例,分别用于拉取不同程序日志。
分析原版filebeat的systemd启动脚本: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 cat /usr/lib/systemd/system/filebeat.service[Unit] Description=Filebeat sends log files to Logstash or directly to Elasticsearch. Documentation=https://www.elastic.co/products/beats/filebeat Wants=network-online.target After=network-online.target [Service] Environment="BEAT_LOG_OPTS=-e" Environment="BEAT_CONFIG_OPTS=-c /etc/filebeat/filebeat.yml" Environment="BEAT_PATH_OPTS=-path.home /usr/share/filebeat -path.config /etc/filebeat -path.data /var/lib/filebeat -path.logs /var/log/filebeat" ExecStart=/usr/share/filebeat/bin/filebeat $BEAT_LOG_OPTS $BEAT_CONFIG_OPTS $BEAT_PATH_OPTS Restart=always [Install] WantedBy=multi-user.target
结合filebeat.yml可知:
filebeat并不需要占用独立端口
依赖/etc/filebeat/filebeat.yml作为程序配置文件
依赖/var/lib/filebeat目录记录上次抓取指定日志的偏移量和时间戳
其他目录:
/usr/share/filebeat #filebeat程序家目录
/var/log/filebeat #filebeat日志目录
分别创建以上文件/目录 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 mkdir -p /var/log/filebeat2mkdir -p /var/lib/filebeat2cat > /etc/filebeat/filebeat_logstash.yml <<'EOF' filebeat.inputs: - type : log enabled: true - /var/applogs/*/*.log multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}' multiline.negate: true multiline.match: after filebeat.config.modules: path: ${path.config} /modules.d/*.yml reload.enabled: false setup.template.settings: index.number_of_shards: 1 setup.kibana: output.logstash: hosts: ["172.19.111.144:8080" ] processors: - add_host_metadata: netinfo.enabled: true cache.ttl: 5m EOF 修改systemd启动脚本: cat > /usr/lib/systemd/system/filebeat_logstash.service <<'EOF' [Unit] Description=Filebeat sends log files to Logstash or directly to Elasticsearch. Documentation=https://www.elastic.co/products/beats/filebeat Wants=network-online.target After=network-online.target [Service] Environment="BEAT_LOG_OPTS=-e" Environment="BEAT_CONFIG_OPTS=-c /etc/filebeat/filebeat_logstash.yml" Environment="BEAT_PATH_OPTS=-path.home /usr/share/filebeat -path.logs /var/log/filebeat2 -path.data /var/lib/filebeat2" ExecStart=/usr/share/filebeat/bin/filebeat $BEAT_LOG_OPTS $BEAT_CONFIG_OPTS $BEAT_PATH_OPTS Restart=always [Install] WantedBy=multi-user.target EOF