作者 | Peter Czanik
譯者 | qhwdw ? ? ? ? ? 共計翻譯:112 篇 貢獻時間:199 天
用增強的日誌守護行程 syslog-ng 來監控你的物聯網裝置。
現在,物聯網裝置和嵌入式系統越來越多。對於許多連線到因特網或者一個網路的裝置來說,記錄事件很有必要,因為你需要知道這些裝置都做了些什麼事情,這樣你才能夠解決可能出現的問題。
可以考慮去使用的一個監視工具是開源的 syslog-ng[1] 應用程式,它是一個強化的、致力於可移植的、中心化的日誌收集守護程式。它可以從許多不同種類的來源、行程來收集日誌,並且可以對這些日誌進行處理和過濾,也可以儲存或者路由它們,以便於做進一步的分析。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 能夠從各種各樣的 特定平臺源[2] 上收集資訊,比如 /dev/log
,journal
,或者 sun-streams
。作為一個中心化的日誌收集器,傳統的(rfc3164
)和最新的(rfc5424
)系統日誌協議、以及它們基於 UDP、TCP 和加密連線的各種變種,它都是支援的。你也可以從管道、套接字、檔案、甚至應用程式輸出來收集日誌資訊(或者各種文字資料)。
處理日誌資訊: 它的處理能力幾乎是無限的。你可以用它內建的解析器來分類、規範,以及結構化日誌資訊。如果它沒有為你提供在你的應用場景中所需要的解析器,你甚至可以用 Python 來自己寫一個解析器。你也可以使用地理資料來豐富資訊,或者基於資訊內容來附加一些欄位。日誌資訊可以按處理它的應用程式所要求的格式進行重新格式化。你也可以重寫日誌資訊 —— 當然了,不是篡改日誌內容 —— 比如在某些情況下,需要滿足匿名要求的資訊。
過濾日誌: 過濾日誌的用法主要有兩種:丟棄不需要儲存的日誌資訊 —— 像除錯級別的資訊;和路由日誌資訊—— 確保正確的日誌到達正確的目的地。後一種用法的一個例子是,轉發所有的認證相關的資訊到一個安全資訊與事件管理系統(SIEM)。
儲存資訊: 傳統的做法是,將檔案儲存在本地或者傳送到中心化日誌伺服器;不論是哪種方式,它們都被髮送到一個普通檔案[3]。經過這些年的改進,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[5] 選題:lujun9972 譯者:qhwdw 校對:wxy
本文由 LCTT 原創編譯,Linux中國 榮譽推出