GH GambleHub

Logs流水線:ELK和Loki

1)為什麼和時間: 拼寫目的

可觀察性和RCA:加速debag,後太平間,SLO/SLA控制。
安全和審計:訪問痕跡,異常,調查。
業務指標:轉換、支付漏洞、PSP錯誤、用戶行為。
合規性:存儲,PII掩蓋,還原策略,法律保留。

博客類型:應用,基礎架構(kubelet, kube-proxy, CNI, ingress),網絡,審計,支付,Web事件,Nginx/Envoy, DB。

2)高級體系結構

選項A: ELK

Producers → Logshipper (Filebeat/Fluent Bit/Vector) → Logstash/Beats input → Elasticsearch → Kibana/Алертинг

選項B: Loki

Producers → Promtail/Fluent Bit → Loki distributor/ingester/querier → Grafana/Алертинг

混合動力車

ELK用於全文搜索/面板,Loki用於廉價的可擴展存儲和快速的格雷普式查詢;在Grafana中使用度量/軌跡。

3)數據流和處理級別

1.收集:打字機文件,journald,syslog,stdout容器,HTTP。
2.豐富:timestamp歸一化,主機/pod/namespace,env(prod/stage),版本,commit SHA,trace/span id。
3.配對:JSON →平地;grok/regex;Nginx/Envoy格式;支付方案(PSP錯誤代碼)。
4.過濾器/修訂版:剪切PII (PAN, CVV,電子郵件,地址),秘密,令牌。
5.漫遊:按電話/服務/日誌級別;hot/warm/cold;在S3/對象存儲中。
6.存儲和還原:數據類的TTL策略。
7.訪問/分析/Alerta。

4) ELK: 關鍵解決方案

4.1 Logstash/Beats

將Beats/Fluent Bit用作輕量級收集器,Logstash用作中央ETL (grok, dissect, mutate, geoip, translate)。
Logstash池:ingest-ETL, security-ETL, payments-ETL-用於隔離負載。

4.2 Elasticsearch

搖搖欲墜:專註於每搖搖欲墜的~ 20-50 GB;避免「沙丁魚爆炸」。
索引策略:'log-<tenant>-<service>-YYYY。MM.DD'或數據流;rollover的大小/時間。

ILM (hot/warm/cold/frozen):

hot:SSD,1-7天;warm: HDD, 7-30天;冷:體積大;冷凍:最低成本,訪問速度較慢。
Mappings:硬類型字段,限制「fielddata」並創建動態字段。
緩存和查詢:按鍵字段的過濾器,整齊的聚合;用於高頻搜索的點對點。

4.3 Kibana

多影子空間。
Saved searches,Lens/TSVB,threshold/度量。
按索引模式劃分的RBAC(「logs-tenant-」)。

5) Loki: 關鍵解決方案

5.1個標簽型號

標簽是Loki的「索引」。使用低基數:'cluster'、'namespace'、'app'、'level'、'env'、'tenant'。
高基數字段(uid,request_id)在行中;通過LogQL 「|=」、「| json」、「| regexp」查詢時檢索。

5.2個組件

Promtail: сбор stdout, files, journald;解析器(JSON, regex, cri)。
Distributor/Ingester/Querier/Query-frontend:按角色縮放;請求緩存。
Object Storage (S3/GCS/MinIO)用於長期存儲字符日誌。

5.3 LogQL技術

快速grep: '{app='payments',level='error'} |= 'declined'

Парсинг JSON: `{app="api"} | json | code="5xx" | unwrap duration | avg()`

與指標的相關性: 'rate ({app='nginx"} |= '200' [5m])'

6)ELK vs Loki比較(簡述)

搜索/聚合:對於復雜的全文和多面查詢,ELK更強大;Loki像油脂一樣,快速便宜。
成本:Loki通常在較大體積上便宜(對象存儲+較小的索引)。
操作難度:ELK 需要索引/ILM,Javu-hips的紀律;Loki是標簽上的學科。
與度量/軌跡的相關性:Loki自然與Grafana/OTel堆棧集成;ELK也知道,但更常見的是通過集成。

7)安全和合規性

邊緣的PII修訂版(shipper):偽裝PAN、電子郵件、電話、地址、令牌。
傳輸中的TLS,代理與總線之間的mTLS。
RBAC:按指數索引/標簽;Nijspace/空間隔離。
Secrets hygiene:無秘密環境變量,個別秘密經理。
法律保持:分段/索引凍結機制;有爭議時期的write-once。
刪除/重建:按數據類別(prod/stateful/付款/審計)分列的TTL策略。
登錄訪問審核預告片。

8)可靠性和吞吐量

緩沖和備份:代理的本地文件/驅動器;帶有指數回放的回放。
Idempotency: 「ingest_id」/「log_id」字段,用於避免重播時的重復。

HA: Loki的ES 大師/ingesters最少3個讀物;antiaffinity по AZ.

Tenant/Service的配額和等級限制;防禦邏輯的「風暴」。
Log Level Scheme:「ERROR」是有限的,「DEBUG」只是暫時通過動態標誌。

9)性能和調音

ELK:

JVM heap 50% RAM(但每頭≤ ~ 30-32 GB), page cache很重要。
智能過山車(每個20-50 GB/shard),「refresh_interval」 ↑用於ingest索引。
在Logstash中避免「沈重」的樹皮;如果可能,在源上進行JSON生成。

Loki:

正確的標簽設置是速度的關鍵。
大襪子→便宜的存儲,但更昂貴的是內存;平衡一下。
Query-frontend+緩存(模因/Redis)用於重復查詢。

10) FinOps for Logs(成本)

字段/標簽基數降低。
Sampling DEBUG和動態「log-swichi」。
輪換:短熱,長冷成對象。
重復數據消除和合並消息(batch)。
將很少使用的日誌存檔到廉價的存儲類。
Dashbord價值:體積/數據流/標簽/索引/tenant。

11)與指標和軌道的相關性(Observability 3-in-1)

每個日誌中的Trace-ID/Span-ID(網關API和服務上的middleware)。
OpenTelemetry:一個上下文;Tempo/Jaeger的出口商,Prometheus/Mimir的指標,logi-Loki/ELK。

快速場景: 「通過度量標準→跳入適當的日誌→跳入賽道。」

12)多重性與隔離

基於Namespace的隔離(K8s標簽),單獨的索引模式/標簽「tenant」。
沿著Tenant劃分Alert/Dashbords/Rhetenchn。
按消費計費:ingest卷,storage,查詢。

13)管道本身的監控和SLO

SLO ingest: «99.9%的日誌交付於<X秒"。
搜索的SLO: 「p95查詢<Y sec」。
技術指標:queue depth、dropped logs、reprocess rate、error rate parser, ingester/ES nod故障。

14)示例部署模式

Managed: Elasticsearch Service/Opensearch, Grafana Cloud Loki.

自主K8s:用於ES/Loki的StatefulSets,AZ上的反親和力,PersistentVolumes,對象存儲。
Edge Agent(區域應用程序):本地緩沖區+TLS通道到中央入口。

15)配置示例

15.1 Promtail (K8s, CRI JSON)

yaml scrape_configs:
- job_name: kubernetes-pods kubernetes_sd_configs:
- role: pod pipeline_stages:
- cri: {}
- json:
expressions:
level: level msg: message trace: trace_id
- labels:
level:
app:
namespace:
- match:
selector: '{namespace="prod"}'
stages:
- regex:
expression: '(?P<pan>\b[0-9]{12,19}\b)'
- replace:
expression: '(?P<pan>\b[0-9]{12,19}\b)'
replace: '[REDACTED_PAN]'
relabel_configs:
- action: replace source_labels: [__meta_kubernetes_pod_label_app]
target_label: app
- action: replace source_labels: [__meta_kubernetes_namespace]
target_label: namespace
- action: replace source_labels: [__meta_kubernetes_pod_node_name]
target_label: node

15.2 Logstash (ingest和蒙版)

ruby input {
beats { port => 5044 }
}
filter {
json { source => "message" skip_on_invalid_json => true }
mutate { add_field => { "env" => "%{[kubernetes][labels][env]}" } }
PII mutate {
gsub => [
"message", "\b[0-9]{12,19}\b", "[REDACTED_PAN]",
"message", "(?i)(authorization: Bearer)([A-Za-z0-9\.\-_]+)", "\1[REDACTED_TOKEN]"
]
}
}
output {
elasticsearch {
hosts => ["https://es-hot-1:9200","https://es-hot-2:9200"]
index => "logs-%{[fields][tenant]}-%{[app]}-%{+YYYY. MM. dd}"
ilm_enabled => true ssl => true cacert => "/etc/ssl/certs/ca. crt"
user => "${ES_USER}"
password => "${ES_PASS}"
}
}

16)Alerting和dashbords(模式)

Ошибки API: `rate({app="api",level="error"}[5m]) > threshold` → PagerDuty/Telegram.

Nginx/Envoy中的5xx爆發;代理商的rop ingest;後期搜索增長。

Dashbords:
  • 按服務/tenant排列的日誌量。
  • 頂級錯誤模式(代碼/例外/endpoint)。
  • 續集/存儲類成本。

17)質量檢查(log-QA)

拼寫合同:JSON格式,必填字段(「ts」,「level」,「service」,「env」,「trace_id」,「msg」)。
CI中的Linter Loger:未經同意禁止使用高基數的新字段。
金絲雀服務:為早期回歸檢測生成參考日誌。

18)頻繁的錯誤和反模式

高基數的Loki標簽(「user_id」,「request_id」)→內存爆炸。
ES中沒有映射的動態字段→「索引爆炸」。
DEBUG「永遠」出售。通過旗幟和TTL打開。
沒有PII修訂版。
一個通用的「整體」流水線適合一切-最好是跨域細分。

19)實施計劃(叠代)

1.MVP: Agent+1 pipline(應用程序),Basic dashbords, PII修訂版。
2.擴展:網絡/infra-logs,SLO alerts,帶有軌道。
3.FinOps:重構矩陣,價值報告,標簽/指數優化。
4.多特南特:空間,RBAC,按消費計費。
5.可靠性:HA, disaster-drills, Legal Hold。

20)入口的啟動支票清單

  • 所有服務中的JSON格式和必填字段。
  • 在代理/ingest上偽裝PII。
  • 還原政策/ILM或bucket-lifecycle。
  • RBAC/空間/tenants。
  • SLO ingest/Search和Alertes。
  • 金絲雀日誌和測試運行負載。
  • 價值碼和服務所有者報告。
  • Runbooks:「如果ingest下跌/搜索緩慢/鯊魚是紅色,該怎麼辦。」

21) Mini-FAQ

選擇什麼-ELK或Loki?

Contact

與我們聯繫

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

Telegram
@Gamble_GC
開始整合

Email 為 必填。Telegram 或 WhatsApp 為 選填

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

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