Prometheus使用[笔记]

Prometheus使用

环境

命令行入门实例

  • 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在这个时间段的增量的平均每秒

      \(value = ∆S/∆t\)

      • 时间段的取值 要考虑采集数据的程序采集间隔
    • increase(.[5m]) 搭配counter型数据,取一个时间段的增量
      \(value=∆S\)

    • sum()加和

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

      • 不适合 graph ; 适用于console 查看
      • 适合瞬时报警
    • count()

      • 模糊监控判断

采集数据

服务端启动-适用于生产

  • Peometheus加载配置文件

  • 后台运行

    • 使用 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

实践

posted @ 2019-09-12 13:52  suveng  阅读(757)  评论(0)    收藏  举报