前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >可观测平台-4: 告警配置参考

可观测平台-4: 告警配置参考

原创
作者头像
行者深蓝
修改2023-12-14 16:33:02
5490
修改2023-12-14 16:33:02
举报
文章被收录于专栏:云原生应用工坊

概述

此解决方案利用开源工具如ClickHouse、Neo4j、VectorDB、PromQL、LogQL、OpenTracing、Prometheus、Grafana、AlertManager和DeepFlow。这个开源的可观察性平台解决方案通过GitHub Actions自动交付,以创建服务。

可观察性平台操作

在完成平台安装和部署后(有关详细信息,请参阅先前的文章:https://cloud.tencent.com/developer/article/2363793),登录到控制台。以 onwalk.net 域配置为例:

教程

配置数据源

例如, 在 https://grafana.onwalk.net 上以管理员身份登录,然后转到数据源 -> 添加新数据源。

  1. 添加度量数据源。
  2. 添加日志数据源。
  3. 添加其他数据源。 根据使用的具体应用程序服务,选择相应的数据源类型进行集成。

查看指标

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,其中包含告警规则的配置。

  1. 主机负载告警示例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使用率告警示例
代码语言:yaml
复制
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 使用率告警示例
代码语言:yaml
复制
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 }}%”。

  1. Disk 使用率告警示例
代码语言:yaml
复制
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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述
  • 可观察性平台操作
  • 教程
    • 配置数据源
      • 查看指标
        • 查看日志
          • 导入自定义仪表板
          • 告警规则配置管理
            • 配置记录规则(recording_rules)
              • 配置告警通知规则(alerting_rules)
                • 配置告警通知
                  • 在Alertmanager中配置告警
                  • reference
                  相关产品与服务
                  Prometheus 监控服务
                  Prometheus 监控服务(TencentCloud Managed Service for Prometheus,TMP)是基于开源 Prometheus 构建的高可用、全托管的服务,与腾讯云容器服务(TKE)高度集成,兼容开源生态丰富多样的应用组件,结合腾讯云可观测平台-告警管理和 Prometheus Alertmanager 能力,为您提供免搭建的高效运维能力,减少开发及运维成本。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档