使用 Prometheus 和 Grafana 进行监视

您可以使用 Prometheus 和 Grafana 监视 SUSE Manager 环境。SUSE Manager Server 和 Proxy 能够提供自我运行状况监视度量。您还可以在 Salt 客户端上安装和管理一些 Prometheus 导出器。

Prometheus 和 Grafana 软件包包含在以下发行套件的 SUSE Manager 客户端工具中:

  • SUSE Linux Enterprise 12

  • SUSE Linux Enterprise 15

  • openSUSE Leap 15.x

需要在不包含 SUSE Manager Server 的计算机上安装 Prometheus 和 Grafana。我们建议使用受管 Salt SUSE 客户端作为监视服务器。不支持使用其他客户端作为监视服务器。

Prometheus 使用拉取机制提取度量,因此服务器必须能够与受监视客户端建立 TCP 连接。客户端上必须打开相应的端口,并且必须可以通过网络访问客户端。或者,您可以使用反向代理来建立连接。

对于您要监视的每个客户端,必须有一个监视附加订阅。访问 SUSE Customer Center 以管理您的 SUSE Manager 订阅。

1. Prometheus 和 Grafana

1.1. Prometheus

Prometheus 是一个开源监视工具,用于在时序数据库中记录实时度量。度量通过 HTTP 拉取,从而可以实现高性能和可伸缩性。

Prometheus 度量是时序数据,或者是属于同一个组或维度的带时间戳值。度量由其名称和一组标签唯一标识。

   度量名称               标签                 时间戳     值
┌────────┴───────┐  ┌───────────┴───────────┐    ┌──────┴──────┐  ┌─┴─┐
http_requests_total{status="200", method="GET"}  @1557331801.111  42236

每个受监视的应用程序或系统必须通过代码检测或 Prometheus 导出器按上述格式公开度量。

1.2. Prometheus 导出器

导出器是帮助将第三方系统中的度量作为 Prometheus 度量导出的库。每当无法直接使用 Prometheus 度量检测给定的应用程序或系统时,导出器就很有作用。可以在受监视主机上运行多个导出器以导出本地度量。

Prometheus 社区提供了官方导出器的列表,还有其他一些作为社区贡献内容提供的导出器。有关详细信息和导出器的详细列表,请参见 https://prometheus.io/docs/instrumenting/exporters/

1.3. Grafana

Grafana 是一个数据可视化、监视和分析工具。它用于创建仪表板,其中的面板代表设置时间段内的特定度量。Grafana 通常与 Prometheus 一起使用,但也支持 ElasticSearch、MySQL、PostgreSQL 和 Influx DB 等其他数据源。有关 Grafana 的详细信息,请参见 https://grafana.com/docs/

2. 设置监视服务器

要设置监视服务器,需要安装 Prometheus 和 Grafana 并对其进行配置。

2.1. 安装 Prometheus

如果您的监视服务器是 Salt 客户端,则您可以使用 SUSE Manager Web UI 安装 Prometheus 软件包。否则,可以在监视服务器上手动下载并安装该软件包。Prometheus 软件也可用于 SUSE Manager Proxy 和 SUSE Manager for Retail Branch Server。

  • 要在服务器容器内访问外壳,请在容器主机上运行 mgrctl term

  • 要从容器内部复制文件,请使用 mgrctl cp

Prometheus 需要使用 POSIX 文件系统来存储数据。不支持不符合 POSIX 标准的文件系统,因此不支持 NFS 文件系统。

