作者:來自 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_64id: ad88a1859979427ea1a7c24f0ae0320aip:- 127.0.0.1/8- ::1/128mac:- 08:00:27:5e:8a:a5name: debian12os_family: debianos_platform: debianos_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/*.ymlreload.enabled: falsereload.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... OKconnection...parse host... OKdns lookup... OKaddresses: 35.235.72.223dial up... OKTLS...security: server's certificate chain verification is enabledhandshake... OKTLS version: TLSv1.3dial up... OKtalk to server... OKversion: 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: systemsyslog:enabled: truevar.use_journald: trueauth:enabled: truevar.use_journald: true
- 設置 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 分鐘有時對某些主機來說不足夠。
原文: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