relabel_configs
根據prometheus 監控k8s配置文件中學習
未修改前默認配置文件:
網頁顯示:
修改配置文件后:
網頁顯示:
服務發現網頁:
總結:
在數據采集之前對任何目標的標簽進行修改,重打標簽的意義就是如果標簽有重復的可以幫你重命名
relabel_config語法
relabel_configs:
[ source_labels: '[' <labelname> [, ...] ']' ] ##源標簽,指定對哪個現有標簽進行操作
[ separator: <string> | default = ; ] ##多個源標簽時連接的分隔符
[ target_label: <labelname> ] ##要將源標簽換成什么名字
[ regex: <regex> | default = (.*) ] ##怎么來匹配源標簽,默認匹配所有
[ modulus: <uint64> ] ##不怎么會用到
[ replacement: <string> | default = $1 ] ##替換正則表達式匹配到的分組,分組引用$1,$2,$3
[ action: <relabel_action> | default = replace ] ##基於正則表達式匹配執行的操作,默認替換
action重新打標簽動作
值 描述
replace 默認,通過正則匹配 source_label 的值,使用 replacement 來引用表達式匹配的分組
keep 刪除 regex 於鏈接不匹配的目標 source_labels
drop 刪除 regex 與連接匹配的目標 source_labels
labeldrop 匹配 Regex 所有標簽名稱
labelkeep 匹配 regex 所有標簽名稱
hashmod 設置 target_label 為 modulus 連接的哈希值 source_lanels
labelmap 匹配 regex 所有標簽名稱,復制匹配標簽的值分組,replacement 分組引用 (${1},${2}) 替代
節點貼標簽
未修改前:
修改后:
配置:
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['192.168.190.139:9090']
- job_name: 'promethues-node'
static_configs:
- targets:
- 192.168.190.139:9100
labels: ##添加的標簽
server: local ##添加的標簽
relabel_configs:
- target_label: __address__
replacement: 127.0.0.1:9100
效果:
標簽重命名
修改前:
修改后配置:
- job_name: 'promethues-node'
static_configs:
- targets:
- 192.168.190.139:9100
labels:
server: local
relabel_configs:
- action: replace ##動作:替換
source_labels: ['job'] ##對源標簽操作,標簽名為‘job’
regex: (.*) ##正則,會匹配到job值
replacement: $1 ##引用正則匹配到的內容
target_label: ttt ##賦予新的標簽,名為ttt
修改后展示:
因為原來的標簽名未刪除,所以還會展示,現在刪除原來的標簽
配置文件:
- job_name: 'promethues-node'
static_configs:
- targets:
- 192.168.190.139:9100
labels:
server: local
relabel_configs:
- action: replace
source_labels: ['job']
regex: (.*)
replacement: $1
target_label: ttt
- action: labeldrop
regex: job
受影響的只是標簽,對采集的主機並沒有產生影響
不想采集目標標簽數據
scrape_configs:
- job_name: 'server21'
static_configs:
- targets: ['localhost:9090']
relabel_configs:
- action: replace
source_labels: ['job']
regex: (.*)
replacement: $1
target_label: local
- action: drop ##刪除標簽為 job 的節點,采集不到數據了
source_labels: ["job"]
基於文件的服務發現
原始配置:
[root@redhat /usr/local/prometheus]# cat prometheus.yml
global:
scrape_interval: 15s
evaluation_interval: 15s
alerting:
alertmanagers:
- static_configs:
- targets:
rule_files:
scrape_configs:
- job_name: 'prometheus'
修改配置文件,通過文件服務發現監控主機
[root@redhat /usr/local/prometheus]# cat prometheus.yml
global:
scrape_interval: 15s
evaluation_interval: 15s
alerting:
alertmanagers:
- static_configs:
- targets:
rule_files:
scrape_configs:
- job_name: 'prometheus'
file_sd_configs:
- files: ['/usr/local/prometheus/files_sd_configs/*.yaml'] ##指定服務發現文件位置
refresh_interval: 5s ##刷新間隔改為5秒
在指定目錄編寫需要監控的文件
[root@redhat /usr/local/prometheus/files_sd_configs]# cat configs.yml
- targets: ['localhost:9090']
labels:
name: ttt123
PromSQL
查詢標簽,以node 開頭的element 都是node_expores 采集的。
node節點5M中cpu的平均使用率
1,
node_cpu_seconds_total{mode="idle"}[5m]
節點5分鍾內空閑的cpu 采集來的數據
2,統計平均值irate 函數
irate(node_cpu_seconds_total{mode="idle"}[5m])*100
5分鍾內所有節點cpu的平均空閑率
3,100 - irate(node_cpu_seconds_total{mode="idle"}[5m])*100
內存使用率
100 - (node_memory_MemFree_bytes+node_memory_Cached_bytes+node_memory_Buffers_bytes) / node_memory_MemTotal_bytes *100
硬盤使用率
查看收集到的信息
node_filesystem_files
100- (node_filesystem_free_bytes{mountpoint="/",fstype=~"ext4|xfs"} / node_filesystem_size_bytes{mountpoint="/",fstype=~"ext4|xfs"} *100)
node_filesystem_size_bytes 查的是 / 總大小,node_filesystem_free_bytes 查的是剩余大小,只匹配 ext4&xfs 類型的
查詢標簽
node_filesystem_size_bytes{mountpoint='/'}
查詢系統服務運行狀態
監控以 systemctl 啟動的服務
在節點配置啟動參數,支持該功能
cat /etc/systemd/system/node-exporter.service
[Unit]
Description=Prometheus Node Exporter
After=network.target
[Service]
ExecStart=/usr/local/node_exporter/node_exporter --collector.systemd --collector.systemd.unit-whitelist=(prometheus|sshd).service
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl restart node_exporter.service
查詢
node_systemd_unit_state
node_systemd_unit_state{name=~"(prometheus|sshd).service"}
state=active 的值為 0,說明正常運行 ,寫告警規則去判斷這個值