天天看點

Prometheus使用[筆記]

Prometheus使用

環境

  • 檢視上一篇安裝篇
  • MacOS
  • Centos 7
  • prometheus-2.12.0.linux-amd64.tar.gz
  • grafana-6.3.5-1.x86_64
  • node_exporter-0.18.1.linux-amd64
  • pushgateway-0.9.1.linux-amd64

指令行入門執行個體

  • CPU使用率計算

    CPU在t1到t2時間段總的使用時間 =

    ( user2+ nice2+ system2+ idle2+ iowait2+ irq2+ softirq2) - ( user1+ nice1+ system1+ idle1+ iowait1+ irq1+ softirq1)

    CPU在t1到t2時間段空閑使用時間 =

    (idle2 - idle1)

    CPU在t1到t2時間段即時使用率 =

    1 - CPU空閑使用時間 / CPU總的使用時間

    increase()

    函數:解決counter類型的時間增量

    多核CPU計算

    sum()

    結果求和
    • 擷取CPU時間
    • 擷取空閑時間

      idle

擷取總的時間

  • 單台機器的CPU總使用率
    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): 區分不同執行個體
  • (1-( sum(increase(node_cpu_seconds_total{mode="idle"}[1m])) by(instance) / sum(increase(node_cpu_seconds_total{}[1m]) ) by(instance) )) * 100
               
  • 計算其他CPU狀态時間的使用
    • 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

      在這個時間段的增量的平均每秒

      v

      a

      l

      u

      e

      =

      S

      /

      t

      value = ∆S/∆t

      value=∆S/∆t

      • 時間段的取值 要考慮采集資料的程式采集間隔
    • increase(.[5m])

      搭配

      counter

      型資料,取一個時間段的增量

      value=∆S

      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

    可以單獨運作在不同節點上,并不要求是監控節點
  • 安裝
    • 0.9.1 / 2019-08-01
    • 下載下傳位址: 連結
    • 解壓
    • 運作
  • 自定義采集腳本發送到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

  • 開發流程
    • 官網介紹
    • web HTTP 服務, 響應外部GET請求
    • 運作在背景,定期觸發抓取本地的監控資料
    • 響應結果 必須符合prometheus的metrics的格式
  • [Java]Spring版exporter
    • 自定義Metrics:讓Prometheus監控你的應用程式(Spring版)
    • Go語言開發Prometheus Exporter示例

界面可視化

grafana

  • 開源資料繪圖工具
    • grafana官網
    • 官網安裝引導
    • 預設端口: 3000
  • 配置
    • 添加

      prometheus

      資料源
      Prometheus使用[筆記]
    • dashboard

      Prometheus使用[筆記]
    • 建立Dashboard
      • 資料源配置
        Prometheus使用[筆記]
  • 圖形配置
    • Visualization
      Prometheus使用[筆記]
    • Axes
      Prometheus使用[筆記]
    • Legend
      Prometheus使用[筆記]
    • Thresholds & Time Regions
      Prometheus使用[筆記]
    • Data link
  • 通用配置
    Prometheus使用[筆記]
  • 告警配置
    Prometheus使用[筆記]
  • 備份
    • 導出json
    • save as
  • 還原
    • 導入json/粘貼json
  • 報警功能

    報警是

    grafana 4.0

    的新功能
    • 釘釘告警
    • pageduty

實踐

  • 記憶體使用率
    • 資料來源

      node_exporter

    • 計算公式

      v

      a

      l

      u

      e

      =

      i

      b

      /

      S

      m

      value=available/Sum

      value=available/Sum

      實際可用記憶體=free+buffers+cached

    • 公式實作

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

  • 硬碟io監控
    • +

      value=讀速度+寫速度

      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配置,記得重新整理配置
        Prometheus使用[筆記]
      • 檢視配置
      • 看名額,在指令行輸入剛剛自定的key應該會有提示出現

        lostpk

        rrt

        Prometheus使用[筆記]

繼續閱讀