ロギングはおそらく、可観測性ソリューションの最も重要な要素です。ログは、システムの動作に関する基本的で豊富な情報を提供します。理想的な世界では、ロギングに関するすべての決定をユーザーが行い、システム全体に一貫したアプローチを実装することになります。
ただし、現実の世界では、レガシー ソフトウェアを使用したり、ロギング用に独自の形式と構造を持つさまざまなプログラミング言語、フレームワーク、オープンソース パッケージを使用したりすることがあります。
システム全体のログ形式がこれほど多様である場合、すべてのログから最大限の価値を引き出すにはどのような手順を実行できるでしょうか?この投稿ではそれについて説明します。
ログの設計方法、大規模システムでのログ記録の課題と解決策、ログベースのメトリクスと長期保存についてどのように考えるかについて見ていきます。
ログのレベルと形式を見てみましょう。
ログの設計には多くの考慮事項が考慮されますが、最も重要な 2 つの側面は、ログ レベルの使用と、構造化ログ形式と非構造化ログ形式のどちらを使用するかです。
ログ レベルは、重大度に基づいてログ メッセージを分類するために使用されます。使用される特定のログ レベルは、ログ フレームワークまたはシステムによって異なる場合があります。ただし、一般的に使用されるログ レベルは次のとおりです (詳細度の高い順に)。
適切なレベルでログを記録すると、システムの動作の理解、問題の特定、問題のトラブルシューティングを効果的に行うのに役立ちます。
構築するシステム コンポーネントに関しては、有用なログ レベルのセットの定義に時間を割くことをお勧めします。各ログ レベルでメッセージにどのような種類の情報を含めるべきかを理解し、一貫したログ レベルを使用してください。
後で、ログ レベルを制御できないサードパーティ アプリケーションに対処する方法について説明します。また、ユーザーが管理しているものの、拡張性が高すぎて標準のログ レベルに移行できないレガシー アプリケーションについても見ていきます。
構造化ログのエントリは、通常はキーと値のペアまたは JSON オブジェクトとして、明確に定義された形式を持っています。これにより、一貫性のある機械可読なログ エントリが可能になり、プログラムによるログ データの解析と分析が容易になります。
構造化ログにより、高度なログのクエリと分析が可能になり、大規模システムで特に役立ちます。
一方、非構造化 (自由形式) ログでは、事前に定義された構造を持たず、より人間が判読可能な形式でメッセージがキャプチャされます。このアプローチにより、開発者はより自然かつ柔軟にメッセージをログに記録できるようになります。
ただし、結果として得られるログからプログラムを使用して特定の情報を抽出するのは非常に困難な場合があります。
構造化ログと非構造化ログのどちらを選択するかは、特定のニーズとシステムの要件と制約によって異なります。高度なログ分析またはログ分析ツールとの統合の必要性が予想される場合、構造化ログは大きな利点をもたらします。
ただし、単純さと読みやすさだけが必要な場合は、非構造化ログで十分な場合があります。
場合によっては、重要なイベントには構造化ログを使用し、より一般的なメッセージには非構造化ログを使用するハイブリッド アプローチも使用できます。
大規模システムの場合は、可能な限り構造化ログを使用する必要がありますが、これにより計画に別の側面が追加されることに注意してください。構造化されたログ メッセージでは、同じフィールドのセットがシステム コンポーネント間で一貫して使用されることが期待されています。これには戦略的な計画が必要になります。
複数のコンポーネントで構成されるシステムでは、各コンポーネントがログを管理するための独自のモデルを持つ可能性が高くなります。これがもたらす課題を見てみましょう。
コンポーネントは、ファイル、システム ログ、stdout、または stderr などのさまざまな宛先にログを記録します。分散システムでは、このような散在したログを収集して有効活用するのは大変です。
このためには、インストールされたコレクタや Sumo Logic のホストされたコレクタを使用するなど、ログ収集に対する多様なアプローチが必要になります。
一部のコンポーネントは、特定の形式に従わない、構造化されていない自由形式のログを使用します。一方、構造化ログはより組織化されている可能性がありますが、構造化ログを持つコンポーネントはまったく異なるフィールドのセットを使用する可能性があります。
多様なログや形式から得られる情報を統合するには、適切なツールが必要です。
システム内のコンポーネントは、異なる範囲のログ レベルを使用する場合があります。すべてのログ メッセージを集中ログ システムに統合したとしても (当然のことですが)、すべてのログ レベルの統合に対処する必要があります。
発生する 1 つの課題は、異なるログ レベルを同じように扱う必要がある場合です。たとえば、あるコンポーネントの ERROR が別のコンポーネントの CRITICAL と同じである可能性があり、即時のエスカレーションが必要です。
異なるコンポーネントで同じログ レベルが異なる意味を持つ場合は、逆の課題に直面します。たとえば、あるコンポーネントの INFO メッセージはシステム状態を理解するために不可欠である一方で、別のコンポーネントでは冗長すぎる可能性があります。
大規模な分散システムでは、大量のログが蓄積されます。これらのログを収集して保存するのは決して安くありません。クラウドのログ関連コストは、システムの総コストのかなりの部分を占める可能性があります。
大規模な分散システムにログインする場合の課題は重大ですが、次のいくつかの実践を通じて解決策を見つけることができます。
分散システムを実行する場合は、集中ログ ソリューションを使用する必要があります。システム内の各マシンでログ収集エージェントを実行すると、これらのコレクターはすべてのログを中央の可観測性プラットフォームに送信します。
Sumo Logic は常にログ管理と分析に重点を置いており、ログ集約に関してはクラス最高です。
アプリケーションやコンポーネント間で分析やトラブルシューティングのためにログ データを関連付けたい場合、さまざまな形式のログを処理することは大きな問題になります。解決策の 1 つは、さまざまなログを統一フォーマットに変換することです。
このタスクの作業レベルは高くなる可能性があるため、最も重要なコンポーネントから始めて、段階的に実行することを検討してください。
独自のアプリケーションでは、均一なログ レベルのセット、単一の構造化されたログ形式、および一貫したセマンティクスを採用する標準的なログ アプローチの確立に取り組んでください。
レガシー アプリケーションも所有している場合は、標準に準拠するためにそれらを移行することに関連するリスクとコストのレベルを評価します。
移行が不可能な場合は、レガシー アプリケーションをサードパーティ アプリケーションと同様に扱ってください。
サードパーティ ソースからのログを強化するには、外部システムまたはサービスからのコンテキスト情報を使用してログ データを強化する必要があります。これにより、ログ イベントの理解が深まり、トラブルシューティング、分析、アクティビティの監視に役立ちます。
ログを充実させるために、外部システム (API やメッセージ キューなど) を統合して、ログ イベントに関連する補足データ (ユーザー情報、顧客の詳細、システム メトリックなど) を取得できます。
ログの量、頻度、保存期間を慎重に管理することは、効率的なログの管理と保管のために重要です。
ログ データの分析から得られるメトリックは、システムの動作とパフォーマンスに関する洞察を提供します。ログベースのメトリクスの動作には利点と課題があります。
意味のあるメトリクスの定義: すべてのコンポーネントにわたって利用できるメトリクスのセットは信じられないほど膨大であり、すべてをキャプチャすることには意味がないため、どのメトリクスをキャプチャしてログから抽出するかを特定することは複雑な作業になる可能性があります。
この識別には、システムの動作を深く理解し、ビジネス目標と緊密に連携する必要があります。
データの抽出と解析: ログを解析して有用なメトリクスを抽出するには、特殊なツールまたはカスタム パーサーが必要な場合があります。これは、ログが構造化されていない場合、またはコンポーネント間でフォーマットが一貫していない場合に特に当てはまります。
この設定には時間がかかる場合があり、ログ形式の変更や新しいログ ソースの出現に応じてメンテナンスが必要になる場合があります。
集中システムでのログ集約に移行した後も、長期的なログ保持ポリシーを考慮する必要があります。この分野に関する重要な質問について説明しましょう。
ログをどのくらいの期間保存しておくべきかは、次のようないくつかの要因によって決まります。
もちろん、古いログを削除するのが、ストレージ コストを削減する最も簡単な方法です。ただし、これは少し手間がかかるため、古いログの情報を保持しておきたい場合もあります。
古いログの情報を保持したいが、コスト効率も高くしたい場合は、次のような対策を検討してください。
この記事では、大規模システムでのログインを最大限に活用する方法について説明しました。
これらのシステムへのログインには特有の一連の課題が伴いますが、ログの集約、ログの統一形式への変換、サードパーティ ソースからのデータによるログの強化など、これらの課題に対する潜在的な解決策を検討してきました。
ロギングは可観測性の重要な部分です。この記事で説明する実践方法に従うことで、ログが効果的に管理され、問題のトラブルシューティング、問題の特定、システムの動作に関する洞察の取得が可能になります。
また、ロギングコストを抑えながらこれを行うことができます。
ここでも公開されています