使用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
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- leetcode之字符串压缩
- Android如何获取屏幕、状态栏及标题栏的高度详解
- Android中FloatingActionButton的显示与隐藏示例
- Android 中RecyclerView顶部刷新实现详解
- Android开发实现图片平移、缩放、倒影及旋转功能的方法
- Grafana + InfluxDB 实现 Jmeter 压测的图形化监控
- Android 浮动编辑框的具体实现代码
- Android实现Path平滑的涂鸦效果实例
- Android CameraManager类详解
- Android开发实现自定义水平滚动的容器示例
- Android Studio开发之 JNI 篇的简单示例
- Android自定义View播放Gif动画的示例
- Android下拉框PopupWindow使用详解
- Android实现自动文本框提示功能
- Android开发实现拍照功能的方法实例解析