ログ記録 - AWS 規範ガイダンス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

ログ記録

ログ記録は、システムで発生するイベントに関するデータを保持するプロセスです。ログには、問題、エラー、または現在のオペレーションに関する情報を含めることができます。ログは、次のようなさまざまなタイプに分類できます。

  • イベントログ

  • サーバーログ

  • システムログ

  • 認可ログとアクセスログ

  • 監査ログ

デベロッパーは、特定のエラーコードやパターンを検索したり、特定のフィールドに基づいてフィルタリングしたり、将来の分析のために安全にアーカイブしたりできます。ログは、デベロッパーがパフォーマンスの問題の根本原因分析を実行し、システムコンポーネント間の関連付けを行うのに役立ちます。

効果的なログ記録ソリューションを構築するには、アプリケーションチームとインフラストラクチャチームの間の緊密な調整が必要です。アプリケーションログは、ログの解析、フィルタリング、バッファリング、相関などのユースケースをサポートするスケーラブルなログ記録インフラストラクチャがない限り、役に立ちません。相関 ID の生成、ビジネスクリティカルなメソッドの実行時間のログ記録、ログパターンの定義などの一般的なユースケースは簡略化できます。

アプリケーションチーム

アプリケーション開発者は、生成されたログがログ記録のベストプラクティスに従っていることを確認する必要があります。ベストプラクティスは次のとおりです。

  • 一意のリクエストを追跡するための相関 IDsの生成

  • ビジネスクリティカルな方法でかかった時間のログ記録

  • 適切なログレベルでのログ記録

  • 共通ログ記録ライブラリの共有

さまざまなマイクロサービスとやり取りするアプリケーションを設計する場合は、これらのログ記録設計原則を使用して、バックエンドでのフィルタリングとログ抽出を簡素化します。

一意のリクエストを追跡するための相関 IDsの生成

アプリケーションはリクエストを受信すると、相関 ID がヘッダーに既に存在するかどうかを確認できます。ID が存在しない場合、アプリケーションは ID を生成する必要があります。例えば、Application Load Balancer は というヘッダーを追加しますX-Amzn-Trace-Id。アプリケーションは ヘッダーを使用して、ロードバランサーからのリクエストをアプリケーションに関連付けます。同様に、アプリケーションは、リクエストフロー内の異なるコンポーネントによって生成されたログが相関するように、依存マイクロサービスを呼び出すtraceId場合は を挿入する必要があります。

ビジネスクリティカルな方法でかかった時間のログ記録

アプリケーションはリクエストを受信すると、別のコンポーネントとやり取りします。アプリケーションは、ビジネスクリティカルなメソッドにかかる時間を定義されたパターンで記録する必要があります。これにより、バックエンドのログを簡単に解析できます。また、ログから有用なインサイトを生成するのにも役立ちます。アスペクト指向プログラミング (AOP) などのアプローチを使用してこのようなログを生成し、ログ記録に関する懸念をビジネスロジックから分離できます。

適切なログレベルでのログ記録

アプリケーションは、有用な量の情報を含むログを書き込む必要があります。ログレベルを使用して、重要度別にイベントを分類します。例えば、調査が必要な重要なイベントには WARNINGERRORレベルを使用します。および はINFO、詳細なトレースおよび大量のイベントDEBUGに使用します。ログハンドラーを設定して、本番稼働に必要なレベルのみをキャプチャします。INFO レベルでのログ記録の生成が多すぎると役に立たず、バックエンドインフラストラクチャに負荷がかかります。 DEBUGログ記録は便利ですが、慎重に使用する必要があります。DEBUG ログを使用すると大量のデータが生成されるため、パフォーマンステスト環境では推奨されません。

共通ログ記録ライブラリの共有

アプリケーションチームは、開発者がプロジェクトの依存関係として使用できるAWS SDK for Java、事前定義された共通のログ記録パターンを持つ などの共通のログ記録ライブラリを使用する必要があります。

インフラストラクチャチーム

DevOps エンジニアは、バックエンドでログをフィルタリングおよび抽出するときに、次のログ記録設計原則を使用することで、労力を削減できます。インフラストラクチャチームは、以下のリソースをセットアップしてサポートする必要があります。

ログエージェント

ログエージェント (ログシッパー) は、ある場所からログを読み取り、別の場所に送信するプログラムです。ログエージェントは、コンピュータに保存されているログファイルを読み取り、ログイベントをバックエンドにアップロードして一元化するために使用されます。

