1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

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

        共 7675字,需瀏覽 16分鐘

         ·

        2021-04-06 19:51

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

        $ 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 機會觸發(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 貢獻的 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 的主機名,然后將請求轉(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 進階訓(xùn)練營


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

        手機掃一掃分享

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

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            懂色av蜜臀av粉嫩av分享 | 日日摸夜夜添夜夜添欧美毛片小说 | 国产免费www | 四虎成人影院樱桃视频 | 日日摸夜夜添夜夜躁好吊 | 大奶一区二区三区 | 天天综合网久久综合网 | 亚洲天堂网站在线 | 中文久久久久 | 韩国无码一区 |