GH GambleHub

可觀察性堆棧

1)為什麼需要觀測堆棧

快速RCA和減少MTTR:從癥狀到原因在幾分鐘內。
SLO控制:測量錯誤/潛伏期,通過錯誤的預算進行排序。
發行控制:金絲雀布局,按指標自動回滾。
安全和審計:訪問路線,異常,法律保留。
FinOps-Process:存儲/查詢成本,每次SLO成本。

方法:金色信號(latency/traffic/errors/saturation),RED,USE。

2)基本堆棧架構

按圖層分組的組件

收集/代理:Exporters, Promtail/Fluent Bit, OTel SDK/Auto-Instr, Blackbox-probes。

Шина/ingest: Prometheus remote_write → Mimir/Thanos, Loki distributors/ingesters, Tempo/Jaeger ingesters.

存儲:對象S3/GCS/MinIO(長期寒冷),SSD(熱排)。
查詢/可視化:Grafana(面板,SLO小部件),Kibana(如果ELK)。
管理:Alertmanager/Grafana-alerta,服務目錄,RBAC,秘密經理。

部署模式

托管(Grafana Cloud/雲服務)-在數量上快速而昂貴。
自我托管在K8s-完全控制,需要操作和FinOps。

3)數據標準: 單一「可觀察性方案」

3.1個指標(Prometheus/OpenMetrics)

強制性標簽是:「env」,「region」,「cluster」,「namespace」,「service」,「version」,「tenant」(如果是多特南特),「endpoint」。
命名:「snake_case」,後綴「_total」,「_seconds」,「_bytes」。
直方圖:固定的「buckets」(SLO定向)。
基數:不在標簽中包含「user_id」、「request_id」。

3.2 Logi

格式:JSON;必填字段「ts」、「level」、「service」、「env」、「trace_id」、「span_id」、「msg」。
PII:掩蓋代理(PAN、令牌、電子郵件等)。
Loki標簽:只有低基數(「app」,「namespace」,「level」,「tenant」)。

3.3條賽道

OTel語義: '服務。name`, `deployment.environment`, `db.system`, `http.`.

Sampling:p99的目標路徑是「always_on」/tail-sampling,其余路徑是「parent/ratio」。
嵌入ID:將「trace_id/span_id」推入日誌和度量(labels/fields)。

4)M-L-T相關性(Metrics/Logs/Traces)

從Alert圖形(度量)→,「trace_id」上的過濾邏輯→特定的路徑。
從軌道(慢速span)→調用span間隔上的特定後端指標。
面板中的Drilldown按鈕是:「到日誌」和「到軌道」,並帶有變量替換(「$env」,「$service」,「$trace_id」)。

5) OpenTelemetry Collector: 參考管線

yaml receivers:
otlp:
protocols: { http: {}, grpc: {} }
prometheus:
config:
scrape_configs:
- job_name: kube-nodes static_configs: [{ targets: ['kubelet:9100'] }]

processors:
batch: {}
memory_limiter: { check_interval: 1s, limit_mib: 512 }
attributes:
actions:
- key: deployment. environment value: ${ENV}
action: insert tail_sampling:
decision_wait: 5s policies:
- name: errors type: status_code status_code: { status_codes: [ERROR] }
- name: important-routes type: string_attribute string_attribute: { key: http. target, values: ["/payments","/login"] }
- name: probabilistic type: probabilistic probabilistic: { sampling_percentage: 10 }

exporters:
otlphttp/mimir: { endpoint: "https://mimir/api/v1/push" }
otlphttp/tempo: { endpoint: "https://tempo/api/traces" }
loki:
endpoint: https://loki/loki/api/v1/push labels:
attributes:
env: "deployment. environment"
service: "service. name"

service:
pipelines:
metrics: { receivers: [prometheus, otlp], processors: [memory_limiter, batch], exporters: [otlphttp/mimir] }
logs:   { receivers: [otlp], processors: [batch], exporters: [loki] }
traces:  { receivers: [otlp], processors: [memory_limiter, attributes, tail_sampling, batch], exporters: [otlphttp/tempo] }

6) Alerting: SLO和多燒傷

想法是:alertim不在「CPU> 80%」的水平,而是在Error Budget的消費上。

PromQL模板:
promql
5-minute error rate err_ratio_5m =
sum(rate(http_requests_total{status=~"5.."}[5m])) /
sum(rate(http_requests_total[5m]))

Quick burn (1m window)
(err_ratio_1m / (1 - SLO)) > 14. 4

Slow burn (30m)
(err_ratio_30m / (1 - SLO)) > 2
潛伏期(直方圖):
promql latency_p95 =
histogram_quantile(0. 95, sum by (le) (rate(http_request_duration_seconds_bucket[5m])))

7) Dashbords: 文件夾結構

00_Overview平臺:SLO, p95, 5xx%, capacity,活動事件。
10_Services服務:RPS,p95/p99,錯誤,版本(註釋)。
20_Infra-K8s/nods/storage/網絡,etcd,控制器。

30_DB/Queues — PostgreSQL/Redis/Kafka/RabbitMQ.

40_Edge/DNS/CDN/WAF-ingress, LB, WAF規則。
50_Synthetic是藥房和無頭腳本。
60_Cost/FinOps-存儲,查詢,熱/冷,預測。

每個面板:說明,單位,所有者,運行手冊鏈接,drilldown。

8) Logi: LogQL講習班

logql
API errors
{app="api", level="error"}     = "Exception"

Nginx 5xx in 5 minutes
{app="nginx"}      json      status=~"5.."      count_over_time([5m])

