ロギング
ロギングツールの選択は、データの送信、フィルタリング、保持、キャプチャ、およびデータを生成するアプリケーションとの統合に関する要件に結びついています。 オブザーバビリティのために AWS を使用する場合(オンプレミスまたは他のクラウド環境でホストしているかに関わらず)、CloudWatch エージェント や Fluentd などのツールを活用して、分析用のログデータを送信できます。
ここでは、ロギング用の CloudWatch エージェントの実装と、AWS コンソールまたは API 内での CloudWatch Logs の使用に関するベストプラクティスについて詳しく説明します。
CloudWatch エージェントを使用したログの収集
転送
クラウドファーストアプローチ によるオブザーバビリティでは、原則として、ログを取得するためにマシンにログインする必要がある場合、それはアンチパターンとなります。 ワークロードは、ログ分析システムにほぼリアルタイムでログデータを送信する必要があり、送信とイベント発生の間の遅延は、ワークロードに災害が発生した場合に、その時点の情報が失われる可能性を意味します。
アーキテクトとして、許容可能なログデータの損失を判断し、それに応じて CloudWatch エージェントの force_flush_interval
を調整する必要があります。
force_flush_interval
は、バッファサイズに達しない限り、エージェントに定期的にログデータをデータプレーンに送信 するよう指示します。
バッファサイズに達した場合は、バッファされたすべてのログを直ちに送信します。
エッジデバイスは、AWS 内の低レイテンシーワークロードとは大きく異なる要件を持つ場合があり、より長い force_flush_interval
設定が必要になる場合があります。
例えば、低帯域幅のインターネット接続を使用する IoT デバイスでは、15 分ごとにログをフラッシュするだけで十分な場合があります。
コンテナ化されたワークロードやステートレスワークロードは、ログのフラッシュ要件に特に敏感な場合があります。
いつでもスケールインできるステートレスな Kubernetes アプリケーションや EC2 フリ ートを考えてみてください。
これらのリソースが突然終了した場合、将来ログを抽出する方法がなくなり、ログが失われる可能性があります。
標準の force_flush_interval
は通常これらのシナリオに適していますが、必要に応じて短縮することができます。
ロググループ
CloudWatch Logs では、アプリケーションに論理的に適用されるログのコレクションは、1 つの ロググループ に配信される必要があります。そのロググループ内では、ログストリームを作成するソースシステム間に 共通性 が必要です。
LAMP スタックを例に考えてみましょう。Apache、MySQL、PHP アプリケーション、ホスティング Linux オペレーティングシステムからのログは、それぞれ別のロググループに属します。
このグループ化は重要です。保持期間、暗号化キー、メトリクスフィルター、サブスクリプションフィルター、Contributor Insights ルールを同じように扱うことができるためです。