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>

        Prometheus Exporter 黑盒監(jiān)控 Kubernetes 服務

        共 12448字,需瀏覽 25分鐘

         ·

        2022-01-14 22:22


        系統(tǒng)環(huán)境:

        • 操作系統(tǒng): CentOS 7.9
        • Docker 版本: 20.10.8
        • Prometheus 版本: 2.29.1
        • Kubernetes 版本: 1.22.4
        • BlackBox Exporter 版本: 0.19.0

        示例地址:

        • Kubernetes 部署 BlackBox Exporter 的部署文件[1]

        一、BlackBox Exporter 是什么

        BlackBox Exporter 是 Prometheus 官方提供的黑盒監(jiān)控解決方案,允許用戶通過 HTTP、HTTPS、DNS、TCP 以及 ICMP 的方式對網(wǎng)絡進行探測,這種探測方式常常用于探測一個服務的運行狀態(tài),觀察服務是否正常運行。

        二、黑盒監(jiān)控和白盒監(jiān)控

        2.1 什么是白盒與黑盒監(jiān)控

        在監(jiān)控系統(tǒng)中會經(jīng)常提到 白盒監(jiān)控黑盒監(jiān)控 兩個關(guān)鍵詞,這里對這倆關(guān)鍵詞進行一下簡單解釋:

        墨盒監(jiān)控

        黑和監(jiān)控指的是以用戶的身份測試服務的運行狀態(tài)。常見的黑盒監(jiān)控手段包括 HTTP 探針、TCP 探針、DNS 探測、ICMP 等。黑盒監(jiān)控常用于檢測站點與服務可用性、連通性,以及訪問效率等。

        白盒監(jiān)控

        白盒監(jiān)控一般指的是我們?nèi)粘Ψ掌鳡顟B(tài)的監(jiān)控,如服務器資源使用量、容器的運行狀態(tài)、中間件的穩(wěn)定情況等一系列比較直觀的監(jiān)控數(shù)據(jù),這些都是支撐業(yè)務應用穩(wěn)定運行的基礎設施。

        通過白盒能監(jiān)控,可以使我們能夠了解系統(tǒng)內(nèi)部的實際運行狀況,而且還可以通過對監(jiān)控指標數(shù)據(jù)的觀察與分析,可以讓我們提前預判服務器可能出現(xiàn)的問題,針對可能出現(xiàn)的問題進行及時修正,避免造成不可預估的損失。

        2.2 白盒監(jiān)控和黑盒監(jiān)控的區(qū)別

        黑盒監(jiān)控與白盒監(jiān)控有著很大的不同,倆者的區(qū)別主要是,黑盒監(jiān)控是以故障為主導,當被監(jiān)控的服務發(fā)生故障時,能快速進行預警。而白盒監(jiān)控則更偏向于主動的和提前預判方式,預測可能發(fā)生的故障。

        一套完善的監(jiān)控系統(tǒng)是需要黑盒監(jiān)控與白盒監(jiān)控倆者配合同時工作的,白盒監(jiān)控預判可能存在的潛在問題,而黑盒監(jiān)控則是快速發(fā)現(xiàn)已經(jīng)發(fā)生的問題。

        三、Kubernetes 部署 BlackBox Exporter

        同樣,我們將 BlackBox Exporter 部署到 Kubernetes 集群中,可以按照下面步驟進行部署。

        3.1 創(chuàng)建 BlackBox 的 ConfigMap 資源

        一般為了方便對 BlackBox Exporter 組件的配置參數(shù)進行修改,所以我們將其配置文件存入 KubernetesConfigMap 資源中,其中 ConfigMap 資源文件 blackbox-exporter-config.yaml 內(nèi)容如下:

        apiVersion:?v1
        kind:?ConfigMap
        metadata:
        ??name:?blackbox-exporter
        ??labels:
        ????app:?blackbox-exporter
        data:
        ??blackbox.yml:?|-
        ????modules:
        ??????##?-----------?DNS?檢測配置?-----------
        ??????dns_tcp:
        ????????prober:?dns
        ????????dns:
        ??????????transport_protocol:?"tcp"
        ??????????preferred_ip_protocol:?"ip4"
        ??????????query_name:?"kubernetes.default.svc.cluster.local"?#?用于檢測域名可用的網(wǎng)址
        ??????????query_type:?"A"
        ??????##?-----------?TCP?檢測模塊配置?-----------
        ??????tcp_connect:
        ????????prober:?tcp
        ????????timeout:?5s
        ??????##?-----------?ICMP?檢測配置?-----------
        ??????ping:
        ????????prober:?icmp
        ????????timeout:?5s
        ????????icmp:
        ??????????preferred_ip_protocol:?"ip4"
        ??????##?-----------?HTTP?GET?2xx?檢測模塊配置?-----------
        ??????http_get_2xx:
        ????????prober:?http
        ????????timeout:?10s
        ????????http:
        ??????????method:?GET
        ??????????preferred_ip_protocol:?"ip4"
        ??????????valid_http_versions:?["HTTP/1.1","HTTP/2"]
        ??????????valid_status_codes:?[200]???????????#?驗證的HTTP狀態(tài)碼,默認為2xx
        ??????????no_follow_redirects:?false??????????#?是否不跟隨重定向
        ??????##?-----------?HTTP?GET?3xx?檢測模塊配置?-----------
        ??????http_get_3xx:
        ????????prober:?http
        ????????timeout:?10s
        ????????http:
        ??????????method:?GET
        ??????????preferred_ip_protocol:?"ip4"
        ??????????valid_http_versions:?["HTTP/1.1","HTTP/2"]
        ??????????valid_status_codes:?[301,302,304,305,306,307]??#?驗證的HTTP狀態(tài)碼,默認為2xx
        ??????????no_follow_redirects:?false?????????????????????#?是否不跟隨重定向
        ??????##?-----------?HTTP?POST?監(jiān)測模塊?-----------
        ??????http_post_2xx:
        ????????prober:?http
        ????????timeout:?10s
        ????????http:
        ??????????method:?POST
        ??????????preferred_ip_protocol:?"ip4"
        ??????????valid_http_versions:?["HTTP/1.1",?"HTTP/2"]
        ??????????#headers:?????????????????????????????#?HTTP頭設置
        ??????????#??Content-Type:?application/json
        ??????????#body:?'{}'???????????????????????????#?請求體設置

        參考 BlackBox Exporter 的 Github 提供的 示例配置文件[2]。

        3.2 部署 BlackBox 的 ConfigMap 資源

        ConfigMap 資源文件部署到 Kubernetes 中,執(zhí)行的命令如下:

        • -f: 指定部署的資源文件;
        • -n: 指定部署的命名空間;
        $?kubectl?apply?-f?blackbox-exporter-config.yaml?-n?kube-system

        3.3 創(chuàng)建 BlackBox Exporter 的 Deployment 資源

        創(chuàng)建在 Kubernetes 中部署 Backbox Exporter 的資源文件 blackbox-exporter-deploy.yaml,內(nèi)容如下:

        apiVersion:?v1
        kind:?Service
        metadata:
        ??name:?blackbox-exporter
        ??labels:
        ????k8s-app:?blackbox-exporter
        spec:
        ??type:?ClusterIP
        ??ports:
        ??-?name:?http
        ????port:?9115
        ????targetPort:?9115
        ??selector:
        ????k8s-app:?blackbox-exporter
        ---
        apiVersion:?apps/v1
        kind:?Deployment
        metadata:
        ??name:?blackbox-exporter
        ??labels:
        ????k8s-app:?blackbox-exporter
        spec:
        ??replicas:?1
        ??selector:
        ????matchLabels:
        ??????k8s-app:?blackbox-exporter
        ??template:
        ????metadata:
        ??????labels:
        ????????k8s-app:?blackbox-exporter
        ????spec:
        ??????containers:
        ??????-?name:?blackbox-exporter
        ????????image:?prom/blackbox-exporter:v0.19.0
        ????????args:
        ????????-?--config.file=/etc/blackbox_exporter/blackbox.yml
        ????????-?--web.listen-address=:9115
        ????????-?--log.level=info
        ????????ports:
        ????????-?name:?http
        ??????????containerPort:?9115
        ????????resources:
        ??????????limits:
        ????????????cpu:?200m
        ????????????memory:?256Mi
        ??????????requests:
        ????????????cpu:?100m
        ????????????memory:?50Mi
        ????????livenessProbe:
        ??????????tcpSocket:
        ????????????port:?9115
        ??????????initialDelaySeconds:?5
        ??????????timeoutSeconds:?5
        ??????????periodSeconds:?10
        ??????????successThreshold:?1
        ??????????failureThreshold:?3
        ????????readinessProbe:
        ??????????tcpSocket:
        ????????????port:?9115
        ??????????initialDelaySeconds:?5
        ??????????timeoutSeconds:?5
        ??????????periodSeconds:?10
        ??????????successThreshold:?1
        ??????????failureThreshold:?3
        ????????volumeMounts:
        ????????-?name:?config
        ??????????mountPath:?/etc/blackbox_exporter
        ??????volumes:
        ??????-?name:?config
        ????????configMap:
        ??????????name:?blackbox-exporter
        ??????????defaultMode:?420

        3.4 部署 BlackBox Exporter 的 Deployment 資源

        BlackBox ExporterDeployment 資源部署到 Kubernetes 中:

        • -f: 指定要部署的資源文件;
        • -n: 指定部署的命名空間;
        $?kubectl?apply?-f?blackbox-exporter-deploy.yaml?-n?kube-system

        3.5 觀察 BlackBox Exporter 部署狀態(tài)

        執(zhí)行下面命令,觀察 BlackBox Exporter 的應用部署狀態(tài),命令如下:

        $?kubectl?get?-f?blackbox-exporter-deploy.yaml?-n?kube-system?-w

        可以觀察到 Pod 運行狀態(tài)如下:

        NAME?????????????????????????????????????????READY???STATUS?????????????RESTARTS????????????AGE
        blackbox-exporter-668fc6dcc8-2sfdr???????????1/1?????Running????????????0???????????????????8m44s

        四、Prometheus 添加探測配置

        4.1 創(chuàng)建 DNS 探測配置

        創(chuàng)建 Prometheus 規(guī)則,添加使用 BlackBox Exporter 探測指定 DNS 服務器健康狀態(tài)的配置,內(nèi)容如下:

        ################?DNS?服務器監(jiān)控?###################
        -?job_name:?"kubernetes-dns"
        ??metrics_path:?/probe
        ??params:
        ????##?配置要使用的模塊,要與blackbox?exporter配置中的一致
        ????##?這里使用DNS模塊
        ????module:?[dns_tcp]
        ??static_configs:
        ????##?配置要檢測的地址
        ????-?targets:
        ??????-?kube-dns.kube-system:53
        ??????-?8.8.4.4:53
        ??????-?8.8.8.8:53
        ??????-?223.5.5.5
        ??relabel_configs:
        ????##?將上面配置的靜態(tài)DNS服務器地址轉(zhuǎn)換為臨時變量?“__param_target”
        ????-?source_labels:?[__address__]
        ??????target_label:?__param_target
        ????##?將?“__param_target”?內(nèi)容設置為?instance?實例名稱
        ????-?source_labels:?[__param_target]
        ??????target_label:?instance
        ????##?BlackBox?Exporter?的?Service?地址
        ????-?target_label:?__address__
        ??????replacement:?blackbox-exporter.kube-system:9115

        4.2 創(chuàng)建 Service 探測配置

        創(chuàng)建用于探測 Kubernetes 服務的配置,對那些配置了 prometheus.io/http-probe: "true" 標簽的 Kubernetes Service 資源的健康狀態(tài)進行探測,配置內(nèi)容如下:

        -?job_name:?"kubernetes-services"
        ??metrics_path:?/probe
        ??##?使用HTTP_GET_2xx與HTTP_GET_3XX模塊
        ??params:
        ????module:
        ????-?"http_get_2xx"
        ????-?"http_get_3xx"
        ??##?使用Kubernetes動態(tài)服務發(fā)現(xiàn),且使用Service類型的發(fā)現(xiàn)
        ??kubernetes_sd_configs:
        ??-?role:?service
        ??relabel_configs:
        ????##?設置只監(jiān)測Kubernetes?Service中Annotation里配置了注解prometheus.io/http_probe:?true的service
        ??-?action:?keep
        ????source_labels:?[__meta_kubernetes_service_annotation_prometheus_io_http_probe]
        ????regex:?"true"
        ??-?action:?replace
        ????source_labels:
        ????-?"__meta_kubernetes_service_name"
        ????-?"__meta_kubernetes_namespace"
        ????-?"__meta_kubernetes_service_annotation_prometheus_io_http_probe_port"
        ????-?"__meta_kubernetes_service_annotation_prometheus_io_http_probe_path"
        ????target_label:?__param_target
        ????regex:?(.+);(.+);(.+);(.+)
        ????replacement:?$1.$2:$3$4
        ??-?target_label:?__address__
        ????replacement:?blackbox-exporter.kube-system:9115
        ??-?source_labels:?[__param_target]
        ????target_label:?instance
        ??-?action:?labelmap
        ????regex:?__meta_kubernetes_service_label_(.+)
        ??-?source_labels:?[__meta_kubernetes_namespace]
        ????target_label:?kubernetes_namespace
        ??-?source_labels:?[__meta_kubernetes_service_name]
        ????target_label:?kubernetes_name

        4.3 將探測配置添加到 ConfigMap 資源

        由于之前是基于 Kubernetes 部署的 Prometheus[3],且將其配置參數(shù)寫到 Kubernetes 的 ConfigMap 資源中,然后通過掛載 ConfigMap 到 Pod 內(nèi)部,這樣修改 ConfigMap 就可以修改 Prometheus 配置。

        所以,這里將上面 Prometheus 中的配置存入到 Kubernetes 的 ConfigMap 資源文件 prometheus-config.yaml 中,資源內(nèi)容如下:

        apiVersion:?v1
        kind:?ConfigMap
        metadata:
        ??name:?prometheus-config
        data:
        ??prometheus.yml:?|
        ????global:
        ??????scrape_interval:?????15s
        ??????evaluation_interval:?15s
        ??????external_labels:
        ????????cluster:?"kubernetes"

        ????scrape_configs:
        ????##################################?Kubernetes?BlackBox?DNS?###################################
        ????-?job_name:?"kubernetes-dns"
        ??????metrics_path:?/probe
        ??????params:
        ????????module:?[dns_tcp]
        ??????static_configs:
        ????????-?targets:
        ??????????-?kube-dns.kube-system:53
        ??????????-?8.8.4.4:53
        ??????????-?8.8.8.8:53
        ??????????-?223.5.5.5
        ??????relabel_configs:
        ????????-?source_labels:?[__address__]
        ??????????target_label:?__param_target
        ????????-?source_labels:?[__param_target]
        ??????????target_label:?instance
        ????????-?target_label:?__address__
        ??????????replacement:?blackbox-exporter.kube-system:9115
        ????##################################?Kubernetes?BlackBox?Services?###################################
        ????-?job_name:?'kubernetes-services'
        ??????metrics_path:?/probe
        ??????params:
        ????????module:
        ????????-?"http_get_2xx"
        ????????-?"http_get_3xx"
        ??????kubernetes_sd_configs:
        ??????-?role:?service
        ??????relabel_configs:
        ??????-?action:?keep
        ????????source_labels:?[__meta_kubernetes_service_annotation_prometheus_io_http_probe]
        ????????regex:?"true"
        ??????-?action:?replace
        ????????source_labels:
        ????????-?"__meta_kubernetes_service_name"
        ????????-?"__meta_kubernetes_namespace"
        ????????-?"__meta_kubernetes_service_annotation_prometheus_io_http_probe_port"
        ????????-?"__meta_kubernetes_service_annotation_prometheus_io_http_probe_path"
        ????????target_label:?__param_target
        ????????regex:?(.+);(.+);(.+);(.+)
        ????????replacement:?$1.$2:$3$4
        ??????-?target_label:?__address__
        ????????replacement:?blackbox-exporter.kube-system:9115
        ??????-?source_labels:?[__param_target]
        ????????target_label:?instance
        ??????-?action:?labelmap
        ????????regex:?__meta_kubernetes_service_label_(.+)
        ??????-?source_labels:?[__meta_kubernetes_namespace]
        ????????target_label:?kubernetes_namespace
        ??????-?source_labels:?[__meta_kubernetes_service_name]
        ????????target_label:?kubernetes_name

        4.4 更新 Prometheus 的 ConfigMap 資源

        更新 Prometheus 在 Kubernetes 的 ConfigMap 資源中的配置參數(shù),命令如下:

        • -f: 指定要部署的資源文件。
        • -n: 指定 Namespace 名稱。
        $?kubectl?apply?-f?prometheus-config.yaml?-n?kube-system

        4.5 使 Prometheus 重新加載配置

        更新 Prometheus 配置后,需要使 Prometheus 重新加載配置,這里本人的 Prometheus 地址為 http://192.168.2.32:30900,所以執(zhí)行命令如下:

        $?curl?-XPOST?http://192.168.2.32:30900/-/reload

        五、Prometheus 探測 Kubernetes 應用示例

        5.1 探測 Service 示例

        這里先部署一個用于測試的 Nginx 應用鏡像,部署的 Deployment 資源文件 nginx-deploy.yaml 內(nèi)容如下:

        apiVersion:?v1
        kind:?Service
        metadata:
        ??name:?nginx
        ??labels:
        ????k8s-app:?nginx
        ??annotations:
        ????prometheus.io/http-probe:?"true"????????###?設置該服務執(zhí)行HTTP探測
        ????prometheus.io/http-probe-port:?"80"?????###?設置HTTP探測的接口
        ????prometheus.io/http-probe-path:?"/"??????###?設置HTTP探測的地址
        spec:
        ??type:?ClusterIP
        ??ports:
        ??-?name:?http
        ????port:?80
        ????targetPort:?80
        ??selector:
        ????app:?nginx
        ---
        apiVersion:?apps/v1
        kind:?Deployment
        metadata:
        ??name:?nginx
        ??labels:
        ????app:?nginx
        spec:
        ??replicas:?1
        ??selector:
        ????matchLabels:
        ??????app:?nginx
        ??template:
        ????metadata:
        ??????labels:
        ????????app:?nginx
        ????spec:
        ??????containers:
        ??????-?name:?nginx
        ????????image:?nginx:1.19
        ????????ports:
        ????????-?containerPort:?80

        5.2 將應用部署到 Kubernetes 中

        將測試用例 Deployment 資源部署到 Kubernetes 中:

        • -f: 指定待更新的資源文件。
        • -n: 指定應用所在的的命名空間。
        $?kubectl?apply?-f?nginx-deploy.yaml?-n?kube-system

        六、訪問 Prometheus UI 界面觀察

        訪問 Prometheus 的 UI 界面,進入 Status 中的 Targets 界面,將觀察到:

        可以看到 Prometheus 已經(jīng)按照配置的 DNS 服務器地址列表,執(zhí)行定時探測 DNS 服務器 的健康狀況,

        除此之外,Prometheus 還會定期探測那些添加了特定注解的,存在于 Kubernetes 中的 Service 資源的健康狀態(tài)。

        七、Grafana 中引入 BlackBox Exporter 監(jiān)控看板

        在之前的 ["Kubernetes 部署圖表組件 Grafana"](http://www.mydlq.club/article/111/ ""Kubernetes 部署圖表組件 Grafana"") 文章中,已經(jīng)介紹過如何在 Kubernetes 中部署 Grafana,所以這里就不再介紹該組件的安裝過程,只是簡單介紹下如何引入黑盒監(jiān)控的監(jiān)控看板,操作過程如下:

        7.1 Grafana 添加 Prometheus 數(shù)據(jù)庫

        進入 Grafana 界面,輸入默認的用戶名/密碼 (admin/123456) 進入 Grafana 界面中:

        然后主界面后點左側(cè)欄菜單,選擇 Data Sources 來添加 Prometheus 數(shù)據(jù)庫:

        輸入數(shù)據(jù)庫名稱與 Promehteus 地址,然后點 Save&Test 按鈕。

        7.2 Grafana 中引入 BlackBox Exporeter 看板

        點擊 Grafana 左側(cè)欄菜單,選擇 Manage 菜單,進入后點擊右上角 Import 按鈕:

        設置 ImportID 號為 9965,引入 BlackBox Exporter 模板,然后點擊 Load 按鈕進入配置數(shù)據(jù)庫:

        選擇使用上面配置的 Prometheus 數(shù)據(jù)庫,之后點擊 Import 按鈕進入看板:

        可以看到如下監(jiān)控信息:

        到此黑盒監(jiān)控配置完成,當然唯一不足的就是現(xiàn)在已經(jīng)有了指標數(shù)據(jù),但是根據(jù)這些數(shù)據(jù)只能觀察到一些發(fā)生的信息,而沒有根據(jù)這些監(jiān)控數(shù)據(jù)執(zhí)行告警。

        所以,如何使用這些數(shù)據(jù)進行告警,還需要大家摸索,既可以使用 Promethes 配合 AlertManager 實現(xiàn)告警,也可以使用 Grafana 的告警功能實現(xiàn)告警,怎么實現(xiàn)還得看大家業(yè)務情況,自行解決一下哈~。

        引用鏈接

        [1]

        Kubernetes 部署 BlackBox Exporter 的部署文件: https://github.com/my-dlq/blog-example/tree/master/kubernetes/kubernetes-blackbox-exporter

        [2]

        示例配置文件: https://github.com/prometheus/blackbox_exporter/blob/master/example.yml

        [3]

        Kubernetes 部署的 Prometheus: http://www.mydlq.club/article/110/

        原文鏈接:http://www.mydlq.club/article/120/


        你可能還喜歡

        點擊下方圖片即可閱讀

        我媽今年 70 歲,她用了 21 年的 Linux!

        云原生是一種信仰???

        關(guān)注公眾號

        后臺回復?k8s?獲取史上最方便快捷的 Kubernetes 高可用部署工具,只需一條命令,連 ssh 都不需要!



        點擊?"閱讀原文"?獲取更好的閱讀體驗!


        發(fā)現(xiàn)朋友圈變“安靜”了嗎?

        瀏覽 67
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

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

        手機掃一掃分享

        分享
        舉報
        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>
            欧美成人精品一区二区综合免费 | 欧美中文国产 | 国潮精品高潮呻吟欧美 | 粉嫩小泬BBBB免费看 | 欧美黄色一级片视频 | 国产成人精品综合久久久久99 | 影音先锋在线视频 | 国产精品久久久久久久久无码春色 | 色老头影院 | 女人被爽到呻吟gif动态图视看 |