Go のモニタリング

「 Instana 」ホストエージェントの設定後、「 Instana Go Collector」(「 Go Tracer」または「in-process collector」とも呼ばれます)をインストールして、 Go アプリケーションを監視します。

詳細については、 「 Instana ホストエージェント」 を参照してください。

Go Collectorは、 対応技術向けの計測機能、 Go サービスの設定不要なヘルスモニタリング、および全システムにわたるリクエストのエンドツーエンドのトレースを提供します。 収集されたメトリクスとトレースは、 Instana のUIで確認できます。

詳しくは、以下のセクションを参照してください。

インストール

Instana Go コレクターのインストールは、2 つのステップからなる単純なプロセスです。 最初に github.com/instana/go-sensor モジュールを go.mod ファイルに追加します。

go get github.com/instana/go-sensor
 

アプリケーションの依存関係に go-sensor モジュールを追加した後、その go-sensor モジュールを使用してアプリケーションのコードに計測機能を組み込むことができます。 詳細については、 「インストール」 を参照してください。

注: バージョン 1.53.0 以降、 Go Collectorは内部でfsm v1.0.1 を使用しています。 プロジェクトで v1 より前のバージョンのfsmを使用している場合、コンパイルエラーが発生する可能性があります。その場合は、fsmのバージョンを v1 に更新する必要があります。

サポート

Go Collectorは、特定の Go ランタイム、プロセッサアーキテクチャ、オペレーティングシステムに対応しており、さまざまなライブラリやプラットフォーム向けの計測機能を提供します。 Go、 1.25、および 1.26 をサポートしており、 Go のEOLバージョンである 1.23 および Go 1.24 との互換性を維持しています。 このコレクターは、 x86_64、 AArch64、 IBM Power、 IBM Z などの複数のアーキテクチャおよびさまざまなオペレーティングシステム上で動作します。

Instana HTTP、 RPC、データベース、メッセージング、 GraphQL, など、さまざまなカテゴリにわたる多数のライブラリ向けのインストルメンテーション機能を提供します。 このコレクターは、 AWS Lambda、 Azure Functions、 Azure Container Apps などのサーバーレス環境にも対応しています。

サポートされているランタイムおよび環境に関する詳細については、 「サポート情報」 を参照してください。

サポートされているライブラリとプラットフォームの完全な一覧については、 「サポートされている Go ライブラリとプラットフォーム」 を参照してください。

構成

Go コレクタは、2つの形式で設定を受け付けます。1つはアプリケーションコード内で設定 instana.Options オブジェクトを使用する方法、もう1つは環境変数を使用する方法です。 以下の設定を除き、アプリケーション内の構成は環境変数よりも優先されます。

  • INSTANA_SERVICE_NAME: コードで設定されたサービス名を上書きできるようにします。
  • INSTANA_PROCESS_NAME: 「 Go 」プロセスを表すインフラストラクチャ・エンティティの名前を上書きできるようにします。
  • INSTANA_DEBUG: アプリコードの設定でより高いロギングレベルが定義されている場合でも、デバッグログを有効にします。
  • INSTANA_AUTO_PROFILE: AutoProfile™ を使用した継続的なプロファイリングを有効にします。
  • INSTANA_LOG_LEVEL: ログレベルを指定できます。 取り得る値は、 errorwarn、、および debug です info。 環境 INSTANA_DEBUG 変数が設定されている場合は、そちらが優先されます。
  • INSTANA_KAFKA_HEADER_FORMAT: ユーザーが、 Instana によって転送される Kafka ヘッダーの形式を指定できるようにします。 指定可能な値は (レガシー)、 string (新しい binary 形式)、および です both
  • INSTANA_ALLOW_ROOT_EXIT_SPAN: トレーサーがトレースを終了スパンから開始するかどうかを決定します。
    • この値を に設定すると 1、トレーサーは、親となるエントリスパンが存在しないインスタンスからの発信コールについて、終了スパンを記録します。
    • または を 0 設定した場合 any other value、トレーサーは exit span を含むトレースを開始しません。
  • INSTANA_TRACING_DISABLE: 指定したカテゴリのスパンコレクションを無効にします(現在はログカテゴリのみ対応しています)。
  • INSTANA_CONFIG_PATH: ユーザーが設定ファイルのパスを指定し、特定のカテゴリのスパン収集を無効にできるようにします(現在はログカテゴリのみ対応しています)。

詳細については、 「設定」 を参照してください。

機能

ランタイム・メトリック

以下のメトリクスが収集され、 Go のプロセスダッシュボードに表示されます:

  • メモリー使用率
  • ヒープ使用率
  • GC アクティビティー
  • Go ルーチン数

正常性シグニチャー

Go アプリケーションの健全性を判断する主な指標は以下の通りです:

  • 呼び出し
  • 応答時間
  • スケーリング

トレーサー・ログ

Go Collector は、レベル・ロガーを使用して内部エラーおよび診断情報をログに記録します。 デフォルトの logger.Logger は、バックエンドとして log.Lstdflags を使用して構成された log.Logger を使用し、メッセージを os.Stderr に書き込みます。 デフォルトで、このロガーは、環境変数 INSTANA_DEBUG が設定されている場合を除き、ERROR レベルのメッセージのみを出力します。

ランタイムの最小ログ・レベルを変更するには、instana.LeveledLogger のインスタンスを構成し、挿入することをお勧めします。

l := logger.New(log.New(os.Stderr, "", os.Lstdflags))
instana.SetLogger(l)

// ...

l.SetLevel(logger.WarnLevel)
 

この logger.LeveledLogger インターフェースは、 go.uber.org/zapgithub.com/sirupsen/logrus といった一般的なロギングライブラリによって実装されているため、それらのライブラリを代替として使用することができます。

あるいは、Go センサーのバージョン 1.39.0 以降では、 INSTANA_LOG_LEVEL 環境変数を使用してログ・レベルを設定できます。

: INSTANA_DEBUG 環境変数の値は、カスタム・ロガーに影響を与えません。 設定されているかどうかを明示的にチェックし、ロガーの構成中にデバッグ・ロギングを有効にする必要があります。

import (
        instana "github.com/instana/go-sensor"
        "github.com/sirupsen/logrus"
)

func main() {
        // initialize Instana sensor
        instana.InitSensor(&instana.Options{Service: SERVICE})

        // initialize and configure the logger
        logger := logrus.New()
        logger.Level = logrus.InfoLevel

        // check if INSTANA_DEBUG is set and set the log level to DEBUG if needed
        if _, ok := os.LookupEnv("INSTANA_DEBUG"); ok {
                logger.Level = logrus.DebugLevel
        }

        // use logrus to log the Instana Go Collector messages
        instana.SetLogger(logger)

        // ...
}
 

スパンを無効にする

Go コレクターでは、トレーサーレベルでのスパン収集を無効にすることができます。 この機能により、収集・処理されるスパンデータの量を削減できます。

注: 現在、この機能では設定によるログスパン無効化のみをサポートしています。

スパン情報の収集を無効にする方法は4つあり、これらは以下の優先順位の低い順に適用されます:

  1. 設定ファイル (INSTANA_CONFIG_PATH)
  2. 環境変数 (INSTANA_TRACING_DISABLE)
  3. コードレベルの設定
  4. エージェントの構成

スパンの無効化に関する詳細については、 「スパンの無効化」 を参照してください。

Instana AutoProfile™

プロファイルは、パフォーマンスのホット・スポットとボトルネックをコード・レベルで見つけるのに不可欠です。 リソース使用量の削減とパフォーマンスの向上に役立ちます。

AutoProfile™ は、プロセスのプロファイルを生成して Instana に報告します。 ユーザーがプロファイル作成を手動で開始する必要がある開発時やオンデマンドのプロファイラーとは異なり、AutoProfile™ は、重要な実稼働環境に適したプロファイル作成を自動的にスケジュールし、継続的に実行します。

AutoProfile™ を有効にするには、instana.InitSensor(opt)EnableAutoProfile: true オプションを追加します。 詳細な手順については、「 github.com/instana/go-sensor」を参照してください。 Instana で instana.InitSensor() 構成を変更せずにインスツルメントされたアプリケーションに対してプロファイル作成を有効にする必要がある場合は、INSTANA_AUTO_PROFILE=true 環境変数を設定します。 この値が優先され、アプリケーション・コード内部からプロファイル作成を無効にしようとしてもオーバーライドされる点に注意してください。

詳細については、 Instana のドキュメント( AutoProfile™ )をご覧ください。

トラブルシューティング

Go Collectorの稼働中に、監視機能に影響を及ぼす問題が発生する可能性があります。 よくある問題としては、 Go のランタイムが古くなっていることや、設定に関する問題などが挙げられます。

Go コレクターの問題の診断および解決に関する詳細については、 「トラブルシューティング」 を参照してください。