阿里云容器服务Kubernetes(简称ACK)支持一键部署Istio,能够参考文档在ACK上部署使用Isito。Istio on ACK提供了丰富的监控能力,为网格中的服务收集遥测数据,其中Mixer是负责提供策略控制和遥测收集的Istio组件。使用Prometheus进行监控是Istio提供的监控能力之一。html
告警能力在Prometheus的架构中被划分红两个独立的部分:Prometheus负责产生告警,而Alertmanager负责告警产生后的后续处理。以下所示,经过在Prometheus中定义告警规则,Prometheus会周期性的对告警规则进行计算,若是知足告警触发条件就会向Alertmanager发送告警信息。web
Alertmanager做为一个独立的组件,负责接收并处理来自Prometheus Server(也能够是其它的客户端程序)的告警信息。Alertmanager能够对这些告警信息进行进一步的处理,好比当接收到大量重复告警时可以消除重复的告警信息,同时对告警信息进行分组而且路由到正确的通知方,Prometheus内置了对邮件、Slack等多种通知方式的支持,同时还支持与Webhook的集成,以支持更多定制化的场景。例如,彻底能够经过Webhook与钉钉机器人进行集成,从而经过钉钉接收告警信息。同时AlertManager还提供了静默和告警抑制机制来对告警通知行为进行优化。api
如下介绍如何扩展AlertManager集成钉钉,并经过AlertManager帮助实现Istio on ACK在可观测性监控方面的能力。安全
配置 | 说明 |
---|---|
集群 | 选择目标集群。 |
命名空间 | 选择资源对象所属的命名空间,默认是 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: {}
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时会发出告警。app
阿里云容器服务Kubernetes(简称ACK)支持一键部署Istio,能够参考文档在ACK上部署Isito。
默认部署中的Prometheus服务没有对接AlertManager,须要按照以下步骤进行配置。微服务
alerting: alertmanagers: - static_configs: - targets: ["alertmanager:9093"]
当你的应用服务调用知足触发条件时,在Prometheus控制台上,点击Alerts页签,能够看到以下相似内容。优化
同时,相应的钉钉群也会收到相似的告警信息,以下所示。阿里云
在阿里云Kubernetes容器服务基础之上,快速搭建一套用于链接、管理以及安全化微服务的开放平台Istio,为应用引入和配置多个相关服务。使用Prometheus进行监控是Istio提供的监控能力之一,经过扩展AlertManager集成钉钉助力Istio on ACK可观测性监控能力。url
本文为云栖社区原创内容,未经容许不得转载。