过程:使用 Web UI 安装 Prometheus
  1. 在 SUSE Manager Web UI 中,打开要在其中安装 Prometheus 的系统的细节页面,然后导航到公式选项卡。

  2. 选中 Prometheus 复选框以启用监视公式,然后单击 保存

  3. 在顶部菜单中导航到 Prometheus 选项卡。

  4. SUSE Manager Server 部分,输入有效的 SUSE Manager API 身份凭证。 确保您输入的身份凭证允许访问您要监视的系统集。

  5. 根据需要自定义任何其他配置选项。

  6. 单击 保存公式

  7. 应用 Highstate 并确认它成功完成。

  8. 检查 Prometheus 界面是否正常加载。在浏览器中,使用端口 9090 导航到安装了 Prometheus 的服务器的 URL(例如 http://example.com:9090)。

有关监视公式的详细信息,请参见 Monitoring Formula

过程:手动安装和配置 Prometheus
  1. 在监视服务器上,安装 golang-github-prometheus-prometheus 软件包:

    zypper in golang-github-prometheus-prometheus
  2. 启用 Prometheus 服务:

    systemctl enable --now prometheus
  3. 检查 Prometheus 界面是否正常加载。 在浏览器中,使用端口 9090 导航到安装了 Prometheus 的服务器的 URL(例如 http://example.com:9090)。

  4. 打开配置文件 /etc/prometheus/prometheus.yml 并添加以下配置信息。 请将 server.url 替换为您的 SUSE Manager 服务器 URL,并调整 usernamepassword 字段以便与您的 SUSE Manager 身份凭证匹配。

    # {productname} self-health metrics
    scrape_configs:
    - job_name: 'mgr-server'
      static_configs:
        - targets:
          - 'server.url:9100'  # Node exporter
          - 'server.url:9187'  # PostgreSQL exporter
          - 'server.url:5556'  # JMX exporter (Tomcat)
          - 'server.url:5557'  # JMX exporter (Taskomatic)
          - 'server.url:9800'  # Taskomatic
        - targets:
          - 'server.url:80'    # Message queue
          labels:
            __metrics_path__: /rhn/metrics
    
    # Managed systems metrics:
    - job_name: 'mgr-clients'
      uyuni_sd_configs:
       - server: "http://server.url"
         username: "admin"
         password: "admin"
      relabel_configs:
       - source_labels: [__meta_uyuni_exporter]
         target_label: exporter
       - source_labels: [__address__]
         replacement: "No group"
         target_label: groups
       - source_labels: [__meta_uyuni_groups]
         regex: (.+)
         target_label: groups
       - source_labels: [__meta_uyuni_minion_hostname]
         target_label: hostname
       - source_labels: [__meta_uyuni_primary_fqdn]
         regex: (.+)
         target_label: hostname
       - source_labels: [hostname, __address__]
         regex: (.*);.*:(.*)
         replacement: ${1}:${2}
         target_label: __address__
       - source_labels: [__meta_uyuni_metrics_path]
         regex: (.+)
         target_label: __metrics_path__
       - source_labels: [__meta_uyuni_proxy_module]
         target_label: __param_module
       - source_labels: [__meta_uyuni_scheme]
         target_label: __scheme__
  5. 保存该配置文件。

  6. 重启动 Prometheus 服务:

    systemctl restart prometheus

有关 Prometheus 配置选项的详细信息,请参见 https://prometheus.io/docs/prometheus/latest/configuration/configuration/ 上的 Prometheus 官方文档。

2.2. 安装 Grafana

如果监视服务器是 SUSE Manager 管理的客户端,则您可以使用 SUSE Manager Web UI 安装 Grafana 软件包。否则,可以在监视服务器上手动下载并安装该软件包。

不可以在 SUSE Manager Proxy 上使用 Grafana。

过程:使用 Web UI 安装 Grafana
  1. 在 SUSE Manager Web UI 中,打开要在其中安装 Grafana 的系统的细节页面,然后导航到公式选项卡。

  2. 选中 Grafana 复选框以启用监视公式,然后单击 保存

  3. 在顶部菜单中导航到 Grafana 选项卡。

  4. 启用并配置 Grafana部分,输入用于登录 Grafana 的管理员身份凭证。

  5. 数据源部分,确保 Prometheus URL 字段指向运行 Prometheus 的系统。

  6. 根据需要自定义任何其他配置选项。

  7. 单击 保存公式

  8. 应用 Highstate 并确认它成功完成。

  9. 检查 Grafana 界面是否正常加载。在浏览器中,使用端口 3000 导航到安装了 Grafana 的服务器的 URL(例如 http://example.com:3000)。

SUSE Manager 为服务器自我运行状况监视度量、基本客户端监视等信息提供预构建的仪表板。您可以在公式配置页面中选择要置备的仪表板。

过程:手动安装 Grafana
  1. 安装 grafana 软件包:

    zypper in grafana
  2. 启用 Grafana 服务:

    systemctl enable --now grafana-server
  3. 在浏览器中,导航到安装了 Grafana 的服务器的 URL,使用端口 3000(例如 http://example.com:3000)。

  4. 在登录页面中,输入 admin 作为用户名和口令。

  5. 单击 登录。 如果成功登录,您将会看到要求您更改口令的提示。

  6. 针对提示单击 确定,然后更改您的口令。

  7. 将光标移到边栏菜单中的齿轮图标上,配置选项即会显示。

  8. 单击 数据源

  9. 单击 添加数据源 会看到支持的所有数据源列表。

  10. 选择 Prometheus 数据源。

  11. 务必指定正确的 Prometheus 服务器 URL。

  12. 单击 保存并测试

  13. 要导入仪表板,请单击边栏菜单中的 + 图标,然后单击 导入

  14. 对于 SUSE Manager 服务器概览,请加载仪表板 ID:17569

  15. 对于 SUSE Manager 客户端概览,请加载仪表板 ID:17570

    monitoring grafana example

3. 配置 SUSE Manager 监视

在 SUSE Manager 4 和更高版本中,您可以让服务器公开 Prometheus 自我运行状况监视度量,并可以在客户端系统上安装和配置导出器。

3.1. 服务器自我监视

服务器自我运行状况监视度量涵盖了硬件、操作系统和 SUSE Manager 内部组件。这些度量是结合 Prometheus 导出器通过 Java 应用程序检测提供的。

SUSE Manager 服务器随附了以下导出器:

SUSE Manager Proxy 随附了以下导出器软件包:

导出器已预安装在 SUSE Manager 服务器和代理中,但其各自的 systemd 守护程序默认已禁用。

过程:启用自我监视
  1. 在 SUSE Manager Web UI 中,导航到管理  管理器配置  监视

  2. 单击 启用服务

  3. 重启动 Tomcat 和 Taskomatic。

  4. 使用端口 9090 导航到 Prometheus 服务器的 URL(例如 http://example.com:9090

  5. 在 Prometheus UI 中,导航到状态  目标并确认 mgr-server 组中的所有端点都已启动。

  6. 如果您还使用 Web UI 安装了 Grafana,则可以通过 SUSE Manager 服务器仪表板上的管理  管理器配置  监视查看服务器深入信息。

只能使用 Web UI 启用服务器自我运行状况监视。Prometheus 不会自动收集代理的度量。要在代理上启用自我运行状况监视,需要手动安装导出器并启用它们。

在 SUSE Manager 服务器上收集以下相关度量。

Table 1. 服务器统计数据(端口 80)
度量 类型 说明

uyuni_all_systems

计量器

所有系统数

uyuni_virtual_systems

计量器

虚拟系统数

uyuni_inactive_systems

计量器

非活动系统数

uyuni_outdated_systems

计量器

安装了过时软件包的系统数

Table 2. PostgreSQL 导出器(端口 9187)
度量 类型 说明

pg_stat_database_tup_fetched

计数器

查询提取的行数

pg_stat_database_tup_inserted

计数器

查询插入的行数

pg_stat_database_tup_updated

计数器

查询更新的行数

pg_stat_database_tup_deleted

计数器

查询删除的行数

mgr_serveractions_completed

计量器

完成的操作数

mgr_serveractions_failed

计量器

失败的操作数

mgr_serveractions_picked_up

计量器

拾取的操作数

mgr_serveractions_queued

计量器

排队的操作数

Table 3. JMX 导出器(Tomcat 端口 5556、Taskomatic 端口 5557)
度量 类型 说明

java_lang_Threading_ThreadCount

计量器

活动线程数

java_lang_Memory_HeapMemoryUsage_used

计量器

当前堆内存使用量

Table 4. 服务器消息队列(端口 80)
度量 类型 说明

message_queue_thread_pool_threads

计数器

到目前为止创建的消息队列线程数

message_queue_thread_pool_threads_active

计量器

当前处于活动状态的消息队列线程数

message_queue_thread_pool_task_count

计数器

到目前为止提交的任务数

message_queue_thread_pool_completed_task_count

计数器

到目前为止完成的任务数

Table 5. Salt 队列(端口 80)
度量 类型 说明

salt_queue_thread_pool_size

计量器

每个 Salt 队列创建的线程数

salt_queue_thread_pool_active_threads

计量器

每个队列当前处于活动状态的 Salt 线程数

salt_queue_thread_pool_task_total

计数器

每个队列已提交的任务数

salt_queue_thread_pool_completed_task_total

计数器

每个队列已完成的任务数

每个 salt_queue 值都有一个名为 queue 值为队列编号的标签。

Table 6. Taskomatic 日程安排程序(端口 9800)
度量 类型 说明

taskomatic_scheduler_threads

计数器

到目前为止创建的日程安排程序线程数

taskomatic_scheduler_threads_active

计量器

当前处于活动状态的日程安排程序线程数

taskomatic_scheduler_completed_task_count

计数器

到目前为止完成的任务数

3.2. 监视受管系统

可以使用公式在 Salt 客户端上安装和配置 Prometheus 度量导出器。这些软件包可以从 SUSE Manager 客户端工具通道获得,并且可以直接在 SUSE Manager Web UI 中启用和配置。

可将这些导出器安装在受管系统上:

在 SLE Micro 上,只能使用 Node Exporter 和 Blackbox Exporter。

安装并配置导出器后,您可以开始使用 Prometheus 从受监视系统收集度量。如果您已使用 Web UI 配置了监视服务器,则会自动收集度量。

过程:在客户端上配置 Prometheus 导出器
  1. 在 SUSE Manager Web UI 中,打开要监视的客户端的细节页面,并导航到公式选项卡。

  2. 选中 Prometheus 导出器公式对应的已启用复选框。

  3. 单击 保存

  4. 导航到公式  Prometheus 导出器选项卡。

  5. 选择要启用的导出器并根据需要自定义参数。 地址字段接受冒号开头的端口号 (:9100) 或完全可解析的地址 (example:9100)。

  6. 单击 保存公式

  7. 应用 highstate。

还可为系统组配置监视公式,只需应用相应组中各个系统使用的同一种配置即可。

有关监视公式的详细信息,请参见 Monitoring Formula

3.3. 更改 Grafana 口令

要更改 Grafana 口令,请按照 Grafana 文档中所述的步骤操作:

如果您忘记了 Grafana 管理员口令,可以使用以下命令将其重设置为 root

grafana-cli --configOverrides cfg:default.paths.data=/var/lib/grafana --homepath /usr/share/grafana admin reset-admin-password <新口令>

4. 网络边界

Prometheus 使用拉取机制提取度量,因此服务器必须能够与受监视客户端建立 TCP 连接。Prometheus 默认使用以下端口:

  • Node 导出器:9100

  • PostgreSQL 导出器:9187

  • Apache 导出器:9117

此外,如果您不是在运行 Prometheus 的同一台主机上运行警报管理器,则还需要在所在主机上打开端口 9093。警报管理器是 Prometheus 解决方案的一部分。它处理客户端应用程序(如 Prometheus 服务器实例)发送的警报。有关警报管理器的详细信息,请参见 https://prometheus.io/docs/alerting/latest/alertmanager/

对于安装在云实例上的客户端,可以将所需的端口添加到有权访问监视服务器的安全组中。

或者,可以在导出器的本地网络中部署 Prometheus 实例,并配置联合。这样,主监视服务器就能从本地 Prometheus 实例中抓取时序。如果您使用此方法,只需要打开 Prometheus API 端口 (9090) 即可。

有关 Prometheus 联合的详细信息,请参见 https://prometheus.io/docs/prometheus/latest/federation/

您还可以通过网络边界来中转请求。PushProx 等工具会在网络屏障的两端部署代理和客户端,并允许 Prometheus 跨网络拓扑(例如 NAT)工作。

有关 PushProx 的详细信息,请参见 https://github.com/RobustPerception/PushProx

4.1. 反向代理设置

Prometheus 使用拉取机制提取度量,因此服务器必须能够与受监视客户端上的每个导出器建立 TCP 连接。为了简化防火墙配置,可为导出器使用反向代理,以便在单个端口上公开所有度量。

过程:安装使用反向代理的 Prometheus 导出器
  1. 在 SUSE Manager Web UI 中,打开要监视的系统的细节页面,并导航到公式选项卡。

  2. 选中 Prometheus 导出器复选框以启用导出器公式,然后单击 保存

  3. 在顶部菜单中导航到 Prometheus 导出器选项卡。

  4. 选中启用反向代理选项,并输入有效的反向代理端口号。 例如 9999

  5. 根据需要自定义其他导出器。

  6. 单击 保存公式

  7. 应用 Highstate 并确认它成功完成。

有关监视公式的详细信息,请参见 Monitoring Formula

5. 安全

Prometheus 服务器和 Prometheus Node 导出器提供内置机制用于通过 TLS 加密和身份验证来保护其端点。SUSE Manager Web UI 简化了所有相关组件的配置。TLS 证书必须由用户提供和部署。在 SUSE Manager 中可以启用以下安全模型:

  • Node 导出器:TLS 加密和基于客户端证书的身份验证

  • Prometheus:TLS 加密和基本身份验证

有关配置所有可用选项的详细信息,请参见 Monitoring Formula

5.1. 生成 TLS 证书

默认情况下,SUSE Manager 不提供任何用于保护监视配置的证书。为了提供安全性,您可以生成或导入自定义证书,包括自我签名证书或由第三方证书颁发机构 (CA) 签名的证书。

本章说明如何为使用 SUSE Manager CA 自我签名的 Prometheus 和 Node 导出器受控端生成客户端/服务器证书。

过程:创建服务器/客户端 TLS 证书
  1. 在 SUSE Manager Server 上的命令提示符下运行以下命令:

    rhn-ssl-tool --gen-server --dir="/root/ssl-build" --set-country="COUNTRY" \
    --set-state="STATE" --set-city="CITY" --set-org="ORGANIZATION" \
    --set-org-unit="ORGANIZATION UNIT" --set-email="name@example.com" \
    --set-hostname="minion.example.com" --set-cname="minion.example.com" --no-rpm

    确保 set-cname 参数是您的 Salt 客户端的完全限定域名 (FQDN)。如果需要多个别名,可以多次使用 set-cname 参数。

  2. server.crtserver.key 文件复制到 Salt 受控端,并为 prometheus 用户提供读取访问权限。