Istio on ACK集成生态(2): 扩展AlertManager集成钉钉助力可观测性监控能力
阿里云容器服務(wù)Kubernetes(簡稱ACK)支持一鍵部署Istio,可以參考文檔在ACK上部署使用Isito。Istio on ACK提供了豐富的監(jiān)控能力,為網(wǎng)格中的服務(wù)收集遙測數(shù)據(jù),其中Mixer是負責(zé)提供策略控制和遙測收集的Istio組件。使用Prometheus進行監(jiān)控是Istio提供的監(jiān)控能力之一。
告警能力在Prometheus的架構(gòu)中被劃分成兩個獨立的部分:Prometheus負責(zé)產(chǎn)生告警,而Alertmanager負責(zé)告警產(chǎn)生后的后續(xù)處理。如下所示,通過在Prometheus中定義告警規(guī)則,Prometheus會周期性的對告警規(guī)則進行計算,如果滿足告警觸發(fā)條件就會向Alertmanager發(fā)送告警信息。
Alertmanager作為一個獨立的組件,負責(zé)接收并處理來自Prometheus Server(也可以是其它的客戶端程序)的告警信息。Alertmanager可以對這些告警信息進行進一步的處理,比如當(dāng)接收到大量重復(fù)告警時能夠消除重復(fù)的告警信息,同時對告警信息進行分組并且路由到正確的通知方,Prometheus內(nèi)置了對郵件、Slack等多種通知方式的支持,同時還支持與Webhook的集成,以支持更多定制化的場景。例如,完全可以通過Webhook與釘釘機器人進行集成,從而通過釘釘接收告警信息。同時AlertManager還提供了靜默和告警抑制機制來對告警通知行為進行優(yōu)化。
以下介紹如何擴展AlertManager集成釘釘,并通過AlertManager幫助實現(xiàn)Istio on ACK在可觀測性監(jiān)控方面的能力。
通過Webhook集成釘釘
單擊釘釘群右上角群設(shè)置圖標(biāo),進入群設(shè)置頁面。單擊群機器人,進入群機器人頁面,選擇需要添加的機器人。此處選擇自定義機器人。
在機器人詳情頁面,單擊添加,進入添加機器人頁面。
填寫完配置群機器人信息后,單擊完成添加。
單擊復(fù)制,復(fù)制webhook地址。
部署AlertManager并對接釘釘
登錄容器服務(wù)管理控制臺。 在Kubernetes菜單下,單擊左側(cè)導(dǎo)航欄中的應(yīng)用 > 無狀態(tài),進入 無狀態(tài)(Deployment)頁面。
選擇目標(biāo)集群,命名空間選為istio-system,單擊右上角使用模板創(chuàng)建。
根據(jù)以下信息配置模板,完成后單擊創(chuàng)建。
自定義YAML內(nèi)容如下:
apiVersion: v1
kind: Service
metadata:
name: dingtalkservice
labels:
app: dingtalkservice
service: dingtalkservice
spec:
ports:
-
port: 8060
name: http
selector:
app: dingtalkserviceapiVersion: 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={替換為上述步驟中復(fù)制的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:
- --ding.profile=webhook1={替換為上述步驟中復(fù)制的webhook地址}
- match:
severity: info
receiver: webhook_alert - match:
severity: warning
receiver: webhook_alert
receivers:- name: webhook_alert
webhook_configs:
- name: webhook_alert
-
url: 'http://dingtalkservice:8060/dingtalk/webhook1/send'
send_resolved: falseapiVersion: 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: prometheus-webhook-dingtalk
-
name: alertmanager
protocol: TCP
port: 9093
targetPort: 9093apiVersion: 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: alertmanager
- name: config-volume
configMap:
name: alertmanager - name: alertmanager
emptyDir: {}
創(chuàng)建成功之后,單擊左側(cè)導(dǎo)航欄中的應(yīng)用 > 容器組,選擇相應(yīng)的集群和命名空間istio-system, 可以看到如下類似的運行中的alertmanager和dingtalkservice容器組。
創(chuàng)建Prometheus告警規(guī)則配置項
登錄 容器服務(wù)管理控制臺。在Kubernetes菜單下,單擊左側(cè)導(dǎo)航欄中的應(yīng)用配置 > 配置項,選擇相應(yīng)的集群與命名空間istio-system,點擊右上角的創(chuàng)建按鈕,進入創(chuàng)建配置項頁面。
輸入配置項名稱:prom-rules1。
添加配置項,名稱為rule1.yaml,值為如下內(nèi)容:
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 }}"
該規(guī)則描述過去1分鐘內(nèi)99%請求時延超過3s時會發(fā)出告警。
- name: fake
- name: alertmanager
點擊確定按鈕。
集成AlertManager到Istio中
阿里云容器服務(wù)Kubernetes(簡稱ACK)支持一鍵部署Istio,可以參考文檔在ACK上部署Isito。
默認部署中的Prometheus服務(wù)沒有對接AlertManager,需要按照如下步驟進行配置。
登錄容器服務(wù)管理控制臺。
在 Kubernetes 菜單下,單擊左側(cè)導(dǎo)航欄的應(yīng)用 > 發(fā)布,進入發(fā)布頁面。
單擊Helm,選擇所需的集群,選擇待更新的Istio,單擊操作列的更新。
在彈出的對話框中,對Istio的Prometheus參數(shù)進行修改:
| 配置 | 說明 |
alerting:
alertmanagers:
- static_configs:
- targets: ["alertmanager:9093"]
- targets: ["alertmanager:9093"]
修改完畢之后,單擊更新。
告警規(guī)則觸發(fā)驗證
當(dāng)你的應(yīng)用服務(wù)調(diào)用滿足觸發(fā)條件時,在Prometheus控制臺上,點擊Alerts頁簽,可以看到如下類似內(nèi)容。
同時,相應(yīng)的釘釘群也會收到類似的告警信息,如下所示。
總結(jié)
在阿里云Kubernetes容器服務(wù)基礎(chǔ)之上,快速搭建一套用于連接、管理以及安全化微服務(wù)的開放平臺Istio,為應(yīng)用引入和配置多個相關(guān)服務(wù)。使用Prometheus進行監(jiān)控是Istio提供的監(jiān)控能力之一,通過擴展AlertManager集成釘釘助力Istio on ACK可觀測性監(jiān)控能力。
轉(zhuǎn)載于:https://blog.51cto.com/14031893/2411068
總結(jié)
以上是生活随笔為你收集整理的Istio on ACK集成生态(2): 扩展AlertManager集成钉钉助力可观测性监控能力的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java Web学习总结(13)——JS
- 下一篇: securecrt切换会话(sessio