zoukankan      html  css  js  c++  java
  • Prometheus-配置解析

    1.Prometheus整体架构图

    2.配置文件

    # 全局配置
    global:
      scrape_interval:     15s   # 多久 收集 一次数据
      evaluation_interval: 30s   # 多久评估一次 规则
      scrape_timeout:      10s   # 每次 收集数据的 超时时间
     
      # 当Prometheus和外部系统(联邦, 远程存储, Alertmanager)通信的时候,添加标签到任意的时间序列或者报警
      external_labels:
        monitor: codelab
        foo:     bar
     
    # 规则文件, 可以使用通配符
    rule_files:
    - "first.rules"
    - "my/*.rules"
     
    # 远程写入功能相关的设置
    remote_write:
      - url: http://remote1/push
        write_relabel_configs:
        - source_labels: [__name__]
          regex:         expensive.*
          action:        drop
      - url: http://remote2/push
     
    # 远程读取相关功能的设置
    remote_read:
      - url: http://remote1/read
        read_recent: true
      - url: http://remote3/read
        read_recent: false
        required_matchers:
          job: special
     
    # 收集数据 配置 列表
    scrape_configs:
    - job_name: prometheus  # 必须配置, 自动附加的job labels, 必须唯一
     
      honor_labels: true   # 标签冲突, true 为以抓取的数据为准 并 忽略 服务器中的, false 为 通过重命名来解决冲突
      # scrape_interval is defined by the configured global (15s).
      # scrape_timeout is defined by the global default (10s).
     
      metrics_path:     '/metrics'
      # scheme defaults to 'http'.
     
     
      # 文件服务发现配置 列表
      file_sd_configs:
        - files:  # 从这些文件中提取目标
          - foo/*.slow.json
          - foo/*.slow.yml
          - single/file.yml
          refresh_interval: 10m  # 刷新文件的 时间间隔
        - files:
          - bar/*.yaml
     
     
      # 使用job名作为label的 静态配置目录 的 列表
      static_configs:
      - targets: ['localhost:9090', 'localhost:9191']
        labels:
          my:   label
          your: label
     
     
      # 目标节点 重新打标签 的配置 列表.  重新标记是一个功能强大的工具,可以在抓取目标之前动态重写目标的标签集。 可以配置多个,按照先后顺序应用
      relabel_configs:
      - source_labels: [job, __meta_dns_name]   # 从现有的标签中选择源标签, 最后会被 替换, 保持, 丢弃
        regex:         (.*)some-[regex]  # 正则表达式, 将会提取source_labels中匹配的值
        target_label:  job   # 在替换动作中将结果值写入的标签.
        replacement:   foo-${1}  # 如果正则表达匹配, 那么替换值. 可以使用正则表达中的 捕获组
        # action defaults to 'replace'
      - source_labels: [abc]  # 将abc标签的内容复制到cde标签中
        target_label:  cde
      - replacement:   static
        target_label:  abc
      - regex:
        replacement:   static
        target_label:  abc
     
      bearer_token_file: valid_token_file  # 可选的, bearer token 文件的信息
     
     
    - job_name: service-x
     
      # HTTP basic 认证信息
      basic_auth:
        username: admin_name
        password: "multiline
    mysecret
    test"
     
      scrape_interval: 50s  # 对于该job, 多久收集一次数据
      scrape_timeout:  5s
     
      sample_limit: 1000  # 每次 收集 样本数据的限制. 0 为不限制
     
      metrics_path: /my_path  # 从目标 获取数据的 HTTP 路径
      scheme: https  # 配置用于请求的协议方案
     
     
      # DNS 服务发现 配置列表
      dns_sd_configs:
      - refresh_interval: 15s
        names:  # 要查询的DNS域名列表
        - first.dns.address.domain.com
        - second.dns.address.domain.com
      - names:
        - first.dns.address.domain.com
        # refresh_interval defaults to 30s.
     
     
      # 目标节点 重新打标签 的配置 列表
      relabel_configs:
      - source_labels: [job]
        regex:         (.*)some-[regex]
        action:        drop
      - source_labels: [__address__]
        modulus:       8
        target_label:  __tmp_hash
        action:        hashmod
      - source_labels: [__tmp_hash]
        regex:         1
        action:        keep
      - action:        labelmap
        regex:         1
      - action:        labeldrop
        regex:         d
      - action:        labelkeep
        regex:         k
     
     
      # metric 重新打标签的 配置列表
      metric_relabel_configs:
      - source_labels: [__name__]
        regex:         expensive_metric.*
        action:        drop
     
     
    - job_name: service-y
     
      # consul 服务发现 配置列表
      consul_sd_configs:
      - server: 'localhost:1234'  # consul API 地址
        token: mysecret
        services: ['nginx', 'cache', 'mysql']  # 被检索目标的 服务 列表. 如果不定义那么 所有 服务 都会被 收集
        scheme: https
        tls_config:
          ca_file: valid_ca_file
          cert_file: valid_cert_file
          key_file:  valid_key_file
          insecure_skip_verify: false
     
      relabel_configs:
      - source_labels: [__meta_sd_consul_tags]
        separator:     ','
        regex:         label:([^=]+)=([^,]+)
        target_label:  ${1}
        replacement:   ${2}
     
    - job_name: service-z
     
      # 收集 数据的 TLS 设置
      tls_config:
        cert_file: valid_cert_file
        key_file: valid_key_file
     
      bearer_token: mysecret
     
    - job_name: service-kubernetes
     
      # kubernetes 服务 发现 列表
      kubernetes_sd_configs:
      - role: endpoints   # 必须写, 必须是endpoints, service, pod, node, 或者 ingress
        api_server: 'https://localhost:1234'
     
        basic_auth:  # HTTP basic 认证信息
          username: 'myusername'
          password: 'mysecret'
     
    - job_name: service-kubernetes-namespaces
     
      kubernetes_sd_configs:
      - role: endpoints  # 应该被发现的 kubernetes 对象 实体
        api_server: 'https://localhost:1234'  # API Server的地址
        namespaces:  # 可选的命名空间发现, 如果省略 那么所有的命名空间都会被使用
          names:
            - default
     
    - job_name: service-marathon
      # Marathon 服务发现 列表
      marathon_sd_configs:
      - servers:
        - 'https://marathon.example.com:443'
     
        tls_config:
          cert_file: valid_cert_file
          key_file: valid_key_file
     
    - job_name: service-ec2
      ec2_sd_configs:
        - region: us-east-1
          access_key: access
          secret_key: mysecret
          profile: profile
     
    - job_name: service-azure
      azure_sd_configs:
        - subscription_id: 11AAAA11-A11A-111A-A111-1111A1111A11
          tenant_id: BBBB222B-B2B2-2B22-B222-2BB2222BB2B2
          client_id: 333333CC-3C33-3333-CCC3-33C3CCCCC33C
          client_secret: mysecret
          port: 9100
     
    - job_name: service-nerve
      nerve_sd_configs:
        - servers:
          - localhost
          paths:
          - /monitoring
     
    - job_name: 0123service-xxx
      metrics_path: /metrics
      static_configs:
        - targets:
          - localhost:9090
     
    - job_name: 測試
      metrics_path: /metrics
      static_configs:
        - targets:
          - localhost:9090
     
    - job_name: service-triton
      triton_sd_configs:
      - account: 'testAccount'
        dns_suffix: 'triton.example.com'
        endpoint: 'triton.example.com'
        port: 9163
        refresh_interval: 1m
        version: 1
        tls_config:
          cert_file: testdata/valid_cert_file
          key_file: testdata/valid_key_file
     
    # Alertmanager相关的配置
    alerting:
      alertmanagers:
      - scheme: https
        static_configs:
        - targets:
          - "1.2.3.4:9093"
          - "1.2.3.5:9093"
          - "1.2.3.6:9093"

    3.基于consul的服务发现 

      注意: Prometheus的consul_sd_config使用的是catalog的API。

    使用http接口注册consul

    # curl -X PUT -d '{"ID": "node_exporter", "Name": "node_exporter", "Address": "10.6.28.37", "Port": 9100, "Tags": ["lock"], "EnableTagOverride": false}' http://10.6.28.37:8500/v1/agent/service/register
    

      

    # curl -s http://10.6.28.37:8500/v1/agent/services|jq
    {
      "node_exporter": {
        "ID": "node_exporter",
        "Service": "node_exporter",
        "Tags": [
          "lock"
        ],
        "Address": "10.6.28.37",
        "Port": 9100,
        "EnableTagOverride": false,
        "CreateIndex": 0,
        "ModifyIndex": 0
      }
    }
    

      

    4.prometheus配置详解

      当查询的时候存在十分复杂的表达式,这样会降低prometheus的性能可以使用 Recording rules

      允许您预先计算经常需要的或计算上昂贵的表达式,并将其结果保存为新的 time series。这对于仪表板尤其有用,每次刷新时它都需要重复查询相同的表达式。 将复杂的计算后台计算 放到一个新的时序里

      
      二元算术运算符 应用于 应用于 即时向量/即时向量 时

        运算符将应用于左侧向量中的元素及其在右侧向量中的匹配到的元素.
        运算结果被传播到结果向量中,并且度量名称被丢弃.
        那些在右侧向量中没有匹配条目的条目 不是结果的一部分。

      例如:

    employee_age_bucket_bucket{le=~"20|30|40"} + employee_age_bucket_bucket{le=~"30|40|50"}
    

     返回的结果是:

    {instance="10.0.86.71:8080",job="prometheus",le="30"} 6000
    {instance="10.0.86.71:8080",job="prometheus",le="40"} 8000
    

      

  • 相关阅读:
    Visual Studio Installer打包安装项目VS2015
    在WinCE上播放声音、设置透明图片、系统音量 C#
    虚函数、抽象函数以及接口的区别
    Type 'System.IO.FileStream' with data contract name 'FileStream:http://schemas.datacontract.org/2004/07/System.IO' is not expected.
    项目中重新引用WCF报错
    为什么0.1+0.2=0.30000000000000004
    MVC自定义错误页404静态页
    DP 网易内推:合唱团
    TFBOY 养成记 一些比较好多文章。
    机器学习笔记:为什么要对数据进行归一化处理?
  • 原文地址:https://www.cnblogs.com/liujiliang/p/10080849.html
Copyright © 2011-2022 走看看