使用 Prometheus 和 Grafana 进行监控

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

1. 要求

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

  • SUSE Linux Enterprise 15

  • SUSE Linux Enterprise 16

  • openSUSE Leap 15.x

  • openSUSE Leap 16.x

仅支持使用上述列出的客户端作为监控服务器。

您需要在一台与 SUSE Multi-Linux Manager 服务器相互独立的计算机上安装 Prometheus 和 Grafana。我们建议使用受管 Salt SUSE 客户端作为监控服务器。

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

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

2. Prometheus 和 Grafana

2.1. Prometheus

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

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

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

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

2.2. Prometheus 导出器

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

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

2.3. Grafana

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

3. 设置监控服务器

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

仅支持使用 SUSE 客户端作为监控服务器。如需完整列表,请参见 要求

3.1. 安装 Prometheus

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

  • To access a shell inside the SUSE Multi-Linux Manager Server container run mgrctl term on the container host, or to execute one command run mgrctl exec <options> — <command>.

  • To copy files from inside the container to the container host use mgrctl cp.

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

过程:使用 Web UI 安装 Prometheus
  1. In the SUSE Multi-Linux Manager Web UI, open the details page of the system where Prometheus is to be installed, and navigate to the Formulas tab.

  2. Check the Prometheus checkbox to enable monitoring formulas, and click Save.

  3. Navigate to the Prometheus tab in the top menu.

  4. In the SUSE Multi-Linux Manager Server section, enter valid SUSE Multi-Linux Manager API credentials. 确保您输入的身份凭证允许访问您要监控的系统集。

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

  6. 单击 保存公式

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

  8. Check that the Prometheus interface loads correctly. In your browser, navigate to the URL of the server where Prometheus is installed, on port 9090 (for example, http://example.com:9090).

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

过程:手动安装和配置 Prometheus
  1. On the monitoring server, install the golang-github-prometheus-prometheus package:

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

    systemctl enable --now prometheus
  3. Check that the Prometheus interface loads correctly. In your browser, navigate to the URL of the server where Prometheus is installed, on port 9090 (for example, http://example.com:9090).

  4. Open the configuration file at /etc/prometheus/prometheus.yml and add this configuration information. Replace server.url with your SUSE Multi-Linux Manager server URL and adjust username and password fields to match your SUSE Multi-Linux Manager credentials.

    # {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 官方文档。

3.2. 安装 Grafana

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

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

过程:使用 Web UI 安装 Grafana
  1. In the SUSE Multi-Linux Manager Web UI, open the details page of the system where Grafana is to be installed, and navigate to the Formulas tab.

  2. Check the Grafana checkbox to enable monitoring formulas, and click Save.

  3. Navigate to the Grafana tab in the top menu.

  4. In the Enable and configure Grafana section, enter the admin credentials you want to use to log in Grafana.

  5. On the Datasources section, make sure that the Prometheus URL field points to the system where Prometheus is running.

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

  7. 单击 保存公式

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

  9. Check that the Grafana interface is loading correctly. In your browser, navigate to the URL of the server where Grafana is installed, on port 3000 (for example, http://example.com:3000).

    • 请确保防火墙已开放 3000 端口,以顺利访问 Grafana

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

过程:手动安装 Grafana
  1. Install the grafana package:

    zypper in grafana
  2. 启用 Grafana 服务:

    systemctl enable --now grafana-server
  3. In your browser, navigate to the URL of the server where Grafana is installed, on port 3000 (for example, http://example.com:3000).

    • 请确保防火墙已开放 3000 端口,以顺利访问 Grafana。

  4. On the login page, enter admin for username and password.

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

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

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

  8. 单击 数据源

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

  10. 选择 Prometheus 数据源。

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

  12. 单击 保存并测试

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

  14. For SUSE Multi-Linux Manager server overview load the dashboard ID: 17569.

  15. For SUSE Multi-Linux Manager clients overview load the dashboard ID: 17570.

    monitoring grafana example

4. 配置 SUSE Multi-Linux Manager 监控

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

4.1. 服务器自我监控

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

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

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

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

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

  2. 单击 启用服务

  3. 重启 Tomcat 和 Taskomatic。

  4. Navigate to the URL of your Prometheus server, on port 9090 (for example, http://example.com:9090)

  5. In the Prometheus UI, navigate to Status  Targets and confirm that all the endpoints on the mgr-server group are up.

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

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

在 SUSE Multi-Linux 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

计数器

到目前为止完成的任务数

4.2. 监控受管系统

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

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

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

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

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

  2. Check the Enabled checkbox on the Prometheus Exporters formula.

  3. 单击 保存

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

  5. 选择要启用的导出器并根据需要自定义参数。 The Address field accepts either a port number preceded by a colon (:9100), or a fully resolvable address (example:9100).

  6. 单击 保存公式

  7. 应用 highstate。

防火墙需启用以下端口,且不得拦截这些端口的通信:

  • 监控端:9090/tcp

  • 被监控端:9100/tcp、9117/tcp、9187/tcp

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

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

4.3. 更改 Grafana 口令

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

In case you have lost the Grafana administrator password you can reset it as root with the following command:

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

5. 网络边界

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

5.1. 反向代理设置

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

过程:安装使用反向代理的 Prometheus 导出器
  1. In the SUSE Multi-Linux Manager Web UI, open the details page of the system to be monitored, and navigate to the Formulas tab.

  2. Check the Prometheus Exporters checkbox to enable the exporters formula, and click Save.

  3. Navigate to the Prometheus Exporters tab in the top menu.

  4. Check the Enable reverse proxy option, and enter a valid reverse proxy port number. For example, 9999.

    • 请确保防火墙已开放 9999/tcp 端口。

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

  6. 单击 保存公式

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

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

6. 安全

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

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

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

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

6.1. 生成 TLS 证书

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

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

过程:创建服务器/客户端 TLS 证书
  1. 在 SUSE Multi-Linux Manager 容器主机的命令行中,以 root 身份运行以下命令:

    1. 运行以下命令生成证书文件。

      Ensure that the set-cname parameter is the fully qualified domain name (FQDN) of your Salt client. You can use the set-cname parameter multiple times if you require multiple aliases:

      mgrctl exec -ti -- mgr-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

      命令执行的结果:

      Generating the web server's SSL private key: /root/ssl-build/minion/server.key
      Generating web server's SSL certificate request: /root/ssl-build/minion/server.csr
      Generating/signing web server's SSL certificate: server.crt
    2. Copy server.crt and server.key files from the server container to the host:

      mgrctl cp server:/root/ssl-build/minion/server.key server.key
      mgrctl cp server:/root/ssl-build/minion/server.crt server.crt
    3. Copy server.crt and server.key files from the host to the monitoring client:

      ssh minion.example.com 'mkdir /etc/ssl/mlm-server-certs'
      scp /root/server.* minion.example.com:/etc/ssl/mlm-server-certs
      ssh minion.example.com 'chmod go+r /etc/ssl/mlm-server-certs/server.*; ls -la /etc/ssl/mlm-server-certs'
  2. 要配置 Salt 公式,请输入之前的步骤中指定的目录名称。

    1. formular server

      Server Certificate /etc/ssl/mlm-server-certs/server.crt
      Server Key /etc/ssl/mlm-server-certs/server.key
    2. 公式 受控端