概述
此解决方案利用开源工具如ClickHouse、Neo4j、VectorDB、PromQL、LogQL、OpenTracing、Prometheus、Grafana、AlertManager和DeepFlow。这个开源的可观察性平台解决方案通过GitHub Actions自动交付,以创建服务。
可观察性平台操作
在完成平台安装和部署后(有关详细信息,请参阅先前的文章:https://cloud.tencent.com/developer/article/2363793),登录到控制台。以 onwalk.net 域配置为例:
- Grafana仪表板:例如,使用默认用户名admin和密码deepflow登录到https://grafana.onwalk.net。
- Prometheus页面,可在https://prometheus.onwalk.net访问,无需密码。
- Alertmanager页面,可在https://alertmanager.onwalk.net访问,无需密码。
教程
配置数据源
例如, 在 https://grafana.onwalk.net 上以管理员身份登录,然后转到数据源 -> 添加新数据源。
- 添加度量数据源。
- 添加日志数据源。
- 添加其他数据源。 根据使用的具体应用程序服务,选择相应的数据源类型进行集成。
查看指标
Grafana Explore与Prometheus数据源集成,允许用户快速识别和解决问题。要通过Explore查看Prometheus数据,请按照以下步骤操作:
在Grafana中添加Prometheus数据源,输入Prometheus的地址和访问凭据。打开Grafana Explore,选择Prometheus数据源,并输入查询。
查看日志
Grafana Explore与Loki数据源集成,用于快速解决问题。要通过Explore查看Loki日志,请按照以下步骤操作:在Grafana中添加Loki数据源,输入地址和访问凭据。打开Grafana Explore,选择Loki数据源,并输入查询。
导入自定义仪表板
例如,使用https://github.com/svc-design/ObservabilityServer/tree/main/example/dashboard上提供的示例仪表板JSON模板文件:
选择仪表板JSON模板文件,选择相应的数据源。导入仪表板后,从Prometheus数据源显示的可视化图表可见,包括Node Exporter和kube-state-metrics的图表。
Grafana社区提供许多仪表板,可根据需要选择,网址为https://grafana.com/grafana/dashboards/?pg=hp&plcmt=lt-box-dashboards。
告警规则配置管理
在Kubernetes(k8s)集群中,部署了Prometheus,并将告警规则的配置文件存储在Kubernetes ConfigMaps中。要更改告警规则,请参考以下命令:
配置记录规则(recording_rules)
recording_rules用于定义新时间序列数据的配置。它们可以从现有时间序列数据计算新的指标,并将它们存储为新的时间序列数据。录制规则配置文件包含以下信息:
- 新时间序列数据的名称和标签:例如,新指标的名称为“http_requests_total”,并带有“method”和“status”等标签。
- 计算新指标的表达式:例如,计算总HTTP请求的表达式为“sum(http_requests_total)”。
- 新时间序列数据的采样频率和存储策略:例如,您可以每15秒采样一次,并保留数据7天。
要修改 recording_rules 执行以下命令:
代码语言:shell复制kubectl get cm observability-server-prometheus-server -n monitoring
下面是用于监视主机负载、CPU使用率、内存使用率和磁盘使用率的Prometheus 告警规则的基本示例。
代码语言:yaml复制data:
recording_rules.yml: |
groups:
- name: host-monitoring
rules:
- record: node_load1
expr: node_load1
- record: node_cpu_usage
expr: 100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
- record: node_memory_usage
expr: (node_memory_MemTotal_bytes - node_memory_MemFree_bytes - node_memory_Buffers_bytes - node_memory_Cached_bytes) / node_memory_MemTotal_bytes * 100
- record: node_disk_usage
expr: 100 - (avg by (instance) (node_filesystem_avail_bytes{fstype="ext4"} / node_filesystem_size_bytes{fstype="ext4"}) * 100)
配置说明:
此示例定义了一个名为“host-monitoring”的规则组,其中包含四个用于计算主机负载、CPU使用率、内存使用率和磁盘使用率的录制规则。
- node_load1:计算主机负载,这是Prometheus的内置指标。
- node_cpu_usage:使用irate函数计算CPU使用率的变化率,然后使用avg函数进行平均,最后使用数学运算将结果转换为百分比。
- node_memory_usage:使用node_memory*指标计算内存使用率,计算可用内存的百分比。
- node_disk_usage:使用nodefilesystem*指标计算磁盘使用率,计算可用磁盘空间的百分比。 这些规则可以通过Prometheus的Web界面或API查询,并用于创建告警规则或生成仪表板。
配置告警通知规则(alerting_rules)
- alerting_rules是用于定义告警规则的配置文件。它允许您根据时间序列数据的值或其他条件触发告警,并将通知发送给管理员或相关人员。alerting_rules配置文件包含以下信息:
触发告警的条件,例如超过CPU使用率的阈值、磁盘空间不足等。
告警级别和标签,例如警告、严重、紧急等级,以及指示告警来源和目标的标签。
告警通知的方法,例如发送电子邮件、短信、Slack通知等。
以下是配置用于监视主机负载、CPU使用率、内存使用率和磁盘使用率的告警规则的示例:
要修改告警规则,执行以下命令:
代码语言:shell复制kubectl get cm observability-server-prometheus-server -n monitoring
此命令获取位于“monitoring”命名空间中的名为“observability-server-prometheus-server”的ConfigMap,其中包含告警规则的配置。
- 主机负载告警示例data: alerting_rules.yml: | groups: - name: host-monitoring rules: - alert: HighLoad expr: node_load1 > 2.0 for: 5m labels: severity: warning annotations: summary: High load on {{ $labels.instance }} description: "Load is {{ $value }} (threshold: 2.0)"配置说明:
此示例定义了一个名为“host-monitoring”的告警规则组,其中包含一个告警规则。
- HighLoad:当1分钟平均负载超过2.0时触发告警。 告警规则定义包括以下信息:告警名称、触发条件、持续时间、标签和注释。
- HighLoad规则的触发条件是node_load1 > 2.0,表示当前主机的平均负载超过2.0。 如果条件持续5分钟,将触发告警。
- 标签“severity”设置为“warning”,表示告警严重程度为警告。
- 注释“summary”设置为“High load on {{ $labels.instance }}”,表示告警摘要为“主机名称负载高”。 描述提供了有关告警的附加信息,说明“负载为{{ $value }}(阈值:2.0)”。
- CPU使用率告警示例
data:
alerting_rules.yml: |
groups:
- name: host-monitoring
rules:
- alert: HighCpuUsage
expr: 100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 90 for: 5m
labels:
severity: critical
annotations:
summary: High CPU usage on {{ $labels.instance }}
description: "CPU usage is {{ $value }}%"
配置说明:
此示例定义了一个名为“host-monitoring”的告警规则组,其中包含一个告警规则。
- HighCpuUsage:当1分钟平均CPU使用率超过90%时触发告警。
- 告警规则定义包括以下信息:告警名称、触发条件、持续时间、标签和注释。
- HighCpuUsage规则的触发条件是“HighCpuUsage > 90%”。
- 如果条件持续5分钟,将触发告警。
- 标签“severity”设置为“critical”,表示告警严重程度为严重。
- 注释“summary”设置为“High CPU usage on {{ $labels.instance }}”,提供了告警摘要。
- 描述提供了有关告警的附加信息,说明“CPU使用率为{{ $value }}%”。
- Memory 使用率告警示例
data:
alerting_rules.yml: |
groups:
- name: host-monitoring
rules:
- alert: HighMemoryUsage
expr: (node_memory_MemTotal_bytes - node_memory_MemFree_bytes - node_memory_Buffers_bytes - node_memory_Cached_bytes) / node_memory_MemTotal_bytes * 100 > 90
for: 5m
labels:
severity: warning
annotations:
summary: High memory usage on {{ $labels.instance }}
description: "Memory usage is {{ $value }}%"
此示例定义了一个名为“host-monitoring”的告警规则组,其中包含1个告警规则。
HighMemoryUsage: 当主机的内存使用率超过90%时触发告警。
告警规则定义包括以下信息:告警名称、触发条件、持续时间、标签和注释。
告警规则的名称是“HighMemoryUsage”。
触发条件为“HighMemoryUsage > 90%”,如果条件持续5分钟,则触发告警。
标签“severity”设置为“warning”,表示告警严重程度为警告。
注释“summary”设置为“主机 {{ $labels.instance }} 上的高内存使用率”,提供了告警摘要。
描述提供了有关告警的附加信息,说明“内存使用率为{{ $value }}%”。
- Disk 使用率告警示例
data:
alerting_rules.yml: |
groups:
- name: host-monitoring
rules:
- alert: HighDiskUsage
expr: node_filesystem_avail_bytes{fstype="ext4"} / node_filesystem_size_bytes{fstype="ext4"} * 100 < 10
for: 5m
labels:
severity: critical
annotations:
summary: High disk usage on {{ $labels.instance }}
description: "Disk usage is {{ $value }}%"
配置说明:
此示例定义了一个名为“host-monitoring”的告警规则组,其中包含1个告警规则。
- HighDiskUsage: 当主机的磁盘使用率低于10%时触发告警。
- 告警规则定义包括以下信息:告警名称、触发条件、持续时间、标签和注释。
- 告警规则的名称是“HighDiskUsage”。
- 触发条件为“HighDiskUsage < 10%”,如果条件持续5分钟,则触发告警。
- 标签“severity”设置为“critical”,表示告警严重程度为严重。
- 注释“summary”设置为“主机 {{ $labels.instance }} 上的高磁盘使用率”,提供了告警摘要。
- 描述提供了有关告警的附加信息,说明“磁盘使用率为{{ $value }}%”。
配置告警通知
Alertmanager是Prometheus生态系统中的一个独立组件,用于处理和路由告警通知。Alertmanager可以与Prometheus一起工作,将告警通知发送到各种接收者,如电子邮件、Slack、PagerDuty,并支持高级功能,如抑制、分组和静音告警。
Prometheus的告警和记录规则与Alertmanager关联,您需要在Prometheus配置文件中指定Alertmanager的地址和端口。您还需要在告警规则中设置alertmanager_config字段,以确保告警通知被正确路由到Alertmanager。
在Prometheus中,您可以检查当前活动的告警规则及其状态,这些信息可以在专用页面上查看。在此页面上,您可以查看每个告警规则的信息,包括其名称、状态、标签、摘要等。您还可以使用搜索框查找特定的告警规则。通过查看此页面,您可以确认Prometheus告警规则是否正常工作,以及哪些告警规则当前处于活动状态。
以下是在Prometheus配置文件中指定Alertmanager地址和端口以将告警通知发送到alertmanager.onwalk.net的示例:
代码语言:yaml复制alerting:
alertmanagers:
follow_redirects: true
enable_http2: true
scheme: http
timeout: 10s
api_version: v2
static_configs:
- targets:
- alertmanager.onwalk.net
在Alertmanager中配置告警
Alertmanager与Prometheus之间的通信是通过HTTP完成的。当Prometheus检测到新的告警时,它会发送HTTP POST请求到Alertmanager,将告警信息转发过去。Alertmanager会处理接收到的告警通知,并根据配置文件将其发送到适当的接收者。以下是Alertmanager的参考配置:
代码语言:yaml复制route:
receiver: default-receiver
continue: false
group_wait: 10s
group_interval: 5m
repeat_interval: 1h
receivers:
- name: default-receiver
email_configs:
- to: 'admin@example.com'
from: 'alertmanager@example.com'
smarthost: smtp.gmail.com:587
auth_username: 'alertmanager@example.com'
auth_identity: 'alertmanager@example.com'
auth_password: 'password'
确保Prometheus和Alertmanager正在运行,并且告警规则和路由规则已经正确配置。当Prometheus触发告警时,Alertmanager将接收到告警通知并将其转发到指定的接收者。Alertmanager还可以配置使用第三方插件,以用于其他类型的接收者,例如WeChat、DingTalk、AWS SNS等。根据需要进行配置,并指定如何将告警通知路由到不同的接收者在您的路由规则中。
reference
1 Grafana 文档:https://grafana.com/docs/grafana/latest/
2 Prometheus 文档:https://prometheus.io/docs/
3 deepflow 文档:https://deepflow.io/docs/zh/
4 Loki 文档:https://grafana.com/docs/loki/latest/
5 ClickHouse 文档:https://clickhouse.tech/docs/en/
6 Qryn 文档:https://qryn.metrico.in/#/introduction
7 Alertmanager 文档:https://prometheus.io/docs/alerting/alertmanager/
8 ObservabilityServer:https://github.com/svc-design/ObservabilityServer
9 ObservabilityAgent: https://github.com/svc-design/ObservabilityAgent