目录
一、ElasticStack的组成
二、FileBeat
1、简介
beats 是一个免费且开放的平台,集合了多种单一用途数据采集器。它们从成百上千或成千上万台机器和系统向 Logstash 或 Elasticsearch 发送数据。
这边我们使用beat下面的FileBeat日志采集工具
FileBeat轻量型日志采集器
当您要面对成百上千、甚至成千上万的服务器、虚拟机和容器生成的日志时,请告别 SSH 吧。Filebeat 将为您提供一种轻量型方法,用于转发和汇总日志与文件,让简单的事情不再繁杂。
汇总、“tail -f”和搜索
启动 Filebeat 后,打开 Logs UI,直接在 Kibana 中观看对您的文件进行 tail 操作的过程。通过搜索栏按照服务、应用程序、主机、数据中心或者其他条件进行筛选,以跟踪您的全部汇总日志中的异常行为。
性能稳健,不错过任何检测信号
无论在任何环境中,随时都潜伏着应用程序中断的风险。Filebeat 能够读取并转发日志行,如果出现中断,还会在一切恢复正常后,从中断前停止的位置继续开始。
Filebeat 让简单的事情简单化
Filebeat 内置有多种模块(Apache、Cisco ASA、Microsoft Azure、NGINX、MySQL 等等),可针对常见格式的日志大大简化收集、解析和可视化过程,只需一条命令即可。之所以能实现这一点,是因为它将自动默认路径(因操作系统而异)与 Elasticsearch 采集节点管道的定义和 Kibana 仪表板组合在一起。不仅如此,数个 Filebeat 模块还包括预配置的 Machine Learning 任务。
它不会导致您的管道过载
当将数据发送到 Logstash 或 Elasticsearch 时,Filebeat 使用背压敏感协议,以应对更多的数据量。如果 Logstash 正在忙于处理数据,则会告诉 Filebeat 减慢读取速度。一旦拥堵得到解决,Filebeat 就会恢复到原来的步伐并继续传输数据。
输送至 Elasticsearch 或 Logstash。在 Kibana 中实现可视化。
Filebeat 是 Elastic Stack 的一部分,因此能够与 Logstash、Elasticsearch 和 Kibana 无缝协作。无论您要使用 Logstash 转换或充实日志和文件,还是在 Elasticsearch 中随意处理一些数据分析,亦或在 Kibana 中构建和分享仪表板,Filebeat 都能轻松地将您的数据发送至最关键的地方。
2、部署运行
mkdir /opt/software/beats
tar -xvf filebeat-6.2.2-linux-x86_64.tar.gz
cd filebeat-6.2.2-linux-x86_64
#创建如下配置文件 test.yml
filebeat.prospectors:
- type: stdin
enabled: true
setup.template.settings:
index.number_of_shards: 3
output.console:
pretty: true
enable: true
#启动filebeat
./filebeat -e -c test.yml
#输入hello运行结果如下:
hello
{
"@timestamp": "2019-01-12T12:50:03.585Z",
"@metadata": { #元数据信息
"beat": "filebeat",
"type": "doc",
"version": "6.2.2"
},
"source": "",
"offset": 0,
"message": "hello", #输入的内容
"prospector": { #标准输入勘探器
"type": "stdin"
},
"input": { #控制台标准输入
" type": "stdin"
},
"beat": { #beat版本以及主机信息
"name": "itcast01",
"hostname": "itcast01",
"version": "6.2.2"
},
"host": {
"name": "itcast01"
}
}
3、读取文件
#配置读取文件项 test-log.yml
filebeat.prospectors:
- type: log
enabled: true
paths:
- /test/beats/logs/*.log
setup.template.settings:
index.number_of_shards: 3
output.console:
pretty: true
enable: true
#启动filebeat
./filebeat -e -c test-log.yml
#/opt/software/beats/logs下创建a.log文件,并输入如下内容
hello
world
#观察filebeat输出
{
"@timestamp": "2019-01-12T14:16:10.192Z",
"@metadata": {
"beat": "filebeat",
"type": "doc",
"version": "6.2.2"
},
"host": {
"name": "itcast01"
},
"source": "/test/beats/logs/a.log",
"offset": 0,
"message": "hello",
"prospector": {
"type": "log"
},
"input": {
"type": "log"
},
"beat": {
"version": "6.2.2",
"name": "itcast01",
"hostname": "itcast01"
}
}
{
"@timestamp": "2019-01-12T14:16:10.192Z",
"@metadata": {
"beat": "filebeat",
"type": "doc",
"version": "6.2.2"
},
"prospector": {
"type": "log"
},
"input": {
"type": "log"
},
"beat": {
"version": "6.2.2",
"name": "itcast01",
"hostname": "itcast01"
},
"host": {
"name": "itcast01"
},
"source": "/test/beats/logs/a.log",
"offset": 6,
"message": "world"
}
当a.log有变化时,会检测到日志文件有更新,会立刻读取文件的内容,并输出到控制台
3、自定义字段
#配置读取文件项 test-log.yml
filebeat.prospectors:
- type: log
enabled: true
paths:
- /opt/software/beats/logs/*.log
tags: ["web"] #添加自定义tag,便于后续的处理
fields: #添加自定义字段
from: test-im
fields_under_root: true #true为添加到根节点,false为添加到子节点中
setup.template.settings:
index.number_of_shards: 3
output.console:
pretty: true
enable: true
#启动filebeat
./filebeat -e -c test-log.yml
#/opt/software/beats/logs下创建a.log文件,并输入如下内容
123
#执行效果
{
"@timestamp": "2019-01-12T14:37:19.845Z",
"@metadata": {
"beat": "filebeat",
"type": "doc",
"version": "6.2.2"
},
"offset": 0,
"tags": [
"test-im"
],
"prospector": {
"type": "log"
},
"beat": {
"name": "itcast01",
"hostname": "itcast01",
"version": "6.2.2"
},
"host": {
"name": "itcast01"
},
"source": "/opt/software/beats/logs/a.log",
"message": "123",
"input": {
"type": "log"
},
"from": "test-im"
}
4、输出到Elasticsearch
# test-log.yml
filebeat.prospectors:
- type: log
enabled: true
paths:
- /opt/software/beats/logs/*.log
tags: ["test-im"]
fields:
from: test-im
fields_under_root: false
setup.template.settings:
index.number_of_shards: 3 #指定索引的分区数
output.elasticsearch: #指定ES的配置
hosts: ["192.168.1.7:9200","192.168.1.7:9201","192.168.1.7:9202"]
#可在Kibana后台查看到相应的数据
5、Filebeat工作原理
Filebeat由两个主要组件组成:prospector 和 harvester。
-
harvester:
- 负责读取单个文件的内容。
- 如果文件在读取时被删除或重命名,Filebeat将继续读取文件。
-
prospector
-
prospector 负责管理harvester并找到所有要读取的文件来源。
-
如果输入类型为日志,则查找器将查找路径匹配的所有文件,并为每个文件启动一个harvester。
-
Filebeat目前支持两种prospector类型:log和stdin。
-
-
Filebeat如何保持文件的状态
-
Filebeat 保存每个文件的状态并经常将状态刷新到磁盘上的注册文件中。
-
该状态用于记住harvester正在读取的最后偏移量,并确保发送所有日志行。
-
如果输出(例如Elasticsearch或Logstash)无法访问,Filebeat会跟踪最后发送的行,并在输出再次可用时继续读取文件。
-
在Filebeat运行时,每个prospector内存中也会保存的文件状态信息,当重新启动Filebeat时,将使用注册
文件的数据来重建文件状态,Filebeat将每个harvester在从保存的最后偏移量继续读取。文件状态记录在data/registry文件中
-
6、启动命令
./filebeat -e -c test.yml
./filebeat -e -c test.yml -d "publish"
#参数说明
-e: 输出到标准输出,默认输出到syslog和logs下
-c: 指定配置文件
-d: 输出debug信息
#测试: ./filebeat -e -c test-log.yml -d "publish"
DEBUG [publish] pipeline/processor.go:308 Publish event: {
"@timestamp": "2019-01-12T15:03:50.820Z",
"@metadata": {
"beat": "filebeat",
"type": "doc",
"version": "6.2.2"
},
"offset": 0,
"tags": [
"test-im"
],
"input": {
"type": "log"
},
"prospector": {
"type": "log"
},
"beat": {
"name": "itcast01",
"hostname": "itcast01",
"version": "6.2.2"
},
"source": "/opt/software/beats/logs/a.log",
"fields": {
"from": "test-im"
},
"host": {
"name": "itcast01"
},
"message": "456"
}
7、Module插件
前面要想实现日志数据的读取以及处理都是自己手动配置的,其实,在Filebeat中,有大量的Module,可以简化我们的配置,直接就可以使用,如下:
./filebeat modules list
Enabled:
Disabled:
apache2
auditd
elasticsearch
haproxy
icinga
iis
kafka
kibana
logstash
mongodb
mysql
nginx
osquery
postgresql
redis
suricata
system
traefik
可以看到,内置了很多的module,但是都没有启用,如果需要启用需要进行enable操作:
./filebeat modules enable redis #启动
./filebeat modules disable redis #禁用
Enabled:
redis
Disabled:
apache2
auditd
elasticsearch
haproxy
icinga
iis
kafka
kibana
logstash
mongodb
mysql
nginx
osquery
postgresql
suricata
system
traefik
# 可以发现,redis的module已经被启用。
8、redis的module
.
├── log #日志
│ ├── config
│ │ └── log.yml
│ ├── ingest
│ │ └── pipeline.json
│ └── manifest.yml
├── module.yml
└── slowlog #慢查询日志
├── config
│ └── slowlog.yml
├── ingest
│ └── pipeline.json
└── manifest.yml
9、redis module 配置
cd modules.d/
vim redis.yml
- module: redis
# Main logs
log:
enabled: true
# Set custom paths for the log files. If left empty,
# Filebeat will choose the paths depending on your OS.
var.paths: ["/data/redis-data/node01/*.log"]
# Slow logs, retrieved via the Redis API (SLOWLOG)
slowlog:
enabled: false
# The Redis hosts to connect to.
#var.hosts: ["localhost:6379"]
# Optional, the password to use when connecting to Redis.
#var.password:
10、修改redis的log日志功能
redis默认情况下,是不会输出日志的,需要进行配置,前面我们使用的容器都没有配置日志输出,下面需要配置一下。
loglevel 日志等级分为:debug、verbose、notice、warning
其中,debug 会有大量信息,对开发、测试有用;
verbose 等于log4j 中的info,有很多信息,但是不会像debug那样乱;
notice 一般信息;
warning 只有非常重要/关键的消息被记录。
docker create --name redis-node01 -v /data/redis-data/node01:/data -p 6379:6379 redis:5.0.2 --cluster-enabled yes --cluster-config-file nodes-node-01.conf --loglevel debug --logfile nodes-node-01.log
docker create --name redis-node02 -v /data/redis-data/node02:/data -p 6380:6379 redis:5.0.2 --cluster-enabled yes --cluster-config-file nodes-node-02.conf --loglevel debug --logfile nodes-node-02.log
docker create --name redis-node03 -v /data/redis-data/node03:/data -p 6381:6379 redis:5.0.2 --cluster-enabled yes --cluster-config-file nodes-node-03.conf --loglevel debug --logfile nodes-node-03.log
11、配置filebeat
#vim test-redis.yml
filebeat.prospectors:
- type: log
enabled: true
paths:
- /test/log/*.log
setup.template.settings:
index.number_of_shards: 3
output.console:
pretty: true
enable: true
filebeat.config.modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false
#运行
./filebeat -e -c test-redis.yml --modules redis
#测试发现,数据已经写入到了Elasticsearch中。
12、通过UDP数据传输接收
#vim test-udp.yml
filebeat.prospectors:
- type: udp
enabled: true
max_message_size: 10KiB
host: "0.0.0.0:8080"
fields:
type: udp
output.console:
pretty: true
enable: true
#在本机测试通过 echo 你好 > /dev/udp/192.168.179.128/8080 发送数据测试