promethues 教程

简介:

prometheus 是一套开源的监控、报警、时间序列数据库的组合

  • 主要组件:
    a. prometheus server
    主要负责数据采集和存储,提供promQL查询语言的支持
    b. client Libraris/SDK
    各个的客户端库和sdk
    c. push Gateway
    用于支持临时任务的推送网关,各个客户端可以主动向push gateway 推送监控指标数据,prometheus会到push gateway上拉取
    d. alertmanager
    告警功能
    e. exporters
    用来监控,haproxy,StatsD,Graphite等特殊的监控目标,并向Prometheus提供标准的监控样本数据
    f. 各种其他支持工具:可视化仪表盘grafana


    image.png

安装

docker pull prom/node-exporter
docker pull prom/prometheus
docker pull grafana/grafana


docker run -d -p 9100:9100 \
  -v "/proc:/host/proc:ro" \
  -v "/sys:/host/sys:ro" \
  -v "/:/rootfs:ro" \
  prom/node-exporter

docker run  -d \
  -p 9101:9090 \
  -v /Users/albert.liu/opt/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml  \
  prom/prometheus --name=prometheus_dev


docker run -d \
  -p 3000:3000 \
  --name=grafana \
  -v /Users/albert.liu/opt/grafana-storage:/var/lib/grafana \
  grafana/grafana
启动Prometheus : 127.0.0.1:9101/graph // 默认是9000,我本地9000端口冲突修改了

grafana: 127.0.0.1:3000
node_exporter: 127.0.0.1:9100/metrics // 数据收集

配置

prometheus.yml 
 # 搜刮配置
scrape_configs:
  - job_name: 'prometheus'
    # 覆盖全局默认值,每15秒从该作业中刮取一次目标
    scrape_interval: 15s
    static_configs:
    - targets: ['localhost:9090']
  - job_name: 'alertmanager'
    scrape_interval: 15s
    static_configs:
    - targets: ['alertmanager:9093']
alert.yml

数据指标

summary 类型,摘要

# TYPE go_gc_duration_seconds summary
go_gc_duration_seconds{quantile="0"} 1.1207e-05
go_gc_duration_seconds{quantile="0.25"} 0.000153083
go_gc_duration_seconds{quantile="0.5"} 0.000244541
go_gc_duration_seconds{quantile="0.75"} 0.000709667
go_gc_duration_seconds{quantile="1"} 0.006791916
go_gc_duration_seconds_sum 0.077696372
image.png

exporter:

提供监控样本数据的程序,exporter的一个实例称为target.prometheus 通过轮询方式定期从这些target中获取样本数据。

  • exporter 类型
    1. 直接采集型:内置了相应的程序,如kubernetes
    2. 间接采集型: 需要我们使用Prometheus提供的client library 编写采集程序,如 node exporter
  • 规范:
    1. ‘#’ 开始通常为注释
    2. 采集后的数据,Prometheus会把他添加labels:instance="django", job="django_app" 和timestamp


      *

node-exporter

    1. 监控linux 服务器
  • 指标:
    cpu: node_cpu_seconds_total; node_load1
    内存(node_memory_MemTotal_bytes: 内存总大小)
    磁盘:node_disk_
    文件系统:node_filesystem_
    网络采集:node_network_
    *3 触发器设置:
    配置:alert.yml


    image.png
  • 检查配置:
    docker exec -it prometheus promtool check config /etc/prometheus/prometheus.yml

nginx_exporter

  1. 配置NGINX
  • nginx 开启stub_status
  • 监控nginx 需要with-http_stub_status_module
    检查是否安装了
    docker exec -it nginx nginx -V 2>&1 | grep -o with-http_stub_status_module
  • 配置:
    
    server {
    
        location /stub_status{
           stub_status on;
           accecc_log off;
           allow 0.0.0.0/0;
           deny all;
        }
    }
    
    

检查:curl http://127.0.0.1/stub_status

  1. 安装nginx_exporter
  2. 配置Prometheus
        - job_name: 'nginx_exporter'
         static_configs:
            - targets: ['192.168.11.11:9113']
              instance: 'test 服务'
    
image.png
  1. 添加触发器:alert.yml


    image.png

