Istio on ACK集成生态(2): 扩展AlertManager集成钉钉助力可观测性监控能力

本文涉及的产品
可观测可视化 Grafana 版,10个用户账号 1个月
云拨测,每月3000次拨测额度
简介: 使用Prometheus进行监控是Istio提供的监控能力之一,通过扩展AlertManager集成钉钉助力Istio on ACK可观测性监控能力。

阿里云容器服务Kubernetes(简称ACK)支持一键部署Istio,可以参考文档在ACK上部署使用Isito。Istio on ACK提供了丰富的监控能力,为网格中的服务收集遥测数据,其中Mixer是负责提供策略控制和遥测收集的Istio组件。使用Prometheus进行监控是Istio提供的监控能力之一。

告警能力在Prometheus的架构中被划分成两个独立的部分:Prometheus负责产生告警,而Alertmanager负责告警产生后的后续处理。如下所示,通过在Prometheus中定义告警规则,Prometheus会周期性的对告警规则进行计算,如果满足告警触发条件就会向Alertmanager发送告警信息。
图片.png

Alertmanager作为一个独立的组件,负责接收并处理来自Prometheus Server(也可以是其它的客户端程序)的告警信息。Alertmanager可以对这些告警信息进行进一步的处理,比如当接收到大量重复告警时能够消除重复的告警信息,同时对告警信息进行分组并且路由到正确的通知方,Prometheus内置了对邮件、Slack等多种通知方式的支持,同时还支持与Webhook的集成,以支持更多定制化的场景。例如,完全可以通过Webhook与钉钉机器人进行集成,从而通过钉钉接收告警信息。同时AlertManager还提供了静默和告警抑制机制来对告警通知行为进行优化。

以下介绍如何扩展AlertManager集成钉钉,并通过AlertManager帮助实现Istio on ACK在可观测性监控方面的能力。

通过Webhook集成钉钉

    1. 单击钉钉群右上角群设置图标,进入群设置页面。单击群机器人,进入群机器人页面,选择需要添加的机器人。此处选择自定义机器人。
    1. 在机器人详情页面,单击添加,进入添加机器人页面。
      图片.png
    1. 填写完配置群机器人信息后,单击完成添加。
    1. 单击复制,复制webhook地址。
      图片.png

部署AlertManager并对接钉钉

    1. 登录容器服务管理控制台。 在Kubernetes菜单下,单击左侧导航栏中的应用 > 无状态,进入 无状态(Deployment)页面。
    1. 选择目标集群,命名空间选为istio-system,单击右上角使用模板创建。
    1. 根据以下信息配置模板,完成后单击创建。
配置 说明
集群 选择目标集群。
命名空间 选择资源对象所属的命名空间,默认是 default。此处选择istio-system。
示例模板 此处选择自定义。
模板 填写以下自定义内容。

自定义YAML内容如下:

apiVersion: v1
kind: Service
metadata:
  name: dingtalkservice
  labels:
    app: dingtalkservice
    service: dingtalkservice
spec:
  ports:
  - port: 8060
    name: http
  selector:
    app: dingtalkservice
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: dingtalkservice
  labels:
    app: dingtalkservice
    version: v1
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: dingtalkservice
        version: v1
    spec:
      containers:
      - name: prometheus-webhook-dingtalk
        image: timonwong/prometheus-webhook-dingtalk
        imagePullPolicy: IfNotPresent
        args:
        - --ding.profile=webhook1={替换为上述步骤中复制的webhook地址}
        ports:
        - containerPort: 8060
---
kind: ConfigMap
apiVersion: v1
metadata:
  name: alertmanager
data:
  config.yml: |-
    global:
      resolve_timeout: 5m
    templates:
    - '/etc/alertmanager-templates/*.tmpl'
    route:
      group_by: ['alertname', 'cluster', 'service']
      group_wait: 30s
      group_interval: 5m
      repeat_interval: 1m
      receiver: webhook_alert 
      routes:
      - match:
          severity: info
        receiver: webhook_alert
      - match:
          severity: warning
        receiver: webhook_alert
    receivers:
    - name: webhook_alert
      webhook_configs:
      - url: 'http://dingtalkservice:8060/dingtalk/webhook1/send'
        send_resolved: false
