<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                [TOC] # 概述 在監控體系里面,通常我們認為監控分為:`白盒監控` 和 `黑盒監控`。 黑盒監控:主要關注的現象,一般都是正在發生的東西,例如出現一個告警,業務接口不正常,那么這種監控就是站在用戶的角度能看到的監控,重點在于能對正在發生的故障進行告警。 白盒監控:主要關注的是原因,也就是系統內部暴露的一些指標,例如 redis 的 info 中顯示 redis slave down,這個就是 redis info 顯示的一個內部的指標,重點在于原因,可能是在黑盒監控中看到 redis down,而查看內部信息的時候,顯示 redis port is refused connection。 # Blackbox Exporter Blackbox Exporter 是 Prometheus 社區提供的官方黑盒監控解決方案,其允許用戶通過:HTTP、HTTPS、DNS、TCP 以及 ICMP 的方式對網絡進行探測。 1. HTTP 測試 定義 Request Header 信息 判斷 Http status / Http Respones Header / Http Body 內容 2. TCP 測試 業務組件端口狀態監聽 應用層協議定義與監聽 3. ICMP 測試 主機探活機制 4. POST 測試 接口聯通性 5. SSL 證書過期時間 詳細的配置請查看[黑盒監控官方文檔](https://github.com/prometheus/blackbox_exporter/blob/master/CONFIGURATION.md) # 安裝Blackbox Exporter 安裝blackbox exporter的yaml文件 ```yaml apiVersion: v1 kind: ConfigMap metadata: name: prometheus-blackbox-exporter namespace: kube-mon data: blackbox.yml: |- modules: http_2xx: # 這里寫的名稱是定義,Prometheus的使用該名稱即可 prober: http timeout: 10s http: valid_http_versions: ["HTTP/1.1", "HTTP/2"] valid_status_codes: [] method: GET preferred_ip_protocol: "ip4" http_post_2xx: # http post 監測模塊 prober: http timeout: 10s http: valid_http_versions: ["HTTP/1.1", "HTTP/2"] method: POST preferred_ip_protocol: "ip4" tcp_connect: prober: tcp timeout: 10s icmp: prober: icmp timeout: 10s icmp: preferred_ip_protocol: "ip4" --- apiVersion: apps/v1 kind: Deployment metadata: name: blackbox-exporter namespace: kube-mon spec: replicas: 1 selector: matchLabels: app: blackbox-exporter template: metadata: labels: app: blackbox-exporter spec: containers: - name: blackbox-exporter image: prom/blackbox-exporter:v0.19.0 imagePullPolicy: IfNotPresent args: - --config.file=/etc/blackbox_exporter/blackbox.yml - --log.level=debug - --web.listen-address=:9115 ports: - containerPort: 9115 name: blackbox-port protocol: TCP readinessProbe: failureThreshold: 3 initialDelaySeconds: 5 periodSeconds: 10 successThreshold: 1 tcpSocket: port: 9115 timeoutSeconds: 5 resources: limits: cpu: 200m memory: 60Mi requests: cpu: 100m memory: 50Mi volumeMounts: - mountPath: /etc/blackbox_exporter name: config volumes: - configMap: defaultMode: 420 name: prometheus-blackbox-exporter name: config --- apiVersion: v1 kind: Service metadata: name: blackbox-exporter namespace: kube-mon spec: type: ClusterIP selector: app: blackbox-exporter ports: - name: http port: 9115 ``` 啟動blackbox_exporter ```shell kubectl apply -f blackbox-exporter.yaml ``` # Prometheus使用黑盒監控網頁 ## 監控有域名解析的網頁 **prometheus配置如下** ```yaml - job_name: "target-http-probe" # 使用blackbox exporter的接口 metrics_path: /probe params: # http_2xx 是于blackbox exporter的 `configMap` 中的配置文件名稱一致 module: [ http_2xx ] # 這里使用文件發現的方式,可以隨時添加和刪減網頁的監控 file_sd_configs: - files: - targets/http*.yml relabel_configs: # 用targets/http*.yml的網頁域名替換原instance的值 - source_labels: [__address__] target_label: __param_target - source_labels: [__param_target] target_label: instance # 用blackbox-exporter的service地址值"prometheus-blackbox-exporter:9115"替換原__address__的值 - target_label: __address__ replacement: blackbox-exporter:9115 ``` 這里演示的網頁是 `baidu.com` ,所有主機有網且有配置正確的dns都可以訪問到該域名。因為該域名是有在dns域名服務上做解析的。 ```yaml apiVersion: v1 kind: ConfigMap metadata: name: targets-files-sd-config namespace: kube-mon data: # 如果有多個文件的話,也可以寫在同一個configmap中的。 http.yml: | - targets: - baidu.com ``` 更新配置文件以及重新reload Prometheus服務 ```shell kubectl apply -f prometheus-config.yaml configmap/prometheus-config unchanged configmap/targets-files-sd-config configured curl -X POST "http://`kubectl -n kube-mon get endpoints prometheus -o jsonpath={.subsets[0].addresses[0].ip}`:9090/-/reload" ``` **Prometheus展示** ![targets00](https://img.kancloud.cn/71/5f/715f1eafac25a683c030dd0643349477_1618x764.png) ![targets01](https://img.kancloud.cn/2e/92/2e9256c4754b03e3d97665c477f97bc2_1920x330.png) ## 監控沒有域名解析的網頁 例如Prometheus使用nginx-ingress作為網關,給外部系統通過域名來訪問集群內部的Prometheus。現在需要通過Prometheus來檢查域名的狀態是否為200狀態碼。 這里只需要在http.yml文件中添加一個域名即可。稍等幾分鐘即可在Prometheus看到 ```yaml apiVersion: v1 kind: ConfigMap metadata: name: prometheus-files-sd-config namespace: kube-mon data: http.yml: | - targets: - baidu.com - www.ecloud.com/prometheus ``` 只需要更新configMap即可 ```shell kubectl apply -f prometheus-config.yaml configmap/prometheus-config unchanged configmap/prometheus-files-sd configured ``` **Prometheus展示** ![targets03](https://img.kancloud.cn/23/fc/23fc353e44eb8dc6e9b1f85c35ff6a7a_1561x309.png) ![targets04](https://img.kancloud.cn/e6/d8/e6d8279bf3b1344fa76311276d630a5d_1913x302.png) 從promSQL獲取到的域名 `www.ecloud.com/prometheus` 的狀態碼為403。出現該原因是blockbox exporter直接使用dns服務器解析 `www.ecloud.com` 的域名(可以通過查看blockbox exporter日志發現問題)。固然這不是我們想要的結果。從嘗試過將設置域名映射為本地IP地址,但是發現是無效的。 解決方法: `blockbox exporter`容器先使用內部的dns服務進行域名解析,如果解析不成功,會通過 `/etc/resolv.conf` 的域名解析地址進行解析。 所以只需要在內部dns服務添加A記錄進行解析即可。 ```shell # 添加A記錄 kubectl -n kube-system edit cm coredns apiVersion: v1 data: Corefile: | .:53 { errors health { lameduck 5s } ready kubernetes cluster.local. in-addr.arpa ip6.arpa { pods insecure fallthrough in-addr.arpa ip6.arpa ttl 30 } # 添加hosts{}的字段,有多個域名加添加多行 # 【注意】最后一行固定是fallthrough hosts { 192.168.31.188 www.ecloud.com fallthrough } prometheus :9153 forward . /etc/resolv.conf { max_concurrent 1000 } cache 30 loop reload loadbalance } # 重啟coredns服務 kubectl -n kube-system delete pod -l k8s-app=kube-dns pod "coredns-8587764bd6-b898r" deleted pod "coredns-8587764bd6-tlxpd" deleted pod "coredns-8587764bd6-tts8x" deleted ``` 再次查看PromSQL就可以看到狀態碼為200了。 ![targets](https://img.kancloud.cn/08/ce/08ce5cc0fd834718a451fa92eee02a59_1920x297.png) # prometheus使用黑盒監控service資源 ## http檢測 **prometheus配置如下** ```yaml - job_name: "service-http-probe" scrape_interval: 1m metrics_path: /probe # 使用blackbox exporter配置文件的http_2xx的探針 params: module: [ http_2xx ] kubernetes_sd_configs: - role: service relabel_configs: # 保留service注釋有prometheus.io/scrape: true和prometheus.io/http-probe: true - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scrape, __meta_kubernetes_service_annotation_prometheus_io_http_probe] action: keep regex: true;true # 將原標簽名__meta_kubernetes_service_name改成service_name - source_labels: [__meta_kubernetes_service_name] action: replace regex: (.*) target_label: service_name # 將原標簽名__meta_kubernetes_namespace改成namespace - source_labels: [__meta_kubernetes_namespace] action: replace regex: (.*) target_label: namespace # 將instance改成 `clusterIP:port` 地址 - source_labels: [__meta_kubernetes_service_cluster_ip, __meta_kubernetes_service_annotation_prometheus_io_http_probe_port, __meta_kubernetes_service_annotation_pr ometheus_io_http_probe_path] action: replace regex: (.*);(.*);(.*) target_label: __param_target replacement: $1:$2$3 - source_labels: [__param_target] target_label: instance # 將__address__的值改成 `blackbox-exporter:9115` - target_label: __address__ replacement: blackbox-exporter:9115 ``` > 總結:需要service服務使用http-probe監控。則需要在service上添加注釋必須有以下三行 > prometheus.io/http-probe: "true"、prometheus.io/scrape: "true" 和 prometheus.io/http-probe-port: "8002" > 如果域名上下文不是為 `/` 的話,需要在注釋添加 prometheus.io/http-probe-path: "/test/demo" 更新配置文件以及重新reload Prometheus服務 ```shell kubectl apply -f prometheus-config.yaml configmap/prometheus-config configured curl -X POST "http://`kubectl -n kube-mon get endpoints prometheus -o jsonpath={.subsets[0].addresses[0].ip}`:9090/-/reload" ``` **Prometheus展示** ![](https://img.kancloud.cn/b1/ec/b1ece795bfd579f0e2fa6f8d5c16ab66_1702x240.png) ![](https://img.kancloud.cn/52/c1/52c13324101d13219dce6ea48c5e3e97_1274x251.png) ## tcp檢測 ```yaml - job_name: "service-tcp-probe" scrape_interval: 1m metrics_path: /probe # 使用blackbox exporter配置文件的tcp_connect的探針 params: module: [ tcp_connect ] kubernetes_sd_configs: - role: service relabel_configs: # 保留prometheus.io/scrape: "true"和prometheus.io/tcp-probe: "true"的service - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scrape, __meta_kubernetes_service_annotation_prometheus_io_tcp_probe] action: keep regex: true;true # 將原標簽名__meta_kubernetes_service_name改成service_name - source_labels: [__meta_kubernetes_service_name] action: replace regex: (.*) target_label: service_name # 將原標簽名__meta_kubernetes_service_name改成service_name - source_labels: [__meta_kubernetes_namespace] action: replace regex: (.*) target_label: namespace # 將instance改成 `clusterIP:port` 地址 - source_labels: [__meta_kubernetes_service_cluster_ip, __meta_kubernetes_service_annotation_prometheus_io_http_probe_port] action: replace regex: (.*);(.*) target_label: __param_target replacement: $1:$2 - source_labels: [__param_target] target_label: instance # 將__address__的值改成 `blackbox-exporter:9115` - target_label: __address__ replacement: blackbox-exporter:9115 ``` > 總結:需要service服務使用http-probe監控。則需要在service上添加注釋必須有以下三行 > prometheus.io/tcp-probe: "true"、prometheus.io/scrape: "true" 和 prometheus.io/http-probe-port: "xxx" 更新配置文件以及重新reload Prometheus服務 ```shell kubectl apply -f prometheus-config.yaml configmap/prometheus-config configured curl -X POST "http://`kubectl -n kube-mon get endpoints prometheus -o jsonpath={.subsets[0].addresses[0].ip}`:9090/-/reload" ``` **Prometheus展示** ![](https://img.kancloud.cn/69/89/69894ade15a34e1e0f1724c5a3f18f70_1612x210.png)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看