美文网首页
prometheus笔记

prometheus笔记

作者: 博陵韩少 | 来源:发表于2021-10-20 09:38 被阅读0次

    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/

    相关文章

      网友评论

          本文标题:prometheus笔记

          本文链接:https://www.haomeiwen.com/subject/ebdfgltx.html