prometheus笔记

1 基本原理

Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件target的状态,任意组件只要提供相应的HTTP接口就可以接入监控。不需任何SDK或者其他的集成过程。
输出监控信息的HTTP接口叫exporter,目前开源组件大都有exporter可以直接使用,比如Haproxy、Nginx、MySQL、redis、rabbitmq、Linux系统信息(包括磁盘、内存、CPU、网络等)。


Architecture

Server 主要负责数据采集和存储,提供PromQL查询语言的支持。
Alertmanager 警告管理器,用来进行报警。支持Prometheus的查询语句,提供灵活的报警方式(待完善)。
Push Gateway 支持临时性Job主动推送指标的中间网关。

Prometheus Federation联邦机制:一般分为Cross-service federation与Hierarchical federation。


Cross-service federation

Hierarchical federation

prometheus.yml

scrape_configs:
  - job_name: 'federate'
    scrape_interval: 15s

    honor_labels: true #避免监控指标冲突
    metrics_path: '/federate'

    params:
      'match[]':
        - '{job="prometheus"}'
        - '{__name__=~"job:.*"}'
        - '{job=~"prometheus.*"}'
        - '{job="docker"}'
        - '{job="node"}'
    static_configs:
      - targets:
        - 'source-prometheus-1:9090'
        - 'source-prometheus-2:9090'

grafana UI:http://127.0.0.1:3000
prometheus UI:http://127.0.0.1:9090
pushgateway UI:http://127.0.0.1:9091

2 特点

  • 多维度时序数据模型,名称metric+key/value。
  • PromQL灵活的查询语言。
  • 不依赖分布式存储,单服务器节点是自主的。
  • 基于HTTP的pull方式采集时序数据。
  • 可以通过中间网关进行时序列数据推送。
  • 通过服务发现或者静态配置来发现target目标服务对象。
  • 支持多种图表和界面展示,比如Grafana等。

3 Metric类型:

  1. Counter: 累加metric,如请求的个数,错误数等
  2. Gauge: 常规metric,可任意加减。其为瞬时的,与时间没有关系,可以任意变化。
  3. Histogram: 柱状图,用于观察结果采样,分组及统计,如:请求持续时间,响应大小。
  4. Summary: 类似Histogram,用于表示一段时间内数据采样结果,其直接存储quantile数据,而不是根据统计区间计算出来的。不需要计算,直接存储结果。

4 PromQL (Prometheus Query Language)

Prometheus 自己开发的数据查询 DSL 语言。
查询结果类型:

  1. 瞬时数据 (Instant vector): 包含一组时序,每个时序只有一个点,例如:http_requests_total
  2. 区间数据 (Range vector): 包含一组时序,每个时序有多个点,例如:http_requests_total[5m]
  3. 纯量数据 (Scalar): 纯量只有一个数字,没有时序,例如:count(http_requests_total)
    标签查询:logback_events_total{level=~"in.*"}
    QPS计算:rate(http_requests_total[5m])irate(http_requests_total[5m]),后者适用变化率大场景。
    其他函数:count,sum,svg

5 配置

启动时,可以加载运行参数-config.file指定配置文件, 默认为程序根目录下prometheus.yml。
全局配置global主要有四个属性:
scrape_interval: 拉取 targets 的默认时间间隔。
scrape_timeout: 拉取一个 target 的超时时间。
evaluation_interval: 执行 rules 的时间间隔。
external_labels: 额外的属性,会添加到拉取的数据并存到数据库中。
prometheus.yml

# my global config
global:
  scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

# metrics collect
remote_write:
    - url: "http://10.0.0.153:9201/write"


# Alertmanager configuration
alerting:
  alertmanagers:
  - static_configs:
    - targets:
      # - alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"
  - "myrule.yml"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=` to any timeseries scraped from this config.
  - job_name: 'prometheus'

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

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

# 动态加载模式,新增target无需重启服务
  - job_name: 'linux'
    file_sd_configs:
  #  - refresh_interval: 1m
    - files:
      - ./conf/node-linux-*.json

  - job_name: 'windows'
    static_configs:
    - targets: ['10.0.0..89:9182']
    - targets: ['10.0.0.95:9182']

  - job_name: 'mysql'
    scrape_interval: 1m
    file_sd_configs:
    - files:
      - ./conf-mysql/*.json

myrule.yml

groups:
- name: zt_custom
  rules:
  - record: mysql_csc_slowquery_irate_2m
    expr: irate(mysql_csc_slowquery [2m])

./conf/node-linux-finance.json

[
  {
    "targets": ["10.0.0.80:9100"],
    "labels":{
       "env":"pro",
       "region":"dbjf",
       "instance":"finance-80"
    }
  },
  {
    "targets": ["10.0.0.90:9100"],
    "labels":{
       "env":"pro",
       "region":"dbjf",
       "instance":"finance-90"
    }
  }
]

6 exporter

详见https://prometheus.io/docs/instrumenting/exporters/#exporters-and-integrations
linux系统、mysql、redis等等都有相应的exporter,按照说明运行代理即可。

参考:https://prometheus.io/docs/introduction/overview/

你可能感兴趣的:(prometheus笔记)