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=<job_name>` 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/

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,544评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,430评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,764评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,193评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,216评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,182评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,063评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,917评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,329评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,543评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,722评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,425评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,019评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,671评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,825评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,729评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,614评论 2 353

推荐阅读更多精彩内容