---
apiVersion: v1
kind: Service
metadata:
  annotations:
    prometheus.io/scrape: 'true'
    prometheus.io/path: '/metrics'
  labels:
    name: alertmanager
  name: alertmanager
spec:
  selector:
    app: alertmanager
  type: ClusterIP
  ports:
  - name: alertmanager
    protocol: TCP
    port: 9093
    targetPort: 9093
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: alertmanager
spec:
  replicas: 1
  selector:
    matchLabels:
      app: alertmanager
  template:
    metadata:
      name: alertmanager
      labels:
        app: alertmanager
    spec:
      containers:
      - name: alertmanager
        image: prom/alertmanager:v0.15.0
        args:
          - '--config.file=/etc/alertmanager/config.yml'
          - '--storage.path=/alertmanager'
        ports:
        - name: alertmanager
          containerPort: 9093
        volumeMounts:
        - name: config-volume
          mountPath: /etc/alertmanager
        - name: alertmanager
          mountPath: /alertmanager
      serviceAccountName: prometheus
      volumes:
      - name: config-volume
        configMap:
          name: alertmanager
      - name: alertmanager
        emptyDir: {}    
    1. 创建成功之后,单击左侧导航栏中的应用 > 容器组,选择相应的集群和命名空间istio-system, 可以看到如下类似的运行中的alertmanager和dingtalkservice容器组。
      图片.png

创建Prometheus告警规则配置项

    1. 登录 容器服务管理控制台。在Kubernetes菜单下,单击左侧导航栏中的应用配置 > 配置项,选择相应的集群与命名空间istio-system,点击右上角的创建按钮,进入创建配置项页面。
    1. 输入配置项名称:prom-rules1。
    1. 添加配置项,名称为rule1.yaml,值为如下内容:
groups:
- name: fake
  rules:
    - alert: rules-alert
      expr: |
        histogram_quantile(0.99, sum by(source_app, source_version, destination_service, destination_version, le) (irate(istio_request_duration_seconds_bucket[1m])) ) > 3
      for: 1m
      labels:
        alertname: "request-duration-3"
      annotations:
        summary: "Request duration gt 3"
        from: "{{ $labels.source_app }}:{{ $labels.source_version }}"
        to: "{{ $labels.destination_service }}:{{ $labels.destination_version }}"

该规则描述过去1分钟内99%请求时延超过3s时会发出告警。

    1. 点击确定按钮。

集成AlertManager到Istio中

阿里云容器服务Kubernetes(简称ACK)支持一键部署Istio,可以参考文档在ACK上部署Isito。
默认部署中的Prometheus服务没有对接AlertManager,需要按照如下步骤进行配置。

    1. 登录容器服务管理控制台。
    1. 在 Kubernetes 菜单下,单击左侧导航栏的应用 > 发布,进入发布页面。
    1. 单击Helm,选择所需的集群,选择待更新的Istio,单击操作列的更新。
      图片.png
    1. 在弹出的对话框中,对Istio的Prometheus参数进行修改:

      | 配置 | 说明 |

enabled true或者false,表示是否启用Prometheus 收集度量日志。默认情况下启用,即值为true。
replicaCount prometheus容器组的副本数,默认值为1。
persist true或者false,表示是否启用持久化存储。设置为true时,必须指定TSDB实例地址。
tsdbEndpoint TSDB实例地址,启用持久化存储时必须指定。
retention 默认的数据保留时间,8760h0m0s即为24*365小时,即1年
scrapeInterval 全局默认抓取时间间隔,默认为15s
prometheusRulesConfigMap 告警规则配置项的名称
alerting 配置对接的AlertManager服务,配置如下代码所示
  alerting:
    alertmanagers:
    - static_configs:
      - targets: ["alertmanager:9093"]

图片.png

    1. 修改完毕之后,单击更新

告警规则触发验证

