1,scrape_configs 参数介绍
- # 默认的全局配置
- global:
- scrape_interval: 15s # 采集间隔 15s, 默认为 1min 一次
- evaluation_interval: 15s # 计算规则的间隔 15s 默认为 1min 一次
- scrape_timeout: 10s # 采集超时时间, 默认为 10s
- external_labels: # 当和其他外部系统交互时的标签, 如远程存储, 联邦集群时
- prometheus: monitoring/k8s # 如: prometheus-operator 的配置
- prometheus_replica: prometheus-k8s-1
- # Alertmanager 的配置
- alerting:
- alertmanagers:
- - static_configs:
- - targets:
- - 127.0.0.1:9093 # alertmanager 的服务地址, 如 127.0.0.1:9093
- alert_relabel_configs: # 在抓取之前对任何目标及其标签进行修改.
- - separator: ;
- regex: prometheus_replica
- replacement: $1
- action: labeldrop
- # 一旦加载了报警规则文件, 将按照 evaluation_interval 即 15s 一次进行计算, rule 文件可以有多个
- rule_files:
- # - "first_rules.yml"
- # - "second_rules.yml"
- # scrape_configs 为采集配置, 包含至少一个 job
- scrape_configs:
- # Prometheus 的自身监控 将在采集到的时间序列数据上打上标签 job=xx
- - job_name: 'prometheus'
- # 采集指标的默认路径为:/metrics, 如 localhost:9090/metric
- # 协议默认为 http
- static_configs:
- - targets: ['localhost:9090']
- # 远程读, 可选配置, 如将监控数据远程读写到 influxdb 的地址, 默认为本地读写
- remote_write:
- 127.0.0.1:8090
- # 远程写
- remote_read:
- 127.0.0.1:8090
2,scrape_configs 配置案例
prometheus 的配置中, 最常用的就是 scrape_configs 配置, 比如添加新的监控项, 修改原有监控项的地址频率等.
最简单配置为:
- scrape_configs:
- - job_name: prometheus
- metrics_path: /metrics
- scheme: http
- static_configs:
- - targets:
- - localhost:9090
完整配置为(附 prometheus-operator 的推荐配置):
- # job 将以标签形式出现在指标数据中, 如 node-exporter 采集的数据, job=node-exporter
- job_name: node-exporter
- # 采集频率: 30s
- scrape_interval: 30s
- # 采集超时: 10s
- scrape_timeout: 10s
- # 采集对象的 path 路径
- metrics_path: /metrics
- # 采集协议: http 或者 https
- scheme: https
- # 可选的采集 url 的参数
- params:
- name: demo
- # 当自定义 label 和采集到的自带 label 冲突时的处理方式, 默认冲突时会重名为 exported_xx
- honor_labels: false
- # 当采集对象需要鉴权才能获取时, 配置账号密码等信息
- basic_auth:
- username: admin
- password: admin
- password_file: /etc/pwd
- # bearer_token 或者文件位置(OAuth 2.0 鉴权)
- bearer_token: kferkhjktdgjwkgkrwg
- bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
- # https 的配置, 如跳过认证, 或配置证书文件
- tls_config:
- # insecure_skip_verify: true
- ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
- server_name: kubernetes
- insecure_skip_verify: false
- # 代理地址
- proxy_url: 127.9.9.0:9999
- # Azure 的服务发现配置
- azure_sd_configs:
- # Consul 的服务发现配置
- consul_sd_configs:
- # DNS 的服务发现配置
- dns_sd_configs:
- # EC2 的服务发现配置
- ec2_sd_configs:
- # OpenStack 的服务发现配置
- openstack_sd_configs:
- # file 的服务发现配置
- file_sd_configs:
- # GCE 的服务发现配置
- gce_sd_configs:
- # Marathon 的服务发现配置
- marathon_sd_configs:
- # AirBnB 的服务发现配置
- nerve_sd_configs:
- # Zookeeper 的服务发现配置
- serverset_sd_configs:
- # Triton 的服务发现配置
- triton_sd_configs:
- # Kubernetes 的服务发现配置
- kubernetes_sd_configs:
- - role: endpoints
- namespaces:
- names:
- - monitoring
- # 对采集对象进行一些静态配置, 如打特定的标签
- static_configs:
- - targets: ['localhost:9090', 'localhost:9191']
- labels:
- my: label
- your: label
- # 在 Prometheus 采集数据之前, 通过 Target 实例的 Metadata 信息, 动态重新写入 Label 的值.
如将原始的__meta_kubernetes_namespace 直接写成 namespace, 简洁明了
- relabel_configs:
- - source_labels: [__meta_kubernetes_namespace]
- separator: ;
- regex: (.*)
- target_label: namespace
- replacement: $1
- action: replace
- - source_labels: [__meta_kubernetes_service_name]
- separator: ;
- regex: (.*)
- target_label: service
- replacement: $1
- action: replace
- - source_labels: [__meta_kubernetes_pod_name]
- separator: ;
- regex: (.*)
- target_label: pod
- replacement: $1
- action: replace
- - source_labels: [__meta_kubernetes_service_name]
- separator: ;
- regex: (.*)
- target_label: job
- replacement: ${1}
- action: replace
- - separator: ;
- regex: (.*)
- target_label: endpoint
- replacement: web
- action: replace
- # 指标 relabel 的配置, 如丢掉某些无用的指标
- metric_relabel_configs:
- - source_labels: [__name__]
- separator: ;
- regex: etcd_(debugging|disk|request|server).*
- replacement: $1
- action: drop
3, 常见案例
1. 获取集群中各节点信息, 并按可用区或地域分类
如使用 k8s 的 role:node 采集集群中 node 的数据, 可以通过 "meta_domain_beta_kubernetes_io_zone" 标签来获取到该节点的地域, 该 label 为集群创建时为 node 打上的标记, kubectl decribe node 可以看到.
然后可以通过 relabel_configs 定义新的值
- relabel_configs:
- - source_labels: ["meta_domain_beta_kubernetes_io_zone"]
- regex: "(.*)"
- replacement: $1
- action: replace
- target_label: "zone"
后面可以直接通过 node{zone="XX"}来进行地域筛选
2. 过滤信息, 或者按照职能 (RD, 运维) 进行监控管理
对于不同职能 (开发, 测试, 运维) 的人员可能只关心其中一部分的监控数据, 他们可能各自部署的自己的 Prometheus Server 用于监控自己关心的指标数据, 不必要的数据需要过滤掉, 以免浪费资源, 可以最类似配置;
- metric_relabel_configs:
- - source_labels: [__name__]
- separator: ;
- regex: etcd_(debugging|disk|request|server).*
- replacement: $1
- action: drop
action: drop 代表丢弃掉符合条件的指标, 不进行采集.
3. 搭建 prometheus 联邦集群, 管理各 IDC(地域)监控实例
如果存在多个地域, 每个地域又有很多节点或者集群, 可以采用默认的联邦集群部署, 每个地域部署自己的 prometheus server 实例, 采集自己地域的数据. 然后由统一的 server 采集所有地域数据, 进行统一展示, 并按照地域归类
配置:
- scrape_configs:
- - job_name: 'federate'
- scrape_interval: 15s
- honor_labels: true
- metrics_path: '/federate'
- params:
- 'match[]':
- - '{job="prometheus"}'
- - '{__name__=~"job:.*"}'
- - '{__name__=~"node.*"}'
- static_configs:
- - targets:
- - '192.168.77.11:9090'
- - '192.168.77.12:9090'
4, 服务发现
- [[email protected]_0_14_centos prometheus]# cat prometheus.YAML
- # 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).
- # Alertmanager configuration
- alerting:
- alertmanagers:
- - static_configs:
- - targets:
- - 172.18.0.1:9093
- # Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
- rule_files:
- # - "first_rules.yml"
- # - "second_rules.yml"
- - "alert_rules/rules.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']
- labels:
- idc: bj
- - job_name: 'harbor_server'
- file_sd_configs: #### 基于文件的发现
- - files:
- - /opt/prometheus/file_sd_configs/harbor_monitor.JSON ###
- refresh_interval: 10s
- - job_name: 'container'
- static_configs:
- - targets: ['172.18.0.1:8080']
配置文件:
- [[email protected]_0_14_centos prometheus]# cat /opt/prometheus/file_sd_configs/harbor_monitor.JSON
- [
- {
- "targets": ["172.19.0.14:9100","124.156.173.164:9100"]
- }
- ]
来源: http://www.bubuko.com/infodetail-3155833.html