欸,昨天 Day26 我們聊了 cAdvisor。那東西就是那種「你不會天天想它,但一爆掉就要命」的存在。今天換一個角度:我們不要只看裡面,要從外面戳戳看。
你總不能跟老闆說:
「嗯,我看應用內部健康檢查都是 OK 的呀。」
結果老闆一打開手機,API 回不來。這畫面就像你跟女朋友說:「我明明很愛妳啊」,但她回:「屁啦,你 Line 已讀不回三天。」
這時候就需要 Blackbox Exporter。它就是那種 站在外面偷窺你家有沒有燈亮的變態監控器。內部怎麼跑它不管,它只在乎:
說白話一點:它是 黑箱探測器。
來,用一句話講清楚:
Blackbox Exporter = Prometheus 的外部探測代理人
Blackbox Exporter 會根據 module 配置執行 probe,檢查目標服務是否「可用」。
重要特點:
probe_success
、probe_duration_seconds
。Blackbox Exporter 提供 probe 功能,它可以:
聽起來簡單對吧?但靠它,你就能補齊「從用戶角度來看,服務到底活著沒」這件事。
就像醫院檢查:Node Exporter 看血壓,cAdvisor 看器官數據,而 Blackbox Exporter 是護士直接跑來問:
「欸,你還能講話嗎?你可以走兩步給我看嗎?」
來,技術名詞時間:probe 就是探測。
它回答兩個問題:
比方說:
對 IT 系統來說:
如果 endpoint 是 200 → 恭喜活著。
如果 endpoint 回 502 → 活著,但智商低(就像剛睡醒的你)。
如果完全不回 → RIP。
module 名稱 | 協議 | 作用 | 專案範例 |
---|---|---|---|
http_2xx |
HTTP GET | 檢查服務 endpoint 是否回傳 2xx | /docs , /api/v1/health 等 |
http_post |
HTTP POST | 檢查 POST API 回傳狀態碼 | /api/v1/ask , /api/v1/stream |
tcp_connect |
TCP | 檢查 TCP 端口連線 | DB、Redis、Qdrant、Storage |
注意:Blackbox Exporter 底層不是單純 ping,它會根據 module 的定義執行不同類型的 probe,例如 GET、POST 請求或 TCP 連線。
Blackbox 的厲害之處是 module 可以客製化。
舉例:
modules:
http_2xx:
prober: http
timeout: 5s
http:
valid_http_versions: ["HTTP/1.1", "HTTP/2"]
valid_status_codes: []
method: GET
fail_if_ssl: false
fail_if_not_ssl: false
preferred_ip_protocol: "ip4"
fail_if_body_matches_regexp: []
fail_if_body_not_matches_regexp: []
http_post:
prober: http
timeout: 5s
http:
method: POST
headers:
Content-Type: "application/json"
body: '{"key":"value"}'
valid_status_codes: [200,201]
fail_if_ssl: false
fail_if_not_ssl: false
preferred_ip_protocol: "ip4"
tcp_connect:
prober: tcp
timeout: 5s
tcp:
preferred_ip_protocol: "ip4"
來翻譯:
結果都放到 Prometheus 指標裡
這種「模組化設計」讓你能針對不同服務選不同的 probe,靈活監控 API、微服務、資料庫。
probe_success
→ 成功 1 / 失敗 0probe_duration_seconds
→ 探測延遲時間modules:
http_2xx_health:
prober: http
http:
method: GET
valid_status_codes: [200]
probe_success = 1
probe_success = 0
,可能觸發告警modules:
http_post_ask:
prober: http
http:
method: POST
body: '{"text":"string","user_id":"string"}'
- job_name: 'blackbox-tcp'
metrics_path: /probe
params:
module: [tcp_connect]
static_configs:
- targets:
- 'note-db:5432'
- 'redis:6379'
- 'note-qdrant:6333'
- 'note-storage:9000'
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: blackbox-exporter:9115
Prometheus 每隔 scrape_interval
發 /probe?target=<url>&module=<module>
請求給 Blackbox Exporter
Blackbox Exporter 根據 module 設定:
產生 metrics:
probe_success
→ 成功 1 / 失敗 0。你是生是死。probe_duration_seconds
→ 整個探測花多久。反應快不快。probe_http_status_code
→ API 回的狀態碼。有沒有亂回東西。probe_success = 1
但 probe_http_status_code = 500
。Prometheus 收集 metrics,可做告警或 Grafana 可視化
簡單來說,它會「周期性 ping」你的 API 或服務,但 ping 的方式不限於 ICMP,而是根據 module 做不同類型的探測。
其實黑箱探測就是一種「外部驗證」。
你不能只聽自己講「我很好」,要有人來戳你一下才算數。
就像感情關係,不能只有單方面覺得幸福,要對方也能感受到。
技術層面上,Blackbox Exporter 補足了:
這三個湊齊,就像是 監控三重防護罩。
實戰小技巧:
probe_success == 0
可觸發服務下線告警probe_duration_seconds
分析服務響應性能好啦,Day27 就到這邊。
Blackbox Exporter 說穿了不複雜,但就像那個永遠坐在角落的同事:
你平常覺得他有點詭異,但沒有他又覺得不安。
把今天重點濃縮一下:
👉 健康檢查大多數時候用 GET probe 就好,因為輕量快速。
👉 少數核心 API 才會配置 POST probe,但會嚴格控制 body / token 數量,避免洩露或額外負擔。
畢竟 Blackbox 叫「黑箱」,你要對得起它的名字,不是什麼都塞進去。
[Prometheus]
│
▼
[Blackbox Exporter]
├─ GET probe → 健康檢查 endpoints
└─ POST probe → 核心 API endpoints (少量、含必要 body / token)
│
▼
[Alertmanager] → 發送告警 (Slack / Email)
明天 Day28,我們來聊聊 Grafana Dashboard。
因為「有數據 ≠ 有洞察」,你還需要一雙能看懂數據的眼睛 👀。