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):

使用 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 输入的配置是成功的。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