Prometheus - 监控系统 & 时序数据库¶
概述¶
Kolla 可以部署一个完整的 Prometheus 设置,可以选择一体化或多节点模式。
准备和部署¶
要启用 Prometheus,请修改配置文件 /etc/kolla/globals.yml 并进行以下更改
enable_prometheus: "yes"
注意:这将部署 Prometheus 2.x 版本。之前 Kolla Ansible 版本部署的任何潜在的 Prometheus 1.x 实例都将与当前版本冲突,应手动停止和/或删除。如果您想继续使用 1.x 版本,请将 enable_prometheus 变量设置为 no。
为了删除包含 Prometheus 1.x 数据的残留卷,请执行
docker volume rm prometheus
在之前部署过 Prometheus 的所有主机上。
基本认证¶
Prometheus 使用基本 HTTP 身份验证进行保护。 Kolla-ansible 将创建以下用户:admin、grafana(如果启用了 grafana)和 skyline(如果启用了 skyline)。可以使用变量 prometheus_grafana_user 覆盖 grafana 用户名,可以使用变量 prometheus_skyline_user 覆盖 skyline 用户名。密码由 passwords.yml 中的 prometheus_password、prometheus_grafana_password 和 prometheus_skyline_password 变量定义。可以使用 prometheus_basic_auth_users_extra 变量扩展基本身份验证用户列表
prometheus_basic_auth_users_extra:
- username: user
password: hello
enabled: true
或使用 prometheus_basic_auth_users 变量完全覆盖。
扩展默认命令行选项¶
可以使用自定义变量来扩展 Prometheus 的默认命令行选项。例如,要将查询超时设置为 1 分钟,将数据保留大小设置为 30 GB
prometheus_cmdline_extras: "--query.timeout=1m --storage.tsdb.retention.size=30GB"
配置选项¶
选项 |
默认值 |
描述 |
|---|---|---|
prometheus_scrape_interval |
60s |
所有作业的默认抓取间隔 |
扩展 prometheus.cfg¶
如果您想添加额外的目标进行抓取,可以通过将其他配置放置在 {{ node_custom_config }}/prometheus/prometheus.yml.d 中来扩展默认 prometheus.yml 配置文件。这些应具有与 prometheus.yml 相同的格式。这些额外的配置将被合并,因此任何列表项都将被扩展。例如,如果使用 node_custom_config 的默认值,您可以定义 /etc/kolla/config/prometheus/prometheus.yml.d/10-custom.yml 来添加额外的目标进行抓取,内容如下
scrape_configs:
- job_name: custom
static_configs:
- targets:
- '10.0.0.111:1234'
- job_name: custom-template
static_configs:
- targets:
{% for host in groups['prometheus'] %}
- '{{ hostvars[host][('ansible_' + hostvars[host]['api_interface'] | replace('-','_'))]['ipv4']['address'] }}:{{ 3456 }}'
{% endfor %}
作业 custom 和 custom_template 将被附加到最终 prometheus.yml 中的默认 scrape_configs 列表。要按主机自定义,文件也可以放置在 {{ node_custom_config }}/prometheus/<inventory_hostname>/prometheus.yml.d 中,其中 inventory_hostname 是您清单中的一个主机。这些将与 {{ node_custom_config }}/prometheus/prometheus.yml.d 中的任何文件合并,因此为了覆盖列表值而不是扩展它,您需要确保 {{ node_custom_config }}/prometheus/prometheus.yml.d 中的任何文件都不会设置具有等效层次路径的键。
额外文件¶
有时需要在 prometheus.yml 内部引用其他文件,例如在定义文件服务发现配置时。为了使您能够执行此操作,kolla-ansible 将递归地发现 {{ node_custom_config }}/prometheus/extras 中的任何文件并对其进行模板处理。模板化输出将在启动时复制到容器内的 /etc/prometheus/extras 中。例如,要配置 ipmi_exporter,使用 node_custom_config 的默认值,您可以创建以下文件
/etc/kolla/config/prometheus/prometheus.yml.d/ipmi-exporter.yml:--- scrape_configs: - job_name: ipmi params: module: ["default"] scrape_interval: 1m scrape_timeout: 30s metrics_path: /ipmi scheme: http file_sd_configs: - files: - /etc/prometheus/extras/file_sd/ipmi-exporter-targets.yml refresh_interval: 5m relabel_configs: - source_labels: [__address__] separator: ; regex: (.*) target_label: __param_target replacement: ${1} action: replace - source_labels: [__param_target] separator: ; regex: (.*) target_label: instance replacement: ${1} action: replace - separator: ; regex: .* target_label: __address__ replacement: "{{ ipmi_exporter_listen_address }}:9290" action: replace
其中
ipmi_exporter_listen_address是一个包含运行导出器的主机 IP 地址的变量。/etc/kolla/config/prometheus/extras/file_sd/ipmi-exporter-targets.yml:--- - targets: - 192.168.1.1 labels: job: ipmi_exporter
指标实例标签¶
以前,Prometheus 指标使用 IP 地址对实例进行标记。现在可以更改此行为,以便可以使用库存主机名对实例进行标记。IP 地址仍然是目标地址,因此即使主机名无法解析,也不会造成问题。
默认行为仍然使用 IP 地址标记实例。但是,可以通过更改 prometheus_instance_label 变量来调整此设置。此变量接受以下值
None:实例标签将是 IP 地址(默认值){{ ansible_facts.hostname }}:实例标签将是主机名{{ ansible_facts.nodename }}:实例标签将是 FQDN
要实现此功能,请修改配置文件 /etc/kolla/globals.yml 并相应地更新 prometheus_instance_label 变量。请记住,更改此变量将导致 Prometheus 使用新的名称抓取指标一段时间。这将导致重复的指标,直到所有指标都替换为新的标签为止。
prometheus_instance_label: "{{ ansible_facts.hostname }}"
此指标标记功能将来可能会成为默认设置。因此,如果您希望保留当前的默认设置(IP 地址标签),请确保将 prometheus_instance_label 变量设置为 None。
注意
此功能在 Prometheus 更新指标标签时可能会暂时生成重复的指标。请注意在过渡期间分析指标时的情况。
导出器配置¶
节点导出器¶
有时,监控 Kolla 部署之外的主机可能很有用。实现此目的的一种方法是使用 prometheus_node_exporter_targets_extra 变量配置额外的目标列表。其格式应为包含以下键的字典列表
target:要抓取的节点导出器的 URL
labels:(可选)要设置为从此导出器抓取的指标的标签列表。
例如
/etc/kolla/globals.yml¶prometheus_node_exporter_targets_extra:
- target: http://10.0.0.1:1234
labels:
instance: host1
目标地址¶
默认情况下,Prometheus 服务器在收集指标时使用抓取目标的 API 接口的 IP。可以通过设置主机变量 prometheus_target_address 来覆盖此设置。此主机变量的值必须是有效的 IPv4 或 IPv6 地址。
Prometheus 服务器是少数几个需要知道云中所有其他主机 IP 地址的实例之一。能够通过 prometheus_target_address 指定这些地址,使我们能够在无法为所有主机提供事实信息的情况下运行。这可能是由于某些主机无法访问或之前失败所致。