親愛的讀者們👋
??歡迎加入【30天精通Prometheus】專欄!📚 在這里,我們將探索Prometheus的強大功能,并將其應用于實際監控中。這個專欄都將為你提供寶貴的實戰經驗。🚀
??Prometheus是云原生和DevOps的核心監控工具,我們將從基礎概念開始,逐步涵蓋配置、查詢、告警和可視化。💪
??在接下來的30天里,我們將解鎖Prometheus的實戰技巧,通過案例和分享,助你深入理解其工作原理。📆
??目標:30天后,你將熟練掌握Prometheus,為未來的項目挑戰做好準備!💯
??這是一段精彩旅程,期待你的加入!🎉
文章目錄
- 一、snmp_exporter概述📘
- 二、安裝snmp_exporter💾
- 2.1 訪問snmp_exporter官方網站 🌐
- 2.2 選擇適合的版本🔍
- 2.3 下載snmp_exporter??
- 2.4 解壓安裝包📂
- 2.5 運行snmp_exporter🚀
- 三、snmp_exporter指標和配置詳解📖
- 3.1 snmp.yml
- 3.2 snmp_exporter.service
- 四、實戰演練:生產環境搭建指南🔨
- 4.1 創建普通用戶管理snmp_exporter👤
- 4.2 解壓snmp_exporter.tar.gz📦
- 4.3 將snmp_exporter集成到Prometheus配置中??
- 4.4 更改snmp_exporter軟件包名稱??
- 4.5 創建snmp.yml文件
- 4.6 編輯snmp_exporter.service文件📝
- 4.7 啟動snmp_exporter.service🔌
- 4.8 查看服務是否正常啟動🔍
- 相關資料下載地址📚
一、snmp_exporter概述📘
定義
??snmp_exporter是一個開源軟件,用于收集支持SNMP(Simple Network Management Protocol,簡單網絡管理協議)的設備指標。它充當Prometheus監控系統與SNMP設備之間的橋梁,定期從設備獲取數據并將其轉換為Prometheus可讀的指標數據。
功能
??數據采集:snmp_exporter能夠定期向SNMP設備(如路由器、交換機、防火墻等)發送SNMP請求,獲取特定的OID(Object Identifier)值。
??數據轉換:將采集到的SNMP數據轉換為Prometheus可以理解和處理的時間序列數據。
??指標暴露:通過HTTP或HTTPS端點暴露轉換后的指標數據,供Prometheus服務器獲取。
??配置靈活性:snmp_exporter支持通過YAML配置文件自定義要查詢的MIB對象和OIDs,甚至設置定時任務,實現定制化的數據采集。
??SNMP版本支持:支持SNMP v1、v2c和v3三種版本,以適應不同安全需求和環境。
應用場景
??網絡設備監控:用于監控路由器、交換機、防火墻等網絡設備的狀態和性能指標,如接口流量、CPU利用率、內存使用情況等。這有助于管理員及時了解設備運行狀態,預防潛在問題。
??服務器硬件監控:跟蹤服務器硬件的健康狀況,包括硬盤空間、電源狀態等。通過監控這些關鍵指標,可以確保服務器穩定運行并及時發現潛在故障。
??應用性能監控:實時查看應用的I/O性能,如數據庫、存儲系統的性能指標。這有助于評估和優化應用的運行效率。
??自動觸發警報:當特定設備或服務出現異常時,snmp_exporter可以配合Prometheus的警報機制及時通知運維團隊,以便快速響應和解決問題。
二、安裝snmp_exporter💾
2.1 訪問snmp_exporter官方網站 🌐
注意事項和常見問題
??1.環境配置:確保服務器滿足snmp_exporter的運行要求,包括操作系統兼容性和硬件資源。
??2.依賴安裝:安裝snmp_exporter之前,需要安裝相關的依賴包,如net-snmp和net-snmp-utils等,以確保SNMP功能的正常使用。根據操作系統的不同,可能需要使用特定的包管理器(如yum、apt等)來安裝這些依賴。
??3.配置文件:在安裝過程中,需要正確配置snmp_exporter的YAML配置文件,以確保能夠正確地連接到SNMP設備并收集所需的指標。配置文件中需要指定要監控的設備、SNMP版本、認證信息等。
2.2 選擇適合的版本🔍
- 打開瀏覽器,訪問snmp_exporter的官方下載頁面,通常位于Github官方網站的snmp_exporter下:https://github.com/prometheus/snmp_exporter/releases
2.3 下載snmp_exporter??
- 在下載頁面,你將看到不同操作系統的snmp_exporter二進制包。根據你的操作系統選擇適合的版本。例如,如果你使用的是Linux 64位系統,就選擇snmp_exporter-0.25.0.linux-arm64.tar.gz(其中x.x.x是版本號)。
2.4 解壓安裝包📂
- 將下載的snmp_exporter壓縮包解壓到你想要安裝的目錄。你可以使用命令行工具(如tar)來完成這個步驟。解壓后,你將看到一個名為snmp_exporter-x.x.x.linux-amd64的目錄,其中包含snmp_exporter的二進制文件和其他相關文件。
tar -xzf snmp_exporter-0.25.0.linux-amd64.tar.gz
2.5 運行snmp_exporter🚀
- 進入解壓后的目錄,并運行snmp_exporter服務器。在Linux下,你可以使用如下命令。如果一切正常,你應該能在終端看到snmp_exporter的啟動日志。
cd snmp_exporter-x.x.x.linux-amd64./snmp_exporter
三、snmp_exporter指標和配置詳解📖
- 黑色:作為默認文本顏色。
- 綠色:表示常規配置項
- 橙色:表示具有互斥參數的配置項 / 建議開啟(根據自己的場景確定需求)
- 藍色:不重要的配置項 / 建議不開啟
- 紅色:表示關鍵信息和警告 / 最好開啟
注意:
- 1.相關參數配置建議僅供參考,具體要以自己生產的實際需要自行配置。
- 2.以下配置參數介紹是基于snmp_exporter-0.25.0.linux-amd64版本說明的,其它版本會有不同。
3.1 snmp.yml
auths:public_v1:community: publicsecurity_level: noAuthNoPrivauth_protocol: MD5priv_protocol: DESversion: 1public_v2:community: publicsecurity_level: noAuthNoPrivauth_protocol: MD5priv_protocol: DESversion: 2
modules:apcups:walk:- 1.3.6.1.4.1.318.1.1.1.12- 1.3.6.1.4.1.318.1.1.1.2- 1.3.6.1.4.1.318.1.1.1.3- 1.3.6.1.4.1.318.1.1.1.4- 1.3.6.1.4.1.318.1.1.1.7.2- 1.3.6.1.4.1.318.1.1.10.2.3.2- 1.3.6.1.4.1.318.1.1.26.10.2.2- 1.3.6.1.4.1.318.1.1.26.4.3- 1.3.6.1.4.1.318.1.1.26.6.3- 1.3.6.1.4.1.318.1.1.26.8.3get:- 1.3.6.1.4.1.318.1.1.1.8.1.0metrics:- name: upsOutletGroupStatusTableSizeoid: 1.3.6.1.4.1.318.1.1.1.12.1.1type: gaugehelp: The number of outlet groups for the UPS. - 1.3.6.1.4.1.318.1.1.1.12.1.1- name: upsOutletGroupStatusIndexoid: 1.3.6.1.4.1.318.1.1.1.12.1.2.1.1type: gaugehelp: The index to the outlet group entry. - 1.3.6.1.4.1.318.1.1.1.12.1.2.1.1indexes:- labelname: upsOutletGroupStatusIndextype: gaugelookups:- labels:- upsOutletGroupStatusIndexlabelname: upsOutletGroupStatusNameoid: 1.3.6.1.4.1.318.1.1.1.12.1.2.1.2type: DisplayString- labels: []labelname: upsOutletGroupStatusIndex......
auths
- public_v1 和 public_v2
??自定義的認證名稱,可以根據需要進行命名 - community: public
??SNMP 團體字符串,相當于密碼,用于 SNMP v1 和 v2c 的身份驗證 - security_level: noAuthNoPriv
??安全級別,noAuthNoPriv 表示不進行身份驗證和加密 - auth_protocol: MD5
??身份驗證協議,雖然這里指定了 MD5,但在 noAuthNoPriv 安全級別下它實際上不會被使用 - priv_protocol: DES
??加密協議,同樣地,在 noAuthNoPriv 安全級別下,DES 也不會被使用 - version: 1
??SNMP 版本,可以是 1、2 或 3
modules
- apcups
??一個自定義的模塊名稱,代表 APC UPS 設備 - walk
??一個 OID 列表,snmp_exporter 會遍歷這些 OID 并收集它們的信息。這些 OID 通常對應于 SNMP MIB 中的表或組 - get
??一個 OID 列表,snmp_exporter 會直接獲取這些 OID 的值,而不是遍歷。這些 OID 通常對應于單個值,而不是表 - metrics
??定義如何從收集的 SNMP 數據中生成 Prometheus 指標- name: upsOutletGroupStatusOutletType
??Prometheus 指標的名稱 - oid: 1.3.6.1.4.1.318.1.1.1.12.1.2.1.5
??對應的 SNMP OID - type: gauge
??指標類型,如 gauge(表示一個可以任意變化的數值)、counter(表示一個只會增加的數值)等 - help
??指標的描述信息 - indexes
??定義指標的索引,通常用于處理 SNMP 表。每個索引包含一個 labelname(標簽名稱)和一個類型 - lookups
??用于從其他 OID 查找額外的標簽值。每個查找包含一個或多個 labels(用于查找的 OID),一個 labelname(生成的標簽名稱),一個 oid(查找的 OID),和一個類型(如 DisplayString) - enum_values
??- 1: upsSwitchedOutletGroup
??用于將數字值映射到更具可讀性的字符串。在這個例子中,數字 1 被映射到字符串 upsSwitchedOutletGroup - 2: upsMainOutletGroup
??數字 2 被映射到 upsMainOutletGroup。
- 1: upsSwitchedOutletGroup
- name: upsOutletGroupStatusOutletType
3.2 snmp_exporter.service
- - -[no-]snmp.wrap-large-counters
??控制是否將大計數器(如接口流量計數器)的值進行“包裝”處理,以防止計數器溢出。當啟用時,如果計數器的值達到其數據類型的最大值并回繞到零,snmp_exporter 會嘗試正確處理這種情況,以便在 Prometheus 中得到連續增長的計數器值。加上 no- 前綴會禁用這個功能 - - -snmp.source-address=“”
??設置 SNMP 請求的源 IP 地址。在某些網絡環境中很有用,特別是當 SNMP 設備需要基于源地址進行訪問控制時。留空則表示使用默認的網絡接口地址 - - -config.file=snmp.yml
??指定包含 SNMP 設備和模塊配置的文件路徑。這個文件定義了要監控的設備列表、使用的 SNMP 模塊以及其他相關配置 - - -[no-]dry-run
??啟用這個選項后,snmp_exporter 會加載配置并驗證其有效性,但不會實際執行任何 SNMP 請求或暴露指標。主要用于測試配置文件的正確性。加上 no- 前綴會禁用這個功能 - - -snmp.module-concurrency=1
??設置同時執行的 SNMP 請求的并發數。這個值可以根據你的系統和網絡條件進行調整,以提高數據采集的效率。但是過高的并發數可能會導致資源消耗過多或網絡擁塞 - - -web.telemetry-path=“/metrics”
??指定暴露 Prometheus 指標的 HTTP 路徑。默認情況下,這個路徑是 /metrics - - -[no-]web.systemd-socket
??當這個選項啟用時,snmp_exporter 會使用 systemd 提供的 socket 激活功能來監聽網絡請求。通常用于與 systemd 的服務管理集成。加上 no- 前綴會禁用這個功能,使得 snmp_exporter 直接監聽指定的網絡地址和端口。 - - -web.listen-address=:9116
??設置 snmp_exporter 監聽的 IP 地址和端口。:9116 表示監聽所有可用的網絡接口上的 9116 端口。可以根據需要更改這個地址和端口 - - -web.config.file=“”
??用于指定 web 服務器的配置文件,在 snmp_exporter 的上下文中不常用。留空表示不使用額外的 web 配置。
四、實戰演練:生產環境搭建指南🔨
4.1 創建普通用戶管理snmp_exporter👤
useradd deploy
4.2 解壓snmp_exporter.tar.gz📦
注意:
??我的是x86,所以使用snmp_exporter-0.25.0.linux-amd64.tar.gz,您可以使用uname -a命令查看系統架構
tar xvf snmp_exporter-0.25.0.linux-amd64.tar.gz -C /home/deploy/
4.3 將snmp_exporter集成到Prometheus配置中??
??將snmp_exporter集成到Prometheus配置中,確保數據能夠正常采集。編輯Prometheus的配置文件(通常是prometheus.yml),在scrape_configs部分添加snmp_exporter的配置。告訴Prometheus將采集snmp_exporter:9116 的數據。
- job_name: 'snmp_exporter'static_configs:- targets:- targets: ["localhost:9116 "]labels:exporter: snmp_exporter
4.4 更改snmp_exporter軟件包名稱??
mv snmp_exporter-0.25.0.linux-amd64 /home/deploy/snmp_exporter
4.5 創建snmp.yml文件
??這個文件太大了,可自行從百度網盤下載snmp.yml
4.6 編輯snmp_exporter.service文件📝
cat > /etc/systemd/system/snmp_exporter.service <<EOF
[Unit]
Description=Snmp Exporter
After=network.target[Service]
Type=simple
User=deploy
Group=deploy
ExecStart=/home/deploy/snmp_exporter/snmp_exporter \
--config.file=/home/deploy/snmp_exporter/snmp.yml \
--web.listen-address=:9116
ExecReload=/bin/kill -HUP
Restart=on-failure[Install]
WantedBy=multi-user.target
EOF
4.7 啟動snmp_exporter.service🔌
sudo systemctl daemon-reloadsudo systemctl enable --now snmp_exporter.service
4.8 查看服務是否正常啟動🔍
# 查看service服務是否啟動
sudo systemctl status snmp_exporter.service# 查看端口是否存在
sudo ss -ntulp | grep 9116
相關資料下載地址📚
- 官方文檔:https://prometheus.io/docs/introduction/overview/
- 下載地址:https://github.com/prometheus/prometheus/releases/tag/v2.52.0
- 文檔地址:https://prometheus.io/docs/prometheus/latest/installation/
- 離線包下載鏈接:https://pan.baidu.com/s/1ANF_AlFnM5_FMIbKBuzBmg 提取碼:yqpt