ホームページ > バックエンド開発 > Golang > 可観測性 - ロギングが重要な理由

可観測性 - ロギングが重要な理由

PHPz
リリース: 2024-07-17 21:57:01
オリジナル
827 人が閲覧しました

Observability - Why logging its important

ますます複雑化するデジタル時代においては、最新のソフトウェア システムを管理する上で可観測性が主な鍵となります。可観測性の最も重要な柱の 1 つはロギングです。ロギングがなぜそれほど重要なのか、そしてそれを最適に活用する方法を見てみましょう。

ロギングとは何ですか?

ロギングは、システム内のアクティビティやイベントを記録するプロセスです。これには、エラー メッセージ、ユーザー アクティビティからシステム パフォーマンスまで、さまざまな情報が含まれます。ログをシステムの飛行機の「ブラック ボックス」と考えてください。何が起こっているかを常に記録し、必要なときに洞察を提供できるようにします。

ロギングがなぜそれほど重要なのでしょうか?

ログが重要である理由として考えられるいくつかの点を次に示します。

  1. より迅速な問題解決
    適切なログがあれば、開発チームは推測に頼らずに根本原因を特定できます。虫を探すときは宝の地図を持っているようなものです!

  2. セキュリティの改善
    ログは、不審なアクティビティを検出するための「スパイ」となる可能性があります。セキュリティ チームは、消防署を常に待機させるなど、脅威に対してより迅速に対応できます。

  3. パフォーマンス分析
    ログを通じて、システム内のボトルネックを特定できます。アプリの健康状態を診断してくれる主治医がいるようなものです。

  4. ユーザーの行動を理解する
    ユーザー アクティビティ ログは、製品がどのように使用されているかについての貴重な洞察を提供します。これは、顧客の好みを常に観察して報告するパーソナル アシスタントがいるようなものです。

ロギングのベストプラクティス

ロギングの利点を最大限に活用するために、以下に実行できるベスト プラクティスをいくつか示します。

適切なログレベルを決定する

これらの適切なログ レベルを使用すると、ログを緊急度で並べ替えるなど、情報を迅速にフィルタリングするのに役立ちます。

以下は、Golang 言語を使用してさまざまなレベルのログを表示する例です。ここではログラスを使用します。

package main

import (
    "github.com/sirupsen/logrus"
)

func main() {
    log := logrus.New()
    log.SetLevel(logrus.DebugLevel)

    log.Debug("Starting app..")
    log.Info("User has successfully logged in")
    log.Warn("CPU usage exceeds 80%")
    log.Error("Failed to save data to database")
    log.Fatal("A critical error occurs, the application will stop")
}
ログイン後にコピー

以下は、上記のいくつかのログ レベルの説明です:

  • DEBUG: デバッグの詳細情報。通常は開発中にのみ有効になります。
  • 情報: アプリケーションの通常のフローに関する一般情報。
  • 警告: 将来的に問題が発生する可能性がある状況ですが、アプリケーションを停止しないでください。
  • エラー: 特定の機能が失敗する原因となるエラーですが、アプリケーションはまだ実行中です。
  • 致命的: アプリケーションの停止を引き起こす可能性がある重大なエラー。

関連するコンテキスト情報を含める

各ログ エントリは、何が起こったのかを理解するのに十分なコンテキストを提供する必要があります。これには以下が含まれます:

  • タイムスタンプ。
  • トランザクションまたはセッション ID。
  • ユーザー ID (該当する場合)。
  • 関数またはモジュール名。
  • 関連する入力データ (機密データには注意してください)。
  • エラーのスタック トレース

これは、追跡に役立つコンテキスト情報を含むログを出力するときのコードの例です。

package main

import (
    "github.com/sirupsen/logrus"
    "time"
)

type UserAction struct {
    UserID    int
    Action    string
    Timestamp time.Time
}

func main() {
    log := logrus.New()
    log.SetLevel(logrus.DebugLevel)

    // Use format json
    log.SetFormatter(&logrus.JSONFormatter{})

    // Dummy data
    action := UserAction{
        UserID:    12345,
        Action:    "checkout",
        Timestamp: time.Now(),
    }

    // Print log
    log.WithFields(logrus.Fields{
        "user_id":    action.UserID,
        "action":     action.Action,
        "timestamp":  time.Now().Format(time.RFC3339),
        "session_id": generateSessionID(),
        "module":     "payment_processor",
        "ip_address": "192.168.1.100",
    }).Error("Payment failed")

}

