使用 Elastic-Agent 或 Beats 将 Journald 中的 syslog 和 auth 日志导入 Elastic Stack

作者:来自 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 功能的巧妙利用。在进入具体操作之前,先来了解它是如何工作的。

系统集成中的 syslogauth 数据流 现在新增了一个 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_versionhost.os_platform

如果你想检查主机实际报告的值,可以按照以下步骤操作:

  1. 进入 Kibana ,依次导航到:
    Management -> Fleet -> Agents

  2. 选择你的代理,然后点击 "Diagnostics"

  3. 点击 "Request diagnostics .zip" 请求诊断文件

  4. 诊断文件生成后,下载并解压 ZIP 压缩包

  5. 找到 variables.yml 文件

  6. 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 的配置方式略有不同 ,因为它是按主机配置的,需要手动编辑配置文件。因此,你需要:

  1. 启用 system 模块
  2. 在 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 文件以启用 filesetsJournald

    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
  • 设置 system 模块:

运行以下命令来设置系统模块:

./filebeat setup --modules system
  • 启动 Filebeat

使用以下命令启动 Filebeat-e-v 标志将日志输出到 stderr ,并以 info 级别记录:

./filebeat -e -v
  • Kibana 中查看数据:
    • 进入 "Discover" 页面,选择 filebeat- * 数据视图,你应该能看到包含 event.dataset: system.syslogevent.dataset: system.auth 的事件。
  • 访问 "Dashboards"
    • 搜索 "[Logs System]"(使用引号以过滤掉 Windows 仪表板)。
    • 所有四个仪表板都应该工作,只需确保设置适当的时间区间,默认的 15 分钟有时对某些主机来说不足够。

原文:Dec 21st, 2024: [EN] Ingesting syslog and auth logs from Journald into Elastic Stack with Elastic-Agent or Beats - Advent Calendar - Discuss the Elastic Stack

相关推荐
闯闯桑6 分钟前
scala 中的@BeanProperty
大数据·开发语言·scala
闯闯桑12 分钟前
Scala 中的隐式转换
大数据·scala
liuyunluoxiao36 分钟前
进程(上)【Linux操作系统】
linux
琪琪花1 小时前
sshfs 将远程服务器上的文件系统挂载到本地目录
linux·运维·服务器
dreamczf1 小时前
基于Linux系统的边缘智能终端(RK3568+EtherCAT+PCIe+4G+5G)
linux·人工智能·物联网·5g
wayuncn1 小时前
哈尔滨服务器租用的流程
运维·服务器
钡铼技术物联网关2 小时前
导轨式ARM工业控制器:组态软件平台的“神经中枢”
linux·数据库·人工智能·安全·智慧城市
用户Taobaoapi20142 小时前
淘宝商品列表查询 API 接口详解
大数据
fanxiaohui121383 小时前
元脑服务器的创新应用:浪潮信息引领AI计算新时代
运维·服务器·人工智能
涛思数据(TDengine)3 小时前
taosd 写入与查询场景下压缩解压及加密解密的 CPU 占用分析
大数据·数据库·时序数据库·tdengine