添加监控的流程

image.png

image.png

pushgateway

image.png
  • docker 镜像:prom/pushgateway
    添加Prometheus 配置文件
- job_name: 'pushgateway'
   honor_labels: true // 不会覆盖Prometheus的指标名
   static_configs:
     - targets: ['192.168.199.218:9091']
       labels:
           instance: pushgateway
  1. 推送数据给pushgateway
    echo 'some_metric 3.14' | curl --data-binary @- http://192.168.199.218:9091/metrics/job/some_job

    // 删除某个组下面所有数据
    curl -X DELETE http://192.168.199.218:9091/metrics/job/some_job/instance/some_instance
    // 删除
    curl -X DELETE http://192.168.199.218:9091/metrics/job/some_job
    a. python 脚本

 pip install prometheus_client

from prometheus_client import CollectorRegistry, Gauge, push_to_gateway

collectorRegistry = CollectorRegistry()
g = Gauge('job_python', 'last python job', registry=collectorRegistry)
g.set_to_current_time()
push_to_gateway('http://192.168.199.218:9091', job='batchA', registry=collectorRegistry)

PromQL 语言

  • 数据类型

瞬时向量(instant vector):
区间向量
标量
字符串


image.png
  • 瞬时向量过滤器

标签过滤
node_cpu_seconds_total{instance='test服务器'}


image.png
  • 操作符

1.1 二元运算符
+、-、*、/、%、^
瞬时向量和标量计算
瞬时向量和瞬时向量运算
1.2 关系运算符
==
!= 不等于

、<、>=、<=
1 > bool 0 # 结果为1 0
1 > 0 # 结果为true false

1.3 集合运算符
and/or unless: 排除后面的

  1. 聚合操作

sum(求和)
min(),max()
avg(平均值)
stddev(标准差)
bstdvar(标准差异)
count(计数)
count_values(对value 进行计数)
bottomk(样本值最小的k个元素)
topk(样本值最大的k个元素, 从大到小排序)
quantile(分布统计)
without: 排除标签名称
by :保留标签名称,类sql似group by

// 统计cpu 和,排除了标签为cpu,job,mode
sum(node_cpu_seconds_total) without (cpu,job,mode)


// 统计cpu 和,包含标签为cpu,job,mode
sum(node_cpu_seconds_total) by (cpu,job,mode)
  • 基于时间聚合

max_over_time(range-vector): 区间向量内每个指标的最大值
avg_over_time(range-vector):
min_over_time(range-vector):
min_over_time(node_timex_sync_status[1m]) 1 分钟内,最小的值

  • 向量匹配

具有相同标签的会进行运算。
使用group_left 指定左侧操作数组中可以有多个匹配样本
on()
ignoring(mode): 忽略 mode 标签 ,group_right 有原则

image.png

image.png
  • 内置函数
    abs() 绝对值
    sqrp() 求平方根
    round(5.6)值四舍五入

time();时间,秒

increase(node_load1[2m]) 增长量
rate(node_load1[2m]) 可以直接计算区间向量v在时间窗口平均增长速率
irate(): 瞬时增长率,避免长尾问题。更灵敏

预测Gauge 指标变化趋势函数
predict_linear() 未来趋势

up 标签函数
label_replace() 替换
label_join() 加入

概况

Server:
时序数据库:TSDB
数据抓取(Scraping): 定期从目标端点(Exporter)拉取

Exporters:
Node Exporter
Blockbox Exporter
jobs exporters:项目采集端点
Service Discovery:
服务发现, 自动发现监控目标
Alertmanager
告警系统
Pushgateway:
其他节点push 数据到Prometheus
PromQL
查询语言
Grafana
可视化工具

参考资料

https://www.bilibili.com/video/BV17v4y1H76R/?p=6&spm_id_from=pageDriver&vd_source=5f155e9816129fc687a3807f7a9b1701
https://gitee.com/linge365/docker-prometheus/blob/master/prometheus/prometheus.yml

https://www.bilibili.com/video/BV1K1421q7AE?spm_id_from=333.788.player.switch&vd_source=5f155e9816129fc687a3807f7a9b1701&p=11

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容