--時間:2020年9月15日
--作者:飛翔的小胖豬
概述
前言
在使用prometheus對linux主機進行監控,除了通過granfana使用圖形界面查看數據結合自己的運維經驗判斷各個指標數值從而實現對現網設備的掌握。但是通過圖形界面的方式查看數據往往是一項比較繁雜的工作,大多數的情況是通過選擇性的找出特定的關鍵指標配置好對應的altermanager告警通過webbook或其他方式直接推送出來實時的提示相關運維人員。本文只對linux操作的相關指標獲取及altermanger配置進行說明不對win操作系統進行講解。從指標選取到具體配置會逐一說明,如有疑問可以私信本人,期待共同進步。
該文章以后我會持續更新
指標
對於Linux操作系統我們主要關注其中幾個常用的指標,也是我日常工作中用到比較多的指標。按照大類可划分為七大類:內存、CPU、IO、網絡、存儲、資源、系統。
由於我對prometheus還不是太熟,以下列出來的參數只是平時工作常使用參數。還不能在prometheus中對以下參數進行提取。該文章以后我會持續更新。
Prometheus指標
由於本人對prometheus理解有限,暫只監控告警如下內容:
主機up/down狀態:up{instance=~"10|80|192.*"} == 0
CPU使用率:100 - ((avg by (instance,job,env)(irate(node_cpu_seconds_total{mode="idle"}[30s]))) *100) > 90
內存使用率:((node_memory_MemTotal_bytes -(node_memory_MemFree_bytes+node_memory_Buffers_bytes+node_memory_Cached_bytes) )/node_memory_MemTotal_bytes ) * 100 > 90
磁盤使用率:100 - (node_filesystem_free_bytes{fstype=~"ext3|ext4|xfs"} / node_filesystem_size_bytes{fstype=~"ext3|ext4|xfs"} * 100) > 95
配置
配置prometheus告警需要配置prometheus.yml、自定義的rule.yml、alertmanager.yml三個配置文件。
配置順序步驟:
1.配置prometheus.yml文件。
2.根據在prometheus.yml中定義的rule_files:選項配置告警規則文件。
3.配置altermanger部件的alertmanger.yml。
4.重啟prometheus和altermanger軟件。
prometheus配置
讀者請根據自己實際情況復制修改配置文件,主要的點在alerting:和rule_files:兩個選項。
prometheus.yml文件簡述:從192.168.111.83中consul提取node_exporter數據,設置alert規則文件在rules/node_alerts.yml中,並設置推送告警信息至192.168.111.83的alertmanger軟件。
# cat prometheus.yml
# my global config global: scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute. evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute. # scrape_timeout is set to the global default (10s). # Alertmanager configuration alerting: alertmanagers: - static_configs: - targets: # - alertmanager:9093 - 192.168.111.83:9093 #設置告警信息推送目的地 #remote_write: #- url: "http://192.168.111.96:8086/api/v1/prom/write?db=prometheus_db&u=prometheus_user&p=12345678" #remote_read: #- url: "http://192.168.111.96:8086/api/v1/prom/read?db=prometheus_db&u=prometheus_user&p=12345678" # Load rules once and periodically evaluate them according to the global 'evaluation_interval'. rule_files: #alert告警規則文件定義選項(很重要,本實驗的重點) # - "first_rules.yml" # - "second_rules.yml" - "rules/node_alerts.yml" #具體的alter規則文件路徑,此處使用的是相對路徑,rules/node_alerts.yml表示和在prometheus.yml文件同級目錄下的rules目錄下的node_alerts.yml文件。 # A scrape configuration containing exactly one endpoint to scrape: # Here it's Prometheus itself. scrape_configs: #此處是數據來源,本文的數據來源是consul中來的。 # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config. # - job_name: 'prometheus' # static_configs: # - targets: ['localhost:9090'] - job_name: 'consul_111_83' #設置數據源名字 consul_sd_configs: #設置具體數據來源,prometheus通過192.168.111.83:8500提取consul從客戶端node_exporter中抓取的數據。 - server: '192.168.111.83:8500' #具體的數據來源地址 services: [] relabel_configs: #設置只獲取特定標簽node_exporter中的數據,實驗中只提取__meta_consul_tags標簽中含有test字符串的節點數據。 - source_labels: [__meta_consul_tags] #設置標簽名,從哪個標簽中提取數據 regex: .*test.* #匹配標簽中含有test中的值得數據 action: keep #匹配過后的規則設置為保留。
alert_rules規則文件配置
在定義的alert_rules配置文件中,根據之前定義的四個指標填入到alert_rules文件中。
注:再次提示一下,此處的alert_rules規則文件是在prometheus軟件下編寫。具體的文件名是之前在prometheus.yml中rule_files:自己定義的,切記,切記。
groups: - name: node_instance #設置告警名,自定義 rules: - alert: InstanceDown #設置告警信息名,自定義。 expr: up{instance=~"10|80|192.*"} == 0 #設置只檢測ip開頭為10、80、192網段的地址,可以按照你的實際情況刪除{}及其中的內容,只保留up == 0。 for: 1m #設置告警時間為1分鍾。 labels: severity: critical #設置告警等級 annotations: description: Host {{ $labels.instance }} Down #設置描述信息,{{ $labels.instance }}表示數據來源及端口。如 192.168.111.1主機down掉了,此處就會顯示192.168.111.1:9100 summary: Host {{ $labels.instance }} of {{ $labels.job }} is Down !!! #詳細的告警信息,自定義。 - name: cpu_used #設置cpu使用告警參數選項,該處名字自定義。 rules: - alert: Cpu_used_Hight #自定義告警類型名 expr: 100 - ((avg by (instance,job,env)(irate(node_cpu_seconds_total{mode="idle"}[30s]))) *100) > 90 #定義CPU使用率高於90%時告警,CPU使用率和uptime中看到的CPU負載有一定的差距。 for: 1m labels: severity: critical annotations: description: Host {{ $labels.instance }} Excessive Cpu utilization summary: Host {{ $labels.instance }} of {{ $labels.job }} Excessive Cpu utilization !!! - name: mem_used rules: - alert: Men_used_Hight expr: ((node_memory_MemTotal_bytes -(node_memory_MemFree_bytes+node_memory_Buffers_bytes+node_memory_Cached_bytes) )/node_memory_MemTotal_bytes ) * 100 > 90 #設置內存使用率高於90時發送告警,計算方式為 總內存-空閑內存 - buffers - cached for: 1m labels: severity: critical annotations: description: Host {{ $labels.instance }} Excessive Memory utilization summary: Host {{ $labels.instance }} of {{ $labels.job }} Excessive Memory utilization !!! - name: disk_used rules: - alert: Disk_used_Hight expr: 100 - (node_filesystem_free_bytes{fstype=~"ext3|ext4|xfs"} / node_filesystem_size_bytes{fstype=~"ext3|ext4|xfs"} * 100) > 95 #設置掛載分區使用率為95以上時告警 for: 1m labels: severity: critical annotations: description: Host {{ $labels.instance }} Excessive Disk utilization summary: Host {{ $labels.instance }} of {{ $labels.job }} Excessive Disk utilization !!!
alter軟件配置
在altermanger軟件中修改alertmanager.yml配置文件。
global: resolve_timeout: 5m route: group_by: ['instance'] group_wait: 10s group_interval: 20s repeat_interval: 20s #repeat_interval: 1h receiver: 'webhook' #指定接收名,這個參數必須要和receivers中找到一致的數據項。 receivers: - name: 'webhook' webhook_configs: - url: 'http://192.168.111.83:5000/send' #由於我寫了一個簡單小腳本接收數據所以此處把告警直接發送到192.168.111.83:5000中。可以參考我另一篇文檔。https://www.cnblogs.com/Pigs-Will-Fly/p/13361527.html
重啟軟件
以下為linux命令,非腳本
# pkill prometheus #kill prometheus軟件進程
# ss -alntup | grep -i 9090 #查看確認9090端口是否GG,該條命令沒有輸出表示進程殺死成功
# prometheus --config.file="/usr/local/prometheus/prometheus.yml" --storage.tsdb.retention.time=90d &> /dev/null & #啟動prometheus軟件,指定配置文件設置數據保留時間為90天
# ss -alntup | grep -i 9090 #確認9090端口是否啟動,此時命令應該有輸出。
# pkill alertmanager #kill alertmanager軟件進程
# ss -alntup | grep -i 9093 #查看確認9093端口是否GG,該條命令沒有輸出表示進程殺死成功
# alertmanager --config.file=/usr/local/alertmanager/alertmanager.yml --cluster.advertise-address=0.0.0.0:9093 &> /dev/null & #啟動alertmanager軟件指定配置文件設置監聽為0.0.0.0:9093
# ss -alntup | grep -i 9093 #確認9093段鷗是否啟動,此時命令應該有輸出。
測試
本文針對4種監控告警方式提供4中不同的檢測方式,由於我設置的告警提示是20秒提示一次,所有在演示的時候看到的告警就有點頻繁,讀者可以按照自己的實際情況設置告警間隔時間。
CPU測試
說明:下載stress軟件,如果你Linux系統總的CPU線程有1個,那么設置測試的CPU一定要超過這個值。一般設置為2-3倍。
命令: stress --cpu 3 --timeout 6000
granfan截圖:
python接收截圖:
其中 firing表示告警信息生成。 resolved表示告警恢復。
內存測試
說明:下載memtester軟件,根據你實際的內存量設置合適的內存測試值,如你的主機有10G,那么按照設置告警的規則為90才告警,你可以設置測試內存為9.5G。測試單位有B K M G自選。
命令:memtester 900M
granfan截圖:
python接收截圖:
測試的時候由於內存占用過大,所以一並觸發了CPU告警。
磁盤測試
說明:實驗新掛一張小盤,使用dd命令創建一個大文件,文件一定要占用新盤的95%以上的存儲空間。
命令:dd if=/dev/zero of=/tester/test11 bs=1024K count=1900
granfan截圖:
python接收截圖:
規則文件還有一點小問題,導致異常告警。
主機up/down測試
說明:直接對一個監控節點進行關機操作,但是有一個問題prometheus監控是通過客戶端的9100端口監控數據,一旦9100端口不通也會觸發節點down告警。
命令:halt -p
python接收截圖: