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

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

Jul 17, 2024 pm 09:57 PM

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 サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Golang vs. Python:パフォーマンスとスケーラビリティ Golang vs. Python:パフォーマンスとスケーラビリティ Apr 19, 2025 am 12:18 AM

Golangは、パフォーマンスとスケーラビリティの点でPythonよりも優れています。 1)Golangのコンピレーションタイプの特性と効率的な並行性モデルにより、高い並行性シナリオでうまく機能します。 2)Pythonは解釈された言語として、ゆっくりと実行されますが、Cythonなどのツールを介してパフォーマンスを最適化できます。

Golang and C:Concurrency vs. Raw Speed Golang and C:Concurrency vs. Raw Speed Apr 21, 2025 am 12:16 AM

Golangは並行性がCよりも優れていますが、Cは生の速度ではGolangよりも優れています。 1)Golangは、GoroutineとChannelを通じて効率的な並行性を達成します。これは、多数の同時タスクの処理に適しています。 2)Cコンパイラの最適化と標準ライブラリを介して、極端な最適化を必要とするアプリケーションに適したハードウェアに近い高性能を提供します。

ゴーを始めましょう:初心者のガイド ゴーを始めましょう:初心者のガイド Apr 26, 2025 am 12:21 AM

goisidealforforbeginnersandsutable forcloudnetworkservicesduetoitssimplicity、andconcurrencyfeatures.1)installgofromtheofficialwebsiteandverify with'goversion'.2)

Golang vs. C:パフォーマンスと速度の比較 Golang vs. C:パフォーマンスと速度の比較 Apr 21, 2025 am 12:13 AM

Golangは迅速な発展と同時シナリオに適しており、Cは極端なパフォーマンスと低レベルの制御が必要なシナリオに適しています。 1)Golangは、ごみ収集と並行機関のメカニズムを通じてパフォーマンスを向上させ、高配列Webサービス開発に適しています。 2)Cは、手動のメモリ管理とコンパイラの最適化を通じて究極のパフォーマンスを実現し、埋め込みシステム開発に適しています。

Golangの影響:速度、効率、シンプルさ Golangの影響:速度、効率、シンプルさ Apr 14, 2025 am 12:11 AM

speed、効率、およびシンプル性をspeedsped.1)speed:gocompilesquilesquicklyandrunseffictient、理想的なlargeprojects.2)効率:等系dribribraryreducesexexternaldedenciess、開発効果を高める3)シンプルさ:

CとGolang:パフォーマンスが重要な場合 CとGolang:パフォーマンスが重要な場合 Apr 13, 2025 am 12:11 AM

Cは、ハードウェアリソースと高性能の最適化が必要なシナリオにより適していますが、Golangは迅速な開発と高い並行性処理が必要なシナリオにより適しています。 1.Cの利点は、ハードウェア特性と高い最適化機能に近いものにあります。これは、ゲーム開発などの高性能ニーズに適しています。 2.Golangの利点は、その簡潔な構文と自然な並行性サポートにあり、これは高い並行性サービス開発に適しています。

Golang vs. Python:重要な違​​いと類似点 Golang vs. Python:重要な違​​いと類似点 Apr 17, 2025 am 12:15 AM

GolangとPythonにはそれぞれ独自の利点があります。Golangは高性能と同時プログラミングに適していますが、PythonはデータサイエンスとWeb開発に適しています。 Golangは同時性モデルと効率的なパフォーマンスで知られていますが、Pythonは簡潔な構文とリッチライブラリエコシステムで知られています。

GolangとC:パフォーマンスのトレードオフ GolangとC:パフォーマンスのトレードオフ Apr 17, 2025 am 12:18 AM

GolangとCのパフォーマンスの違いは、主にメモリ管理、コンピレーションの最適化、ランタイム効率に反映されています。 1)Golangのゴミ収集メカニズムは便利ですが、パフォーマンスに影響を与える可能性があります。

See all articles