# 全局配置global:scrape_interval: 15s # 多久 收集 一次数据evaluation_interval: 30s # 多久评估一次 规则scrape_timeout: 10s # 每次 收集数据的 超时时间# 当Prometheus和外部系统(联邦, 远程存储, Alertmanager)通信的时候,添加标签到任意的时间序列或者报警external_labels:monitor: codelabfoo: bar# 规则文件, 可以使用通配符rule_files:- "first.rules"- "my/*.rules"# 远程写入功能相关的设置remote_write:- url: http://remote1/pushwrite_relabel_configs:- source_labels: [__name__]regex: expensive.*action: drop- url: http://remote2/push# 远程读取相关功能的设置remote_read:- url: http://remote1/readread_recent: true- url: http://remote3/readread_recent: falserequired_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.ymlrefresh_interval: 10m # 刷新文件的 时间间隔- files:- bar/*.yaml# 使用job名作为label的 静态配置目录 的 列表static_configs:- targets: ['localhost:9090', 'localhost:9191']labels:my: labelyour: 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: statictarget_label: abc- regex:replacement: statictarget_label: abcbearer_token_file: valid_token_file # 可选的, bearer token 文件的信息- job_name: service-x# HTTP basic 认证信息basic_auth:username: admin_namepassword: "multiline\nmysecret\ntest"scrape_interval: 50s # 对于该job, 多久收集一次数据scrape_timeout: 5ssample_limit: 1000 # 每次 收集 样本数据的限制. 0 为不限制metrics_path: /my_path # 从目标 获取数据的 HTTP 路径scheme: https # 配置用于请求的协议方案# DNS 服务发现 配置列表dns_sd_configs:- refresh_interval: 15snames: # 要查询的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: 8target_label: __tmp_hashaction: hashmod- source_labels: [__tmp_hash]regex: 1action: keep- action: labelmapregex: 1- action: labeldropregex: d- action: labelkeepregex: 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: mysecretservices: ['nginx', 'cache', 'mysql'] # 被检索目标的 服务 列表. 如果不定义那么 所有 服务 都会被 收集scheme: httpstls_config:ca_file: valid_ca_filecert_file: valid_cert_filekey_file: valid_key_fileinsecure_skip_verify: falserelabel_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_filekey_file: valid_key_filebearer_token: mysecret- job_name: service-kubernetes# kubernetes 服务 发现 列表kubernetes_sd_configs:- role: endpoints # 必须写, 必须是endpoints, service, pod, node, 或者 ingressapi_server: 'https://localhost:1234'basic_auth: # HTTP basic 认证信息username: 'myusername'password: 'mysecret'- job_name: service-kubernetes-namespaceskubernetes_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_filekey_file: valid_key_file- job_name: service-ec2ec2_sd_configs:- region: us-east-1access_key: accesssecret_key: mysecretprofile: profile- job_name: service-azureazure_sd_configs:- subscription_id: 11AAAA11-A11A-111A-A111-1111A1111A11tenant_id: BBBB222B-B2B2-2B22-B222-2BB2222BB2B2client_id: 333333CC-3C33-3333-CCC3-33C3CCCCC33Cclient_secret: mysecretport: 9100- job_name: service-nervenerve_sd_configs:- servers:- localhostpaths:- /monitoring- job_name: 0123service-xxxmetrics_path: /metricsstatic_configs:- targets:- localhost:9090- job_name: 測試metrics_path: /metricsstatic_configs:- targets:- localhost:9090- job_name: service-tritontriton_sd_configs:- account: 'testAccount'dns_suffix: 'triton.example.com'endpoint: 'triton.example.com'port: 9163refresh_interval: 1mversion: 1tls_config:cert_file: testdata/valid_cert_filekey_file: testdata/valid_key_file# Alertmanager相关的配置alerting:alertmanagers:- scheme: httpsstatic_configs:- targets:- "1.2.3.4:9093"- "1.2.3.5:9093"- "1.2.3.6:9093"
配置修改后从新加载配置:
启动参数加上enable-lifecycle
docker run --name prometheus -d -p 9090:9090 --restart=always -v /opt/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml -v /opt/prometheus/rules.yml:/opt/prometheus/rules.yml prom/prometheus --config.file=/etc/prometheus/prometheus.yml --web.enable-lifecycle
# 第一种,向prometheus进行发信号
kill -HUP pid
# 第二种,向prometheus发送HTTP请求
# /-/reload只接收POST请求,并且需要在启动prometheus进程时,指定 --web.enable-lifecycle
curl -XPOST http://prometheus.chenlei.com/-/reload
显示如下内容即重启成功
