機器硬體監控,最簡單的方案,沒有之一

来源:https://www.cnblogs.com/ulricqin/archive/2023/06/14/17480805.html
-Advertisement-
Play Games

之前新東方的老師分享了他們通過 Telegraf、Loki、Nightingale 等工具來監控機器硬體狀態的方案,具備很強的靈活性、平臺性。本文會介紹一個相對輕量的方式,只需要一個二進位+一個腳本即可搞定,給各位朋友提供一種新的選擇 ...


之前新東方的老師分享了他們通過 Telegraf、Loki、Nightingale 等工具來監控機器硬體狀態的方案,具備很強的靈活性、平臺性。本文會介紹一個相對輕量的方式,只需要一個二進位+一個腳本即可搞定,給各位朋友提供一種新的選擇。

新東方的方案

物理機可以通過帶外開啟 SNMP,通過 SNMP 可以獲取各個硬體模塊的健康狀態,Telegraf 提供了很多 input、output 插件,我們可以使用 Telegraf 的 snmp input 插件採集硬體狀態信息,使用 loki output 插件寫入 Loki,然後使用 Nightingale 做告警規則配置( Loki 相容 Prometheus 的 Querying 介面),產出告警事件,之後可以發給釘釘、企微,或者發給 FlashDuty 做告警聚合降噪、排班、認領、升級等後續處理。

20230404143046

實操步驟

1. snmp 插件準備

snmp監控主要通過各種oid節點獲取對應信息,分為get(單值)、walk(多值),telegraf的snmp插件預設是取單值,如果需要多值,可以找對應的table類型節點進行採集。

# 單值節點
[[inputs.snmp.field]]
name="uptime"
oid=".1.3.6.1.2.1.1.3.0"
  
# 多值節點,table類型
[[inputs.snmp.table]]
oid = ".1.3.6.1.2.1.31.1.1"
name = "interface"

2. OID節點查找

不同型號的物理機,oid節點不同,可以通過對應型號的MIB文件進行查找。除了單獨查找每個硬體的狀態oid外,MIB文件中一般還能找到伺服器整體狀態的OID節點,可以直接取這個值,以下例子為浪潮伺服器:

20230404143328

正常取值為"OK"、“Normal”,有報警的話取值為"WARNING"、“CRITICAL”。

採集OID=‘INSPUR-MIB::serverSystemHealthTable’(轉換數字為’.1.3.6.1.4.1.37945.2.1.2.13.1’),可以先用snmpwalk命令看下取值:

#正常節點
snmpwalk -v3  1.1.1.1 INSPUR-MIB::serverSystemHealthTable
INSPUR-MIB::serverCurPowerState."" = STRING: "Power On"
INSPUR-MIB::serverUIDState."" = STRING: "UID Off"
INSPUR-MIB::serverCPUState."" = STRING: "OK"
INSPUR-MIB::serverMemoryState."" = STRING: "OK"
INSPUR-MIB::serverHDDState."" = STRING: "OK"
INSPUR-MIB::serverFANState."" = STRING: "OK"
INSPUR-MIB::serverPSUState."" = STRING: "OK"
INSPUR-MIB::serverRAIDState."" = STRING: "OK"
INSPUR-MIB::serverTempState."" = STRING: "OK"
INSPUR-MIB::serverHealthState."" = STRING: "OK"

#異常節點
snmpwalk -v3  2.2.2.2 INSPUR-MIB::serverSystemHealthTable
INSPUR-MIB::serverCurPowerState."" = STRING: "Power On"
INSPUR-MIB::serverUIDState."" = STRING: "UID Off"
INSPUR-MIB::serverCPUState."" = STRING: "OK"
INSPUR-MIB::serverMemoryState."" = STRING: "WARNING"
INSPUR-MIB::serverHDDState."" = STRING: "OK"
INSPUR-MIB::serverFANState."" = STRING: "OK"
INSPUR-MIB::serverPSUState."" = STRING: "OK"
INSPUR-MIB::serverRAIDState."" = STRING: "OK"
INSPUR-MIB::serverTempState."" = STRING: "OK"
INSPUR-MIB::serverHealthState."" = STRING: "WARNING"
INSPUR-MIB::serverCPUStandardStatus."" = STRING: "Normal"
INSPUR-MIB::serverMemoryStandardStatus."" = STRING: "Warning"
INSPUR-MIB::serverHDDStandardStatus."" = STRING: "Normal"
INSPUR-MIB::serverFANStandardStatus."" = STRING: "Normal"
INSPUR-MIB::serverPSUStandardStatus."" = STRING: "Normal"
INSPUR-MIB::serverRAIDStandardStatus."" = STRING: "Normal"
INSPUR-MIB::serverTempStandardStatus."" = STRING: "Normal"
INSPUR-MIB::serverHealthStandardStatus."" = STRING: "Warning"

通過採集狀態可以看出 2.2.2.2 這個機子memory為報警狀態。具體如何配置 Telegraf,如何配置夜鶯和 Loki 對接,請參看文章:新東方老師教你使用 Telegraf + Loki + Nightingale 實現硬體監控

既然 snmpwalk 可以拿到具體內容了,也知道要告警的關鍵字是 WARNING、CRITICAL,實際不用這麼複雜也可以告警。下麵我們介紹使用 catpaw 的方案。

catpaw 的方案

20230614092422

