Download PDF
Download page .NET Agent for Linuxの高度な構成オプション.
.NET Agent for Linuxの高度な構成オプション
このページでは、AppDynamics .NET Agent for Linux の高度な設定プロパティについて説明します。これは、.NET エージェントが Docker なしで動作できるようにするために使用します。.NET エージェントを使用してアプリケーションのインストゥルメント化を開始する前に、.NET Core 2.0 以降の最新バージョンを使用する必要があります。「.NETエージェントの構成プロパティ」を参照してください。
エージェント構成ファイル
エージェント構成ファイルは、Windows 上で .NET Core エージェントを構成するために使用される構成ファイルと似ています。
エージェントを展開したら、アプリケーションのインストゥルメンテーションをカスタマイズできます。
次の情報を使用して AppDynamicsConfig.json
ファイルを編集できます。
{
"controller": {
"host": "controller.saas.appdynamics.com",
"port": 443,
"account": "account-name",
"password": "access-key",
"ssl": true
"proxy" : {
"host": "proxy-host",
"port": 9090,
"authentication": {
"username": "proxy-user",
"password": "proxy-password"
}
}
},
"application": {
"name": "My Application",
"tier": "Sample tier",
"node": "Instance1",
"reusenodename": "true",
"nodenameprefix": "prefix"
},
"analytics": {
"host": "localhost",
"port": 9090
},
"feature": [
"FULL_AGENT"
]
}
Linux 用の .NET エージェントはノード名設定を再利用し、期間が短い CLR が多数存在するモニタリング環境を管理できます。CLR ノード名は、AppDynamics で異なる名前のノードが急増しないように再利用されます。特定のノード名を指定せずに、"
nodenameprefix": "prefix"
を使用してノード名を再利用するには、"
reusenodename": "true"
設定を含めます。
また、環境変数を使用して、ENV APPDYNAMICS_AGENT_REUSE_NODE_NAME=true
および ENV APPDYNAMICS_AGENT_REUSE_NODE_NAME_PREFIX=<prefix>
などの再利用ノード名を設定することもできます。
Configure Using AppDynamicsConfig.json:環境変数と json 構成ファイルを使用するか、json 構成ファイルのみを使用して、エージェントを設定する場合は、json ファイルに FULL_AGENT 機能を含めます。含めないと、エージェントは機能しません。 ,
"feature"
: [
"FULL_AGENT"
]
エージェントを環境変数のみを使用して設定すると、FULL_AGENT 機能モードが自動的に有効になります。
.NET Agent for Linux では、Instrumentor や許可リストの指定などの拡張機能はサポートされていません。Windows 上の .NET Core エージェントから構成をコピーする場合は、これらの機能を指定しないでください。
設定オプション
Docker なしで動作するようにエージェントを設定できます。ただし、現在のエージェントで OS がサポートされている必要があります。
次のファイルをアプリケーションで使用できるようにします。アプリケーションファイルの横または個別のフォルダに配置できます。
AppDynamics.Agent.netstandard.dll
次の環境変数をアプリケーションに追加して、作成します。
環境変数名 値 CORECLR_PROFILER {57e1aa68-2229-41aa-9931-a6e93bbc64d8} CORECLR_ENABLE_PROFILING 1 CORECLR_PROFILER_PATH libappdprofilerdynamic
ライブラリへのパス。例:<application_folder_path>/libappdprofiler.so
「2022-04-15_00-55-28_Using .NET Core for Linux SDK」を参照して、libappdprofiler.so
ライブラリの場所を指定します。複数のレベルで環境変数を作成できるため、モニタリング対象アプリケーションのコンテキストでこれらを設定することが重要です。
- 環境変数はグローバルホストレベルから継承されます。
- 環境変数は親プロセスまたはサービスです。
- 環境変数は、シェルスクリプトなどを使用してアプリケーションを起動する前に設定されます。
エージェント構成ファイルを適切なバイナリの横に配置します。次の 2 つのオプションがサポートされています。
グローバルエージェント構成ファイル:AppDynamicsConfig.json ファイルをエージェントバイナリとともに配置できます。これにより、構成済みの各アプリケーションをモニタするためのデフォルトオプションがエージェントで使用されます。
.NET Agent for Linuxでは、エージェント構成でのノード名のオーバーライドがサポートされていません。したがって、グローバル構成を使用して同じホスト上で複数のアプリケーションをモニタリングすることはサポートされていません。最初のアプリケーションでのみレポートが行われます。
ローカルエージェント構成:
[appname].AppDynamicsConfig.json
ファイルをアプリケーションバイナリとともに配置できます。appname
がアプリケーションの DLL/EXE 名と一致する必要があります。このオプションを使用して、AppDynamics 構成をアプリケーションパッケージにアタッチし、バンドルとして展開できます。適切な環境変数が設定され、エージェントバイナリが存在する場合にアクティブになります。ローカルエージェント構成は、グローバル構成よりも優先されます。
ローカル構成オプション
デフォルトでは、プロファイラと .NET エージェントの両方に Boost Log を使用できます。ログファイルが存在しない場合でも、ロギングが実行されます。デフォルトでは、次の 3 つのログファイルが作成されます。
- エージェントログ:ファイル名は
Agent_%N.log
で、デフォルトのログレベルはINFO
です。 - プロファイラログ:ファイル名は
Profiler_%N.log
で、デフォルトのログレベルはINFO
です。 - 警告ログ:ファイル名は
Warn_%N.log
で、デフォルトのログレベルはWARN
です。
ログ構成は、プロファイラの初期化中に読み取られます。ログ構成が読み取られる前に、一部のログがコンソールに出力されます。
次の表に、ログ構成ファイルで設定できるプロパティを示します。
ログプロパティ | 説明 | |
---|---|---|
max_size | 保存されたファイルの最大合計サイズ(バイト単位)。デフォルト値は 10485760 バイト(10 MB)です。 |
たとえば、
ログディレクトリに前回の実行からのログファイルが含まれている場合、新しく開始されたエージェントは前回の実行からの増分値を使用してログファイルを作成します。たとえば、前回の実行で 2 つのエージェントログ( |
max_files | 保存されたファイルの最大合計数。デフォルト値は 10 です。 | |
directory | ルートディレクトリ。相対パスと絶対パスの両方を使用できます。ただし、環境変数は使用できません。デフォルト値は | |
filename | ファイル名。デフォルトでは、ファイル名にプロセス ID は含まれません。ただし、プロセス ID( | |
exclude_tid | ログファイルにネイティブスレッド ID を含めるかどうかを指定します。デフォルト値は false です。 | |
level | 最小ログレベル。 | |
channel | このフィールドには、次の値を使用できます。
|
ロギング設定に加えた変更を組み込むには、アプリケーションを再起動する必要があります。ロギング設定の自動リロード機能はサポートされていません。
ログの内容の例
次のログの例は、Agent_0.log
ファイルの内容を示しています。
Agent_0.log
2021-05-24 15:26:03.741862 2056 11672 3 INFO [com.appdynamics.LifetimeManager] Initializing via agent bootstrap
ここで、
2021-05-24 15:26:03.741862
は、タイムスタンプです。2056
は、プロセス ID です。11672
は、ネイティブスレッド ID です。3
は、管理対象スレッド ID です。INFO
は、ログレベルです。com.appdynamics.LifetimeManager
は、チャネル名です。Initializing via agent bootstrap
は、ログの内容です。
ログの構造
このログの例には、11120 と 76890 の 2 つのプロセスが含まれています。ログ設定に基づいて、各プロセスには独自のログファイルのセットがあります。
- プロセス 11120 が最初に開始されると、
Agent_0.log
(エージェントログの場合)およびProfiler_0.log
(プロファイラログの場合)が作成されます。 - プロセス 76890 が開始されると、
Agent_1.log
(エージェントログの場合)およびProfiler_1.log
(プロファイラログの場合)が作成されます。 いずれかのログファイルが最初に最大サイズに達すると、ファイル名に増分番号を追加して次のログファイルが作成されます。ログの順序付けは維持されず、プロセスごとに異なります。
Logs
Profiler_0.log Profiler_1.log Warn_0.log BusinessTransactionsLog_0.log .... .... .... Agent_0.log Agent_1.log Profiler_2.log .... .... .... Agent_2.log
CODE
Supported Features
次の表に、サポートされている Boost Log 機能を示します。
特長 | 説明 |
---|---|
ログ順序ルール | 最後のルールが一致した後は、ルールは処理されません。 ルールの適用条件は次のとおりです。
ただし、最初のロガーを使用してログが書き込まれ、2 番目のロガーとワイルドカードを使用してチャネル名が一致した場合、2 番目のロガーはログファイルにメッセージを書き込みません。 |
level | ログに記録する最小レベル。 |
ワイルドカード文字(*) |
|
ログ順序ルールの例
このログ順序ルールの例では、logger1、logger2 ... loggerN の N 個のロガーがあります。
ここで、loggerN は logger(N-1) ... logger1 に依存し、
logger(N-1) は logger(N-2) ...logger1 に依存します。これ以降も同様です。
例 A:
"ByteCode"
ログは、"AgentLog
" の一部です。そのため、ByteCode
ロガーによるロギングは行われません。AppDynamicsConfig.json
ファイル内のロギング設定の順序に基づきます。{"filename" : "RESTHearbeat", "level" : "Info", "channel" : "com.appdynamics.REST.HeartBeatLog" }, {"filename" : "AgentLog", "level" : "Info", "channel" : "*" }, {"filename" : "ByteCode","level" : "Info","channel" : "com.appdynamics.bci.*" }
CODE例 B:
"RESTHeartbeat"
ログは、"REST"
の一部です。そのため、"RESTHeartbeat"
ログは無視されます。{"filename" : "REST", "level" : "Info", "channel" : "com.appdynamics.REST.*" }, {"filename" : "RESTHeartbeat", "level" : "Info", "channel" : "com.appdynamics.REST.HeartBeatLog" }
CODE"RESTHeartbeat"
と"REST"
ログのチャネル名はまったく同じですが、最初のロガーのminLogLevel
のみが考慮されます。この例では、"Info"
です。{"filename" : "REST", "level" : "Info", "channel" : "com.appdynamics.REST.HeartBeatLog" }, {"filename" : "RESTHeartbeat", "level" : "Trace", "channel" : "com.appdynamics.REST.HeartBeatLog" }
CODEロガー
"RESTHearbeat"
と"ByteCode"
を介して書き込まれないチャネルは、ロガー"AgentLog"
を介して書き込まれます。AgentLog
には、RESTHeartbeat
またはByteCode
からのエントリはありません。{"filename" : "RESTHearbeat", "level" : "Info", "channel" : "com.appdynamics.REST.HeartBeatLog" }, {"filename" : "ByteCode", "level" : "Info", "channel" : "com.appdynamics.bci.*" }, {"filename" : "AgentLog","level" : "Info","channel" : "*" }
CODE
ログ設定の例
次に、ロギング設定の例を示します。各ログファイルには、独自の設定セットを含めることができます。
AppDynamicsConfig.json
{
"controller": {
"host": "......"
},
"application": {
"name": "..."
},
"log": [
{
"filename": "WarnLog",
"level": "WARN",
"channel": "*"
},
{
"filename": "Profiler",
"level": "INFO",
"directory": "/tmp/appd/logs",
"channel": "appd.agent.Profiler"
},
{
"filename": "BusinessTransactionsLog",
"level": "INFO",
"channel": "com.appdynamics.BusinessTransactions"
},
{
"filename": "RESTHearbeat",
"level": "INFO",
"channel": "com.appdynamics.REST.HeartBeatLog"
},
{
"filename": "ByteCode",
"level": "INFO",
"channel": "com.appdynamics.bci.*"
},
{
"filename": "RESTCommunications",
"level": "INFO",
"channel": "com.appdynamics.REST.*"
},
{
"filename": "RESTCommunications",
"level": "INFO",
"channel": "com.appdynamics.METRICS.MetricSender"
},
{
"filename": "SamplingTrace",
"level": "TRACE",
"channel": "com.appdynamics.ManagedAgentAPI.DumpStats"
},
{
"filename": "Analytics",
"level": "INFO",
"channel": "com.appdynamics.ee.service.analytics.Analytics",
"max_size": 31457280,
"max_files": 2,
"directory": "./logs",
"exclude_tid": false
},
{
"filename": "Agent",
"level": "INFO",
"channel": "*"
}
]
}
この例では、同じファイルの複数のログエントリを示します(ディレクトリとファイル名の両方が同じ値を持ちます)。ファイルログの設定では最初のエントリを使用し、max_size
、max_files
、および exclude_tid
のそれ以降の設定はすべて無視されます。
AppDynamicsConfig.json
{
"filename": "agent",
"level": "TRACE",
"max_size":1000,
"max_files":2,
"channel": "com.appdynamics.METRICS.MetricSender"
},
{
"filename": "agent",
"level": "DEBUG",
"max_size":2000,
"max_files":2,
"channel": "com.appdynamics.METRICS.*"
},
{
"filename": "agent",
"level": "INFO",
"max_size":3000,
"max_files":1,
"channel": "com.appdynamics.*"
}
}