使用 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 仪表板上会显示服务器深入信息。
只能使用 Web UI 启用服务器自我运行状况监视。Prometheus 不会自动收集代理的度量。要在代理上启用自我运行状况监视,需要手动安装导出器并启用它们。 |
在 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
用户提供读取访问权限。