catpaw 是一個事件監控工具,提供了多種插件,從 v0.4.0 版本開始,提供了 sfilter 插件,具體邏輯是:通過執行腳本或命令獲取輸出(stdout),然後對輸出的內容做字元串匹配,如果匹配到了,就可以產生告警事件。把告警事件推給 FlashDuty 即可。

1. 安裝 catpaw

catpaw 的安裝非常簡單,只需要下載二進位文件即可,下載地址:https://download.flashcat.cloud/catpaw-v0.4.0-linux-amd64.tar.gz,目前提供的是 linux-amd64 的安裝包,如果有其他平臺的安裝包的需求,可以聯繫我。

2. 配置 sfilter 插件

sfilter 插件的配置在 conf.d/p.sfilter/sfilter.toml,樣例如下:

[[instances]]
command = "/path/to/sfilter-scripts/system-health.sh"
# # script timeout
timeout = "10s"
# check rule name
check = "Check system health state"

# support glob
filter_include = ["*WARNING*", "*CRITICAL*"]
filter_exclude = []

# # gather interval
interval = "30s"

[instances.alerting]
## Enable alerting or not
enabled = true
## Same functionality as Prometheus keyword 'for'
for_duration = 0
## Minimum interval duration between notifications
repeat_interval = "5m"
## Maximum number of notifications
repeat_number = 3
## Whether notify recovery event
recovery_notification = true
## Choice: Critical, Warning, Info
default_severity = "Warning"

3. 編寫腳本

system-health.sh 腳本是需要我們準備的,比如就簡單的探測一下 192.168.3.4 機器的系統健康狀態(以浪潮機器舉例),腳本內容如下:

#!/bin/sh
snmpwalk -v2c -c public 192.168.3.4 INSPUR-MIB::serverSystemHealthTable

4. 配置事件推送地址

catpaw 只負責產生事件,不負責事件的後續處理(告警聚合降噪、認領升級、排班、多渠道觸達等),這些功能交由 FlashDuty,在 FlashDuty 的協作空間中創建一個自定義事件的集成,點擊就可以看到推送地址了:

20230614090405

把截圖中這個 URL 配置到 catpaw 的 config.toml 中。

5. 啟動 catpaw

nohup ./catpaw --configs conf.d &> catpaw.log &

如果伺服器有硬體故障,就會產生告警了,完活!enjoy…make a better world :)


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ## 教程簡介 AWS Lambda 是AWS在2014年推出的「無伺服器」(Serverless)計算服務,用戶無需管理伺服器,可以更專註自己業務。由於上手簡單,而且真正利用了雲的優勢,Lambda快速成為了一項明星服務。 Lambda 在可用性高的計算基礎設施上運行您的代碼,執行計算資源的所有管 ...
  • 經過前幾篇文章的講解,初步瞭解ASP.NET Core MVC項目創建,啟動運行,以及命名約定,創建控制器,視圖,模型,接收參數,傳遞數據ViewData,ViewBag,路由,頁面佈局,wwwroot和客戶端庫,Razor語法,EnityFrameworkCore與資料庫,HttpContext,... ...
  • ## 一:背景 ### 1. 講故事 前段時間訓練營里有朋友問 `記憶體映射文件` 是怎麼玩的?說實話這東西理論我相信很多朋友都知道,就是將文件映射到進程的虛擬地址,說起來很容易,那如何讓大家眼見為實呢?可能會難倒很多人,所以這篇我以自己的認知嘗試讓大家眼見為實。 ## 二:如何眼見為實 ### 1. ...
  • 本篇為學習李應保老師所著的《WPF專業編程指南》並搭配`WPF`開發聖經《WPF編程寶典第4版》以及痕跡大佬《WPF入門基礎教程系列》文章所作筆記,對應《WPF專業編程指南》第 9-10 章之間內容,主要概述`WPF`中關於樣式及模板部分的梳理及示例應用,希望可以幫到大家
  • 前一段時間有網友問Excel轉pdf怎麼轉pdf,小編幫他實現了一個,方法是使用EPPlus和PdfSharp組件實現,由於依賴OfficeOpenXml他也沒有用上,後來小編又實現了二種不依賴OfficeOpenXml的方法。本文將介紹這三種方法實現Excel轉pdf。 **一、EPPlus和Pd ...
  • 1. 什麼是泛型 編寫一個方法,實現兩數相加並返回結果。 作用 泛型增強了代碼的可讀性 泛型有助於實現代碼的重用、保護類型的安全以及提高性能。 我們可以創建泛型集合類。 泛型實現了類型和方法的參數化 我們還可以對泛型類進行約束以訪問特定數據類型的方法。 關於泛型數據類型中使用的類型的信息可在運行時通 ...
  • 大家好,我是 god23bin。歡迎來到《一分鐘學一個 Linux 命令》系列,每天只需一分鐘,記住一個 Linux 命令不成問題。今天需要你花兩分鐘時間來學習下,因為今天要介紹的是兩個常用的搜索命令:find 和 grep 命令。 ...
  • # ssh免密登錄、伺服器安全 ## ssh免密登錄 > 1. 客戶端本地生成一對公鑰 > > ``` > ssh-keygen -t rsa > ``` > > 2. 客戶端發送自己的公鑰,發給伺服器,存在伺服器的authorized_keys文件中 > > ``` > ssh-copy-id r ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...