Extract Fields
{app="payments"}      json      code!=""      unwrap duration      avg()

9)軌道: TraceQL和焦點

查找最慢的睡眠:

{ service. name = "api" }      duration > 500ms
三明治「緩慢查詢中的緩慢SQL」:

{ name = "HTTP GET /order" }      child. span. name = "SELECT" & child. duration > 50ms

10)合成和制藥

Blackbox-exporter:來自≥3 個區域/ASN的HTTP/TCP/TLS/DNS樣本。
Headless: 登錄/deposit腳本按計劃。
Quorum-alerts:如果≥2地區看到故障,則觸發。
狀態頁面:自動更新+手動評論。

11)存儲和重構

度量標準:熱7天至30天(快速行)、降低/記錄規則、冷-對象存儲(月)。
Logs:熱3-7天,然後是索引S3/GCS(Loki chunk store/ELK ILM)。
路線:3-7天「always_on」+長期存儲樣本(tail-sampled/check)。

建議:
  • Rollover的大小和時間;請求預算(配額/限額)。
  • prod/stage和安全數據的單獨策略。

12)多重性和可用性

按「tenant」/「namespace」/Spaces,索引模式和分辨率劃分。
對計費資源進行標記:「tenant」、「service」、「team」。
進口dashbords/alerta-在特定命令的空間中。

13)安全和合規性

從代理商到bekends的TLS/mTLS,用於私人健康的HMAC。
RBAC用於閱讀/寫入,審核所有請求和差異。

邊緣的PII修訂版;禁止登錄中的秘密;DSAR/Legal Hold.

隔離:敏感域的單個群集/neyspace。

14) FinOps: 可觀測性的成本

我們降低了ingest(而不是查詢)中的標簽基數和邏輯。
Sampling Trass+針對關鍵路徑的目標前進。
用於重聚的downsampling/recording規則。
將罕見的訪問歸檔到冷對象。

Метрики: `storage_cost_gb_day`, `query_cost_hour`, `cost_per_rps`, `cost_per_9`.

15) CI/CD和可觀察性測試

放大CI中的指標/標誌:禁止基數「爆炸」,檢查直方圖/單位。
可觀察性合同測試:中間件中的「trace_id」強制性指標/邏輯字段。
金絲雀:圖上發布的註釋,SLO-auto-rollback。

16)示例: 快速查詢

關於錯誤的頂尖終點:
promql topk(10, sum by (route) (rate(http_requests_total{status=~"5.."}[5m])))

CPU throttling:

promql sum by (namespace, pod) (rate(container_cpu_cfs_throttled_seconds_total[5m])) > 0

Kafka lag:

promql max by (topic, group) (kafka_consumergroup_lag)

從日誌到軌道(Loki → Tempo):在Tempo UI/dashboard上傳輸「trace_id」作為鏈接。

17)堆棧質量: 支票清單

  • 統一指標/標誌/軌跡圖和度量單位。
  • 「trace_id」在日誌和度量標準中,從面板中刪除。
  • Multi-burn SLO-alerta無翻轉(quorum/multi-window)。
  • Downsampling、查詢配額、步驟/範圍限制。
  • 重建和存儲類已記錄並應用。
  • RBAC/審計/PII修訂版包括在內。
  • Dashbords:所有者,runbooks, ≤2 -3屏幕,快速響應。
  • FinOps-dashbord(體積、成本、頂級對話者)。

18)實施計劃(3次叠代)

1.MVP(2周):Prometheus→Mimir,Loki,Tempo;OTel Collector;基本的dashbords和SLO-alerta;blackbox樣本。
2.尺度(3-4周):tail-sampling,downsampling,多區域ingest,RBAC/Spaces,FinOps-dashbords。
3.Pro (4周以上):通過SLO、無頭關鍵路徑合成、Legal Hold、SLO產品組合和報告自動回滾。

19)反模式

「沒有SLO的美麗圖形」-沒有動作→沒有好處。
高基數標簽(「user_id」,「request_id」)是內存和成本的爆炸。
沒有JSON且沒有「trace_id」的日誌沒有相關性。
根據資源而不是癥狀,Alerts是噪音和呼喚倦怠。
缺乏重組政策是成本的不受控制的增長。

20)迷你常見問題

選擇什麼: Loki或ELK?

ELK用於復雜的搜索/面板;對於類似於grep的場景,Loki更便宜、更快。他們經常使用混合動力車。

每個人都需要賽道嗎?
是的,至少在帶有尾部采樣的關鍵路徑(登錄,檢查,支付)上-這大大加快了RCA。

如何從頭開始?
OTel Collector → Mimir/Loki/Tempo →基本的SLO和blackbox樣本→然後是行車記錄儀和burn-alerta。

底線

可觀察性堆棧不是一組不同的工具,而是一致的系統:統一的數據標準→ M-L-T相關性→ SLO對等和合成→安全性和FinOps。記錄電路、標簽紀律和續集,連接OTel,添加滾動和自動滾動-並獲得可管理的可靠性,成本可理解。

Contact

與我們聯繫

如有任何問題或支援需求,歡迎隨時聯絡我們。我們隨時樂意提供協助!

Telegram
@Gamble_GC
開始整合

Email 為 必填。Telegram 或 WhatsApp 為 選填

您的姓名 選填
Email 選填
主旨 選填
訊息內容 選填
Telegram 選填
@
若您填寫 Telegram,我們將在 Email 之外,同步於 Telegram 回覆您。
WhatsApp 選填
格式:國碼 + 電話號碼(例如:+886XXXXXXXXX)。

按下此按鈕即表示您同意我們處理您的資料。