Istio on ACK集成生态(2): 扩展AlertManager集成钉钉助力可观测性监控能力
阿里云容器服务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地址。

- 单击复制,复制webhook地址。
部署AlertManager并对接钉钉
- 登录容器服务管理控制台。 在Kubernetes菜单下,单击左侧导航栏中的应用 > 无状态,进入 无状态(Deployment)页面。
- 选择目标集群,命名空间选为istio-system,单击右上角使用模板创建。
- 根据以下信息配置模板,完成后单击创建。
| 配置 | 说明 |
|---|---|
| 集群 | 选择目标集群。 |
| 命名空间 | 选择资源对象所属的命名空间,默认是 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: {}
- 创建成功之后,单击左侧导航栏中的应用 > 容器组,选择相应的集群和命名空间istio-system, 可以看到如下类似的运行中的alertmanager和dingtalkservice容器组。

- 创建成功之后,单击左侧导航栏中的应用 > 容器组,选择相应的集群和命名空间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,单击操作列的更新。

- 单击Helm,选择所需的集群,选择待更新的Istio,单击操作列的更新。
在弹出的对话框中,对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"]

- 修改完毕之后,单击更新。
告警规则触发验证
当你的应用服务调用满足触发条件时,在Prometheus控制台上,点击Alerts页签,可以看到如下类似内容。
同时,相应的钉钉群也会收到类似的告警信息,如下所示。
总结
在阿里云Kubernetes容器服务基础之上,快速搭建一套用于连接、管理以及安全化微服务的开放平台Istio,为应用引入和配置多个相关服务。使用Prometheus进行监控是Istio提供的监控能力之一,通过扩展AlertManager集成钉钉助力Istio on ACK可观测性监控能力。
本文作者:wangxining
本文为云栖社区原创内容,未经允许不得转载。
Istio on ACK集成生态(2): 扩展AlertManager集成钉钉助力可观测性监控能力的更多相关文章
- Istio on ACK集成生态(1): 集成TSDB助力可观测性存储
阿里云容器服务Kubernetes(简称ACK)支持一键部署Istio,可以参考文档在ACK上部署使用Isito.Istio on ACK提供了丰富的监控能力,为网格中的服务收集遥测数据,其中Mixe ...
- Hudson可扩展持续集成引擎
参考文章:http://blog.csdn.net/dazhi_100/article/details/11629133 极限编程中一项建议实践便是持续集成,持续集成是指在开发阶段,对项目进行持续性自 ...
- Prometheus 安装Alertmanager集成
Prometheus 安装Alertmanager集成 # 下载地址 地址1:https://prometheus.io/download/ 地址2:https://github.com/promet ...
- Alertmanager集成Dingtalk/Wechat/Email报警
grafana对报警的支持真的很弱,而Prometheus提供的报警系统就强大很多 Prometheus将数据采集和报警分成了两个模块.报警规则配置在Prometheus Servers上,然后发送报 ...
- Grafana+prometheus+AlertManager+钉钉机器人
一.Grafana (1)安装Grafana的Linux环境 在官网下载windows的Grafana的压缩包到指定目录,解压缩Grafana压缩文件到包含当前Grafana版本的文件夹.将该文件夹解 ...
- SimpleInjector与MVC4集成,与Web Api集成,以及通过属性注入演示
SimpleInjector与MVC4集成,与Web Api集成,以及通过属性注入演示 1,与MVC集成 见http://simpleinjector.codeplex.com/wikipage? ...
- php集成环境和自己配置的区别,php集成环境、php绿色集成环境、php独立安装版环境这三者的区别
最近有学生问我,直接使用PHP集成环境和我们自己独立安装的php环境有什么不一样吗? 答:PHP集成环境,和自己安装的php环境实际上没啥区别的,只不过大部分的集成环境进行了一些绿化操作,本质上没啥区 ...
- jenkins 集成钉钉机器人
最早做Jenkins发布完成以后通过邮件发送信息通知相关的联系人,发现邮件会受限于大家接收的设置,导致不能及时的看到相关的发布内容,公司使用钉钉做为公司内部的通讯工具,所以想通过Jenkins发布完成 ...
- Sentry快速开始并集成钉钉群机器人
Sentry(直译为:哨兵)是一个开源错误跟踪服务,帮助开发人员实时监控和修复崩溃 Sentry本质上是一种帮助您实时监控和修复崩溃的服务 1. 安装客户端SDK 这里我们安装Java平台的SDK, ...
随机推荐
- LintCode_415 有效回文串
给定一个字符串,判断其是否为一个回文串.只包含字母和数字,忽略大小写. 注意事项 你是否考虑过,字符串有可能是空字符串?这是面试过程中,面试官常常会问的问题. 在这个题目中,我们将空字符串判定为有效回 ...
- 【Scala学习笔记】一、函数式编程的思想
1. 函数是头等值. 在函数编程中,函数也是值,与整数和字符串处于同一地位.函数可以像变量一样被创建,修改,并当成变量一样传递,返回或是在函数中嵌套函数. 函数可以当做参数传递给其他函数. ...
- 详谈Windows消息循环机制
一直对windows消息循环不太清楚,今天做个详细的总结,有说错的地方,请务必指出. 用VS2017新建一个win32 Application的默认代码如下: 程序入口 ...
- 【P2616】 【USACO10JAN】购买饲料II Buying Feed, II
P2616 [USACO10JAN]购买饲料II Buying Feed, II 题目描述 Farmer John needs to travel to town to pick up K (1 &l ...
- Oracle启动和禁用约束及删除违反约束的记录
一.禁用约束 alter table table_name disable novalidate constraint constraint_name 二.批量导入数据 三.在开启约束之前一定要检查违 ...
- php 单向散列加密
1.加密文件 <?php //sha1_en.php header("content-type:text/html;charset=utf-8"); $str = " ...
- CSS基础教程:群组化选择器
常常我们的CSS 样式中会有好几个地方需要使用到相同的设定时,一个一个分开写会是一件满累人的工作,重覆性太高且显得冗长,更不好管理....在CSS 语法的基本设定中,就可以把这几个相同设定的选择器合并 ...
- idea启动报错:Access denied for user 'root '@'192.168.100.XXX' (using password: YES)
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean wit ...
- 分析ajax请求过程以及请求方法
ajax 的全称是Asynchronous JavaScript and XML,其中,Asynchronous 是异步的意思,它有别于传统web开发中采用的同步的方式.据小编翻墙了解到,ajax很早 ...
- GBRT(GBDT)(MART)(Tree Net)(Tree link)
源于博客 GBRT(梯度提升回归树)有好多名字,标题全是它的别名. 它是一种迭代的回归树算法,由多棵回归树组成,所有树的结论累加起来得到最终结果.在被提出之初与SVM一起被认为是泛化能力较强的算法. ...