天天看點

【prometheus系列】7、pushgateway自定義腳本采集監控資料pushgateway

用戶端或者服務端安裝pushgateway插件,被監控端使用運維自行開發的各種腳本把監控資料組織成k/v的形式 metrics形式發送給pushgateway,之後prometheus來pushgateway端拉取相關采集名額資料。

與exporter相反,pushgateway相當于prometheus與被監控端之間的代理,pushgateway隻負責被動接收用戶端運作腳本發送過來的metrics,不負責對用戶端進行探測,主動采集。

exporter雖然采集類型很豐富,但是我們依然需要很多自制的監控資料

exporter由于資料類型采集量大,其實很多資料我們監控中用不到,用pushgateway定制一項資料就節省一份采集資源

exporter雖然資料很豐富,但是依然無法提供一些我們需要的采集形式,使用pushgateway就可以使采集的資料形式任意靈活

一個新的自定義pushgateway腳本比開發一個全新的exporter簡單快速

将多個節點資料彙總到 pushgateway, 如果 pushgateway 挂了,受影響比多個 target 大。

prometheus 拉取狀态 up 隻針對 pushgateway, 無法做到對每個節點有效。

pushgateway 可以持久化推送給它的所有監控資料,是以,即使你的監控已經下線,prometheus 還會拉取到舊的監控資料,需要手動清理 pushgateway 不要的資料

systemd啟動方式

pushgateway預設監聽本地9091端口,可通過web通路,在web上可以查詢到用戶端推送到pushgateway上的名額資料

配置prometheus.yml,scrape.configs段添加一下内容

job_name: 'pushgateway'

static_configs:

targets: ['172.16.0.9:9091']

pushgateway本身沒有任何抓取監控資料的功能,它隻能被動地等待資料被推送過來,故需要使用者自行編寫資料采集腳本。

例:采集tcp waiting_connection瞬時數量

1)<code>netstat -an | grep -i wait | wc -l</code>該自定義監控的取值方法

2)實際上就是将k/v鍵值對通過post方式推送給pushgateway,格式如下:

<code>http://localhost:9091/metrics</code>pushgateway url

<code>job/pushgateway</code>資料推送過去的第一個label,即<code>exported_job="pushgateway"</code>(類似prometheus.yml中定義的<code>job</code>)

<code>instance/$instance_name</code>資料推送過去的第一個label,即<code>exported_instance="deepin-pc"</code>

2.定時執行腳本

prometheus預設每15秒從pushgateway擷取一次資料,而cron定時任務最小精度是每分鐘執行一次,若想沒15秒執行一次,則:

方法1:<code>sleep</code>:定義多條定時任務

方法2:<code>for</code>循環

此時cron定時任務隻需要定義一條:

注:若解釋器使用<code>#!/bin/bash</code>,則調試時使用全路徑或相對路徑或者<code>bash /app/scripts/pushgateway/tcp_waiting_connection.sh</code>執行腳本;若解釋器使用<code>#!/bin/sh</code>,則調試時使用<code>sh /app/scripts/pushgateway/tcp_waiting_connection.sh</code>執行腳本,否則出現錯誤:<code>syntax error: bad for loop variable</code>

3.promethues檢視監控值<code>count_netstat_wait_connetions</code>

4.tcp等待連接配接數:<code>count_netstat_wait_connetions</code>(通過自定義腳本實作,通過node_exporter也可實作)

處于各種wait狀态的tcp連接配接(close_wait,time_wait等)也是日常排查負載(網絡負載,伺服器負載,資料庫負載等)的一個重要名額:一般wait類型的tcp過大時,一定說明系統網絡負載(流量負載)出現了問題;原因多樣(網絡問題,通路請求量,ddos流量,資料庫,cpu等都有可能)

主要是伺服器内網流量、ping延遲、丢包率

1.自定義采集腳本

<code>lostpk</code>丢包率

<code>rrt</code>延遲

預設的<code>ping www.baidu.com</code>隻能檢測網絡連通性,通過指定一些參數多發送一些大一點資料包模拟發送請求,便于鑒别目前網絡狀況:

<code>-s</code>一個ping包大小

<code>-w</code>延遲timeout

<code>-c</code>發送多少個資料包

此時監控的為内網延時,内網分為實體内網和邏輯内網(雲計算中,跨地域建立的邏輯内網,實際上是通過公網傳輸;使用者無法知曉真實底層網絡狀态,有可能一台交換機連着數量龐大的伺服器,廣播風暴等影響網絡)。内網丢包率發生機率很低,如果内網丢包嚴重,則網絡也就無法使用了。

對于網絡的監控,可以使用smokeping等更專業的網絡監控工具來采集資料。smokeping自身具有資料可視化功能,但也可将smokeping采集的資料通過腳本輸入至pushgateway中,統一做可視化和報警。

繼續閱讀