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


    阿里云容器服务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可观测性监控能力。

    本文作者:wangxining

    原文链接

    本文为云栖社区原创内容,未经允许不得转载。

  • 相关阅读:
    Getting Started with MongoDB (MongoDB Shell Edition)
    Ioc
    BsonDocument
    Find or Query Data with C# Driver
    Insert Data with C# Driver
    Connect to MongoDB
    What's the difference between returning void and returning a Task?
    Import Example Dataset
    jQuery来源学习笔记:整体结构
    Word文件交换的电脑打开字体、排版变化的原因和解决方法!
  • 原文地址:https://www.cnblogs.com/zhaowei121/p/11051410.html
Copyright © 2020-2023  润新知