コンテナでログをどう取得すればいいの?そもそもどういうログがあるのか?
ログの取得パターンから活用方法まで、 @prog893 が選定のためのヒントとサンプルアーキテクチャで紹介します。
© 2021, Amazon Web Services, Inc. or its Affiliates.Tamirlan Torgayev @prog893Startup Solutions ArchitectAmazon Web Services Japan2021/03/25かんたんコンテナロギング選手権AWS Startup Tech Meetup #3
View Slide
© 2021, Amazon Web Services, Inc. or its Affiliates.Tamirlan Torgayev (ティーマ)Startup Solutions ArchitectAmazon Web Services Japanメガベンチャーグループ企業に新卒入社、様々なメディアサービスのインフラを支援AWSでスタートアップ支援好きなもの: Amazon Kinesis、 Amazon ECS、カメラ!、猫"@prog893
© 2021, Amazon Web Services, Inc. or its Affiliates.本日のアジェンダ• ログにまつわるよくある課題• ログの種類• ログの転送方法• 用途ごとに選べる、ログの格納先• 最適化後のサンプルアーキテクチャ
© 2021, Amazon Web Services, Inc. or its Affiliates.ログにまつわるよくある課題
© 2021, Amazon Web Services, Inc. or its Affiliates.よくあるコンテナアーキテクチャ• コンテナを活用したアーキテクチャを作れた• リリースもできて、ビジネスも成長しているAmazon CloudWatchECS TaskApplicationUsersAWS CloudAmazon AuroraApplication LoadBalancerlogsuser data
© 2021, Amazon Web Services, Inc. or its Affiliates.よくあるコンテナアーキテクチャ (Cont.)• しかし、ログ周りの構成について考えられていないので、問題発生時の調査に困ったり、コストがかかったり• とりえあずawslogsでやっている• FireLensとか色々あるけどよくわからない• fluentdの管理大変• stdoutをparseするのもつらい• ログ周りを作り込むのに時間をかけられないいくつかのログ周りアーキテクチャパターンと選定のヒント、紹介します!
© 2021, Amazon Web Services, Inc. or its Affiliates.AWS Fargateのメリットと利用時の課題• Fargateを使うことでサーバ管理不要• コード、ビジネスに集中できる• しかし、observabilityが課題• 状況把握のためにログを出力を導入• 共有ボリュームの容量が少なくログが吐けない• ログ転送のための相乗りを改善したい• New: ECS Execでコンテナへのコマンド実行、インタラクティブシェルが可能に!
© 2021, Amazon Web Services, Inc. or its Affiliates.そもそもログで何をして欲しいのか• ログとは• アプリケーションでどの時点で何が起きているかを把握するための出力情報• ログをしっかり、全部とりましょう• ログがないと、何かが起きた時に原因調査ができない• アプリケーションの現状を把握することも困難# 必要なログ、しっかり出力しましょう
© 2021, Amazon Web Services, Inc. or its Affiliates.そもそもログで何をして欲しいのか (Cont.)• どういうログを取ればいいのか?• アプリケーションとその要件による• 一般的なログ種類を紹介する• ログ転送、保管の方法は?• ログの要件によって最適な格納、転送方法が異なる# 最適な格納方法、転送方法になっていないと、調査が難しく、コストがかかる
© 2021, Amazon Web Services, Inc. or its Affiliates.ログの種類
© 2021, Amazon Web Services, Inc. or its Affiliates.ログの種類• ログの種類と、それぞれの種類に対する要件を確認しましょう• 要件によって、適切な転送方法と格納先が変わリます• それぞれの要件に合わせた設計にしましょう• 保持期間、スループット、許容欠損率、活用方法、高速アクセス
© 2021, Amazon Web Services, Inc. or its Affiliates.ログの例• Access logs: 1年保持、max 1 Mbps、daily 20GB、簡単な調査• nginxログのような、アクセス情報• Activity logs: 1年保持、max 1 Mbps、daily 20GB、集約クエリ (BI)• ユーザ行動、SNSならいいね、友達申請など• Error logs: 3ヶ月保持、max 0.1 Mbps、daily 2GB、高度な調査• エラーの概要• Trace logs: 1ヶ月保持、max 0.1 Mbps、daily 1GB、閲覧のみ、非構造• スタックトレースのようなもの• Audit logs: 5年間保持、max 0.1 Mbps、daily 5GB、欠損許容できない• 金融サービスなどにおける監査ログ
© 2021, Amazon Web Services, Inc. or its Affiliates.ログの転送方法
© 2021, Amazon Web Services, Inc. or its Affiliates.awslogs logging driverPros:• stdoutに出力するだけ• 転送ロジックの実装不要• 転送のためのリソース不要Cons:• 高度な処理は難しい• ログ種類ごとに異なる場所への格納が難しい• CloudWatch Logsにしか転送できない! TraceにおすすめECS TaskApplicationDockerDaemonloggingdriverAmazon CloudWatch
© 2021, Amazon Web Services, Inc. or its Affiliates.fluentd sidecarPros:• カスタマイズ性が高い• 格納先が選べるCons:• コンフィグの管理が必要• カスタムプラグインを使いたい場合、Docker Imageの管理も• 共有ボリュームへのファイル出力が必要• ログローテーション必要in_tailなどのinput pluginがロテーション検知に対応、logrotate sidecarを導入することでアプリ変更なしでロテーション対応可能! Access、Activityのような大容量ログにおすすめECS TaskApplicationFileoutputfluentdtailVolumeAmazon CloudWatch……
© 2021, Amazon Web Services, Inc. or its Affiliates.FireLensPros:• カスタマイズ性が高いCons:• コンフィグの管理が必要!全ログ種類に使えるECS TaskApplication FireLens(fluentbit)loggingdriverDockerDaemonAmazon CloudWatch……
© 2021, Amazon Web Services, Inc. or its Affiliates.用途ごとに選べる、ログの格納先
© 2021, Amazon Web Services, Inc. or its Affiliates.ログの格納先と活用方法• CloudWatch Logs• GUIでログ一覧をみたい• 簡易検索、フィルタリング• S3• 大量のログを安価に保存• Athenaを活用することでクエリ可能• Elasticsearch• Kibanaでの可視化、アラート、高度なクエリ• QuickSight• エンジニアでない人に提供するBIダッシュボード• S3 + AthenaでデータをQuickSightに反映可能# 要件に合わせて適切な格納先を選定しましょう
© 2021, Amazon Web Services, Inc. or its Affiliates.ログの格納先と活用方法 (Cont.)• Elasticsearch、3rd party にログを格納するとき、API操作が必要• Elasticsearch Bulk APIなど• 例えばLambdaを使えば実装できる• しかし、リトライ処理、ログが欠損しないための一時的な置き場所をどうすれば…
© 2021, Amazon Web Services, Inc. or its Affiliates.Kinesis Data Streamsのログへの応用• 「保持期間」を活用することでリトライ処理を実装する必要がない• 例えば、Lambdaを使う場合、実行が成功するまでリトライされる• 低レイテンシー• データ収集から活用可能になるまで ~70 ms• 高スループット• 1時間あたり数TBの処理までスケール可能ここでリトライされるECS TaskApplication Kinesis DataStreamsAWS LambdaAmazon S3Amazon ElasticsearchService
© 2021, Amazon Web Services, Inc. or its Affiliates.サンプルアーキテクチャ
© 2021, Amazon Web Services, Inc. or its Affiliates.End-to-end logging architecture primerECS TaskApplication FireLens(fluentbit)loggingdriverKinesis DataStreamsAWS LambdaAmazon S3Amazon ElasticsearchServiceAmazon CloudWatchAmazon QuickSightActivity logs可視化、BIAll logsAccess, error logs調査、可視化、アラートTrace logsActivity logsクエリAmazon Athena
© 2021, Amazon Web Services, Inc. or its Affiliates.欠損の考え方• ログでいうところの可用性は欠損率• 可用性とコストのトレードオフ• どこまでの欠損率が許容できるのか• 例えば、fluentdやfluentbitの急停止によるmemory buffer上のログの消失の対策は:• awslogs• Kinesis Data Streamsへの直接書き込み• fluentd/fluentbit → EC2集約サーバ (disk buffer)欠損が許容できないなら、DBに書き込んだ方が良いのでは?
© 2021, Amazon Web Services, Inc. or its Affiliates.最後に• ログの考え方は、コンテナでもそうじゃなくても一緒• コンテナではlogging driverなどで、難しく考えられがち• ログをどうすればいいのか、ログの要件、転送方法や格納先は変わらない• 要件に合わせた、将来性・拡張性のあるアーキテクチャを目指しましょう• ビジネスがさらに成長したら、アーキテクチャを大きく変えなくてもいいように• 溜まったログを活用しましょう• パフォーマンス改善、トラブルシュート、BIコンテナな人もそうじゃない人も、ログアーキテクチャを最適化しましょう!