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 将创建以下用户:admingrafana(如果启用了 grafana)和 skyline(如果启用了 skyline)。可以使用变量 prometheus_grafana_user 覆盖 grafana 用户名,可以使用变量 prometheus_skyline_user 覆盖 skyline 用户名。密码由 passwords.yml 中的 prometheus_passwordprometheus_grafana_passwordprometheus_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 %}

作业 customcustom_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 指定这些地址,使我们能够在无法为所有主机提供事实信息的情况下运行。这可能是由于某些主机无法访问或之前失败所致。