使用 syslog-ng 可靠地記錄物聯網事件
現在,物聯網設備和嵌入式系統越來越多。對於許多連接到網際網路或者一個網路的設備來說,記錄事件很有必要,因為你需要知道這些設備都做了些什麼事情,這樣你才能夠解決可能出現的問題。
可以考慮去使用的一個監視工具是開源的 syslog-ng 應用程序,它是一個強化的、致力於可移植的、中心化的日誌收集守護程序。它可以從許多不同種類的來源、進程來收集日誌,並且可以對這些日誌進行處理和過濾,也可以存儲或者路由它們,以便於做進一步的分析。syslog-ng 的大多數代碼是用高效率的、高可移植的 C 代碼寫成的。它能夠適用於各種場景,無論你是將它運行在一個處理能力很弱的設備上做一些簡單的事情,還是運行在數據中心從成千上萬的機器中收集日誌的強大應用,它都能夠勝任。
你可能注意到在這個段落中,我使用了大量的溢美辭彙。為了讓你更清晰地了解它,我們來複習一下,但這將花費更多的時間,也了解的更深入一些。
日誌
首先解釋一下日誌。 日誌 是記錄一台計算機上事件的東西。在一個典型的 Linux 機器上,你可以在 /var/log
目錄中找到這些信息。例如,如果你通過 SSH 登錄到機器中,你將可以在其中一個日誌文件中找到類似於如下內容的信息:
Jan 14 11:38:48 linux-0jbu sshd[7716]: Accepted publickey for root from 127.0.0.1 port 48806 ssh2
日誌的內容可能是關於你的 CPU 過熱、通過 HTTP 下載了一個文檔,或者你的應用程序認為重要的任何東西。
syslog-ng
正如我在上面所寫的那樣,syslog-ng 應用程序是一個強化的、致力於可移植性、和中心化的日誌收集守護程序。守護程序的意思是,syslog-ng 是一個持續運行在後台的應用程序,在這裡,它用於收集日誌信息。
雖然現在大多數應用程序的 Linux 測試是限制在 x86_64 的機器上,但是,syslog-ng 也可以運行在大多數 BSD 和商業 UNIX 變種版本上的。從嵌入式/物聯網的角度來看,這種能夠運行在不同的 CPU 架構(包括 32 位和 64 位的 ARM、PowerPC、MIPS 等等)的能力甚至更為重要。(有時候,我通過閱讀關於 syslog-ng 是如何使用它們的來學習新架構)
為什麼中心化的日誌收集如此重要?其中一個很重要的原因是易於使用,因為它放在一個地方,不用到成百上千的機器上挨個去檢查它們的日誌。另一個原因是可用性 —— 即使一個設備不論是什麼原因導致了它不可用,你都可以檢查這個設備的日誌信息。第三個原因是安全性;當你的設備被黑,檢查設備日誌可以發現攻擊的蹤跡。
syslog-ng 的四種用法
syslog-ng 有四種主要的用法:收集、處理、過濾、和保存日誌信息。
收集信息: syslog-ng 能夠從各種各樣的 特定平台源 上收集信息,比如 /dev/log
,journal
,或者 sun-streams
。作為一個中心化的日誌收集器,傳統的(rfc3164
)和最新的(rfc5424
)系統日誌協議、以及它們基於 UDP、TCP 和加密連接的各種變種,它都是支持的。你也可以從管道、套接字、文件、甚至應用程序輸出來收集日誌信息(或者各種文本數據)。
處理日誌信息: 它的處理能力幾乎是無限的。你可以用它內置的解析器來分類、規範,以及結構化日誌信息。如果它沒有為你提供在你的應用場景中所需要的解析器,你甚至可以用 Python 來自己寫一個解析器。你也可以使用地理數據來豐富信息,或者基於信息內容來附加一些欄位。日誌信息可以按處理它的應用程序所要求的格式進行重新格式化。你也可以重寫日誌信息 —— 當然了,不是篡改日誌內容 —— 比如在某些情況下,需要滿足匿名要求的信息。
過濾日誌: 過濾日誌的用法主要有兩種:丟棄不需要保存的日誌信息 —— 像調試級別的信息;和路由日誌信息—— 確保正確的日誌到達正確的目的地。後一種用法的一個例子是,轉發所有的認證相關的信息到一個安全信息與事件管理系統(SIEM)。
保存信息: 傳統的做法是,將文件保存在本地或者發送到中心化日誌伺服器;不論是哪種方式,它們都被發送到一個普通文件。經過這些年的改進,syslog-ng 已經開始支持 SQL 資料庫,並且在過去的幾年裡,包括 HDFS、Kafka、MongoDB、和 Elasticsearch 在內的大數據存儲,都被加入到 syslog-ng 的支持中。
消息格式
當在你的 /var/log
目錄中查看消息時,你將看到(如上面的 SSH 信息)大量的消息都是如下格式的內容:
日期 + 主機名 + 應用名 + 一句幾乎完整的英文信息
在這裡的每個應用程序事件都是用不同的語法描述的,基於這些數據去創建一個報告是個痛苦的任務。
解決這種混亂信息的一個方案是使用結構化日誌。在這種情況下,事件被表示為鍵-值對,而不是隨意的日誌信息。比如,一個 SSH 日誌能夠按應用程序名字、源 IP 地址、用戶名、認證方法等等來描述。
你可以從一開始就對你的日誌信息按合適的格式進行結構化處理。當處理傳統的日誌信息時,你可以在 syslog-ng 中使用不同的解析器,轉換非結構化(和部分結構化)的信息為鍵-值對格式。一旦你的日誌信息表示為鍵-值對,那麼,報告、報警、以及簡單查找信息將變得很容易。
物聯網日誌
我們從一個棘手的問題開始:哪個版本的 syslog-ng 最流行?在你回答之前,想想如下這些事實:這個項目啟動於 20 年以前,Red Hat 企業版 Linux EPEL 已經有了 3.5 版,而當前版本是 3.14。當我在我的演講中問到這個問題時,觀眾通常回答是他們用的 Linux 發行版中自帶的那個。你們絕對想不到的是,正確答案竟然是 1.6 版最流行,這個版本已經有 15 年的歷史的。這什麼這個版本是最為流行的,因為它是包含在亞馬遜 Kindle 閱讀器中的版本,它是電子書閱讀器,因為它運行在全球範圍內超過 1 億台的設備上。另外一個在消費類設備上運行 syslog-ng 的例子是 BMW i3 電動汽車。
Kindle 使用 syslog-ng 去收集關於用戶在這台設備上都做了些什麼事情等所有可能的信息。在 BMW 電動汽車上,syslog-ng 所做的事情更複雜,基於內容過濾日誌信息,並且在大多數情況下,只記錄最重要的日誌。
使用 syslog-ng 的其它類別設備還有網路和存儲。一些比較知名的例子有,Turris Omnia 開源 Linux 路由器和群暉 NAS 設備。在大多數案例中,syslog-ng 是在設備上作為一個日誌客戶端來運行,但是在有些案例中,它運行為一個有豐富 Web 界面的中心日誌伺服器。
你還可以在一些行業服務中找到 syslog-ng 的身影。它運行在來自美國國家儀器有限公司(NI)的實時 Linux 設備上,執行測量和自動化任務。它也被用於從定製開發的應用程序中收集日誌。從命令行就可以做配置,但是一個漂亮的 GUI 可用於瀏覽日誌。
最後,還有大量的項目,比如,汽車和飛機,syslog-ng 在它們上面既可以運行為客戶端,也可以運行為服務端。在這種使用案例中,syslog-ng 一般用來收集所有的日誌和測量數據,然後發送它們到處理這些日誌的中心化伺服器集群上,然後保存它們到支持大數據的目的地,以備進一步分析。
對物聯網的整體益處
在物聯網環境中使用 syslog-ng 有幾個好處。第一,它的分發性能很高,並且是一個可靠的日誌收集器。第二,它的架構也很簡單,因此,系統、應用程序日誌、以及測量數據可以被一起收集。第三,它使數據易於使用,因為,數據可以被解析和表示為易於使用的格式。最後,通過 syslog-ng 的高效路由和過濾功能,可以顯著降低處理程序的負載水平。
via: https://opensource.com/article/18/3/logging-iot-events-syslog-ng
作者:Peter Czanik 選題:lujun9972 譯者:qhwdw 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive