<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>

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

          共 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)絡(luò)進(jìn)行探測,這種探測方式常常用于探測一個(gè)服務(wù)的運(yùn)行狀態(tài),觀察服務(wù)是否正常運(yùn)行。

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

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

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

          墨盒監(jiān)控

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

          白盒監(jiān)控

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

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

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

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

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

          三、Kubernetes 部署 BlackBox Exporter

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

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

          一般為了方便對 BlackBox Exporter 組件的配置參數(shù)進(jìn)行修改,所以我們將其配置文件存入 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]???????????#?驗(yàn)證的HTTP狀態(tài)碼,默認(rèn)為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]??#?驗(yàn)證的HTTP狀態(tài)碼,默認(rèn)為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頭設(shè)置
          ??????????#??Content-Type:?application/json
          ??????????#body:?'{}'???????????????????????????#?請求體設(shè)置

          參考 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 的應(yīng)用部署狀態(tài),命令如下:

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

          可以觀察到 Pod 運(yùn)行狀態(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 服務(wù)器健康狀態(tài)的配置,內(nèi)容如下:

          ################?DNS?服務(wù)器監(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服務(wù)器地址轉(zhuǎn)換為臨時(shí)變量?“__param_target”
          ????-?source_labels:?[__address__]
          ??????target_label:?__param_target
          ????##?將?“__param_target”?內(nèi)容設(shè)置為?instance?實(shí)例名稱
          ????-?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 服務(wù)的配置,對那些配置了 prometheus.io/http-probe: "true" 標(biāo)簽的 Kubernetes Service 資源的健康狀態(tài)進(jìn)行探測,配置內(nèi)容如下:

          -?job_name:?"kubernetes-services"
          ??metrics_path:?/probe
          ??##?使用HTTP_GET_2xx與HTTP_GET_3XX模塊
          ??params:
          ????module:
          ????-?"http_get_2xx"
          ????-?"http_get_3xx"
          ??##?使用Kubernetes動(dòng)態(tài)服務(wù)發(fā)現(xiàn),且使用Service類型的發(fā)現(xiàn)
          ??kubernetes_sd_configs:
          ??-?role:?service
          ??relabel_configs:
          ????##?設(shè)置只監(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 應(yīng)用示例

          5.1 探測 Service 示例

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

          apiVersion:?v1
          kind:?Service
          metadata:
          ??name:?nginx
          ??labels:
          ????k8s-app:?nginx
          ??annotations:
          ????prometheus.io/http-probe:?"true"????????###?設(shè)置該服務(wù)執(zhí)行HTTP探測
          ????prometheus.io/http-probe-port:?"80"?????###?設(shè)置HTTP探測的接口
          ????prometheus.io/http-probe-path:?"/"??????###?設(shè)置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 將應(yīng)用部署到 Kubernetes 中

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

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

          六、訪問 Prometheus UI 界面觀察

          訪問 Prometheus 的 UI 界面,進(jìn)入 Status 中的 Targets 界面,將觀察到:

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

          除此之外,Prometheus 還會(huì)定期探測那些添加了特定注解的,存在于 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ù)庫

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

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

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

          7.2 Grafana 中引入 BlackBox Exporeter 看板

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

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

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

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

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

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

          引用鏈接

          [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/


          你可能還喜歡

          點(diǎn)擊下方圖片即可閱讀

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

          云原生是一種信仰???

          關(guān)注公眾號

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



          點(diǎn)擊?"閱讀原文"?獲取更好的閱讀體驗(yàn)!


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

          瀏覽 67
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <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>
                  日本a免费看 | 欧美日韩一二三区 | 欧美熟妇XXXXX | 日本成人免费电影一区二区三区 | 天天做天天爱天天爽 |