Istio on ACK集成生态(2): 扩展AlertManager集成钉钉助力可观测性监控能力
发布日期:2021-08-21 12:05:56 浏览次数:2 分类:技术文章

本文共 5369 字,大约阅读时间需要 17 分钟。

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

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

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

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

通过Webhook集成钉钉

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

部署AlertManager并对接钉钉

  • 登录容器服务管理控制台。 在Kubernetes菜单下,单击左侧导航栏中的应用 > 无状态,进入 无状态(Deployment)页面。
  • 选择目标集群,命名空间选为istio-system,单击右上角使用模板创建。
  • 根据以下信息配置模板,完成后单击创建。

配置说明集群选择目标集群。命名空间选择资源对象所属的命名空间,默认是 default。此处选择istio-system。示例模板此处选择自定义。模板填写以下自定义内容。

自定义YAML内容如下:

apiVersion: v1kind: Servicemetadata:  name: dingtalkservice  labels:    app: dingtalkservice    service: dingtalkservicespec:  ports:  - port: 8060    name: http  selector:    app: dingtalkservice---apiVersion: extensions/v1beta1kind: Deploymentmetadata:  name: dingtalkservice  labels:    app: dingtalkservice    version: v1spec:  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: ConfigMapapiVersion: v1metadata:  name: alertmanagerdata:  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: v1kind: Servicemetadata:  annotations:    prometheus.io/scrape: 'true'    prometheus.io/path: '/metrics'  labels:    name: alertmanager  name: alertmanagerspec:  selector:    app: alertmanager  type: ClusterIP  ports:  - name: alertmanager    protocol: TCP    port: 9093    targetPort: 9093---apiVersion: extensions/v1beta1kind: Deploymentmetadata:  name: alertmanagerspec:  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: {}复制代码
  • 创建成功之后,单击左侧导航栏中的应用 > 容器组,选择相应的集群和命名空间istio-system, 可以看到如下类似的运行中的alertmanager和dingtalkservice容器组。

创建Prometheus告警规则配置项

  • 登录 容器服务管理控制台。在Kubernetes菜单下,单击左侧导航栏中的应用配置 > 配置项,选择相应的集群与命名空间istio-system,点击右上角的创建按钮,进入创建配置项页面。
  • 输入配置项名称:prom-rules1。
  • 添加配置项,名称为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时会发出告警。

  • 点击确定按钮。

集成AlertManager到Istio中

阿里云容器服务Kubernetes(简称ACK)支持一键部署Istio,可以参考在ACK上部署Isito。

默认部署中的Prometheus服务没有对接AlertManager,需要按照如下步骤进行配置。

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

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

alerting:    alertmanagers:    - static_configs:      - targets: ["alertmanager:9093"]复制代码

  • 修改完毕之后,单击更新

告警规则触发验证

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

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

总结

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

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

转载于:https://juejin.im/post/5d09e1e8e51d4558936aa08b

转载地址:https://blog.csdn.net/weixin_33717298/article/details/93175377 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:微信小程序云开发
下一篇:Spring Data Jpa初体验(内含demo)

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2024年03月13日 11时02分28秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

mysql单元格函数是_MySQL常用内置函数 2019-04-21
mysql 怎么字段分裂_你可以分裂/爆炸MySQL查询中的字段吗? 2019-04-21
mysql server卸载出错_Mysql卸载问题Start Server卡住报错解决方法 2019-04-21
c语言课程设计工资管理建库,C语言课程设计工资管理系统参考.doc 2019-04-21
c语言case中途跳出,break语句在switch结构语句中的作用是终止某个case,并跳出switch结构语句。... 2019-04-21
C语言编写程序计算高考倒计时天数,基于51单片机LCD12864大字符校时万年历带高考倒计时程序... 2019-04-21
普职融通信息技术课本C语言,“三步走”扎实推进“普职融通”办学新模式 2019-04-21
Android多个签名,【Android】Android批量重签名 2019-04-21
html unicode编码转换,JS实现的Unicode编码转换操作示例 2019-04-21
html页面角落放动漫人物,L2Dwidget.js L2D网页动画人物添加 2019-04-21
html图片水平居中,CSS制作图片水平垂直居中 2019-04-21
php写模糊搜索api接口,php通过sphinxapi接口实现全文搜索 2019-04-21
oracle安装出现2932,【案例】Oracle报错ORA-19815 fast_recovery_area无剩余空间解决办法... 2019-04-21
form表单属性名相同java_form表单提交时候有多个相同name 的input如何处理? 2019-04-21
java图片加气泡文字_图片加气泡文字 2019-04-21
java总结i o流_14.java总结I/O流 2019-04-21
java和历转为西历_日期转西暦,和暦 2019-04-21
java 远程 yarn jar_再论Yarn Client和Yarn cluster 2019-04-21
java单元测试断言_单元测试+断言 2019-04-21
java 创建压缩包_用Java创建ZIP压缩文件 2019-04-21