ログは非構造化データであり、ログから有意義なインサイトを得る前に構造化する必要があります。ログエージェントは、パーサーを使用してログステートメントを読み取り、タイムスタンプ、ログレベル、サービス名などの関連フィールドを抽出し、そのデータを JSON 形式に構造化します。軽量なログエージェントをエッジに配置すると、リソース使用率が低下するため便利です。ログエージェントはバックエンドに直接プッシュすることも、データをバックエンドにプッシュする中間ログフォワーダーを使用することもできます。ログフォワーダーを使用すると、ソースのログエージェントから作業がオフロードされます。

ログパーサー

ログパーサーは、非構造化ログを構造化ログに変換します。ログエージェントパーサーは、メタデータを追加してログを強化します。データのデータ解析は、ソース (アプリケーションエンド) で行うことも、一元的に行うこともできます。新しいフィールドを追加できるように、ログを保存するためのスキーマは拡張可能である必要があります。JSON などの標準ログ形式を使用することをお勧めします。ただし、場合によっては、検索しやすくするためにログを JSON 形式に変換する必要があります。適切なパーサー式を記述することで、効率的な変換が可能になります。

ログバックエンド

ログバックエンドサービスは、さまざまなソースからログデータを収集、取り込み、視覚化します。ログエージェントは、バックエンドに直接書き込むか、中間ログフォワーダーを使用できます。パフォーマンステスト中は、後で検索できるようにログを保存してください。ログは、アプリケーションごとにバックエンドに個別に保存します。例えば、アプリケーション専用のインデックスを使用し、インデックスパターンを使用して、さまざまな関連アプリケーションに分散されているログを検索します。ログ検索には、少なくとも 7 日間のデータを保存することをお勧めします。ただし、データを長期間保存すると、不要なストレージコストが発生する可能性があります。パフォーマンステスト中に大量のログが生成されるため、ログ記録インフラストラクチャがログ記録バックエンドをスケーリングして適切なサイズにすることが重要です。

ログの視覚化

アプリケーションログから意味のある実用的なインサイトを得るには、専用の視覚化ツールを使用して、未加工のログデータを処理してグラフィカル表現に変換します。グラフ、グラフ、ダッシュボードなどの視覚化は、未加工のログを見るとすぐには明らかにならない傾向、パターン、異常を明らかにするのに役立ちます。

視覚化ツールを使用する主な利点には、複数のシステムやアプリケーションにまたがるデータを関連付けて、依存関係やボトルネックを特定する機能が含まれます。インタラクティブダッシュボードは、さまざまなレベルの粒度でデータをドリルダウンして、問題のトラブルシューティングや使用状況の傾向の特定をサポートします。特殊なデータ視覚化プラットフォームは、分析、アラート、データ共有などの機能を提供し、モニタリングと分析を強化できます。

アプリケーションログにデータ可視化の機能を使用することで、開発チームと運用チームはシステムおよびアプリケーションのパフォーマンスを可視化できます。得られたインサイトは、効率の最適化、ユーザーエクスペリエンスの向上、セキュリティの強化、キャパシティプランニングなど、さまざまな目的に使用できます。最終的には、さまざまな利害関係者に合わせたダッシュボードが作成され、ログデータを実用的なインサイトにまとめた at-a-glance ビューが提供されます。

ログ記録インフラストラクチャの自動化

アプリケーションによって要件が異なるため、ロギングインフラストラクチャのインストールと運用を自動化することが重要です。Infrastructure as Code (IaC) ツールを使用して、ログ記録インフラストラクチャのバックエンドをプロビジョニングします。その後、ログ記録インフラストラクチャを共有サービスとして、または特定のアプリケーションの独立したカスタムデプロイとしてプロビジョニングできます。

デベロッパーは、継続的デリバリー (CD) パイプラインを使用して以下を自動化することをお勧めします。

  • ログ記録インフラストラクチャをオンデマンドでデプロイし、不要な場合は削除します。

  • 異なるターゲットにログエージェントをデプロイします。

  • ログパーサーとフォワーダーの設定をデプロイします。

  • アプリケーションダッシュボードをデプロイします。

ログ記録ツール

AWS は、ネイティブのログ記録、アラーム、ダッシュボードサービスを提供します。以下は、ログ記録によく使用される AWS のサービス とリソースです。