func generateSessionID() string {
    return "sess_abc123"
}
ログイン後にコピー

将来のトレースの実行を容易にするコンテキスト情報のいくつかの要素が含まれていることがわかります。問題の利便性とは何ですか。つまり、レベルに基づいてログを検索できます。たとえば、上記のコード例のエラー レベルだけでなく、入力した情報に基づいて時間などにも基づいてログを検索できます。

一貫した書式設定を使用する

一貫したログ形式により、特に自動ツールを使用する場合、解析と分析が容易になります (ツールについては後述します)。また、書式設定により、ログ レベル、メッセージ、時間などの条件に基づいてログを検索することも容易になります。形式の例:

[TIMESTAMP] [LEVEL] [MODULE] [MESSAGE]
ログイン後にコピー

または、上記のコード例の結果のように、簡単に解析できる JSON 形式:

{
    "action": "checkout",
    "ip_address": "192.168.1.100",
    "level": "error",
    "module": "payment_processor",
    "msg": "Payment failed",
    "session_id": "sess_abc123",
    "time": "2024-06-26T20:59:02+07:00",
    "timestamp": "2024-06-26T20:59:02+07:00",
    "user_id": 12345
}
ログイン後にコピー

ファイルサイズを管理するためにログローテーションを実装する

ログのローテーションにより、ログ ファイルが大きくなりすぎて管理が困難になるのを防ぎます。これには以下が含まれます:

  • ログ ファイルのサイズを制限します。

  • 新しいログ ファイルを定期的に (例: 毎日または毎週) 作成します。

  • 古いログ ファイルをアーカイブまたは削除します。

  • Linux 上の logrotate などのツール、またはローテーションをサポートするロギング フレームワークを使用します。

ログに記録される情報のプライバシーとセキュリティを考慮する

セキュリティとプライバシーはログ記録において非常に重要です:

  • パスワードやクレジット カード情報などの機密データをログに記録しないでください。

  • 必要に応じて、個人データをマスクまたは暗号化します。

  • ログ ファイルへのアクセスが許可された担当者のみに制限されていることを確認します。

  • 会社のポリシーと規制に従って古いログを削除する保持ポリシーを実装します。

ログの監視と分析のためのツール

システムの複雑さが増すにつれて、ログを監視および分析するための高度なツールの必要性もますます重要になります。可観測性とログ分析に役立つ一般的なツールをいくつか紹介します:

  1. グラファナ
    Grafana は、ログ データを視覚化するためのオープンソース プラットフォームです。これらのツールは、ログを含むさまざまなデータ ソースに統合できます。カスタマイズされたインタラクティブなダッシュボードの作成が可能になります。メトリクスとログのリアルタイム視覚化に適しています。

  2. ニューレリック
    New Relic は、オールインワンの可観測性プラットフォームです
    ログ分析、トレース、メトリクスを 1 か所で提供します。異常を検出し、問題を関連付けるための AI 機能もあります。
    大規模なアプリケーションやインフラストラクチャの監視に適しています。

  3. ロキ
    Loki は、軽量でコスト効率の高いログ集約システムです。 Loki は Grafana とうまく連携するように設計されています
    Prometheus
    と同様に、ラベルベースのインデックスを使用します。 すでに Prometheus と Grafana を使用している組織に最適です。

  4. AWS CloudWatch Logs インサイト
    AWS のこの統合ログ分析サービスを使用すると、AWS のさまざまなサービスからのログのクエリと分析が可能になります。
    RDS およびその他のデータベース サービスでの遅いクエリを検出する機能
    他の AWS サービスとの簡単な統合。

結論

ロギングは単なる追加機能ではなく、信頼性の高いシステムを構築する上で不可欠なコンポーネントです。適切に実装すると、ロギングがスーパーセンサーとなり、システム動作を完全に可視化し、問題が発生する前に防止し、問題が発生した場合の迅速な解決に役立ちます。

それでは、今日から適切な伐採実践への投資を始めましょう。複雑なテクノロジーの世界では、良い丸太が嵐の真っただ中で道しるべとなることを忘れないでください!

追加情報がある場合は、下のコメント欄にご入力ください。

参考文献を読む

  • Github リポジトリ

  • アプリケーションログとその重要性

  • ログ管理はなぜ重要ですか?

  • 2024 年の 10 の可観測性ツール: 機能、市場シェア、最適なものを選択してください

  • トップ 20 のベスト ログ分析ツールとログ アナライザー (長所と短所)

以上が可観測性 - ロギングが重要な理由の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート