エンタープライズアプリロギングのベスト戦略と実践!

公開: 2022-02-24

アプリケーションログは、アプリの実行時に外部イベントと内部イベントに関連する情報を伝達する上で重要な役割を果たします。 そして最も重要なことは、開発者は実行中にこの情報を表示できることです。 そのため、ソフトウェアの展開にバグ、セキュリティ違反、異常などが発生した場合は常に、アプリログがイベントの根本原因を分析するのに役立ちます。

適切に構造化されたログは、鋭い観察と迅速なアクションで驚異的に機能します。システム全体がどのように機能するかを簡単かつ迅速に理解し、問題を事前に防ぐのに役立ちます。 ただし、トラブルシューティングセッションは、開発者が効果的なロギングプラクティスに準拠している場合にのみ生産的です。 不適切なロギング方法は、望ましくない課題につながります。 さて、あなたの心に浮かぶ最もありそうな質問は次のとおりです。

  • 何を記録しますか?
  • ロギングを避けるために何をしますか?
  • ログに記録する方法は?

この投稿は、これらすべての質問に答えます—エンタープライズアプリのロギングのベストプラクティスと、ロギング中に避けるべきこと。

従うべきアプリロギングのベストプラクティス

ターゲットオーディエンスを理解する

ログを処理する際、アプリログにはマシンと人間の2つの異なるオーディエンスがあり、データ処理の方法はまったく異なることを理解することが重要です。 データが構造化されている場合、マシンは大量のデータを自動的かつ迅速に処理できますが、人間はログを読み取るのに時間がかかるため、大量のデータを処理するのに苦労します。 しかし、非構造化データの場合、人間は機械よりも優れています。

したがって、ログから最良の結果を得るには、ログを人間だけでなく機械にも適した方法で作成する必要があります。つまり、機械用に構造化され、同時に人間が読み取り可能である必要があります。

さまざまなログレベルの使用を知っている

ログレベルは、システム内の各イベントの重大度を示し、ソフトウェア開発者は各イベントをいつ使用するかを知っておく必要があります。 以下に、使用可能な最も一般的なログレベルとそのユースケースシナリオを示します。

  • 情報レベルは、定期的にスケジュールされた操作、重要なイベントバナー、アプリの動作に存在する情報メッセージなど、システム固有またはユーザー主導のアクションを処理します。
  • トレースレベルのログを使用すると、変数値と完全なエラースタックを調べることができます。 特定のイベントに関する情報を提供するためのスタックコードトレースなどの情報を処理します。 これらは、開発中のバグを追跡するために使用されます。
  • デバッグレベルは、特定の包括的な情報を表します。 このログは、開発者がコードをステップスルーするのに役立ち、通常はデバッグに使用されます。
  • エラーレベルは、アプリを継続的に実行できる可能性があるが、影響を受けるパスの機能が低下しているエラーの発生を示します。 したがって、このレベルは、エラー状態(エラーを返す内部エラーイベントまたはAPI呼び出し)のログ記録に使用されます。
  • 警告レベルは、エラーよりも害の少ないイベントを意味しますが、調査する必要のある危険信号を示します。 したがって、このレベルを使用して、エラーになる可能性のあるイベント(メモリ内キャッシュが容量に近づいている場合、またはデータベース呼び出しが事前定義された期間を超えている場合)をログに記録します。 警告レベルのログは自動アラートをアクティブにし、トラブルシューティング中に使用すると、障害が発生する前のシステムの動作を理解できるようになります。
  • 致命的なレベルは、アプリを中止して壊滅的な障害を引き起こす可能性のある重大なエラーの発生を示します。 致命的なレベルでのロギングは通常、プログラムの終了を示します。 したがって、このプログラムは、終了することが選択する唯一の賢明な行動である場合にのみ、控えめに使用する必要があります。

手間をかけずに解析できるログ形式を採用する

可観測性プラットフォームがログからデータを抽出できないことは望ましくありません。 このような状況を回避するには、簡単に解析できるログ形式を採用する必要があります。 また、一貫したログ構造を維持して、データを簡単に収集および集約できるようにします。

共通の目的を果たす複数のプラットフォームの場合は、すべてのアプリケーションのログ形式を標準化します。 これにより、各アプリケーションに関与するチームがさまざまな属性の可視性を要求する場合でも、データを可観測性プラットフォームに組み込むプロセスが容易になります。 また、カスタマイズされた形式を使用する場合は、ログタイプのトリガーを設定し、顧客の定義に従って解析ルールを作成します。

ログを作成するための効果的なツールと健全なフレームワークを利用する

独自のロギング環境を作成して車輪の再発明を行う代わりに、実証済みのロギングフレームワークとツールを活用します。 この動きはあなたの時間と手間を節約するだけではありません。 さらに、一貫性のあるロギングフレームワークには、次の機能があります。

ロギングフレームワークの標準機能

  • さまざまなアペンダーを設定します。各アペンダーには独自のカスタムログパターンと出力形式があります。
  • ロガー名とタイムスタンプを自動的に追加する
  • いくつかのセキュリティレベルのサポートと、これらのレベルによるフィルタリングのオプションを提供します

ロギングフレームワークの高度な機能

  • さまざまなコードコンポーネントのさまざまなログレベルのしきい値の構成
  • キューがいっぱいになるたびに、イベントを下位レベルでドロップする不可逆アペンダーを採用する
  • 特定のメッセージが繰り返された回数をメッセージを介して表示するログ要約アペンダーを使用する。 何度も繰り返す代わりに。
  • ログレベルにしきい値を設定し、ログの重大度が高い場合は常に、これを「N個の下位レベルのログ行も出力する」ように構成します。

開発者にとって使いやすい簡潔なログメッセージを作成する

ログメッセージに含まれる情報が少ないと、すべての重要なイベントのコンテキストを作成するために必要な情報を取得することが困難になります。 また、ログメッセージが長すぎると、パフォーマンスの問題が発生します。 たとえば、ログファイルが大きいと、I / Oが高くなり、ディスクスペースが消費されます。この側面がファイルシステムでサポートされていない場合、全体的なパフォーマンスに悪影響が及びます。 一言で言えば、巨大なログはストレージを消費し、検索ログの速度を低下させ、コアの問題から気をそらす原因となるため、デバッグがより困難になります。

この問題に対処するには、ログメッセージを最適化する必要があります。 このためには、システムの機能的および非機能的な期待を厳密に理解し、それに応じてログに記録するメッセージの品質と量を計画する必要があります。 つまり、ログメッセージの質と量の完璧なバランスをとる必要があります。すべてのログメッセージは、意味があり、コンテキストに関連している必要があります。 たとえば、アプリが接続に失敗して内部APIからデータを取得できない場合、実行中のアプリの数やメモリスペースに関する情報を含めるよりも、APIまたはエコシステムのネットワーク状態情報からエラーメッセージをログに記録することが重要です。アプリケーションによって使用されます。

避けるべきアプリのロギング慣行

適切な暗号化なしで機密データをログに記録する

アプリログは、次の機密データを公開しないようにする必要があります。

  • ユーザー名、姓名、生年月日、性別、請求先/郵送先住所、電子メールID、連絡先番号、クレジットカード番号、社会保障番号などのPIIまたは個人を特定できる情報
  • 事業名/事業名などの連絡先情報。 スタッフ、クライアントなどの関係者。 ビジネス関係; および第三者とのビジネス関連の取引。
  • セキュリティクレデンシャル、パスワード、および認証トークン
  • カードの詳細、銀行口座番号、取引金額などの財務データ

GDPR、HIPAA、CCPAなどのほとんどのプライバシー法/規制では、セキュリティ違反や重大な訴訟につながる可能性があるため、前述の情報をログに表示しないようにアドバイスしています。 標準プロトコルに従って、財務データがログに存在する場合は、完全にマスクまたは非表示にする必要があります。 また、ビジネストランザクションについて言及する必要がある場合は、実際のビジネス名/識別子ではなく、システムで生成されたイベントIDを使用する必要があります。

非実稼働環境で機密ユーザーデータをログに記録する必要がある場合、安全を確保するにはどうすればよいですか?

  • ログから非表示にする情報を指定します。すべてのフィールドに属性を付加し、「表示」、「非表示」、「マスク」、「暗号化」などのコマンドを使用して、その可視性のレベルを示します。
  • ログメッセージをフィルタリングし、関連する環境に従って事前定義された命令に準拠する機密フィールドを処理するためのパーサーを作成します。

ベンダーロックイン

ログ管理は、特定のベンダーに縛られないように編成する必要があります。 このため、ベンダーライブラリのハードコーディングは避けてください。 代わりに、移植性のために標準ライブラリ/ラッパーを選択してください。 ラッパーを使用すると、アプリのコードでサードパーティツールが明示的に言及されないようにするか、aptの方法論に従ってロガーインターフェイスを作成し、それを実装するクラスを含めることができます。 その後、サードパーティを呼び出すコードをこのクラスに追加します。

トラブルシューティング専用のログメッセージ

トラブルシューティングがロギングの主な目的であることは誰もが知っています。 ただし、ログメッセージは他のいくつかのタスクでも非常に役立つため、ログメッセージはトラブルシューティングのみを目的としたものではありません。 したがって、トラブルシューティングに加えて、次のビジネスタスクのメッセージをログに記録することもできます。

  • プロファイリング:タイムスタンプが付けられたログ(ミリ秒レベルの場合もあります)は、プログラムのセクションをプロファイリングするための効果的なツールとして使用できます。 たとえば、操作の開始と終了をログに記録すると、トラブルシューティング中に特定のパフォーマンスメトリックをプログラム自体に追加しなくても、それらのメトリックを推測できます。
  • 監査:システムユーザーの注目すべきイベント、アクティビティ(サインイン、編集など)を説明するステートメントをキャプチャします。
  • 統計レポートの収集:実行中のプログラムやユーザーの行動に関する興味深い統計を収集できます。 また、連続して発生するエラーが多すぎることを検出するためのアラートシステムに接続することもできます。

結びの言葉

今日、ロギングは、ビジネスインテリジェンス、運用、マーケティング戦略など、あらゆる企業のさまざまな側面で極めて重要な役割を果たしています。 また、正しいロギング手法に従い、ログを効果的に機能させることは非常に重要です。 ログの監視と管理のベストプラクティスを順守することで、ビジネスオペレーションをスムーズに実行し、問題をより迅速に解決して、開発プロセスをより迅速に行うことができます。

技術支援については、インドの経験豊富で有能なアウトソーシングソフトウェア開発会社であるBiz4Solutionsにお問い合わせください。 私たちは10年以上にわたり、世界中の顧客に卓越したサービスを提供してきました。