3.9K Views
July 24, 24
スライド概要
JAWS-UG初心者支部#61 初心者向けオンラインLT大会 にて登壇しました。
https://jawsug-bgnr.connpass.com/event/324349/
ソフトウェアエンジニア
今更聞けないAWSでのログ運用 Takuma Kobayashi, Finatext © 2024 Finatext Holdings Ltd.
Outline ● 自己紹介 ● なぜログが必要なのか ● ECSからの使い方 ● ALBからの使い方 ● つまりログのフォーマットは構造化が大事! ● 社内loggerライブラリの話 ● まとめ © 2024 Finatext Holdings Ltd. 1
自己紹介 ● 小林拓磨(X: @takuma5884rbb) ● 2023 (株)Finatext 入社 ● ソフトウェア・AWSエンジニア ○ Go・AWSを用いた証券取引サービスの開発・運用 ○ Terraformを用いたIaC ● 2024 Japan AWS Jr. Champions ● 趣味 ○ 料理 ○ ランニング © 2024 Finatext Holdings Ltd. 2
はじめに DevOps、してますか? © 2024 Finatext Holdings Ltd. 3
Webサービス開発・運用における日々 環境でのデバッグ、障害対応、etc. 「何が起こったのか」の情報がないと、 ● 再現に時間がかかる ● 環境依存の問題など、再現が難しい事象も →原因がわからなければ、対応のしようがない © 2024 Finatext Holdings Ltd. 4
アプリケーションには声を上げさせる error rate, latency などの集計 一連の処理がどのような 道筋を辿ったか ある処理(あるコードの箇所) において 何が起こったのか https://github.com/cncf/tag-observability/blob/8cfd111503564e15d353cafac4fe2560618a740d/whitepaper.md © 2024 Finatext Holdings Ltd. 5
なぜログが必要なのか? ある時に起こった事象がログから追える! ログの構造を工夫すれば、トレース・メトリクスも追える! (後述します) もちろん、適材適所は大事 © 2024 Finatext Holdings Ltd. 6
具体的な使い方を見ていきます まずはECS+CloudWatch © 2024 Finatext Holdings Ltd. 7
CloudWatch Logs ● 様々なリソースからログデータを収集・集計・分析が可能 ● リソースの関係は以下 Log event Log stream Log event Log group Log event Log stream Log event 1つ1つのアクティビティのレコード イベントソースを共有する ログイベントのまとまり © 2024 Finatext Holdings Ltd. 監視やアクセス制御の設定を 共有する単位 8
CloudWatch Logs/Log group ● 監視対象のAWSリソースごとにLog groupを作成可能 © 2024 Finatext Holdings Ltd. 9
CloudWatch Logs/Log stream ● Log groupはさらにLog streamという単位に分割される ● ECSの場合はtask単位 ECSの場合、ここが <prefix>/<service name>/<task ID> © 2024 Finatext Holdings Ltd. 10
CloudWatch Logs/Log event ● 様々なリソースからログデータを収集・集計・分析が可能 © 2024 Finatext Holdings Ltd. 11
CloudWatch Logs/Logs Insights ● Log streamに対してクエリを投げてデータ取得・分析が可能 © 2024 Finatext Holdings Ltd. 12
ECS→CloudWatch Logs ログの書き込みに必要なリソースは以下 1. ログの書き込み先を指定したタスク定義 2. ログを書き込むためのIAM Policy © 2024 Finatext Holdings Ltd. 13
ECS→CloudWatch Logs ● タスク定義 © 2024 Finatext Holdings Ltd. 14
ECS→CloudWatch Logs ● タスク実行ロールにログの書き込み権限が必要 ● Managed PolicyでよければAmazonECSTaskExecutionRolePolicy © 2024 Finatext Holdings Ltd. 15
ECS→CloudWatch Logs ● 標準出力がLog eventとして表示される © 2024 Finatext Holdings Ltd. 16
閑話休題 AWS ManagedであるALBのアクセスログから、 AWSにおけるログ運用を学んでみる © 2024 Finatext Holdings Ltd. 17
ALB 問題のあったエンドポイント・パスに対して、 問題のあった期間にアクセスのあった全量を知りたい © 2024 Finatext Holdings Ltd. 18
ALB/アクセスログの設定方法 © 2024 Finatext Holdings Ltd. 19
ALB/アクセスログの設定方法 ● アクセスログの保存先として、S3バケットを指定可能 © 2024 Finatext Holdings Ltd. 20
ALB/Athenaからクエリを投げる場合のテーブル定義(一部省略) © 2024 Finatext Holdings Ltd. 21
ALBのアクセスログ形式から学べること Athenaからサクッと集計できる ↓ 構造化が大事!!! © 2024 Finatext Holdings Ltd. 22
ログフォーマットを担保するための実装/社内loggerライブラリ ● 一行書くだけで、時間や発生箇所なども構造的に出力 © 2024 Finatext Holdings Ltd. 23
ログフォーマットを担保するための実装/アクセスログ ● labstack/echo と合わせたアクセスログの収集 ● 様々なリソースからログデータを収集・集計・分析が可能 © 2024 Finatext Holdings Ltd. 24
ログフォーマットを担保するための実装/アクセスログ ● 実際のアクセスログ ユーザーID © 2024 Finatext Holdings Ltd. 25
Logs Insightsで調査してみる ● あるパスのレスポンス状況は? © 2024 Finatext Holdings Ltd. 26
Logs Insightsで調査してみる ● サービスが利用不可能だった時間帯は?(サーバーとしては生きている前提) © 2024 Finatext Holdings Ltd. 27
Logs Insightsが超便利 ● クエリでトレースからメトリクスまで出せる ○ もちろん、定期的に計測したいならメトリクスフィルターとかを使った方がいい ● ただし半構造化データにしてフォーマットを整えていくことが必要 ● CloudWatchは料金が高いイメージがあるが、実際掛かっているのは書き込み部分 だけで、トータルで見るとS3+Athena構成とそんなに変わらない © 2024 Finatext Holdings Ltd. 28
何よりも大事なこと ● 構造化されたフォーマットでログ出力する ● 適切な箇所でログ出力する ○ アクセスログ、エラーログ、etc. ● 知りたい情報に応じてクエリを作る ● どんな場合にどんな情報が必要かを考え、その通りに実装し、その通りに調査する ● 運用で困った経験から、より良い実装・設計を考えるヒントが得られる ● ソフトウェアエンジニアとしての成長につながる © 2024 Finatext Holdings Ltd. 29
何よりも大事なこと 開発と運用は表裏一体! © 2024 Finatext Holdings Ltd. 30
まとめ ● CloudWatch Logsを活用することで、 アプリケーションの利用状況を様々な断面から調査できる ● ただし、構造化されたログフォーマットと、ログ出力の実装を知っていることが必要 ● 開発と運用のサイクルを回してくことが大事 © 2024 Finatext Holdings Ltd. 31
まとめ より良いログ運用について学び、 エンジニアとして圧倒的成長💪 © 2024 Finatext Holdings Ltd. 32