Prometheus通过命令行标志和配置文件进行配置。虽然命令行标志配置了不可变的系统参数(例如存储位置,保留在磁盘和内存中的数据量等),但配置文件定义了与抓取作业及其实例相关的所有内容,以及哪些规则文件加载。
要查看所有可用的命令行标志,请运行​​​./prometheus -h​​​。
Prometheus可以在运行时重新加载其配置。如果新配置格式不正确,则不会应用更改。通过向Prometheus进程发送 ​​​SIGHUP​​​ 信号或使用HTTP 发送reload的POST请求命令发送( ​​--web.enable-lifecycle​​ 启用标志时)来触发配置重新加载。这也将重新加载任何已配置的规则文件。

一、配置文件中的占位符


该文件以YAML格式编写,由下面描述的方案定义。括号表示参数是可选的。对于非列表参数,该值设置为指定的默认值。
通用占位符定义如下:

  1. <boolean>:一个可以取值true或的值的布尔值false
  2. <duration>:与正则表达式匹配的持续时间 [0-9]+(ms|[smhdwy])
  3. <labelname>:与正则表达式匹配的字符串 [a-zA-Z_][a-zA-Z0-9_]*
  4. <labelvalue>:一串unicode字符
  5. <filename>:当前工作目录中的有效路径
  6. <host>:由主机名或IP后跟可选端口号组成的有效字符串
  7. <path>:有效的URL路径
  8. <scheme>:一个可以取值http或的字符串https
  9. <string>:常规字符串
  10. <secret>:一个秘密的常规字符串,例如密码
  11. <tmpl_string>:使用前模板展开的字符串

其他占位符是单独指定的。

 

二、配置文件示例解析


# 配置文件中的全局配置
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_config部分指定了一组目标和参数,描述了如何抓取它们。
# 在一般情况下,一个抓取资源配置指定一个作业。在高级配置中,这可能会改变。
# 可以通过static_configs参数静态配置目标,也可以使用支持的服务发现机制之一动态发现目标。
# 此外,relabel_configs 允许在抓取之前对任何目标及其标签进行高级修改。

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'.


# 文件服务发现配置 列表
#基于文件的服务发现提供了一种更通用的方法来配置静态目标,并用作插入自定义服务发现机制的接口。
#它读取一组包含零个或多个<static_config>列表的文件。
#对所有定义文件的更改都会通过磁盘监视检测到并立即应用。
#文件可以yaml或json格式提供。仅应用形成良好目标组的更改。
file_sd_configs:
- files: # 从这些文件中提取目标
- foo/*.slow.json
- single/file.yml
refresh_interval: 10m # 刷新文件的 时间间隔
# 使用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 文件的信息

# Alertmanager相关的配置
alerting:
alertmanagers:
- scheme: https
static_configs:
- targets:
- "1.2.3.4:9093"
- "1.2.3.5:9093"