Istio on ACK集成生態(2): 擴展AlertManager集成釘釘助力可觀測性監控能力

阿里雲容器服務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在可觀測性監控方面的能力。安全

經過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容器組。

圖片.png

建立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時會發出告警。app

  • 點擊肯定按鈕。

集成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可觀測性監控能力。url


原文連接 本文爲雲棲社區原創內容,未經容許不得轉載。

相關文章
相關標籤/搜索