機器硬件監(jiān)控,最簡單的方案,沒有之一
之前新東方的老師分享了他們通過 Telegraf、Loki、Nightingale 等工具來監(jiān)控機器硬件狀態(tài)的方案,具備很強的靈活性、平臺性。本文會介紹一個相對輕量的方式,只需要一個二進制+一個腳本即可搞定,給各位朋友提供一種新的選擇。
新東方的方案
物理機可以通過帶外開啟 SNMP,通過 SNMP 可以獲取各個硬件模塊的健康狀態(tài),Telegraf 提供了很多 input、output 插件,我們可以使用 Telegraf 的 snmp input 插件采集硬件狀態(tài)信息,使用 loki output 插件寫入 Loki,然后使用 Nightingale 做告警規(guī)則配置( Loki 兼容 Prometheus 的 Querying 接口),產(chǎn)出告警事件,之后可以發(fā)給釘釘、企微,或者發(fā)給?FlashDuty ( https://flashcat.cloud/product/flashduty/ )做告警聚合降噪、排班、認領(lǐng)、升級等后續(xù)處理。

實操步驟
1. snmp 插件準(zhǔn)備
snmp監(jiān)控主要通過各種oid節(jié)點獲取對應(yīng)信息,分為get(單值)、walk(多值),telegraf的snmp插件默認是取單值,如果需要多值,可以找對應(yīng)的table類型節(jié)點進行采集。
2. OID節(jié)點查找
不同型號的物理機,oid節(jié)點不同,可以通過對應(yīng)型號的MIB文件進行查找。除了單獨查找每個硬件的狀態(tài)oid外,MIB文件中一般還能找到服務(wù)器整體狀態(tài)的OID節(jié)點,可以直接取這個值,以下例子為浪潮服務(wù)器:

正常取值為"OK"、“Normal”,有報警的話取值為"WARNING"、“CRITICAL”。
采集OID=‘INSPUR-MIB::serverSystemHealthTable’(轉(zhuǎn)換數(shù)字為’.1.3.6.1.4.1.37945.2.1.2.13.1’),可以先用snmpwalk命令看下取值:
通過采集狀態(tài)可以看出?2.2.2.2?這個機子memory為報警狀態(tài)。具體如何配置 Telegraf,如何配置夜鶯和 Loki 對接,請參看文章:新東方老師教你使用 Telegraf + Loki + Nightingale 實現(xiàn)硬件監(jiān)控( https://flashcat.cloud/blog/host-ilo-monitoring/ )。
既然 snmpwalk 可以拿到具體內(nèi)容了,也知道要告警的關(guān)鍵字是 WARNING、CRITICAL,實際不用這么復(fù)雜也可以告警。下面我們介紹使用 catpaw 的方案。
catpaw 的方案

catpaw 是一個事件監(jiān)控工具,提供了多種插件,從 v0.4.0 版本開始,提供了 sfilter 插件,具體邏輯是:通過執(zhí)行腳本或命令獲取輸出(stdout),然后對輸出的內(nèi)容做字符串匹配,如果匹配到了,就可以產(chǎn)生告警事件。把告警事件推給 FlashDuty 即可。
1. 安裝 catpaw
catpaw 的安裝非常簡單,只需要下載二進制文件即可,下載地址:https://download.flashcat.cloud/catpaw-v0.4.0-linux-amd64.tar.gz,目前提供的是 linux-amd64 的安裝包,如果有其他平臺的安裝包的需求,可以聯(lián)系我。
2. 配置 sfilter 插件
sfilter 插件的配置在?conf.d/p.sfilter/sfilter.toml
,樣例如下:
3. 編寫腳本
system-health.sh 腳本是需要我們準(zhǔn)備的,比如就簡單的探測一下 192.168.3.4 機器的系統(tǒng)健康狀態(tài)(以浪潮機器舉例),腳本內(nèi)容如下:
4. 配置事件推送地址
catpaw 只負責(zé)產(chǎn)生事件,不負責(zé)事件的后續(xù)處理(告警聚合降噪、認領(lǐng)升級、排班、多渠道觸達等),這些功能交由?FlashDuty,在 FlashDuty 的協(xié)作空間中創(chuàng)建一個自定義事件的集成,點擊就可以看到推送地址了:

把截圖中這個 URL 配置到 catpaw 的 config.toml 中。
5. 啟動 catpaw
如果服務(wù)器有硬件故障,就會產(chǎn)生告警了,完活!enjoy…make a better world :)