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地址。
部署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容器組。
建立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引數進行修改:| 配置 | 說明 |
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可觀測性監控能力。
原文連結
本文為雲棲社群原創內容,未經