filebeat是beats组件中的一个,相较于logstash,是一个轻量级的日志采集器,
# tree
.
├── host
│ └── hosts
├── roles
│ └── filebeat
│ ├── files
│ │ └── kill.sh
│ ├── tasks
│ │ ├── clean.yml
│ │ ├── create.yml
│ │ ├── download.yml
│ │ ├── kill.yml
│ │ ├── main.yml
│ │ └── set.yml
│ ├── templates
│ │ ├── filebeat.service.j2
│ │ └── filebeat.yml.j2
│ └── vars
│ └── main.yml
└── setup.yml
这里需要说明下hosts清单文件
# cat host/hosts
[test]
172.27.10.110 log_tag=test-app redis_key=test-app-key redis_db=0
172.27.10.111 log_tag=test-app-manage redis_key=test-app-manage-key redis_db=1
172.27.10.117 log_tag=test-javarisk01 redis_key=test-javarisk01-key redis_db=2
172.27.10.118 log_tag=test-javarisk02 redis_key=test-javarisk02-key redis_db=3
172.27.10.115 log_tag=test-pyrisk01 redis_key=test-pyrisk01-key redis_db=4
172.27.10.116 log_tag=test-pyrisk02 redis_key=test-pyrisk02-key redis_db=5
172.27.10.112 log_tag=test-settlement redis_key=test-settlement-key redis_db=6
172.27.10.119 log_tag=test-channel-manage redis_key=test-channel-manage-key redis_db=7
172.27.10.62 log_tag=test-msg-center redis_key=test-msg-center-key redis_db=8
[dev]
172.27.10.72 log_tag=dev-app redis_key=dev-app-key redis_db=9
172.27.10.80 log_tag=dev-app-manage redis_key=dev-app-manage-key redis_db=10
172.27.10.106 log_tag=dev-javarisk01 redis_key=dev-javarisk01-key redis_db=11
172.27.10.107 log_tag=dev-javarisk02 redis_key=dev-javarisk02-key redis_db=12
172.27.10.104 log_tag=dev-pyrisk01 redis_key=dev-pyrisk01-key redis_db=13
172.27.10.105 log_tag=dev-pyrisk02 redis_key=dev-pyrisk02-key redis_db=14
172.27.10.108 log_tag=dev-channel-manage redis_key=dev-channel-manage-key redis_db=15
[all:vars]
ansible_ssh_user=admin
由于业务机器均是单节点,每一台业务机器的日志也是不同的,不过好在程序所输出的目录是同一个,所以在filebeat的yml文件里也好写正则,另外,由于不同的日志需要做不同的处理,因此在清单文件里为每一台主机设置了变量,用来设置key,至于存到哪个库里随意就好了,都存在一个库里也可以。
下面看一个filebeat.yml模板文件
# cat templates/filebeat.yml.j2
filebeat.inputs:
- type: log
enabled: true
paths:
- /export/data/logs/info/*.log
tags: ["{{ log_tag }}"]
exclude_files: ['.gz$','.zip$','.*.[0-9-]{1,}.log$']
fields:
server_ip: "{{ ansible_default_ipv4.address }}" #获取本机的IP地址
fields_under_root: true
tail_files: true
processors:
- drop_fields:
fields: ["prospector","source","input", "beat", "offset","tags","host"]
output.redis:
hosts: ["{{ redis_host }}:{{ redis_port }}"]
db: {{ redis_db | default(0) }}
timeout: {{ redis_timeout | default(30) }}
key: "{{ redis_key }}"
exclude_files 要排除的日志文件,可以用正则
exclude_lines 要排除的行
include_lines 要采集的行
需要注意的是:当include_lines和exclude_lines同时存在时,会先执行include_lines,且与俩配置项的位置无关
tail_files 类似于tail -f
fields 自定义字段
fields_under_root 设置为true可将其他字段存储为顶级字段,而不是“字段”子字典下。 如果名称与Filebeat本身添加的字段冲突,则自定义字段会覆盖默认字段。
harvester_buffer_size 当抓取一个文件时每个harvester使用的buffer的字节数。默认是16384
max_bytes 单个日志消息允许的最大字节数
配置信息可参考官方文档:https://www.elastic.co/guide/en/beats/filebeat/current/configuration-filebeat-options.html
playbook以同步到github,仓库地址:git@github.com:devilf/ansible-playbook.git