Splunk Observability Cloud の .NET インストルメンテーションのトラブルシューティング 🔗
Splunk Distribution of OpenTelemetry .NET を使用して .NET アプリケーションをインストルメンテーションしているときに、Splunk Observability Cloud にデータが表示されない場合は、以下のトラブルシューティング手順に従ってください。
一般的なトラブルシューティング 🔗
以下の手順に従って、一般的なインストルメンテーションの問題をトラブルシューティングしてください:
ニーズに合わせてすべての設定を行ったか確認してください。Splunk Distribution of OpenTelemetry .NET を設定する を参照してください。
プロセスに適用される環境変数を確認します:
# Run a tool like Process Explorer or execute the following: [System.Diagnostics.Process]::GetProcessById(<pid>).StartInfo.EnvironmentVariables
cat /proc/<pid>/environ # where <pid> is the process ID
デバッグロギングを有効にする 🔗
デバッグロギングを有効にして、問題についての詳細な情報を得ることができます:
インストルメンテーションされたアプリケーションを起動する前に、環境変数
OTEL_LOG_LEVEL
をdebug
に設定します。アプリケーションまたはサービスを実行し、アクティビティを生成します。
デバッグログを収集します。インストルメンテーションは以下の場所にログを保存します:
Windows:
%ProgramData%\OpenTelemetry .NET AutoInstrumentation\logs
Linux:
/var/log/opentelemetry/dotnet
デフォルトのログディレクトリを作成できない場合、ログはユーザーの一時フォルダに保存されます。
デフォルトの場所は、
OTEL_DOTNET_AUTO_LOG_DIRECTORY
環境変数を更新することで変更できます。詳細と設定については 診断ロギングの設定 を参照してください。
注釈
必要なときだけデバッグロギングを有効にします。デバッグモードはより多くのリソースを必要とします。
Find the runtime identifier for your .NET applications 🔗
Splunkの自動検出を使用して .NET アプリケーションをインストルメンテーションしている場合、適切なインストルメンテーションを設定するためにランタイム識別子が必要になることがあります。
To find your runtime identifier, follow these steps:
Program.cs
ファイルで、コードに以下の依存関係が含まれていることを確認してください:using System.Runtime.InteropServices
In your main application, add the following code to print your runtime identifier information:
Console.WriteLine(RuntimeInformation.RuntimeIdentifier);
Run the application and check your application logs.
Verify that the runtime identifier is supported for your instrumentation.
Splunk Observability Cloud にトレースが表示されない 🔗
インストルメンテーションされたアプリケーションまたはサービスからのトレースが Splunk Observability Cloud で利用できない場合は、OpenTelemetry Collector の設定を確認してください:
OTEL_EXPORTER_OTLP_ENDPOINT
が正しい OpenTelemetry Collector インスタンスホストを指していることを確認します。コレクタインスタンスが構成され、稼動していることを確認します。Splunk OpenTelemetry Collector のトラブルシューティング を参照してください。
OTLP レシーバーが OTel Collector でアクティブになり、トレースパイプラインに接続されていることを確認します。
OTel Collector が次のアドレスを指していることを確認してください:
http://<host>:4318
.URL が正しいことを確認してください。
AdditionalDepsのアセンブリが見つかりませんでした。 🔗
以下のようなアセンブリエラーメッセージが表示される場合があります:
An assembly specified in the application dependencies manifest (OpenTelemetry.AutoInstrumentation.AdditionalDeps.deps.json) was not found
この問題をトラブルシューティングするには、次の例のようにホストトレースを有効にしてください:
COREHOST_TRACE=1
COREHOST_TRACEFILE=corehost_verbose_tracing.log
アプリケーションを実行してログを収集します。
高いCPU使用率 🔗
デフォルトでは、Splunk Distribution of OpenTelemetry .NET は、ホスト上で実行されているすべての .NET プロセスを自動的にインストルメンテーションします。システムまたはユーザースコープでインストルメンテーションを有効にしている場合、CPU 使用率が大幅に増加する可能性があります。インストルメンテーションの環境変数が常にプロセスまたはターミナルスコープに設定されていることを確認してください。
グローバル・インストルメンテーションをプロセス・セットに制限するには、OTEL_DOTNET_AUTO_EXCLUDE_PROCESSES
環境変数を使用します。詳細は Splunk Distribution of OpenTelemetry .NET を設定する を参照してください。
特定のインストルメンテーションを無効にする 🔗
デフォルトでは、すべてのシグナル・タイプ(トレース、メトリクス、ログ)に対して、すべてのインストルメンテーションが有効になっています。
環境変数 OTEL_DOTNET_AUTO_{SIGNAL}_ENABLED_INSTRUMENTATIONS
を false
に設定することで、特定のシグナル・タイプに対するすべてのインストルメンテーションを停止することができます。
よりきめ細かなアプローチとして、OTEL_DOTNET_AUTO_{SIGNAL}_{INSTRUMENTATION}_INSTRUMENTATION_ENABLED
環境変数を false
に設定することで、特定のシグナル・タイプのインストルメンテーションを無効にすることができます。{SIGNAL}
はシグナルのタイプ(例えばトレース)、{INSTRUMENTATION}
はインストルメンテーションの大文字と小文字を区別した名前です。
注釈
web.configファイルやapp.configファイルを使用して、インストルメンテーションを停止するための環境変数を設定することはできません。
AlwaysOn Profiling for .NET のトラブルシューティング 🔗
AlwaysOn Profilingに関する一般的な問題と修正については、以下を参照してください:
AlwaysOn Profilingが有効になっていることを確認する 🔗
.NET インストルメンテーションでは、info
ログレベルで始まる ContinuousProfiler::StartThreadSampling
という文字列がログに記録されます。AlwaysOn Profilingが有効になっているかどうかを確認するには、次のような文字列をログから検索します:
10/12/23 12:10:31.962 PM [12096|22036] [info] ContinuousProfiler::StartThreadSampling
文字列が表示されない場合は、SPLUNK_PROFILER_ENABLED
環境変数を true
に設定して、プロファイラが有効になっていることを確認してください。AlwaysOn Profiling の .NET OTel 設定 を参照してください。
AlwaysOn Profilingの設定を確認する 🔗
AlwaysOn Profiling が 意図したとおりに動作しない 場合は、構成設定を確認してください。.NET インストルメンテーションは、起動時に Debug
メッセージを使って AlwaysOn Profiling の設定をログに記録します。設定を確認するには、Continuous profiling configuration:
という文字列を grep してください。
サポートされていない.NETバージョン 🔗
AlwaysOn Profiling を使用するには、.NET のバージョンを .NET 6.0 以降にアップグレードしてください。
どの.NET Frameworkバージョンもサポートしていません。
AlwaysOn Profiling のデータとログが Splunk Observability Cloud に表示されない 🔗
Collector 構成の問題により、AlwaysOn Profilingデータとログが Splunk Observability Cloud に表示されない場合があります。
この問題を解決するには、次のようにしてください:
.NET インストルメンテーションの設定、特に
SPLUNK_PROFILER_LOGS_ENDPOINT
をチェックします。Splunk Distribution of OpenTelemetry Collectorが期待されるエンドポイントで実行されていること、アプリケーションホストまたはコンテナがホスト名を解決して OTLP ポートに接続できることを確認します。
Splunk Distribution of OpenTelemetry Collectorを実行していることと、バージョンが 0.34 以上であることを確認してください。メモリプロファイリングに必要なバージョンは 0.44 です。他のコレクタディストリビューションでは、プロファイリングデータを含むログデータをルーティングできない場合があります。
カスタム設定は、コレクタにプロファイリングデータを処理させる設定をオーバーライドする場合があります。正しいトークンとエンドポイントフィールドを持つ
otlp
レシーバーとsplunk_hec
エクスポーターを設定してください。profiling
パイプラインは、設定した OTLP レシーバーと Splunk HEC エクスポーターを使用する必要があります。詳細は Splunk HEC エクスポーター を参照してください。
次のスニペットには、profiling
パイプラインのサンプルが含まれています:
receivers:
otlp:
protocols:
grpc:
exporters:
# Profiling
splunk_hec/profiling:
token: "${SPLUNK_ACCESS_TOKEN}"
endpoint: "${SPLUNK_INGEST_URL}/v1/log"
log_data_enabled: false
processors:
batch:
memory_limiter:
check_interval: 2s
limit_mib: ${SPLUNK_MEMORY_LIMIT_MIB}
service:
pipelines:
logs/profiling:
receivers: [otlp]
processors: [memory_limiter, batch]
exporters: [splunk_hec, splunk_hec/profiling]
プロファイリングデータの紛失またはギャップ 🔗
バッファがいっぱいでインストルメンテーションが Splunk OpenTelemetry Collector にデータを送信できない場合、AlwaysOn Profiling はエスケープハッチを起動し、バッファが空になるまで、プロファイリングデータを含むすべてのログを削除します。
エスケープハッチが作動すると、以下のメッセージが記録されます:
Skipping a thread sample period, buffers are full.
また、** THIS WILL RESULT IN LOSS OF PROFILING DATA **.
のメッセージを探すこともできます。
スレッドサンプラーは、いずれかのバッファが空になるとアクティビティを再開します。
フルバッファによるプロファイリングデータの損失を回避するには、プロセスとSplunk Distribution of OpenTelemetry Collector間の設定と通信レイヤーを確認してください。
アセンブリバージョンの競合 🔗
.NETインストルメンテーションをインストールする際、依存関係のバージョンの競合が発生し、次のようなエラーメッセージが表示されることがあります:
Unhandled exception. System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.Extensions.DependencyInjection.Abstractions, Version=7.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'. The system cannot find the file specified.
File name: 'Microsoft.Extensions.DependencyInjection.Abstractions, Version=7.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'
at Microsoft.AspNetCore.Builder.WebApplicationBuilder..ctor(WebApplicationOptions options, Action`1 configureDefaults)
at Microsoft.AspNetCore.Builder.WebApplication.CreateBuilder(String[] args)
at Program.<Main>$(String[] args) in /Blog.Core/Blog.Core.Api/Program.cs:line 26
この問題を解決するには、NuGetパッケージを使用して.NETインストルメンテーションをインストールします。NuGetはパッケージが必要とする正しい依存関係を自動的にインストールします。
あるいは、.NETの最新バージョンにアップデートすることもできます。そうすれば、依存関係のバージョンが競合する可能性が低くなります。
インストルメンテーションをアンインストールする 🔗
.NET インストルメンテーションをアンインストールするには、.NETインストルメンテーションをアンインストールする を参照してください。