<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Traefik SRE 之使用 Prometheus 進(jìn)行監(jiān)控報警

          共 7675字,需瀏覽 16分鐘

           ·

          2021-04-06 19:51

          監(jiān)控系統(tǒng)是谷歌定義的 SRE 核心規(guī)則之一,當(dāng)我們使用 Traefik 作為 Kubernetes 的 Ingress 控制器的時候,我們自然也非常有必要對其進(jìn)行監(jiān)控。本文我們將探討如何使用 Prometheus 和 Grafana 從 Traefik 提供的 metrics 指標(biāo)中進(jìn)行監(jiān)控報警。

          安裝

          首先你需要一個可以訪問的 Kubernetes 集群。

          部署 Traefik

          這里我們使用更加簡單的 Helm 方式來安裝部署 Traefik。首先使用以下命令將 Traefik 添加到 Helm 的倉庫中:

          $ helm repo add traefik https://helm.traefik.io/$ helm repo update

          然后我們可以在 kube-system 命名空間下來部署最新版本的 Traefik,在我們這個示例中,我們還需要確保在集群中啟用了 Prometheus 指標(biāo),可以通過給 Helm 傳遞 --metrics.prometheus=true 標(biāo)志來實現(xiàn),這里我們將所有配置都放置到下面的 traefik-values.yaml 文件中:

          # traefik-values.yaml
          # 簡單使用 hostPort 模式ports: web: port: 8000 hostPort: 80 websecure: port: 8443 hostPort: 443 service: enabled: false# 不暴露 dashboardingressRoute: dashboard: enabled: false
          # 開啟 prometheus 監(jiān)控指標(biāo)additionalArguments:- --api.debug=true- --metrics.prometheus=true
          # kubeadm 安裝的集群默認(rèn)情況下master是有污點,需要容忍這個污點才可以部署# 這里我們將 traefik 固定在 master 節(jié)點tolerations: - key: "node-role.kubernetes.io/master" operator: "Equal" effect: "NoSchedule"
          nodeSelector: kubernetes.io/hostname: "master1"

          直接使用如下所示的命令安裝:

          $ helm install traefik traefik/traefik -n kube-system -f ./traefik-values.yamlNAME: traefikLAST DEPLOYED: Mon Apr  5 11:49:22 2021NAMESPACE: kube-systemSTATUS: deployedREVISION: 1TEST SUITE: None

          由于我們默認(rèn)沒有為 Traefik 的 Dashboard 創(chuàng)建 IngressRoute 對象,這里我們使用 port-forward 來臨時訪問即可,當(dāng)然首先需要為 Traefik Dashboard 創(chuàng)建一個 Service:

          # traefik-dashboard-service.yamlapiVersion: v1kind: Servicemetadata:  name: traefik-dashboard  namespace: kube-system  labels:    app.kubernetes.io/instance: traefik    app.kubernetes.io/name: traefik-dashboardspec:  type: ClusterIP  ports:  - name: traefik    port: 9000    targetPort: traefik    protocol: TCP  selector:    app.kubernetes.io/instance: traefik    app.kubernetes.io/name: traefik

          直接創(chuàng)建,然后使用端口轉(zhuǎn)發(fā)來訪問:

          $ kubectl apply -f traefik-dashboard-service.yaml$ kubectl port-forward service/traefik-dashboard 9000:9000 -n kube-systemForwarding from 127.0.0.1:9000 -> 9000Forwarding from [::1]:9000 -> 9000

          接下來我們就可以通過瀏覽器 http://localhost:9000/dashboard/(注意 URL 中的尾部斜杠,這是必須的)訪問 Traefik Dashboard 了,現(xiàn)在應(yīng)該可以看到在儀表板的 Features 部分啟用了 Prometheus 指標(biāo)。

          此外我們還可以訪問 http://localhost:9000/metrics 端點來查看 Traefik 提供的一些 metrics 指標(biāo):

          部署 Prometheus Stack

          Prometheus 完整的工具鏈由許多組件組成,如果要完全手動去安裝配置需要較長時間,感興趣的朋友可以參考前面我們的文章相關(guān)介紹。同樣這里我們直接使用 Prometheus 的 Helm Charts 來部署:

          $ helm repo add prometheus-community https://github.com/prometheus-community/helm-charts$ helm repo update

          上述資源庫提供了許多 Chart,要查看完整的列表,你可以使用搜索命令:

          $ helm search repo prometheus-community

          這里我們需要安裝的是 kube-prometheus-stack 這個 Chart,它會部署所需要的相關(guān)組件:

          $ helm install prometheus-stack prometheus-community/kube-prometheus-stackNAME: prometheus-stackLAST DEPLOYED: Mon Apr  5 12:25:22 2021NAMESPACE: defaultSTATUS: deployedREVISION: 1NOTES:kube-prometheus-stack has been installed. Check its status by running:  kubectl --namespace default get pods -l "release=prometheus-stack"
          Visit https://github.com/prometheus-operator/kube-prometheus for instructions on how to create & configure Alertmanager and Prometheus instances using the Operator.

          配置 Traefik 監(jiān)控

          Prometheus Operator 提供了 ServiceMonitor 這個 CRD 來配置監(jiān)控指標(biāo)的采集,這里我們定義一個如下所示的對象:

          # traefik-service-monitor.yamlapiVersion: monitoring.coreos.com/v1kind: ServiceMonitormetadata:  name:  traefik  namespace: default  labels:    app: traefik    release: prometheus-stackspec:  jobLabel: traefik-metrics  selector:    matchLabels:      app.kubernetes.io/instance: traefik      app.kubernetes.io/name: traefik-dashboard  namespaceSelector:    matchNames:    - kube-system  endpoints:  - port: traefik    path: /metrics

          根據(jù)上面的配置,Prometheus 將獲取 traefik-dashboard 服務(wù)的 /metrics 端點。主要注意的是 traefik-dashboard 服務(wù)是在 kube-system 命名空間中創(chuàng)建的,而 ServiceMonitor 則部署在默認(rèn)的 default 命名空間中,所以這里面我們使用了 namespaceSelector 進(jìn)行命名空間匹配。

          $ kubectl apply -f traefik-service-monitor.yaml

          接下來我們可以來驗證一下 Prometheus 是否已經(jīng)開始抓取 Traefik 的指標(biāo)了。

          配置 Traefik 報警

          接下來我們還可以添加一個報警規(guī)則,當(dāng)條件匹配的時候會觸發(fā)報警,同樣 Prometheus Operator 也提供了一個名為 PrometheusRule 的 CRD 對象來配置報警規(guī)則:

          # traefik-rules.yamlapiVersion: monitoring.coreos.com/v1kind: PrometheusRulemetadata:  annotations:    meta.helm.sh/release-name: prometheus-stack    meta.helm.sh/release-namespace: default  labels:    app: kube-prometheus-stack    release: prometheus-stack  name: traefik-alert-rules  namespace: defaultspec:  groups:  - name: Traefik    rules:    - alert: TooManyRequest      expr: avg(traefik_entrypoint_open_connections{job="traefik-dashboard",namespace="kube-system"})        > 5      for: 1m      labels:        severity: critical

          這里我們定義了一個規(guī)則:如果1分鐘內(nèi)有超過5個 open connections 機(jī)會觸發(fā)一個 TooManyRequest 報警,直接創(chuàng)建這個對象即可:

          $ kubectl apply -f traefik-rules.yaml

          創(chuàng)建完成后正常在 Promethues 的 Dashboard  下的 Status > Rules 頁面就可以看到對應(yīng)的報警規(guī)則:

          Grafana 配置

          前面使用 kube-prometheus-stack 這個 Helm Chart 部署的時候就已經(jīng)部署上了 Grafana,接下來我們可以為 Traefik 的監(jiān)控指標(biāo)配置一個 Dashboard,同樣首先我們使用端口轉(zhuǎn)發(fā)的方式來訪問 Grafana:

          $ kubectl port-forward service/rometheus-stack-grafana 10080:80

          然后訪問 Grafana GUI(http://localhost:10080)時,它會要求輸入登錄名和密碼,默認(rèn)的登錄用戶名是 admin,密碼是 prom-operator,密碼可以從名為 prometheus-operator-grafana 的 Kubernetes Secret 對象中獲取。

          當(dāng)然我們可以自己為 Traefik 自定義一個 Dashboard,也可以從 Grafana 的官方社區(qū)中導(dǎo)入一個合適的即可,點擊左側(cè)導(dǎo)航欄上的四方形圖標(biāo),導(dǎo)航到 Dashboards > Manage,即可添加儀表盤。

          點擊右上角的 Import 按鈕,輸入 11462 作為 Dashboard 的 ID,對應(yīng)用戶 timoreymann 貢獻(xiàn)的 Traefik 2 儀表盤。

          點擊 Load 后,你應(yīng)該看到導(dǎo)入的儀表盤的相關(guān)信息。

          在最下面有一個下拉菜單,選擇 Prometheus 數(shù)據(jù)源,然后點擊 Import,即可生成如下所示的 Dashboard。

          測試

          現(xiàn)在,Traefik 已經(jīng)開始工作了,并且指標(biāo)也被 Prometheus 和 Grafana 獲取到了,接下來我們需要使用一個應(yīng)用程序來測試。這里我們部署 HTTPBin 服務(wù),它提供了許多端點,可用于模擬不同類型的用戶流量。對應(yīng)的資源清單文件如下所示:

          # httpbin.yamlapiVersion: apps/v1kind: Deploymentmetadata:  name: httpbin  labels:    app: httpbinspec:  replicas: 1  selector:    matchLabels:      app: httpbin  template:    metadata:      labels:        app: httpbin    spec:      containers:      - image: kennethreitz/httpbin        name: httpbin        ports:        - containerPort: 80---apiVersion: v1kind: Servicemetadata:  name: httpbinspec:  ports:  - name: http    port: 8000    targetPort: 80  selector:    app: httpbin---apiVersion: traefik.containo.us/v1alpha1kind: IngressRoutemetadata:  name: httpbinspec:  entryPoints:    - web  routes:  - match: Host(`httpbin.local`)    kind: Rule    services:    - name: httpbin      port: 8000

          直接創(chuàng)建上面的資源清單:

          $ kubectl apply -f httpbin.yamldeployment.apps/httpbin createdservice/httpbin createdingressroute.traefik.containo.us/httpbin created

          httpbin 路由會匹配 httpbin.local 的主機(jī)名,然后將請求轉(zhuǎn)發(fā)給 httpbin Service:

          $ curl -I http://192.168.31.75  -H "host:httpbin.local"HTTP/1.1 200 OKAccess-Control-Allow-Credentials: trueAccess-Control-Allow-Origin: *Content-Length: 9593Content-Type: text/html; charset=utf-8Date: Mon, 05 Apr 2021 05:43:16 GMTServer: gunicorn/19.9.0

          我們這里部署的 Traefik 使用的是 hostPort 模式,固定到 master 節(jié)點上面的,這里的 IP 地址 192.168.31.75 就是 master 節(jié)點的 IP 地址。

          接下來我們使用 ab 來訪問 HTTPBin 服務(wù)模擬一些流量,這些請求會產(chǎn)生對應(yīng)的指標(biāo),執(zhí)行以下腳本:

          $ ab -c 5 -n 10000  -m PATCH -H "host:httpbin.local" -H "accept: application/json" http://192.168.31.75/patch$ ab -c 5 -n 10000  -m GET -H "host:httpbin.local" -H "accept: application/json" http://192.168.31.75/get$ ab -c 5 -n 10000  -m POST -H "host:httpbin.local" -H "accept: application/json" http://192.168.31.75/post

          正常一段時間后再去查看 Grafana 的 Dashboard 可以看到顯示了更多的信息:

          包括:正常運行的時間、平均響應(yīng)時間、請求總數(shù)、基于 HTTP 方法和服務(wù)的請求計數(shù)等。

          最后,當(dāng)我們測試應(yīng)用流量時,Prometheus 可能會觸發(fā)報警,之前創(chuàng)建的 TooManyRequest 報警將顯示在 Alertmanager 儀表板上,然后可以自己根據(jù)需要配置接收報警信息的 Receiver 即可。

          $ kubectl port-forward service/prometheus-stack-kube-prom-alertmanager 9093:9093Forwarding from 127.0.0.1:9093 -> 9093

          總結(jié)

          在本文中,我們已經(jīng)看到了將 Traefik 連接到 Prometheus 和 Grafana 以從 Traefik 指標(biāo)中創(chuàng)建可視化的過程是非常簡單的。當(dāng)熟悉這些工具后,我們也可以根據(jù)實際需求創(chuàng)建一些 Dashboard,暴露你的環(huán)境的一些關(guān)鍵數(shù)據(jù)。

          接下來將會給大家重點介紹關(guān)于 Traefik SRE 技術(shù)中的日志收集和 Jaeger 的應(yīng)用追蹤。



          K8S 進(jìn)階訓(xùn)練營


           點擊屏末  | 即刻學(xué)習(xí)
          瀏覽 55
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  男女啪啪AV | 免费看黄色国产一级片 | 乌克兰毛片 | 国产中文第一页 | 操我小骚逼 |