您好,登錄后才能下訂單哦!
promethues是一套開源的系統監控報警框架。
? Prometheus 所有采集的監控數據均以指標(metric)的形式保存在內置的時間序列數據庫當中(TSDB):屬于同一指標名稱,同一標簽集合的、有時間戳標記的數據流。除了存儲的時間序列,Prometheus 還可以根據查詢請求產生臨時的、衍生的時間序列作為返回結果。
? 特點:
prometheus組成和架構:
基本工作原理
基本概念:
數據模型:prometheus中存儲的數據為時間序列,是由Metric的名字和一系列的標簽(鍵值對)唯一標識的,不同的標簽代表不同的時間序列。
? 樣本:實際時間序列,每個序列包括一個float64的值和一個毫秒級的時間戳。(指標+時間戳+樣本值)
? metric名字: 具有語義,表示功能:例如:http_requeststotal, 表示 http 請求的總數。其中,metric 名字由 ASCII 字符,數字,下劃線,以及冒號組成,且必須滿足正則表達式 [a-zA-Z:][a-zA-Z0-9_:]*。
? 標簽:使一個時間序列有不同未讀的識別。例如 http_requeststotal{method="Get"} 表示所有 http 請求中的 Get 請求。當 method="post" 時,則為新的一個 metric。標簽中的鍵由 ASCII 字符,數字,以及下劃線組成,且必須滿足正則表達式 [a-zA-Z:][a-zA-Z0-9_:]*。
? 格式:<metric name>{<label name>=<label value>, …},例如:http_requests_total{method="POST",endpoint="/api/tracks"}。
Metric類型
counter: 累加性metirc。
Gauge:可增減性metric
Histogram:樹狀圖
summary: 匯總
數據類型
瞬時向量(instant vector):一組時間序列,每個時間序列包含單個樣本。
區間向量(range vector):一組時間序列,每個時間序列包含一段時間范圍內的樣本數據。
標量(scalar): 一個浮點型數據值。
字符串(string): 一個簡單的字符串值。
時間序列過濾器
瞬時向量過濾器:
eg: http_requests_total ,通過{}里附件一組標簽過濾時間序列。
標簽匹配云算符:
= : 選擇與提供的字符串完全相同的標簽。
!= : 選擇與提供的字符串不相同的標簽。
=~ : 選擇正則表達式與提供的字符串(或子字符串)相匹配的標簽。
!~ : 選擇正則表達式與提供的字符串(或子字符串)不匹配的標簽。
區間向量過濾器:
eg:http_requests_total{job="prometheus"}[5m],通過[]指定區間提取數值。
時間單位:
s - 秒
m - 分鐘
h - 小時
d - 天
w - 周
y - 年
時間位移操作:
在瞬時向量表達式或者區間向量表達式中,都是以當前時間為基準.
eg:http_requests_total offset 5m "offset 關鍵字需要緊跟在選擇器({})后面"
操作符
算數二次元運算符
eg:加減乘除
布爾運算符:
eg:= ,!= ,< , > ,<= ,>=
集合運算符:
and,or,unless
匹配模式
聚合操作
語法:<aggr-op>([parameter,] <vector expression>) [without|by (<label list>)] 只有count_values, quantile, topk, bottomk支持參數(parameter)
sum (求和);min (最小值);max (最大值);avg (平均值);stddev (標準差);stdvar (標準差異);count (計數);count_values (對 value 進行計數);bottomk (樣本值最小的 k 個元素);topk (樣本值最大的k個元素);quantile (分布統計)
eg:<aggr-op>([parameter,] <vector expression>) [without|by (<label list>)]
without 用于從計算結果中移除列舉的標簽,而保留其它標簽。by 則正好相反,結果向量中只保留列出的標簽,其余標簽則移除。通過 without 和 by 可以按照樣本的問題對數據進行聚合。
任務和實例
? 采集不同的監控指標,我們需要運行相應的監控采集程序,并且讓prometheus server知道這些export實例的訪問地址。每一個監控樣本的http服務稱之為一個實例。node exporter可以稱之為一個實例。
? 一組用于相同采集目的的實例,或者一個采集進程的多個副本則通過一個一個任務管理。
* job: node
* instance 2: 1.2.3.4:9100
* instance 4: 5.6.7.8:9100
HTTP API中響應格式
瞬時數據查詢:
url請求參數:
eg:'http://localhost:9090/api/v1/query?query=up&time=2015-07-01T20:10:51.781Z'
query=:PromQL表達式。
time=<rfc3339 | unix_timestamp>:用于指定用于計算PromQL的時間戳。可選參數,默認情況下使用當前系統時間。
timeout=:超時設置。可選參數,默認情況下使用-query,timeout的全局設置
區間數據查詢:
url請求參數:
eg:'http://localhost:9090/api/v1/query_range?query=up&start=2015-07-01T20:10:30.781Z&end=2015-07-01T20:11:00.781Z&step=15s'
query=: PromQL表達式。
start=<rfc3339 | unix_timestamp>: 起始時間。
end=<rfc3339 | unix_timestamp>: 結束時間。
step=: 查詢步長。
timeout=: 超時設置。可選參數,默認情況下使用-query,timeout的全局設置。
Prometheus告警
告警規則定義(Alertrule difinition)
告警名稱: 自定義名稱.
告警規則:基于PromQL表達式定義告警觸發條件.定義在配置文件中
groups:
- name: example
rules:
- alert: HighErrorRate
expr: job:request_latency_seconds:mean5m{job="myjob"} > 0.5
for: 10m
labels:
severity: page
annotations:
summary: High request latency
description: description info
#group:定義一組相關規則
#alert:告警規則名稱
#expr:基于PromQL的觸發條件
#for 等待評估時間
#label 自定義標簽
#annotation: 指定一組附加信息Alertmanger特性
Altermanager特性
分組:可以將詳細的告警機制合并成一個通知
抑制:當發出一個警告時,可以停止重復發送此告警的引發的其他告警機制
靜默:將告警進行靜默處理
安裝啟動Altermanger
wget https://github.com/prometheus/alertmanager/releases/download/v0.15.3/alertmanager-0.15.3.linux-amd64.tar.gz
cd alertmanager-0.15.3.linux-amd64/
./alertmanager
altermanager.yml配置文件介紹
global:
resolve_timeout: 5m
route:
group_by: ['alertname']
group_wait: 10s
group_interval: 10s
repeat_interval: 1h
receiver: 'web.hook'
receivers:
- name: 'web.hook'
webhook_configs:
- url: 'http://127.0.0.1:5001/'
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']
路由(route)以及接收器(receivers)。所有的告警信息都會從配置中的頂級路由(route)進入路由樹,根據路由規則將告警信息發送給相應的接收器。
全局配置(global):用于定義一些全局的公共參數,如全局的SMTP配置,Slack配置等內容;
模板(templates):用于定義告警通知時的模板,如HTML模板,郵件模板等;
告警路由(route):根據標簽匹配,確定當前告警應該如何處理;
接收人(receivers):接收人是一個抽象的概念,它可以是一個郵箱也可以是微信,Slack或者Webhook等,接收人一般配合告警路由使用;
抑制規則(inhibit_rules):合理設置抑制規則可以減少垃圾告警的產生
重啟prometheus
killall -9 prometheus
nohup prometheus &
安裝prometheus server
wget https://github.com/prometheus/prometheus/releases/download/v2.6.0/prometheus-2.6.0.linux-amd64.tar.gz
tar -zxvf prometheus-2.6.0.linux-amd64.tar.gz
cd prometheus-2.6.0.linux-amd64
./prometheus &
ln -s /root/prometheus/prometheus-2.6.0.linux-amd64/prometheus /usr/local/bin/prometheus
設置開機啟動
cat >> /usr/lib/systemd/system/multi-user.target.wants/prometheus.service <<EOF
[Unit]
Description=prometheus
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/bin/prometheus --config.file="/root/prometheus-2.6.0.linux-amd64/prometheus.yml" --storage.tsdb.path=/root/prometheus-2.6.0.linux-amd64/data
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF
systemctl enable prometheus
systemctl start prometheus
安裝Node Exporter 采集主機運行數據(采集主機運行指標比如cpu,內存和磁盤等信息)
wget https://github.com/prometheus/node_exporter/releases/download/v0.17.0/node_exporter-0.17.0.linux-amd64.tar.gz
tar -zxvf node_exporter-0.17.0.linux-amd64.tar.gz
cd node_exporter-0.17.0.linux-amd64/
mv node_exporter /usr/local/bin/
nohup node_exporter &
curl -l -H "Content-type: application/json" -X POST -d '{"msgtype": "markdown","markdown": {"title":"Prometheus告警信息","text": "#### 監控指標\n> 監控描述信息\n\n> ###### 告警時間 \n"},"at": {"isAtAll": false}}' https://oapi.dingtalk.com/robot/send?access_token=51345145d106753486bd71614bf881283f91e2124535276b257f99327e41dc87
{"errcode":0,"errmsg":"ok"}
Prometheus中添加收集的監控數據,修改prometheus.yml文件,并在scrape_configs添加一下內容。
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
# 采集node exporter監控數據
- job_name: 'node'
static_configs:
- targets: ['localhost:9100']
使用Grafana創建可視化Dashboard
docker run -d -p 3000:3000 grafana/grafana
#訪問http://localhost:3000 默認用戶名admin 密碼admin
先記錄,后補充。
參考文章如下:
prometheus非官方手冊
prometheus-book
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。