作者:来自 Elastic TiagoQueiroz
我们在 Elastic 一直努力将更多 Linux 发行版添加到我们的支持矩阵中,现在 Elastic-Agent 和 Beats 已正式支持 Debian 12!
本文演示了我们正在开发的功能,以支持使用 Journald 存储系统和身份验证日志(auth logs)的 Linux 发行版。
一些 Linux 发行版(如 Debian 12 )已经完全放弃了传统的系统日志文件,因此现在获取这些日志的唯一方法是读取 Journald。
使用 Elastic-Agent 摄取系统日志
Elastic-Agent 的系统集成 可从服务器收集系统日志和指标。从 1.63.0 版(Elastic-Agent 8.17.0) 开始,它还支持从 Journald 摄取日志。
我们将在 Debian 12 VM 上进行示例。不过,如果你想在其他 Linux 发行版上通过 Journald 收集系统日志,只需稍作配置调整即可。
简而言之:
只需在 Debian 12 VM 上安装 Elastic-Agent 8.17.0 ,添加系统集成,你就能从 Journald 获取日志。如果你在 Debian 11 等其他发行版上安装 Elastic-Agent,它将读取日志文件。就是这么简单!
详细解析:
这并不是 "魔法",而是对 Elastic-Agent 功能的巧妙利用。在进入具体操作之前,先来了解它是如何工作的。
系统集成中的 syslog
和 auth
数据流 现在新增了一个 Journald 输入,该输入在默认配置下 仅在 Debian 12 和 Amazon Linux 2023 上运行 。现有的日志输入则相反,它不会在 Debian 12 和 Amazon Linux 2023 上运行。
Elastic-Agent 集成支持条件( conditions)判断 ,用于决定是否运行某个输入。例如,系统集成已经使用此功能来防止 winlog 输入在 Linux 或 macOS 上运行。现在,我们利用它来决定在不同的 Linux 发行版 上运行 Journald 还是传统日志输入。
如果查看 系统集成的配置 ,你会发现一个新的 conditions 字段,其中 Journald 输入的配置 类似于:
${host.os_version} == "12 (bookworm)" or (${host.os_platform} == "amzn" and ${host.os_version} == "2023")
如果该条件的评估结果为 true,则输入将运行;否则,输入不会运行。
要在不同的 Linux 发行版上运行该输入,只需编辑条件以匹配你的需求。如果将其留空,输入将始终运行。
⚠ 注意! 如果你在同时支持 传统日志文件 和 Journald 的 Linux 发行版上同时运行 日志输入 和 Journald 输入 ,你将会 产生重复数据 ,系统仪表板也会显示 重复的数值!
以下是 集成配置 的示例:

配置完成后(或接受默认设置),选择是将其添加到新策略 还是现有策略:

然后点击 "Save and continue"(保存并继续) ,并继续执行 "Add Elastic Agent to your hosts"(将 Elastic Agent 添加到你的主机)。

然后按照说明使用 Linux Tar 添加代理,你需要在主机上运行以下命令:
curl -L -O https://artifacts.elastic.co/downloads/beats/elastic-agent/elastic-agent-8.17.0-linux-x86_64.tar.gz
tar xzvf elastic-agent-8.17.0-linux-x86_64.tar.gz
cd elastic-agent-8.17.0-linux-x86_64
sudo ./elastic-agent install --url=https://<YOUR FLEET SERVER ADDRESS>:8220 --enrollment-token=<YOUR ENROLMENT TOKEN>
安装 Elastic-Agent 后,进入其 Overview 页面,你会看到 Journald 输入 正在运行,而 日志输入 (log input)不可用:

如何为我的主机自定义条件( condition)?
这很简单!主机提供商( host provider)的文档 会列出它提供的键。例如,在上面的示例中,我们使用了 host.os_version
和 host.os_platform
。
如果你想检查主机实际报告的值,可以按照以下步骤操作:
-
进入 Kibana ,依次导航到:
Management -> Fleet -> Agents -
选择你的代理,然后点击 "Diagnostics"
-
点击 "Request diagnostics .zip" 请求诊断文件
-
诊断文件生成后,下载并解压 ZIP 压缩包
-
找到
variables.yml
文件 -
在
host
键下,你可以看到主机提供商报告的所有 键值对,例如:host: architecture: x86_64 id: ad88a1859979427ea1a7c24f0ae0320a ip: - 127.0.0.1/8 - ::1/128 mac: - 08:00:27:5e:8a:a5 name: debian12 os_family: debian os_platform: debian os_version: 12 (bookworm) platform: linux
那么独立运行的 Beats 呢?
很高兴你问这个问题!是的,Filebeat 也支持 Debian 12 或任何使用 Journald 的 Linux 发行版 。从 8.17.0 版本开始,system 模块 (system module )就已经支持 Journald。
不过,Filebeat 的配置方式略有不同 ,因为它是按主机配置的,需要手动编辑配置文件。因此,你需要:
- 启用 system 模块
- 在 syslog 和 auth 这两个 fileset 配置中,将
var.use_journald
设置为true
⚠ 注意: 你需要以 root 身份执行这些步骤,因为读取部分 Journal 日志需要 root 权限。
操作步骤
-
下载并解压
tar.gz
包 -
配置
filebeat.yml
,填写你的 Elasticsearch 和 Kibana 凭据(Kibana 凭据用于设置数据视图、仪表板等) -
确保启用了相关模块,例如:
filebeat.config.modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false
reload.period: 10s -
通过运行
./filebeat test output
来测试与输出的连接:root@Debian12:~/filebeat-8.17.0-linux-x86_64# ./filebeat test output
elasticsearch: https://advent-calendar-deployment.elastic-cloud.com:443...
parse url... OK
connection...
parse host... OK
dns lookup... OK
addresses: 35.235.72.223
dial up... OK
TLS...
security: server's certificate chain verification is enabled
handshake... OK
TLS version: TLSv1.3
dial up... OK
talk to server... OK
version: 8.17.0
root@Debian12:~/filebeat-8.17.0-linux-x86_64# -
通过运行
./filebeat modules enable system
来启用 system 模块:root@Debian12:~/filebeat-8.17.0-linux-x86_64# ./filebeat modules enable system
Enabled system
root@Debian12:~/filebeat-8.17.0-linux-x86_64# -
编辑
./modules.d/system.yml
文件以启用 filesets 和 Journald:Module: system
Docs: https://www.elastic.co/guide/en/beats/filebeat/8.x/filebeat-module-system.html
- module: system
syslog:
enabled: true
var.use_journald: true
auth:
enabled: true
var.use_journald: true
- module: system
-
设置 system 模块:
运行以下命令来设置系统模块:
./filebeat setup --modules system
- 启动 Filebeat:
使用以下命令启动 Filebeat ,-e
和 -v
标志将日志输出到 stderr ,并以 info 级别记录:
./filebeat -e -v
- 在 Kibana 中查看数据:
- 进入 "Discover" 页面,选择 filebeat- * 数据视图,你应该能看到包含
event.dataset: system.syslog
和event.dataset: system.auth
的事件。
- 进入 "Discover" 页面,选择 filebeat- * 数据视图,你应该能看到包含
- 访问 "Dashboards" :
- 搜索 "[Logs System]"(使用引号以过滤掉 Windows 仪表板)。
- 所有四个仪表板都应该工作,只需确保设置适当的时间区间,默认的 15 分钟有时对某些主机来说不足够。