夜鶯監控(Nightingale)是一個開源的雲原生監控系統,本文介紹如何使用夜鶯監控 Linux 主機。
FAQ
1. 我的機器列表裡可以看到機器,也可以看到機器的 CPU、記憶體等資訊,但是儀表板查不到資料
💡 注意:機器列表裡那些 CPU、記憶體等資訊,不是儲存在時序庫的,而是儲存在 Redis 中的,是 Categraf 呼叫夜鶯的 heartbeat 介面時上報上來的,和 Remote write 走的是兩個路徑。
這個問題從如下幾個方面排查:
1、看 Categraf 的日誌
作為 IT 從業人員,第一反應就是應該看相關元件的日誌,Categraf 的日誌預設打在 stdout,如果是 systemd 託管的 Categraf,則使用 journalctl 查看,比如 journalctl -u categraf.service。如果對 Linux 不太熟悉,直接在命令列裡前台啟動 Categraf,可以更方便查看日誌,即:
./categraf
如上就是直接把 Categraf 程序啟動在前台,日誌會直接輸出到終端,方便查看。
2、確認 Categraf 的設定
機器列表裡可以正常看到內容,說明 Categraf 的設定裡的 heartbeat 部分設定是正常的。儀表板看不到監控資料,可能是 writer 部分的設定有問題,writer 部分的 url 應該設定為夜鶯的位址,urlpath 是 /prometheus/v1/write。
3、確認夜鶯的設定
Categraf 把資料推給夜鶯,夜鶯不直接儲存資料,而是轉發給 TSDB,TSDB 可以是 Prometheus 或者 VictoriaMetrics 等,夜鶯把資料發給哪些 TSDB?是由夜鶯的設定檔 config.toml 中的 Pushgw.Writers 來決定的。
需要確保 Pushgw.Writers 中的設定是正確的,且夜鶯的 n9e 程序可以正常存取到這些 TSDB。
4、查夜鶯的日誌
如果資料轉發給時序庫失敗,夜鶯的日誌會有相關提示,查看夜鶯的日誌可以幫助定位問題。社群裡新手使用者常見的錯誤是夜鶯寫資料給 Prometheus,但是 Prometheus 的啟動參數有問題,沒有開啟 remote write 介面,導致夜鶯寫資料失敗。這類錯誤通常會在夜鶯的日誌中有提示,可以直接看到應該給 Prometheus 增加什麼參數,照著修改即可。
5、時間校準
比如本地筆記型電腦的時間和伺服端的時間是否一致,監控系統對時間是很敏感的。如果時間沒有校準,可能會導致資料無法正常展示。
6、查看儀表板的設定
有些儀表板是查看時序庫裡的所有資料,有些儀表板是只能查看所屬業務組下面的機器的監控資料(透過儀表板變數控制的),如果是後者類型的儀表板,就需要確保業務組下面有機器。
2. 我可否把監控資料寫到 TDEngine 等其他時序庫
首先,你需要瞭解 Prometheus remote write 協定(可以問問 Google 或 GPT)。Categraf 採集的資料是透過 Prometheus remote write 協定推送給夜鶯的,夜鶯也是透過 Prometheus remote write 協定把資料轉發給時序庫的。
所以,如果某個時序庫支援接收 Prometheus remote write 協定的資料,那麼就可以接入 Categraf 或夜鶯。這個資訊從哪裡得到?去看(或搜)時序庫的文件,如果它支援接收 Prometheus remote write 協定的資料,那麼它大概率會在文件裡提及。如果它的文件裡沒有寫,大概率就是不支援或支援的不好不推薦使用。
3. 機器失聯監控怎麼做?
在 Prometheus 裡,每台機器部署 Node-Exporter,Prometheus 主動去抓取 Node-Exporter 的資料,這種方式叫做 PULL。這種方式的好處是,Prometheus 可以知道機器是否失聯,因為如果機器失聯,Prometheus 就無法抓取到資料。抓取成功的話,會有個 up 指標,值為 1;如果抓取失敗,則 up 指標的值為 0。
所以,在 Prometheus PULL 模式下,可以使用 up 指標來監控機器是否失聯。
夜鶯預設使用 Categraf 採集機器的監控資料,Categraf 不暴露 /metrics 介面,而是透過 remote write 協定把資料推給夜鶯,這種模式稱為 PUSH。在這種模式下,不會有 up 指標,那如何監控機器是否失聯呢?
夜鶯的告警規則裡,提供了一個 Host 類型的告警規則,可以設定失聯告警:

通常設定為對所有機器生效即可,如果你有一些特殊的機器,不想做失聯告警,可以把這些機器放到特殊的業務組或者打上特殊的標籤,然後在機器篩選這裡,給過濾掉。
或者使用 PING 監控對機器發起 PING 探測,然後對 PING 的探測結果設定告警規則,也是可以的。有很多監控工具都支援 PING 探測,比如 Telegraf、Categraf、Blackbox Exporter 等。
常見問題
Q1:Linux 監控指標怎麼覆蓋最全?
A:用 Categraf 的 node / cpu / disk / mem / net / processes 等內建外掛,開箱即用覆蓋所有系統級指標。建議把 告警規則範本 裡的 Linux 系列規則匯入業務組。
Q2:怎麼忽略某些不需要監控的 mount point?
A:在 Categraf 的 disk 外掛設定裡加 ignore_fs = ["tmpfs", "devtmpfs", "overlay"]。