歡迎來(lái)到藍(lán)隊(duì)云技術(shù)小課堂,每天分享一個(gè)技術(shù)小知識(shí)。
為了及時(shí)發(fā)現(xiàn)服務(wù)器上的自定義服務(wù)是否因故障停止運(yùn)行,我們可以使用 Prometheus 和 Blackbox Exporter 來(lái)實(shí)現(xiàn)端口監(jiān)控和故障告警。這可以幫助我們主動(dòng)發(fā)現(xiàn)服務(wù)的狀態(tài),而不必等待出現(xiàn)問(wèn)題后才進(jìn)行排查。
1. 部署 Prometheus
首先,你需要部署 Prometheus 服務(wù),作為監(jiān)控的核心。如果 Prometheus 已經(jīng)安裝并且運(yùn)行正常,可以跳過(guò)這一步。如果尚未安裝,可以參考 Prometheus 官方文檔 完成安裝。
2. 安裝 Blackbox Exporter
Blackbox Exporter 是 Prometheus 提供的用于黑盒監(jiān)控的工具,可以檢測(cè) HTTP、TCP 端口等服務(wù)的可用性。它能夠快速發(fā)現(xiàn)服務(wù)是否已經(jīng)停止。
在 Kubernetes 上安裝 Blackbox Exporter
添加 Prometheus Chart 倉(cāng)庫(kù)并更新:
helm repo add prometheus-community http://www.tjdsmy.cn/helm-charts
helm repo update
安裝 Blackbox Exporter:
helm install prometheus-blackbox-exporter prometheus-community/prometheus-blackbox-exporter -n monitoring
卸載 Blackbox Exporter:
helm uninstall prometheus-blackbox-exporter -n monitoring
3. 配置 Prometheus 使用 Blackbox Exporter
安裝完成后,需要在 Prometheus 的配置文件中添加一個(gè) job,用來(lái)監(jiān)控特定的端口。編輯 prometheus-server.yaml 配置文件,添加如下內(nèi)容:
- job_name: 'port_status' # 自定義任務(wù)名稱
metrics_path: /probe
params:
module: [tcp_connect] # 選擇 TCP 端口監(jiān)控模塊
static_configs:
- targets:
- 10.1.2.10:6379 # 需要監(jiān)控的服務(wù)器及端口
- 10.1.2.2:10620
- 10.1.2.3:10620
- 10.1.2.4:10620
- 10.1.2.7:16000
- 10.1.2.8:16000
- 10.1.2.11:8123
labels:
instance: port_status
group: port
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: ip
- target_label: __address__
replacement: prometheus-blackbox-exporter:9115 # Blackbox Exporter 的地址
4. 配置告警規(guī)則
為了在端口無(wú)法連接時(shí)及時(shí)發(fā)現(xiàn)問(wèn)題,我們可以設(shè)置 Prometheus 告警規(guī)則。編輯 Prometheus 的告警配置文件,添加以下規(guī)則:
groups: # 定義告警規(guī)則組- name: portStatus ## 組名
rules: # 定義告警規(guī)則
- alert: probe_success # 規(guī)則名稱
expr: probe_success == 0 # 告警表達(dá)式
for: 1m # 持續(xù)時(shí)間,1分鐘內(nèi)不恢復(fù)則觸發(fā)告警
labels: # 定義告警標(biāo)簽
severity: critical # 告警等級(jí)
annotations: # 告警內(nèi)容,可以自定義
summary: "{{ $labels.appname }}"
description: "{{ $labels.env }} {{ $labels.hostname }} 服務(wù) {{ $labels.appname }} 端口無(wú)法聯(lián)通, 請(qǐng)盡快檢測(cè)"
value: "{{ $value }}"
5. Grafana 可視化監(jiān)控
如果你需要在 Grafana 中可視化監(jiān)控結(jié)果,可以導(dǎo)入 Prometheus 的相關(guān) Dashboard 模板。Grafana 提供了一個(gè)非常實(shí)用的模板 ID 9965,可以用來(lái)展示端口監(jiān)控的狀態(tài)。
導(dǎo)入模板 ID 9965 后,你就可以在 Grafana 中查看各個(gè)端口的監(jiān)控狀態(tài),了解服務(wù)的運(yùn)行情況。
藍(lán)隊(duì)云官網(wǎng)上擁有完善的技術(shù)支持庫(kù)可供參考,大家可自行查閱,更多技術(shù)問(wèn)題,可以直接咨詢。同時(shí),藍(lán)隊(duì)云整理了運(yùn)維必備的工具包免費(fèi)分享給大家使用,需要的朋友可以直接咨詢。
更多技術(shù)知識(shí),藍(lán)隊(duì)云期待與你一起探索。