4.7K Views
August 01, 23
スライド概要
Kubernetesでロギングしている人向け ログの欠落に備えよう 株式会社FIXER 南條 祐輝 a.k.a. なむゆ © COPYRIGHT 2023 FIXER Inc.
自己紹介 ▶ 株式会社FIXER 南條 祐輝 a.k.a. なむゆ • • 新卒入社6年目 クラウドソリューションエンジニア アプリケーション開発 クラウドインフラも少々 Azure Pipelineを用いたCI/CDパイプラインの開発 Kubernetesへのアプリの展開、運用、トラブル対応 最近はDevSecOps対応やらコンテナセキュリティ関連の業務も始めました • • • • • Twitter: @namuyuy © COPYRIGHT 2023 FIXER Inc. 1
今日するお話は・・・ Kubernetesを運用しているときに遭遇した体験を基に Kubernetesの運用時に気をつけるべきことについて 「ロギングの監視も考えたほうがいいよ!」という話をします © COPYRIGHT 2023 FIXER Inc. 2
この話はどんな人向けか ▶ Kubernetesを現在進行形で運用している方 ▶ 一通り運用はできているけど、もっとよくできることがないか探している方 ▶ 運用する中で起きうる問題を知って備えておきたい方 © COPYRIGHT 2023 FIXER Inc. 3
アジェンダ ▶ Kubernetesでのアプリケーションロギング ▶ Kubernetesのロギング中に起きて困ったこと ▶ ログの欠落の大変さと難しさ ▶ まずはロギングの監視をしよう © COPYRIGHT 2023 FIXER Inc. 4
Kubernetesでのアプリケーションロギング - 手段 • マウントしたvolumeに直接書き出す • DataDogでログ収集 • Fluentdで収集 • Lokiで収集 etc… 今回はAzure Kubernetes Service(AKS)をターゲットに Loki + Grafanaを用いてログ収集、可視化する場合の話をします! © COPYRIGHT 2023 FIXER Inc. 5
Kubernetesでのアプリケーションロギング - 構成・運用 構成例 AKS ログ永続化 Loki Storage Account 転送 Promtail ログ収集 可視化 Grafana © COPYRIGHT 2023 FIXER Inc. 6
Kubernetesのロギング中に起きて困ったこと 色々あるけど・・・ 意外と困った ログの欠落 © COPYRIGHT 2023 FIXER Inc. 7
ログが欠落していると・・・ アプリの問題の原因の調査が困難になる ログは問題調査の生命線 問題が起きた当時のログが取得できなかった その前後で吐かれるログはあるのに・・・ というかそんなことあるの?という状態 © COPYRIGHT 2023 FIXER Inc. 8
ログ欠落問題の難しさ • いつ、どれくらいのログが欠落していたか分からない • 昨日はロギングできていても、今日はロギングできているか分からない • 原因が分かり辛いこともある(メトリクス上だとログ送信失敗はずっと0件なのに・・・) © COPYRIGHT 2023 FIXER Inc. 9
原因は? • 永続化先のストレージの問題 • ストレージがいっぱいになる • ストレージの書き込み速度が不足してログが保存しきれない • ロギングソフトウェアの問題 • 内部のエラー • 送信の失敗 • ストレージまでの経路の問題 • ネットワーク不調 • ネットワークの帯域が足りなくてストレージへのログ送信が詰まる • そもそもアプリがログを吐いていない説 • アプリが落ちた? • ログ出力するようにアプリは設定されている? 考えてみましょう、他にもいくつか思い浮かぶはずです © COPYRIGHT 2023 FIXER Inc. 10
まずはロギングの監視をしよう 解決策については原因によってそれぞれ改善策はあるので割愛するとして・・・ 今ログは欠落していないか? いつ欠落が起きていたか? は知っておきたい © COPYRIGHT 2023 FIXER Inc. 11
検知方法方法の例: Loki Canary AKS Loki Canary ログ収集 Lokiのログ保存状況の監視アプリケーション Loki Prometheusにメトリクスを投げるので ログ欠落の状況をGrafanaで可視化可能 欠落発生時にアラートできる Promtail 「送信されたログが取得できるか」の観点で ダイレクトに監視する 送信したログが 取得できるか確認 https://grafana.com/docs/loki/latest/operations/loki-canary/ ログ欠落の 可視化 Grafana © COPYRIGHT 2023 FIXER Inc. ログ送信 Loki Canary メトリクスを取得、集積 Prometheus 12
Loki Canaryの仕組み AKS 1557935669096040040 ppppppppppppppppppppppppppppppppppppp ログ収集 ↑こんなログを一定周期で生成します タイムスタンプ + 検索用のランダムな文字列 1. 2. 3. 4. 人工的なログを生成して出力 Promtailがそのログを取得、Lokiに送信 Loki CanaryがLokiに出力したログを待機 生成したログが取得できなければログ欠落検知 Loki Promtail 送信したログが 取得できるか確認 https://grafana.com/docs/loki/latest/operations/loki-canary/ ログ欠落の 可視化 Grafana © COPYRIGHT 2023 FIXER Inc. ログ送信 Loki Canary メトリクスを取得、集積 Prometheus 13
Loki Canaryの使用方法 1. Loki Canaryをクラスタに展開 以下のようなマニフェストをkubectl apply --apiVersion: v1 kind: Pod metadata: labels: app: loki-canary name: loki-canary name: loki-canary spec: containers: - args: - -addr=loki:3100 image: grafana/loki-canary:latest imagePullPolicy: IfNotPresent name: loki-canary resources: {} --apiVersion: v1 kind: Service metadata: name: loki-canary labels: app: loki-canary spec: type: ClusterIP selector: app: loki-canary ports: - name: metrics protocol: TCP port: 3500 targetPort: 3500 -addrオプションはLokiサーバーのエンドポイントを指定します。 Lokiとの通信に使用します。 Loki Canaryのメトリクス取得に使うポート3500番にルーティングする Service マニフェストは https://grafana.com/docs/loki/latest/operations/loki-canary/ より © COPYRIGHT 2023 FIXER Inc. 14
Loki Canaryの使用方法 2. Prometheusの設定 Prometheus.yamlに以下を追記します - job_name: 'loki-canary' static_configs: - targets: ['loki-canary.default.svc.cluster.local:3500'] PrometheusがLoki Canaryのメトリックを取得できるようにする設定です © COPYRIGHT 2023 FIXER Inc. 15
Loki Canaryの使用方法 3.Grafanaダッシュボードの設定 Grafana Labsのサイトにサンプルダッシュボードあり ダッシュボードIDを控えてGrafanaで入力すると右の ようなダッシュボードが展開できます • • • • 取得できなかったログの件数 保存順序が逆になったログの件数 重複したログの件数 Lokiとの通信のラグ 等が確認できます https://grafana.com/grafana/dashboards/11489-loki-canary/ より © COPYRIGHT 2023 FIXER Inc. 16
ログ欠落の監視で特に重視しているメトリック Promtail • promtail_dropped_entries_total Promtail側で把握している欠落したログの件数 • promtail_dropped_bytes_total Promtail側で把握している欠落したログのサイズの合計 • promtail_batch_retries_total PromtailからLokiにログを再送信した件数 Loki Canary • loki_canary_missing_entries_total Loki Canaryが出力したログで後で取得できなかった件数 • response_latency Loki Canaryがログを出力してから取得できるまでの時間の長さ 例えば・・・ promtail_dropped_entries_totalが0なのにloki_canary_missing_entries_totalが増えている →Lokiとストレージの間の問題かも? というように問題の原因が切り分けられる © COPYRIGHT 2023 FIXER Inc. 17
あるいはLoki Canary以外の方法で・・・ • • • ログ送信の失敗件数のメトリクスを拾ってアラートを発生させる ログ出力量を監視して極端に減ったらアラートを発生させる Loki Canaryのような発想で人工的なログを生成、監視する 発想次第で監視方法は色々 © COPYRIGHT 2023 FIXER Inc. 18
結論: ロギング状況も監視しておこう! • • • • ログ送信の失敗件数 ログ送信件数 ログ集積ストレージの増分 ログ集積ストレージの使用状況 etc… © COPYRIGHT 2023 FIXER Inc. 19
まとめ Kubernetesを運用するにあたって起きうる問題の一つとして、ログの欠落がある • ログが欠落しているとアプリの問題の原因解決が困難になる • ログの欠落は発生していることが検知しづらいこともある • ログ欠落の状況についても監視するようにしよう • © COPYRIGHT 2023 FIXER Inc. 20
参考書籍 「Kubernetesの知識地図」技術評論社 青山 真也 (著), 小竹 智士 (著), 長谷川 誠 (著), 川部 勝也 (著), 岩井 佑樹 (著), 杉浦 智基 Kubernetesを運用する上でのベストプラクティス集 各種Kubernetesリソースの運用に耐えるレベルの設定方法、ベストプラクティス 各分野のツール紹介 運用に当たって考えないといけないことってどんなことがあるのか? ベストプラクティスは何か? みたいなことを考えている方に最適です https://www.amazon.co.jp/gp/product/B0C7BJLJXW © COPYRIGHT 2023 FIXER Inc. 21
© COPYRIGHT 2023 FIXER Inc.