Prometheus使用入門


Monitoring with Prometheus讀書筆記
原書見:
https://www.safaribooksonline.com/library/view/monitoring-with-prometheus/9780988820289/


摘錄了一些內容,稍微整理了下,更詳細的內容可以閱讀原書.

簡介

Prometheus靈感來源於谷歌的borgmon.
他的設計專注於最近發生的事,而不是幾個星期幾個月前的,默認只保存15天的時間序列.

內置PromQL查詢語言,可以方便進行metric查詢和定義新的metric.

數據格式

<time series name>{<label name>=<label value>, ...}  

例子:

total_website_visits{site="MegaApp", location="NJ", instance="webserver",job="web"}

安裝

安裝過程比較簡單,官網下載之后解壓即可.
windows下可以使用choco安裝:

choco install prometheus

也可以使用docker運行:

docker run -p 9090:9090 prom/prometheus  

解壓后自帶一個配置文件,啟動時帶上文件路徑即可:

prometheus --config.file "/etc/prometheus/prometheus.yml"

(放置在了/etc/prometheus下)

默認跑在9090端口.

監控容器和節點

節點(機器)監控可以使用node exporter.
下載node exporter 解壓 復制到可執行中

wget https://github.com/prometheus/node_exporter/releases/download/v0.16.0/node_exporter-0.16.0.linux-amd64.tar.gz
$ tar -xzf node_exporter-*
$ sudo cp node_exporter-*/node_exporter /usr/local/bin/

默認是9100端口,可以通過/metrics訪問.
收集的數據較多,不需要的指標可以通過--no-模塊名禁用,同時一些沒有開啟的模塊可以通過--模塊名開啟.

容器監控可以使用cadvisor

docker run \
  --volume=/:/rootfs:ro \
  --volume=/var/run:/var/run:rw \
  --volume=/sys:/sys:ro \
  --volume=/var/lib/docker/:/var/lib/docker:ro \
  --volume=/dev/disk/:/dev/disk:ro \
  --publish=8080:8080 \
  --detach=true \
  --name=cadvisor \
  google/cadvisor:latest

監聽在8080端口.

對應的Prometheus配置修改:

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']
  - job_name: 'node'
    static_configs:
      - targets: ['138.197.26.39:9100', '138.197.30.147:9100', '138.197.30.163:9100']
  - job_name: 'docker'
    static_configs:
      - targets: ['138.197.26.39:8080', '138.197.30.147:8080', '138.197.30.163:8080']

(ip等信息寫在targets中)

Label

注意改變一個label或增加一個新的label會創建一個新的time series.

對收集的metrics的label進行操作.
可以去掉不必要的metrics和label,增加編輯label.

有兩個階段可以修改:

  • relabel_configs:用來修改服務發現過來的元數據label.
  • metric_relabel_configs:獲得數據存儲到磁盤之前操作

如圖所示:

一些配置(和job_name平級):

metric_relabel_configs:
  - source_labels: [__name__]
    separator: ','
    regex: '(container_tasks_state|container_memory_failures_total)'
    action: drop

__name__是metrics的保留label,表示這個metric的名字,這里將這些名字用,拼起來,過濾掉符合正則的名字的metrics.

metric_relabel_configs:
- source_labels: [id]
  regex: '/docker/([a-z0-9]+);'
  replacement: '$1'
  target_label: container_id  

替換掉id符合正則的內容產生另一個名為container_id的label.
此外有一個honor_labels的參數可以控制替換后的label和現有重名的問題,默認為false,現有的沖突會加上exported_的前綴.設置為true,會忽略該替換的label.

metric_relabel_configs:
  - regex: 'kernelVersion'
    action: labeldrop

移除掉現有符合正則的label.

Metrics

CPU利用率

使用node_cpu_seconds_total
如圖:

計算5min為取樣每秒的瞬時利用率

100 - avg (irate(node_cpu_seconds_total{job="node",mode="idle"}[5m])) by (instance) * 100

5m是range vector,表示使用記錄的上一個5分鍾的數據.
irate是瞬時變化率,適合變化較頻繁的metric.
avg是因為有多個metrics(分別是每核的)

CPU飽和度

node_load*
后面的*有1 5 15,表示多少分鍾.
該metric和核數有關,查看核數可以使用:

count by (instance)(node_cpu_seconds_total{mode="idle"})

內存使用

node_memory_*
列出空閑內存

(node_memory_MemTotal_bytes - (node_memory_MemFree_bytes + node_memory_Cached_bytes + node_memory_Buffers_bytes)) / node_memory_MemTotal_bytes * 100

內存飽和度

監控paging in和paging out的內存
/proc/vmstat
node_vmstat_pswpin
node_vmstat_pswpout
單位是KB

1024 * sum by (instance) (
       (rate(node_vmstat_pgpgin[1m])
       + rate(node_vmstat_pgpgout[1m]))
)

算出每分鍾的變化量
rate是平均變化率,相比irate適合變化幅度不劇烈的數據.

磁盤使用率

node_filesystem_*
使用率:

(node_filesystem_size_bytes{mountpoint="/"} - node_filesystem_free_bytes{mountpoint="/"}) / node_filesystem_size_bytes{mountpoint="/"} * 100

可以用=~匹配正則 相對的有!~

predict_linear(node_filesystem_free_bytes{job="node"}[1h], 4*3600) < 0

通過1h的估計量 看看4h后是否會用完

exporter的可用性監控

可以使用up.

up{job="node"}

返回1表示node_exporter存活.

持久化Query

除了直接查詢,query還可以在其他場合持久化使用:

  • Recording rule - 通過query創建新的metrics
  • Alerting rules - 生成報警
  • Visualization - 可視化

設置prometheus.yml的rules_files塊,增加一個新的rule:

rule_files:
  - "rules/node_rules.yml"

對應的該文件內容如下:

groups:
- name: node_rule
  rules:
  - record: instance:node_cpu:avg_rate5m
    expr: 100 - avg (irate(node_cpu_seconds_total{job="node",mode="idle"}[5m])) by (instance) * 100

配置文件修改后可以使用promtool的對應命令,比如promtool check rules node_rules.yml進行檢查.

可以在Prometheus上通過/rules查看:

可視化

使用grafana
centos下安裝:

wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-5.2.2-1.x86_64.rpm 
sudo yum localinstall grafana-5.2.2-1.x86_64.rpm 

配置在/etc/grafana/grafana.ini.
通過sudo service grafana-server start啟動服務.
默認使用3000端口.
默認用戶名和密碼在配置文件,為admin:admin.
登陸后增加數據源選擇Prometheus即可.
然后可以新增dashboard,配置對應的查詢:


文中可能會有不少錯誤,歡迎提出.
原書的內容更為詳盡和豐富,有興趣的可以閱讀原書.


參考資料:
https://prometheus.io/docs/prometheus/latest/getting_started/

https://github.com/prometheus/node_exporter

https://github.com/google/cadvisor

https://grafana.com/

https://legacy.gitbook.com/book/songjiayang/prometheus/details


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM