ログパイプライン:ELKとLoki
1)理由と時期: 目標のロギング
観測可能性とRCA: Debag加速度、死後、SLO/SLA制御。
セキュリティと監査:アクセスの痕跡、異常、調査。
ビジネスメトリクス:変換、支払いフロー、PSPエラー、ユーザー行動。
コンプライアンス:ストレージ、PIIマスキング、保持ポリシー、リーガルホールド。
ログの種類:アプリケーション、インフラストラクチャ(kubelet、 kube-proxy、 CNI、 ingress)、ネットワーク、監査、支払い、Webイベント、Nginx/Envoy、データベース。
2)高レベルのアーキテクチャ
オプションA: ELK
Producers→Logshipper (Filebeat/Fluent Bit/Vector)→Logstash/Beats input→Elasticsearch→Kibana
オプションB: ロキ
Producers→Promtail/Fluent Bit→Loki ディストリビューター/ingester/querier→Grafana
ハイブリッド
フルテキスト/ファセット検索用のELK、低コストのスケーラブルなストレージ用のLoki、および高速なグラフ形式のクエリ。Grafanaのメトリック/トレースとの相関。
3)データフローと処理レベル
1.コレクション:バイトテールファイル、ジャーナル、syslog、 stdoutコンテナ、HTTP。
2.Enrichment: timestamp normalization、 host/pod/namespace、 env (prod/stage)、 release、 commit SHA、 trace/span id。
3.解析:JSON→フラットフィールド;grok/regex;Nginx/Envoyフォーマット;支払スキーム(PSPエラーコード)。
4.フィルタリング/編集:カットPII (PAN、 CVV、電子メール、アドレス)、秘密、トークン。
5.ルーティング:テナント/サービス/ログレベル;熱く/暖かい/冷たい;ストレージをS3/objectするために。
6.ストレージと保持:データクラスによるTTLポリシー。
7.アクセス/アナリティクス/アラート。
4) ELK: 主要な解決
4.1ログスタッシュ/ビート
ノード上でBeats/Fluent Bitを使用して簡単にピッカー、中央ETLとしてLogstash (grok、 dissect、 mutate、 geoip、 translate)。
Logstashプール:ingest-ETL、 security-ETL、 payment-ETL-負荷を分離します。
4.2 Elasticsearch
シャーディング:シャードあたり~ 20〜50 GBに焦点を当てます。「破片爆発」を避けてください。
インデックス戦略:'logs- <tenant>-<service> -YYYY。MM。 DD'またはデータストリーム;サイズ/時間によるロールオーバー。
- 熱い:SSD、 1-7日;暖かい:HDD、 7-30日;風邪:容積測定;凍結:アクセスが遅い最小コスト。
- 「マッピング」(Mappings)-ハードタイプのフィールド、フィールドデータの制限、およびダイナミックフィールドの作成。
- キャッシュとクエリ:キーワードフィールドによるフィルタ、集計-きちんと;高周波検索のためのピンからホット。
4.3キバナ
マルチテナンシーのためのスペース。
保存された検索、レンズ/TSVB、しきい値/アラートメトリック。
インデックスパターンによるRBAC ('logs-tenant-')。
5) Loki: 重要な決定
5.1ラベルモデル
ラベルはLokiの「index」です。'cluster'、 'namespace'、 'app'、 'level'、 'env'、 'tenant'といった低い意味での使用。
カーディナリティが高いフィールド(uid、 request_id)-行;'|='、'| json'、 '| regexp'はLogQLを介してクエリされたときに取得します。
5.2つのコンポーネント
PROMTAIL:評論の標準、ファイル、journald;パーサ(JSON、 regex、 cri)。
ディストリビューター/Ingester/Querier/Query-frontend:ロール別のスケーリング;リクエストキャッシング。
チャンクログの長期保存のためのオブジェクトストレージ(S3/GCS/MinIO)。
5.3 LogQLテクニック
Fast grep: '{app=「payments」、 level=」error」} |=「download」'
JSON: ' {app=」api」} | json | code=」5xx」 | unwrap duration | avg()'
メトリクスとの相関: 'rate ({app=「nginx」} |=「200」 [5m])'
6) ELK 対Loki比較(簡潔に)
検索/集計:ELKは複雑な全文およびファセットクエリに強い。ロキ-グレップのような、速くて安い。
コスト:Lokiは、多くの場合、より大きなボリューム(オブジェクトストレージ+より小さいインデックス)で安価です。
運用の複雑さ:ELKはインデックス/ILM、 Javu-hipsの規律を必要とします。ロキ-ラベルの分野。
メトリクス/トレースとの相関:LokiはGrafana/OTelスタックと自然に統合されます。ELKはまた、どのように、しかし、より頻繁に統合を通じて知っています。
7)安全性とコンプライアンス
エッジ上のPIIエディション(荷送人):マスクPAN、電子メール、電話、アドレス、トークン。
TLS in-transit、エージェントとバス間のmTLS。
RBAC:テナントごとのインデックス/ラベル;neimspaces/spacesの分離。
秘密の衛生:秘密のない環境変数、個々の秘密管理者。
法的保持:区分/索引の凍結のメカニズム;争われた期間のためのwrite-once。
削除/保持:データクラス(prod/stateful/payments/audit)によるTTLポリシー。
ログアクセス監査証跡。
8)信頼性およびスループット
バッファリングとバックプレッシャー:エージェントのローカルファイル/ディスク;指数関数的なバックオフで後退します。
Idempotency: 'ingest_id'/'log_id'フィールドは、重複時の重複を避けるために使用されます。
HA: Loki ESマスター/インゲスターの最小3ノード。アンチアフィニティAZ。
テナント/サービスによるクォータとレート制限;「嵐」の伐採に対する保護。
ログレベルのスキーム:'ERROR'制限、'DEBUG'はダイナミックフラグを介してのみ一時的に。
9)パフォーマンスとチューニング
ELK:- JVMヒープ50% RAM(ただし、ノードあたり30〜32 GB ≤ ~)、ページキャッシュが重要です。
- Smart rollover (20-50 GB/shard)、 'refresh_interval'> ingestインデックス用。
- Logstashでは、「heavy」 grokを避けます。可能であれば、ソースでJSONログを記録します。
- 適切なラベルセットがスピードの鍵です。
- 大きい塊→より安い貯蔵、しかしingesterのより高い記憶;バランス。
- 繰り返しリクエストに対するQuery-frontend+cache (meme/Redis)。
10)ログのFinOps(コスト)
フィールド/ラベルのカーディナリティを低下させます。
DEBUGサンプリングと動的な「ログスイッチ」。
回転:短い熱く、長い冷たい目的への。
重複排除と統合メッセージ(バッチ)。
安価なストレージクラスにログをアーカイブすることはめったにありません。
バリューダッシュボード:ボリューム/データストリーム/ラベル/インデックス/テナント。
11)観測可能性3-in-1
各ログへのTrace-ID/Span-ID (APIゲートウェイおよびサービス上のミドルウェア)。
OpenTelemetry:単一のコンテキスト;Tempo/Jaegerへのエクスポート、Prometheus/Mimirへのメトリック、Loki/ELKへのログ。
クイックシナリオ:「メトリックでアラート→対応するログにジャンプ→トラックにジャンプ」。
12)複数のテナントおよび分離
名前空間ベースの分離(K8sラベル)、独立したインデックスパターン/ラベル'テナント'。
テナントによるアラート/ダッシュボード/retenschnaの分離。
消費課金:インジェスト、ストレージ、リクエストの量。
13)コンベヤー自体のための監視そしてSLO
SLO ingest: "99。9%のログが 検索SLO: 「p95クエリ<Y sec」。 14)典型的な展開スキーム 管理:Elasticsearch サービス/Opensearch、 Grafana Cloud Loki。 15)構成例 15.1プロムテール(K8s、 CRI JSON) 15.2ログスタッシュ(インジェストとマスキング) 16)アラートとダッシュボード(テンプレート) 'rate ({app=「api「、level=」error」} [5m])> threshold'→PagerDuty/Telegram。 17)品質チェック(log-QA) ログコントラクト:JSON形式、必須フィールド('ts'、 'level'、 'service'、 'env'、 'trace_id'、 'msg')。 18)頻繁なエラーとアンチパターン Lokiラベルは、高いカーディナリティ('user_id'、 'request_id')→メモリの爆発。 19)実施計画(反復) 1.MVP:エージェント+1つのパイプライン(アプリケーション)、基本的なダッシュボード、PIIエディション。 20)生産への進水のチェックリスト 21) ミニFAQ 選択するもの-ELKまたはLoki?
テクニカルメトリクス:キューの深さ、ドロップされたログ、再処理レート、パーサエラーレート、ingester/ESノードの障害。
自己ホスト型K8s: ES/Loki用のStatefulSet、 AZ用のアンチアフィニティ、PersistentVolumes、オブジェクトストレージ。
エッジエージェント(リージョン内のアプリケーション):中央インジェストへのローカルバッファ+TLSチャネル。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: noderuby 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}"
}
}
Nginx/Envoyで5xxスプラッシュ。代理店のingestを落として下さい;待ち時間検索の増加。
Linter logs in CI:合意なしに高いカーディナリティを持つ新しいフィールドを禁止します。
カナリアサービス:リグレッションを早期に検出するためのリファレンスログの生成。
マッピングのないESの動的フィールド→「インデックス爆発」。
DEBUG in the sale"永遠に。"フラグとTTLでオンにします。
PIIの改訂がない。
すべてのための1つの一般的な「モノリシック」パイプライン-ドメイン別のより良いセグメント。
2.拡張機能:ネットワーク/インフラログ、SLOアラート、トラックとの相関。
3.FinOps:保持行列、コストレポート、ラベル/インデックス最適化。
4.マルチテナント:スペース、RBAC、消費料金。
5.信頼性:HA、災害訓練、リーガルホールド。