Prometheus使用[筆記]

Prometheus使用

環境

命令行入門實例

  • CPU使用率計算html

    CPU在t1到t2時間段總的使用時間 = ( user2+ nice2+ system2+ idle2+ iowait2+ irq2+ softirq2) - ( user1+ nice1+ system1+ idle1+ iowait1+ irq1+ softirq1)
    CPU在t1到t2時間段空閒使用時間 =(idle2 - idle1)node

    CPU在t1到t2時間段即時利用率 = 1 - CPU空閒使用時間 / CPU總的使用時間linux

    increase() 函數:解決counter類型的時間增量git

    多核CPU計算github

    sum()結果求和web

    • 獲取CPU時間
    • 獲取空閒時間idle

獲取總的時間spring

  • 單臺機器的CPU總利用率shell

    1-(sum(increase(node_cpu_seconds_total{instance="192.168.9.232:9100",mode="idle"}[1m]))/sum(increase(node_cpu_seconds_total{instance="192.168.9.232:9100"}[1m])))
  • by(instance): 區分不一樣實例json

  • (1-( sum(increase(node_cpu_seconds_total{mode="idle"}[1m])) by(instance) / sum(increase(node_cpu_seconds_total{}[1m]) ) by(instance) )) * 100
  • 計算其餘CPU狀態時間的使用bash

    • iowait io等待時間

      sum(increase(node_cpu_seconds_total{mode="iowait"}[1m])) by(instance) / sum(increase(node_cpu_seconds_total{}[1m]) ) by(instance)

    • irq 硬中斷

      sum(increase(node_cpu_seconds_total{mode="irq"}[1m])) by(instance) / sum(increase(node_cpu_seconds_total{}[1m]) ) by(instance)

    • soft irq 軟中斷

      sum(increase(node_cpu_seconds_total{mode="softirq"}[1m])) by(instance) / sum(increase(node_cpu_seconds_total{}[1m]) ) by(instance)

    • steal 虛擬機的分片時間

      sum(increase(node_cpu_seconds_total{mode="steal"}[1m])) by(instance) / sum(increase(node_cpu_seconds_total{}[1m]) ) by(instance)

    • nice 進程分配nice值的時間

      sum(increase(node_cpu_seconds_total{mode="nice"}[1m])) by(instance) / sum(increase(node_cpu_seconds_total{}[1m]) ) by(instance)

    • idle空閒

      sum(increase(node_cpu_seconds_total{mode="idle"}[1m])) by(instance) / sum(increase(node_cpu_seconds_total{}[1m]) ) by(instance)

    • user用戶態

      sum(increase(node_cpu_seconds_total{mode="user"}[1m])) by(instance) / sum(increase(node_cpu_seconds_total{}[1m]) ) by(instance)

    • sytem內核態

      sum(increase(node_cpu_seconds_total{mode="system"}[1m])) by(instance) / sum(increase(node_cpu_seconds_total{}[1m]) ) by(instance)

命令行擴展使用

  • 過濾

    • 標籤過濾 key{label=""}
      • 模糊匹配 key{label=~"web.*"}
    • 數值過濾
      • 四則運算 key{.} > 400
  • 函數

    • rate(.[5m]) 搭配counter型數據, 按照設置的一個時間段,取counter在這個時間段的增量的平均每秒

      \(value = ∆S/∆t\)

      • 時間段的取值 要考慮採集數據的程序採集間隔
    • increase(.[5m])搭配counter型數據,取一個時間段的增量
      \(value=∆S\)

    • sum()加和

      • 結合 by()
    • topk(x,key) 取最高前x位

      • 不適合 graph ; 適用於console 查看
      • 適合瞬時報警
    • count()

      • 模糊監控判斷

採集數據

服務端啓動-適用於生產

  • Peometheus加載配置文件
    • 向prometheus進行發信號
      • kill -HUP pid
    • 向prometheus發送HTTP請求
      • curl -XPOST http://prometheus.chenlei.com/-/reload
  • 後臺運行

    • 使用 screen 工具

    • 使用 daemonize

      > yum install -y kernel-devel 
      > yum groupinstall -y Development tools
      > git clone https://github.com/bmc/daemonize.git
      > cd daemonize
      > ./configure && make && make install
  • 啓動prometheus額外參數

    • --web.listen-address : 監聽地址 0.0.0.0:9090
    • --web.read-timeout : 請求連接最大等待時間 2m
    • --web.max-connections: 最大鏈接數 10
    • --storage.tsdb.retention: 數據保存期限 90d
    • --storage.tsdb.path: 數據保存路徑 /data/prometheus/server/data
    • --query.max-concurrency: 最大併發數 20
    • --query.timeout: 查詢超時時間 2m
  • 存儲結構

    server/
    └── data
        ├── 01DM9HP1PHHK2BD1MGC7J1C0YC
        │   ├── chunks
        │   │   └── 000001
        │   ├── index
        │   ├── meta.json
        │   └── tombstones
        ├── 01DM9ZDG8QKWTPYZ86K7XW6FKZ
        │   ├── chunks
        │   │   └── 000001
        │   ├── index
        │   ├── meta.json
        │   └── tombstones
        ├── 01DMAM0NM51YSQ4EVRRV46X2E1
        │   ├── chunks
        │   │   └── 000001
        │   ├── index
        │   ├── meta.json
        │   └── tombstones
        ├── 01DMAM0P4CGJWSSA15QPWJGZXF
        │   ├── chunks
        │   │   └── 000001
        │   ├── index
        │   ├── meta.json
        │   └── tombstones
        ├── lock
        ├── queries.active
        └── wal
            ├── 00000011
            ├── 00000012
            ├── 00000013
            ├── 00000014
            ├── 00000015
            ├── 00000016
            ├── 00000017
            ├── 00000018
            └── checkpoint.000010
                └── 00000000
  • 近期數據保存在wal/目錄中,防止忽然斷電或者重啓,以用來恢復內存中的數據

