使用ansible批量部署filebeat

时间:2022-07-22
本文章向大家介绍使用ansible批量部署filebeat,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

filebeat是beats组件中的一个,相较于logstash,是一个轻量级的日志采集器,

playbook目录结构

# 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