Beats:为 Filebeat 配置 inputs
Posted Elastic 中国社区官方博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Beats:为 Filebeat 配置 inputs相关的知识,希望对你有一定的参考价值。
Filebeat 模块为常见日志格式提供最快的入门体验。如果你对如何使用 Filebeat 模块还不是挺了解的话,请参阅我之前的文章:
为了能够手动配置 Filebeat 而不是使用模块,你可以在配置文件 filebeat.yml 的 filebeat.inputs 部分定义一个列表的 inputs。这些 inputs 定义了 Filebeat 如何定位及处理 input 数据。
这个列表是一个 YAML 的数组。每个 input 由一个 - 符号开始。你可以定义多个 inputs,甚至你可以为同一个 input 类型定义多次,比如:
filebeat.inputs:
- type: log
paths:
- /var/log/system.log
- /var/log/wifi.log
- type: log
paths:
- "/var/log/apache2/*"
fields:
apache: true
fields_under_root: true
针对最基本的配置,定义一个 input,并且只有一个 path,比如:
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/*.log
此示例中的输入收集路径 /var/log/*.log 中的所有文件,这意味着 Filebeat 将收集目录 /var/log/ 中以 .log 结尾的所有文件。 这里也支持 Go Glob 支持的所有模式。
要从预定义的子目录级别获取所有文件,请使用以下模式:/var/log/*/*.log。 这将从 /var/log 的子文件夹中获取所有 .log 文件。 它不会从 /var/log 文件夹本身获取日志文件。 目前不可能递归获取目录的所有子目录中的所有文件。
输入类型
你可以将 Filebeat 配置为使用以下输入(input):
- AWS CloudWatch
- AWS S3
- Azure Event Hub
- Cloud Foundry
- Container
- Docker
- GCP Pub/Sub
- HTTP Endpoint
- HTTP JSON
- Kafka
- Log
- MQTT
- NetFlow
- Office 365 Management Activity API
- Redis
- Stdin
- Syslog
- TCP
- UDP
使用 container type 来收集 container 日志
在我之前的许多文章中,我使用了 log 来收集日志。我几乎没有使用其它的任何其它的格式来收集日志。在今天的练习中,我们来试其中的一个 container type 是进行实验。
我们知道,我们可以使用如下的命令:
docker logs -f <container_name>
来查看某个 container 的日志。在 Linux 机器上,container 日志的位置处于:
/var/lib/docker/containers/
我们可以在电脑上看到:
# pwd
/var/lib/docker/containers
root@liuxgu:/var/lib/docker/containers# ls
900ee28a2d6febd91ee1c13c67cd5f17c7efcc4a5156ca55e3039813c46a0e06
aae662d12f1709ebf1bca012bd2309d8d5e51b29510ede5ce8cd8e00315b0a5e
c0807f8e0118a6eb5fc96217aad4a7bc2ae0493977cb5fb8b61ab7e01169c3a7
cee77bd60d95cf25d7605c9c6b48a24b632dc61db9599c3e6b09afb089d36999
eed8017d2a2450e19c16f0f727333f335b5737d9c5c7d3e97213f384edab9085
f7f9174324f32445fde6ca556f9a0b1498fe19b303135b5e64f92f6a0a289dac
f96004623acb404ca882e8f2f3b666960016f90fdf0b800849c5fa7eb7aa3066
我们可以进入到其中的一个目录下,然后查看:
# pwd
/var/lib/docker/containers/900ee28a2d6febd91ee1c13c67cd5f17c7efcc4a5156ca55e3039813c46a0e06
root@liuxgu:/var/lib/docker/containers/900ee28a2d6febd91ee1c13c67cd5f17c7efcc4a5156ca55e3039813c46a0e06# ls
900ee28a2d6febd91ee1c13c67cd5f17c7efcc4a5156ca55e3039813c46a0e06-json.log
checkpoints
config.v2.json
hostconfig.json
hostname
hosts
mounts
resolv.conf
resolv.conf.hash
root@liuxgu:/var/lib/docker/containers/900ee28a2d6febd91ee1c13c67cd5f17c7efcc4a5
在上面,我们可以看到文件 900ee28a2d6febd91ee1c13c67cd5f17c7efcc4a5156ca55e3039813c46a0e06-json.log。这个 log 文件就是我们想要导入的 container 日志。我们可以打开并查看其内容。
我们可以修改在 /etc/filebeat/filebeat.yml 文件。在这个文件中,我们添加如下的 input:
/etc/filebeat/filebeat.yml
filebeat.inputs:
# Each - is an input. Most options can be set at the input level, so
# you can use different inputs for various configurations.
# Below are the input specific configurations.
# 下面是添加的部分
- type: container
enabled: true
paths:
- /var/lib/docker/containers/*/*.log
我们在添加上面的部分后,重新启动 filebeat:
service filebeat restart
我们可以查看 filebeat 的服务运行情况:
service filebeat status
# service filebeat status
● filebeat.service - Filebeat sends log files to Logstash or directly to Elasti>
Loaded: loaded (/lib/systemd/system/filebeat.service; disabled; vendor pre>
Active: active (running) since Mon 2021-07-19 14:45:19 CST; 2s ago
Docs: https://www.elastic.co/beats/filebeat
Main PID: 12477 (filebeat)
Tasks: 13 (limit: 18982)
Memory: 67.9M
CGroup: /system.slice/filebeat.service
└─12477 /usr/share/filebeat/bin/filebeat --environment systemd -c
上面表明,filebeat 服务正在运行。
我们可以回到 Kibana 中,并且查看 container 的日志信息:
在上面,我们可以清楚得看到 container 的日志信息。
使用 TCP type 来收集日志
接下来,我们来使用 TCP type 来收集日志。和上面的一样,我们在 filebeat.yml 文件中添加如下的语句:
/etc/filebeat/filebeat.yml
filebeat.inputs:
# 添加的部分
- type: tcp
max_message_size: 10MiB
host: "0.0.0.0:9900"
添加完毕后,我们重新启动 Filebeat:
service filebeat restart
同样,我们使用如下的命令来检查 filebeat 的运行情况:
service filebeat status
在上面,我们添加了一个 TCP 的输入。它监听的地址是 0.0.0.0:9900。我们使用如下的命令来检查这个 9900 的端口是否已经被启用:
# netstat -tulpn | grep 9900
tcp6 0 0 :::9900 :::* LISTEN 18058/filebeat
从上面我们可以看出来,端口地址 9900 被 filebeat 所使用。
我们可以使用如下的命令来做一个测试:
echo "field1 field2 field3" | nc 192.168.0.4 9900
我们可以在 Discover 中查找这个信息:
上面显示在 message 字段中,我们可以看到之前我们写入的信息 "field1 field2 field3"。这说明我们的 TCP 输入的配置是成功的。
以上是关于Beats:为 Filebeat 配置 inputs的主要内容,如果未能解决你的问题,请参考以下文章