服務端配置文件寫法

global:
  scrape_interval:     5s #抓取頻率
  evaluation_interval: 1s 



alerting:
  alertmanagers:
  - static_configs:
    - targets:



rule_files:

scrape_configs: 

  - job_name: 'prometheus'

    static_configs:
    - targets: ['localhost:9090']

  - job_name: '233-node-exporter'

    static_configs:
    - targets: ['192.168.9.233:9100']

  - job_name: '232-node-exporter'

    static_configs:
    - targets: ['192.168.9.232:9100']

  - job_name: '239-node-exporter'

    static_configs:
    - targets: ['192.168.9.239:9200']

node_exporter

github地址

  • 採集服務器的指標
  • 有足夠多的默認採集項
  • 能夠經過啓動時,開啓或者禁用某些指標

pushgateway

  • 介紹
    主動推送數據到prometheus server

    能夠單獨運行在不一樣節點上,並不要求是監控節點

  • 安裝
  • 自定義採集腳本發送到pushgateway

    • 安裝pushgeteway

    • prometheus配置job關聯pushgateway

    • 目標主機編寫腳本採集數據

    • 定時執行發送metric數據到pushgateway

      #!/bin/bash
      instance_name=instance_name
      
      label=label
      value=123
      
      echo "$label $value" | curl --data-binary @- http://192.168.9.233:9091/metrics/job/test/instance/$instance_name
  • 缺點
    • 單點瓶頸
    • 沒有數據過濾

自定義exporter

界面可視化

grafana

  • 介紹
    開源數據繪圖工具

  • 安裝

  • 配置
    • 添加prometheus數據源

    • 添加dashboard
      image-20190910175959926

    • 創建Dashboard

      • 數據源配置
        image-20190910175917439
  • 圖形配置

    • Visualization
      image-20190910175754722
    • Axes
      image-20190910175814132
    • Legend
      image-20190910175830342
    • Thresholds & Time Regions
      image-20190910175852153
    • Data link
  • 通用配置
    image-20190910180031703

  • 告警配置
    image-20190910180042705

  • 備份
    • 導出json
    • save as
  • 還原
    • 導入json/粘貼json
  • 報警功能
    報警是 grafana 4.0 的新功能
    • 釘釘告警
    • pageduty

實踐

  • 內存使用率
    • 數據來源
      node_exporter
    • 計算公式
      \(value=available/Sum\)
      實際可用內存=free+buffers+cached
    • 公式實現
      ((node_memory_MemFree_bytes+node_memory_Buffers_bytes+node_memory_Cached_bytes)/node_memory_MemTotal_bytes)*100
  • 硬盤io監控
    • 數據來源
      node_exporter
    • 計算公式
      \(value=讀速度+寫速度\)
    • 公式實現
      函數: predict_linear(), 預測趨勢
      (rate(node_disk_read_bytes_total[1m])+rate(node_disk_written_bytes_total[1m]))
  • 網絡監控

    • 數據來源
      bash腳本+pushgateway

    • 腳本編寫
      採集內網流量ping延遲和丟包率

      instance=`hostname -f`
      #外網聯通
      lostpk=`timeout 5 ping -q -A -s 500 -W 1000 -c 100 baidu.com | grep transmitted | awk '{print $6}'`
      #時間
      rrt=`timeout 5 ping -q -A -s 500 -W 1000 -c 100 baidu.com | grep transmitted | awk '{print $10}'`
      
      # value只容許數值型
      value_lostpk=${lostpk%%\%}
      value_rrt=${rrt%%ms}
      
      # 經過 pushgateway 發送給prometheus
      echo "lostpk_$instance : $value_lostpk"
      echo "lostpk_$instance $value_lostpk" | curl --data-binary @- http://192.168.9.233:9091/metrics/job/network-traffic/instance/$instance
      
      echo "rrt_$instance : $value_rrt"
      echo "rrt_$instance $value_rrt" | curl --data-binary @- http://192.168.9.233:9091/metrics/job/network-traffic/instance/$instance
    • 定時執行
      資料
      定時執行步驟:

      • 安裝crontab
      • /etc/crontab配置cron運行對應可執行腳本
    • 查看結果

      • 在prometheus查看targets有沒有在線,若是沒有須要到prometheus配置,記得刷新配置
        image-20190912115039938
      • 查看配置

      image-20190912115136770

      • 看指標,在命令行輸入剛剛自定的key應該會有提示出現lostpk rrt
        image-20190912124023780
相關文章
相關標籤/搜索