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\nmysecret\ntest"
 
  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

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM