Beats
简介
Beats集合了多种单一用途的数据采集器,主要有以下几种类型
- filebeat:采集日志文件
- metricbeat:采集系统和软件指标
- packetbeat:采集网络数据
如果数据不需要经过处理,可以直接传给Elasticsearch中
如果数据需要经过处理,可以传给logstash处理,然后再发送给Elasticsearch
Filebeat:轻量级的日志采集器
为什么要用Filebeat
当服务器很多时,ssh登录查看会比较麻烦。启动 Filebeat 后,打开 Logs UI,直接在 Kibana 中观看对您的文件进行 tail 操作的过程
Filebeat工作流程
- 指定数据源
- 匹配到日志后,使用Harvester组件读取日志
- 日志传递到spooler,然后再传到elasticsearch或logstash中
下载安装
选择对应系统的安装包,下载地址:https://www.elastic.co/cn/downloads/beats/filebeat
下载后,传到服务器上
# 解压
tar xf filebeat-7.13.0-linux-x86_64.tar.gz
# 移动并重命名
mv filebeat-7.13.0-linux-x86_64 /usr/local/filebeat
创建从控制台读取数据的配置文件
cd /usr/local/filebeat
vim mybeat.yml
# 添加以如下内容
filebeat.inputs:
- type: stdin
enabled: true
output.console:
pretty: true
enable: true
启动
./filebeat -e -c mybeat.yml
输出hello,可以控制台看到json输出
创建从日志中读取数据的配置文件
vim mybeat1.yml
# 输出以下内容
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/logs/message
output.console:
pretty: true
enable: true
# 再次启动
./filebeat -e -c mybeat1.yml
# 往messages里追加一点内容
echo "hello" >> /var/log/messages
可以看到刚刚追加的内容
自定义字段
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/logs/message
fields_under_root: true # 自定义字段作为根节点显示
# 自定义字段
fields:
myfields: test
output.console:
pretty: true
enable: true
输出到Elasticsearch中
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/*.log
fields:
myfields: test
fields_under_root: true
output.elasticsearch:
hosts: ["192.168.0.14:9200"]
自定义索引名称
output.elasticsearch:
hosts: ["192.168.0.14"]
index: "message-%{+yyyy-MM}"
setup.ilm.enabled: false
setup.template.enabled: false
setup.template.name: "index"
setup.template.pattern: "index-*"
安装chrome插件Elasticsearch Head查看结果
还可以按日志类型定义索引名称
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/nginx/access.log
# 自定义标签
tags: "access"
- type: log
enabled: true
paths:
- /var/log/nginx/error.log
tags: "error"
output.elasticsearch:
hosts: ["192.168.0.14:9200"]
indices:
- index: "nginx-access-%{+yyyy.MM}"
when.contains:
tags: "access"
- index: "nginx-error-%{+yyyy.MM}"
when.contains:
tags: "error"
setup.ilm.enabled: false
setup.template.name: "index"
setup.template.pattern: "index-*"
setup.template.enabled: false
filebeat的组件
harvester
- 读取单个文件内容
- 每个文件启动一个harvester,并且harvester负责打开和关闭这些文件
- 每个文件启动一个harvester
- 在harvester正在读取文件内容的时候,文件被删除或者重命名了,那么Filebeat就会续读这个文件,这就会造成一个问题,就是只要负责这个文件的harvester没用关闭,那么磁盘空间就不会被释放,默认情况下,Filebeat保存问价你打开直到close_inactive到达
prospector
- 管理harvester,找到所有读取的文件来源
- 如果输入类型为日志,则为每个文件启动一个harvester
- filebeat支持的prospector:stdin和log
module
前面的日志采集都是手动配置,在Filebeat中,有大量的Module,可以简化配置,并且做了简单的处理
# 查看module列表
./filebeat modules list
# 启用module
./filebeat modules enable nginx
# 禁用module
./filebeat modules disable nginx
修改module配置
vim modules.d/nginx.yml
- module: nginx
# Access logs
access:
enabled: true
# 添加日志文件
var.paths: ["/var/log/nginx/access.log*"]
# Set custom paths for the log files. If left empty,
# Filebeat will choose the paths depending on your OS.
#var.paths:
# Error logs
error:
enabled: true
var.paths: ["/var/log/nginx/error.log*"]
配置filebeat,添加module
filebeat.inputs:
output.elasticsearch:
hosts: ["192.168.0.20:9200"]
filebeat.config.modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false
测试
可以看到刚写入的数据己经采集到了
更多玩法,可参考官方文档:https://www.elastic.co/guide/en/beats/filebeat/current/index.html
Metricbeat
Metricbeat的组成
- module:收集的对象,如mysql,redis,操作系统等
- metricset:收集指标的集合:如CPU,memory,network等
使用Metricbeat的module收集Nginx数据
# 启用nginx module
./metricbeat modules enable nginx
# 配置nginx的status
location /status {
stub_status on;
access_log off;
}
# reload
systemctl reload nginx
vim modules.d/nginx.yml
html
- module: nginx
#metricsets:
# - stubstatus
period: 10s
# Nginx hosts
hosts: ["http://127.0.0.1"]
# status的uri
server_status_path: "status"
./metricbeat -e
测试