使用 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。
| Prometheus 需要使用 POSIX 文件系统来存储数据。不支持不符合 POSIX 标准的文件系统,因此不支持 NFS 文件系统。 | 
- 
在 SUSE Manager Web UI 中,打开要在其中安装 Prometheus 的系统的细节页面,然后导航到 公式选项卡。
- 
选中 Prometheus复选框以启用监控公式,然后单击 保存。
- 
在顶部菜单中导航到 Prometheus选项卡。
- 
在 SUSE Manager Server部分,输入有效的 SUSE Manager API 身份凭证。 确保您输入的身份凭证允许访问您要监控的系统集。
- 
根据需要自定义任何其他配置选项。 
- 
单击 保存公式。 
- 
应用 Highstate 并确认它成功完成。 
- 
检查 Prometheus 界面是否正常加载。在浏览器中,使用端口 9090 导航到安装了 Prometheus 的服务器的 URL(例如 http://example.com:9090)。
有关监控公式的详细信息,请参见 Monitoring Formula。
- 
在监控服务器上,安装 golang-github-prometheus-prometheus软件包:zypper in golang-github-prometheus-prometheus 
- 
启用 Prometheus 服务: systemctl enable --now prometheus 
- 
检查 Prometheus 界面是否正常加载。 在浏览器中,使用端口 9090 导航到安装了 Prometheus 的服务器的 URL(例如 http://example.com:9090)。
- 
打开配置文件 /etc/prometheus/prometheus.yml并添加以下配置信息。 请将server.url替换为您的 SUSE Manager 服务器 URL,并调整username和password字段以便与您的 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__
- 
保存该配置文件。 
- 
重启动 Prometheus 服务: systemctl restart prometheus 
有关 Prometheus 配置选项的详细信息,请参见 https://prometheus.io/docs/prometheus/latest/configuration/configuration/ 上的 Prometheus 官方文档。
2.2. 安装 Grafana
如果您的监控服务器是 Salt 客户端,则您可以使用 SUSE Manager Web UI 安装 Grafana 软件包。否则,可以在监控服务器上手动下载并安装该软件包。
| 不可以在 SUSE Manager Proxy 上使用 Grafana。 | 
- 
在 SUSE Manager Web UI 中,打开要在其中安装 Grafana 的系统的细节页面,然后导航到 公式选项卡。
- 
选中 Grafana复选框以启用监控公式,然后单击 保存。
- 
在顶部菜单中导航到 Grafana选项卡。
- 
在 启用并配置 Grafana部分,输入用于登录 Grafana 的管理员身份凭证。
- 
在 数据源部分,确保 Prometheus URL 字段指向运行 Prometheus 的系统。
- 
根据需要自定义任何其他配置选项。 
- 
单击 保存公式。 
- 
应用 Highstate 并确认它成功完成。 
- 
检查 Grafana 界面是否正常加载。在浏览器中,使用端口 3000 导航到安装了 Grafana 的服务器的 URL(例如 http://example.com:3000)。
| SUSE Manager 为服务器自我运行状况监控指标、基本客户端监控等信息提供预构建的仪表板。您可以在公式配置页面中选择要置备的仪表板。 | 
- 
安装 grafana软件包:zypper in grafana 
- 
启用 Grafana 服务: systemctl enable --now grafana-server 
- 
在浏览器中,导航到安装了 Grafana 的服务器的 URL,使用端口 3000(例如 http://example.com:3000)。
- 
在登录页面中,输入 admin作为用户名和口令。
- 
单击 登录。 如果成功登录,您将会看到要求您更改口令的提示。 
- 
针对提示单击 确定,然后更改您的口令。 
- 
将光标移到边栏菜单中的齿轮图标上,配置选项即会显示。   
- 
单击 数据源。 
- 
单击 添加数据源 会看到支持的所有数据源列表。 
- 
选择 Prometheus 数据源。 
- 
务必指定正确的 Prometheus 服务器 URL。 
- 
单击 保存并测试。 
- 
要导入仪表板,请单击边栏菜单中的 + 图标,然后单击 导入。 
- 
对于 SUSE Manager 服务器概览,请加载仪表板 ID: 17569。
- 
对于 SUSE Manager 客户端概览,请加载仪表板 ID: 17570。  
| 
 | 
3. 配置 SUSE Manager 监控
在 SUSE Manager 4 和更高版本中,您可以让服务器公开 Prometheus 自我运行状况监控指标,并可以在客户端系统上安装和配置导出器。
3.1. 服务器自我监控
服务器自我运行状况监控指标涵盖了硬件、操作系统和 SUSE Manager 内部组件。这些指标是结合 Prometheus 导出器通过 Java 应用程序检测提供的。
SUSE Manager Server 随附了以下导出器软件包:
- 
Node 导出器: golang-github-prometheus-node_exporter。 请参见 https://github.com/prometheus/node_exporter。
- 
PostgreSQL 导出器: prometheus-postgres_exporter。 请参见 https://github.com/wrouesnel/postgres_exporter。
- 
JMX 导出器: prometheus-jmx_exporter。 请参见 https://github.com/prometheus/jmx_exporter。
- 
Apache 导出器: golang-github-lusitaniae-apache_exporter。 请参见 https://github.com/Lusitaniae/apache_exporter。
SUSE Manager Proxy 随附了以下导出器软件包:
- 
Node 导出器: golang-github-prometheus-node_exporter。 请参见 https://github.com/prometheus/node_exporter。
- 
Squid 导出器: golang-github-boynux-squid_exporter。 请参见 https://github.com/boynux/squid-exporter。
导出器软件包已预安装在 SUSE Manager Server 和 Proxy 中,但其各自的 systemd 守护程序默认已禁用。
- 
在 SUSE Manager Web UI 中,导航到。 
- 
单击 启用服务。 
- 
重启动 Tomcat 和 Taskomatic。 
- 
使用端口 9090 导航到 Prometheus 服务器的 URL(例如 http://example.com:9090)
- 
在 Prometheus UI 中,导航到并确认 mgr-server组中的所有端点都已启动。
- 
如果您还使用 Web UI 安装了 Grafana,则 SUSE Manager Server 仪表板上会显示服务器深入信息。 
 
| Only server self-health monitoring can be enabled using the Web UI. Metrics for a proxy are not automatically collected by Prometheus. To enable self-health monitoring on a proxy, you need to manually install exporters, including  | 
在 SUSE Manager 服务器上收集以下相关指标。
| 指标 | 类型 | 说明 | 
|---|---|---|
| uyuni_all_systems | 计量器 | 所有系统数 | 
| uyuni_virtual_systems | 计量器 | 虚拟系统数 | 
| uyuni_inactive_systems | 计量器 | 非活动系统数 | 
| uyuni_outdated_systems | 计量器 | 安装了过时软件包的系统数 | 
| 指标 | 类型 | 说明 | 
|---|---|---|
| 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 | 计量器 | 排队的操作数 | 
| 指标 | 类型 | 说明 | 
|---|---|---|
| java_lang_Threading_ThreadCount | 计量器 | 活动线程数 | 
| java_lang_Memory_HeapMemoryUsage_used | 计量器 | 当前堆内存使用量 | 
| 指标 | 类型 | 说明 | 
|---|---|---|
| message_queue_thread_pool_threads | 计数器 | 到目前为止创建的消息队列线程数 | 
| message_queue_thread_pool_threads_active | 计量器 | 当前处于活动状态的消息队列线程数 | 
| message_queue_thread_pool_task_count | 计数器 | 到目前为止提交的任务数 | 
| message_queue_thread_pool_completed_task_count | 计数器 | 到目前为止完成的任务数 | 
| 指标 | 类型 | 说明 | 
|---|---|---|
| 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 值为队列编号的标签。
| 指标 | 类型 | 说明 | 
|---|---|---|
| taskomatic_scheduler_threads | 计数器 | 到目前为止创建的日程安排程序线程数 | 
| taskomatic_scheduler_threads_active | 计量器 | 当前处于活动状态的日程安排程序线程数 | 
| taskomatic_scheduler_completed_task_count | 计数器 | 到目前为止完成的任务数 | 
3.2. 监控受管系统
可以使用公式在 Salt 客户端上安装和配置 Prometheus 指标导出器。这些软件包可以从 SUSE Manager 客户端工具通道获得,并且可以直接在 SUSE Manager Web UI 中启用和配置。
可将这些导出器安装在受管系统上:
- 
Node 导出器: golang-github-prometheus-node_exporter。 请参见 https://github.com/prometheus/node_exporter。
- 
PostgreSQL 导出器: prometheus-postgres_exporter。 请参见 https://github.com/wrouesnel/postgres_exporter。
- 
Apache 导出器: golang-github-lusitaniae-apache_exporter。 请参见 https://github.com/Lusitaniae/apache_exporter。
| 在 SLE Micro 上,只能使用 Node Exporter 和 Blackbox Exporter。 | 
安装并配置导出器后,您可以开始使用 Prometheus 从受监控系统收集指标。如果您已使用 Web UI 配置了监控服务器,则会自动收集指标。
- 
在 SUSE Manager Web UI 中,打开要监控的客户端的细节页面,并导航到公式选项卡。 
- 
选中 Prometheus 导出器公式对应的已启用复选框。
- 
单击 保存。 
- 
导航到选项卡。 
- 
选择要启用的导出器并根据需要自定义参数。 地址字段接受冒号开头的端口号 (:9100) 或完全可解析的地址 (example:9100)。
- 
单击 保存公式。 
- 
应用 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 实例中抓取时序。如果您使用此方法,只需要打开 Prometheus API 端口 (9090) 即可。
有关 Prometheus 联合的详细信息,请参见 https://prometheus.io/docs/prometheus/latest/federation/。
您还可以通过网络边界来中转请求。PushProx 等工具会在网络屏障的两端部署代理和客户端,并允许 Prometheus 跨网络拓扑(例如 NAT)工作。
有关 PushProx 的详细信息,请参见 https://github.com/RobustPerception/PushProx。
4.1. 反向代理设置
Prometheus 使用拉取机制提取指标,因此服务器必须能够与受监控客户端上的每个导出器建立 TCP 连接。为了简化防火墙配置,可为导出器使用反向代理,以便在单个端口上公开所有指标。
- 
在 SUSE Manager Web UI 中,打开要监控的系统的细节页面,并导航到 公式选项卡。
- 
选中 Prometheus 导出器复选框以启用导出器公式,然后单击 保存。
- 
在顶部菜单中导航到 Prometheus 导出器选项卡。
- 
选中 启用反向代理选项,并输入有效的反向代理端口号。 例如9999。
- 
根据需要自定义其他导出器。 
- 
单击 保存公式。 
- 
应用 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 导出器受控端生成客户端/服务器证书。
- 
在 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参数。
- 
将 server.crt和server.key文件复制到 Salt 受控端,并为prometheus用户提供读取访问权限。