当你的应用服务调用满足触发条件时,在Prometheus控制台上,点击Alerts页签,可以看到如下类似内容。
图片.png

同时,相应的钉钉群也会收到类似的告警信息,如下所示。
图片.png

总结

在阿里云Kubernetes容器服务基础之上,快速搭建一套用于连接、管理以及安全化微服务的开放平台Istio,为应用引入和配置多个相关服务。使用Prometheus进行监控是Istio提供的监控能力之一,通过扩展AlertManager集成钉钉助力Istio on ACK可观测性监控能力。

相关文章
|
22天前
|
关系型数据库 分布式数据库 数据库
成都晨云信息技术完成阿里云PolarDB数据库产品生态集成认证
近日,成都晨云信息技术有限责任公司(以下简称晨云信息)与阿里云PolarDB PostgreSQL版数据库产品展开产品集成认证。测试结果表明,晨云信息旗下晨云-站群管理系统(V1.0)与阿里云以下产品:开源云原生数据库PolarDB PostgreSQL版(V11),完全满足产品兼容认证要求,兼容性良好,系统运行稳定。
|
2月前
|
Prometheus 监控 Kubernetes
如何用 Prometheus Operator 监控 K8s 集群外服务?
如何用 Prometheus Operator 监控 K8s 集群外服务?
|
2月前
|
存储 Kubernetes 监控
Kubecost | Kubernetes 开支监控和管理 🤑🤑🤑
Kubecost | Kubernetes 开支监控和管理 🤑🤑🤑
|
4月前
|
Kubernetes 监控 容器
k8s学习-CKA真题-监控Pod日志
k8s学习-CKA真题-监控Pod日志
78 0
|
30天前
|
Prometheus 监控 Kubernetes
Kubernetes 集群监控与日志管理实践
【2月更文挑战第29天】 在微服务架构日益普及的当下,Kubernetes 已成为容器编排的事实标准。然而,随着集群规模的扩大和业务复杂度的提升,有效的监控和日志管理变得至关重要。本文将探讨构建高效 Kubernetes 集群监控系统的策略,以及实施日志聚合和分析的最佳实践。通过引入如 Prometheus 和 Fluentd 等开源工具,我们旨在为运维专家提供一套完整的解决方案,以保障系统的稳定性和可靠性。
|
2月前
|
Prometheus 监控 Kubernetes
监控 Kubernetes 集群证书过期时间的三种方案
监控 Kubernetes 集群证书过期时间的三种方案
|
3天前
|
SQL 机器学习/深度学习 数据可视化
Pandas与其他库的集成:构建强大的数据处理生态
【4月更文挑战第16天】Pandas在数据处理中扮演关键角色,但与其他Python库如NumPy、Matplotlib/Seaborn、Scikit-learn和SQL的集成使其功能更加强大。结合NumPy进行数值计算,搭配Matplotlib/Seaborn实现高效可视化,与Scikit-learn联用加速机器学习,以及与SQL集成便于数据库操作,这些都构建了一个全面的数据处理生态系统,提升了数据科学家的工作效率,助力于数据价值的发掘。
|
28天前
|
Prometheus 监控 Kubernetes
Kubernetes 集群的监控与日志管理实践
【2月更文挑战第31天】 在微服务架构日益普及的今天,容器编排工具如Kubernetes已成为部署、管理和扩展容器化应用的关键平台。然而,随着集群规模的扩大和业务复杂性的增加,如何有效监控集群状态、及时响应系统异常,以及管理海量日志信息成为了运维人员面临的重要挑战。本文将深入探讨 Kubernetes 集群监控的最佳实践和日志管理的高效策略,旨在为运维团队提供一套系统的解决思路和操作指南。
26 0
|
1月前
|
负载均衡 安全 网络协议
如何通过计算巢在ACK集群上使用Istio服务网格
本文主要介绍怎么通过计算巢部署Isito服务网格,并介绍了使用示例。
31 0
|
1月前
|
SQL 分布式计算 Apache
生态 | Apache Hudi集成Apache Zeppelin
生态 | Apache Hudi集成Apache Zeppelin
33 0