監控指標數據採集和展示

開源工具
Prometheus(普羅米修斯)和Grafana
1.prometheus簡介
Prometheus 是一個開源的服務監控系統和時間序列數據庫。


Prometheus通過targets的http 入口點抓取和收集指標。它自己也以同樣的方式暴露自己的數據,因此它也能抓取和監控自己的健康。
1)啓動前的常規配置
Scrape_configs:
抓取目標指標的時間間隔:scrape_interval: 5s
Job的名字:- job_name: ‘prometheus’
抓取指標的目標對象配置:
static_configs:
- targets: [‘localhost:9090’]
2)指定配置的prometheus啓動
./prometheus -config.file=prometheus.yml
3)注意事項
Prometheus默認使用3G內存,若機器內存較小,可以調整prometheus使用更少的內存。
4)一個job幾個組的endpoints
scrape_configs:
- job_name: 'example-random'
# Override the global default and scrape targets from this job every 5 seconds.
scrape_interval: 5s

static_configs:
- targets: ['localhost:8080', 'localhost:8081']
labels:
group: 'production'

- targets: ['localhost:8082']
labels:
group: 'canary'

5)預先把表達式記錄成完整的持久化的時間序列,可以加速聚合查詢的效率。

新建prometheus.rules文件,並輸入如下內容:

job_service:rpc_durations_seconds_count:avg_rate5m = avg(rate(rpc_durations_seconds_count[5m])) by (job, service)
然後配置到prometheus.yml文件中,
rule_files:
- 'prometheus.rules'
現在,指標名字job_service:rpc_durations_seconds_count:avg_rate5m就是可查詢和可以抓取的。
6)Prometheus內置的表達式瀏覽器
http://localhost:9090/graph 和../metrics,以及可進入表達式console。
允許鍵入任何的表達式,並查看結果不管是table或隨着時間的graphed。
2.Prometheus查詢語法
參考網址:https://prometheus.io/docs/querying/basics/
1)表達式的四種數據類型
Instant vector:包含單一採樣的時間序列集合,共享相同的時間戳;
Range vector:包含一個區間數據點的時間序列集合;
Scalar:數字型的浮點值;
String:字符串值,當前未使用。
2)Intant vector時間序列選擇器
直接使用指標的name表示選擇所有該name的時間序列。添加一個大括號{},指明label和對應value可以進一步過濾該時間序列。Label和value的匹配可以有四種形式:
=:選擇label的值與value相等的
!=:選擇label的值與value不相等的
=~:匹配正則表達式值的
!~:不匹配正則表達式值的
示例查詢如下:
http_requests_total{job="prometheus",group="canary"}
http_requests_total{environment=~"staging|testing|development",method!="GET"}
很明顯,可以使用多個label進行多條件的過濾。
3)Range vector時間序列選擇器
可以使用的時間區間的單位可以有以下六種:
S秒、m分鐘、h小時、d天、w星期、y年
表示從當前往前推一段時間之內的指標的值的統計量,示例查詢如下:
http_requests_total{job="prometheus"}[5m]
主要是在{}之後緊跟一個[5m],進行時間區間的選擇。當然可以進行時間基準的向前偏移,這裏使用offset,示例查詢如下:
http_requests_total offset 5m
rate(http_requests_total[5m] offset 1w)
4)二元和聚合算子
參考網址:https://prometheus.io/docs/querying/operators/
二元算術算子:+、-、*、/、%、^(power/exponentiation)
二元比較算子:==、!=、>、<、>=、<=
二元集合算子:and(交集)、or(並集)、unless(補集)
算子使用的語法示例如下:
<vector expr> <bin-op> ignoring(<label list>) <vector expr>
<vector expr> <bin-op> on(<label list>) <vector expr>
聚合算子類似於SQL中的select中的函數的功能,能夠聚合單一的instant vector併產生一個新的有聚合值的更少元素的vector,主要包含以下聚合算子:
Sum:每一個維度求和
Min:選擇每一維度的最小值
Max:選擇每一維度的最大值
Avg:每一維度求平均
Stddev:計算每一個維度的總體標準偏差
Stdvar:計算每一維度的總體標準方差
Count:統計vector中元素的個數
Count_values:統計有相同值元素的個數
Bottomk:相同值最小的k個元素
Topk:相同值最大的k個元素
Quantile:計算每一維度的α-quantile
聚合算子的語法示例如下:
<aggr-op>([parameter,] <vector expression>) [without|by (<label list>)] [keep_common]
其示例的代碼如下:
sum(http_requests_total) without (instance)
count_values("version", build_version)
topk(5, http_requests_total)
5)函數
對vector中的所有元素的樣例值進行處理,或者對vector進行一些邏輯判斷並返回符合邏輯的vector或vector的數量。更詳細的內容可以查看參考:
https://prometheus.io/docs/querying/functions/
3.常用組件

1)dashboard看板
每一個看板可以認爲是一個監控的主題,每個看板有row和panel的概念。Row佔一行的空間,每一個row又可以包含最多十二個panel。每一個panel具體顯示監控的時間序列指標,顯示的方式可以是折線圖、餅圖等。對於不同的圖形可設置的屬性不同,大體包括標題、圖注、顯示樣式以及最重要的指標的查詢語句和數據源的設置。

隨後點擊panel的標題,跳出panel的菜單項,點擊編輯進入panel的編輯模式。

2)Templating變量
參考網址:http://docs.grafana.org/reference/templating/
自定義查詢語句中可用的變量,其類型可以是query、interval、custom、constant等。其中較爲常用的query表示的是指標的查詢結果,常用的有label_values(label)、label_values(metric, label)、metric(metric)、query_result(query)。
在panel的query中定義查詢語句時,變量的使用有兩種寫法:$<varname>/[[varname]]。
完成變量的定義之後,會在看板的第一個row之上顯示成dropdown下拉列表的形式,通過選擇不同的值來動態改變變量的值,從而完成panel中顯示指標的差異化。

3)Annotations標註
在某個事件發生時,可以在對應的圖上標註點標記,常用來與alert事件關聯。首先,在某個具體的panel中定義alert事件,注意alert name的定義。然後選擇面板正上方的設置,選擇annotations選項,添加一個annotations,這裏主要注意Query中Search expression的寫法,一種通用的寫法是:
ALERTS{alertname="per_above_test_alert", alertstate="pending|firing"}

其中alertname就是之前定義的alert的name,而之中的alertstate就是在alert的狀態是什麼的時候出發annotation的標記。以及這裏的step表示做標記這個時間隔多長時間出發一次。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章