Download PDF
Download page スクリプトを使用したモニタリング拡張機能の作成.
スクリプトを使用したモニタリング拡張機能の作成
モニタリング拡張スクリプト(別名、カスタムモニターまたはハードウェアモニター)を作成して、Splunk AppDynamics がすでに収集してコントローラにレポートしているメトリックセットにカスタムメトリックを追加できます。スクリプトは、1 分ごとにカスタムメトリックをマシンエージェントに報告します。マシンエージェントは、これらのメトリックをコントローラに渡します。
このページでは、シェルスクリプトを使用してカスタムメトリックを追加する手順について説明します。この手順には例が含まれます。
既存の拡張機能の確認
独自の拡張機能を作成する前に、作成され、Splunk AppDynamics コミュニティのメンバー間で共有されている拡張機能を確認してください。新しい拡張機能が継続的に追加されています。他のユーザが必要なもの、または必要なものに近いものをすでに作成している可能性があります。必要なものに近いものをダウンロードし、変更をいくつか加えれば使用できる場合があります。
無料ダウンロードについては、製品ページを参照してください。
エージェントの設定要件
controller-info.xml ファイルおよびコマンドラインのエージェントの start コマンドで、マシンエージェントが正しく設定されていることを確認します。「マシンエージェントの設定プロパティ」を参照してください。
モニタリング拡張機能の作成
スクリプトを使用してモニタリング拡張機能を作成するには、次のようにします。
- スクリプトを作成します。「スクリプトファイルの作成」を参照してください。
monitor.xml設定ファイルを作成します。「monitor.xml ファイルの作成」を参照してください。<machine_agent_home>/monitorsに サブディレクトリ<your_extension_dir>を作成します。「マシンエージェントのモニタディレクトリの下へのディレクトリの作成」を参照してください。スクリプトファイルと
monitor.xmlファイルを新しいサブディレクトリにコピーします。- マシンエージェントを再起動します。
メトリックの定義
メトリック名は、同じメトリックパス内で一意である必要がありますが、メトリック階層全体に対して一意である必要はありません。メトリックブラウザに表示されるときに名前全体が表示されるように、短いメトリック名を使用することを推奨します。メトリックをコントローラにアップロードするときにメトリック名の前にメトリックパスを付加します。
メトリックパスを含める際は、カスタムメトリックの末尾に垂直バー(パイプ記号)を含めないでください。
メトリック処理修飾子
コントローラには、メトリックの処理方法(集約、時間ロールアップ、および階層ロールアップ)を示すさまざまな修飾子があります。メトリック修飾子には、次の 3 つのタイプがあります。
- アグリゲータ修飾子
- 時間ロールアップ修飾子
- クラスタロールアップ修飾子
スクリプトで、メトリックの名前と値のペアの後にメトリック修飾子を指定します。スクリプトファイル内の一般的なメトリックエントリは、次のような構造です。
name=<metric name>,value=<long value>,aggregator=<aggregator type>, time-rollup=<time-rollup strategy>, cluster-rollup=<cluster-rollup strategy>
アグリゲータ修飾子
アグリゲータ修飾子では、1 分間にレポートされた値をマシンエージェントでどのように集約するかを指定します。アグリゲータ修飾子は、aggregator="aggregator type" のように指定します。この値は列挙型です。その 1 分の間に値がレポートされない場合、コントローラにはデータはレポートされず、そのメトリックについてマシンエージェントログに UNCHANGED 通知が表示されます。有効な値は次のとおりです。
アグリゲータタイプ | 説明 |
|---|---|
AVERAGE | (デフォルト)その 1 分にレポートされたすべての値の平均 |
SUM | その 1 分にレポートされたすべての値の合計。これにより、メトリックはカウンタと同様に動作します |
OBSERVATION | その 1 分にレポートされた最後の値 |
時間ロールアップ修飾子
時間ロールアップ修飾子では、時間が経過して 1 分単位のテーブルから 10 分単位のテーブル、および 60 分単位のテーブルに変換するときに、コントローラで値をどのようにロールアップするかを指定します。値は列挙型です。有効な値は次のとおりです。
ロールアップ方法 | 説明 |
|---|---|
AVERAGE | 1 分間のすべての値の平均(10 分単位のテーブルに追加する場合)。または 10 分間のすべての値の平均(60 分単位のテーブルに追加する場合) |
SUM | 1 分間のすべての値の合計(10 分単位のテーブルに追加する場合)。または 10 分間のすべての値の合計(60 分単位のテーブルに追加する場合) |
CURRENT | その 10 分間隔で最後にレポートされた 1 分間の値。またはその 60 分間隔で最後にレポートされた 10 分間の値 |
クラスタロールアップ修飾子
クラスタロールアップ修飾子では、コントローラで階層(ノードのクラスタ)内のメトリック値をどのように集約するかを指定します。値は列挙型です。有効な値は次のとおりです。
ロールアップ方法 | 説明 |
|---|---|
個人 | 階層内の各ノードでのメトリック値を平均して、メトリック値を集計します |
COLLECTIVE | 階層内のすべてのノードのメトリック値を合計して、メトリック値を集計します |
たとえば、階層に 2 つのノード、ノード A とノード B があり、ノード A に 1 分あたり 3 個のエラーがあり、ノード B に 1 分あたり 7 個のエラーがある場合、INDIVIDUAL 修飾子では 1 分あたり 5 個のエラーが値としてレポートされ、COLLECTIVE 修飾子では 1 分あたり 10 個のエラーがレポートされます。INDIVIDUAL は、各ノードの値が必要な CPU 使用率(% CPU Busy)などのメトリックに適しています。COLLECTIVE は、階層全体の値が必要なコール数(Number of Calls)などのメトリックに適しています。
モニタリング拡張スクリプトの追加
モニタリング拡張スクリプトを追加するには、次のようにします。
マシンエージェントのモニタディレクトリの下へのサブディレクトリの作成
<machine_agent_home>/monitors ディレクトリは、マシンエージェントの拡張機能のリポジトリです。新しい拡張機能ごとに、/monitors ディレクトリの下にサブディレクトリを作成します。エージェントを実行するユーザには、このサブディレクトリに対する読み取り、書き込み、および実行権限が必要です。
たとえば、JVM で開いているファイルをモニタする拡張機能を作成するには、<machine_agent_home>/monitors の下に "openfiles" という名前のサブディレクトリを作成します。構造は次のようになります。

スクリプトファイルの作成
スクリプトは、STDOUT にデータを書き込みます。マシンエージェントは、STDOUT を解析して、1 分ごとにコントローラに情報を送信します。スクリプトファイルを作成するには、次の手順を使用します。
Windows カスタムメトリックの場合、.bat ファイルよりも PowerShell と VBScript が推奨されます。
Windows でカスタムメトリックを生成する場合、.bat ファイルの代わりに PowerShell スクリプトおよび VBasic スクリプトを使用することを推奨します。
標準の Windows バッチ(.bat)スクリプトでメトリック名をエコーすると、名前が引用符で囲まれます。引用符が原因で、マシンエージェントはこれらのメトリックを無視します。PowerShell スクリプトと VBasic スクリプトにはこの問題はありません。
メトリックの
name-valueペアを指定します。
各メトリックには、java の'long'値に変換されるname-valueペアがあります。スクリプトファイル内の一般的なメトリックエントリは、次のような構造です。name=<metric name>,value=<long value>,aggregator=<aggregator type>, time-rollup=<time-rollup strategy>, cluster-rollup=<cluster-rollup strategy>
次の形式を使用
フォーム
形式
標準形式
Hardware Resources| Instrument Name=Instrument Value完全修飾形式
Hardware Resources| <metric name>,value=<long value>- メトリックのカテゴリを定義します。次に例を示します。
- インフラストラクチャ(デフォルトのハードウェアメトリックについては、「マシンエージェント」を参照してください)
- JVM
- カスタムメトリック。カスタムメトリックには、パスのプレフィックスが必要です。
- Custom Metrics
- Server|Component:<tier-name-or-tier-id>
カスタム メトリック プレフィックスが付加されたメトリックは、アプリケーション内のすべての階層で共通です。Server|Component:<tier-name-or-tier-id> プレフィックスが付加されたメトリックは、指定の階層の下にのみ表示されます。
階層のコンポーネント ID を見つけるには、その階層に対してダッシュボードを開き、URL を確認します。ID は、URL のコンポーネント値として表示されます。

マシンエージェントは、メトリックのターゲットまたは宛先に関連付けられている必要があります。マシンエージェントに関連付けられていない階層にメトリックを公開しようとしても、そのメトリックはレポートされません。
「|」文字は、メトリック階層内のブランチを分離し、メトリックツリー内のどこにメトリックを表示する必要があるかをコントローラに伝えます。Custom Metrics|Hardware Resources|Disks|Total Disk Usage % Custom Metrics|Hardware Resources|Disks|Disk 1|Current Disk Usage %
既存のタイプのメトリックの次にカスタムメトリックを挿入できます。たとえば、次の宣言により、pool usageという名前のカスタムメトリックがJMXメトリックの次に表示されます。
Server|Component:18|JMX|Pool|First|pool usageこの後、このメトリックを、他のタイプの JMX メトリックと同様に、正常性ルールで使用できます。
同じスクリプトファイルを使用して複数のメトリックをモニタするには、スクリプトを編集してメトリックごとに異なる行が STDOUT に書き込まれるようにします。たとえば、次のようにします。name=Custom Metrics|Hardware Resources|Disks|Total Disk Usage %, value=23 name=Custom Metrics|Hardware Resources|Disks|Disk 1|Current Disk Usage %, value=56
ステップ 1 で作成したサブディレクトリへのスクリプトファイルのコピー
エージェントプロセスに、スクリプトファイルに関する実行権限と、ファイルの内容に関する実行権限があることを確認します。
monitor.xml ファイルの作成
カスタムモニタリング拡張スクリプトごとに、monitor.xml ファイルを作成します。monitor.xml ファイルで、ステップ 2 で作成したスクリプトファイルを実行します。次のサンプルファイルを編集して、独自のファイルを作成できます。
<monitor>
<name>HardwareMonitor</name>
<type>managed</type>
<description>Monitors system resources - CPU, Memory, Network I/O, and Disk I/O.</description>
<monitor-configuration> </monitor-configuration>
<monitor-run-task>
<!-- Edit execution-style as needed. -->
<execution-style>continuous</execution-style>
<name>Run</name>
<type>executable</type>
<task-arguments/>
<executable-task>
<type>file</type>
<!-- Use only one file element per os-type. -->
<file os-type="linux">linux-stat.sh</file>
<file os-type="mac">macos-stat.sh</file>
<file os-type="windows">windows-stat.bat</file>
<file os-type="solaris">solaris-stat.sh</file>
<file os-type="sunos">solaris-stat.sh</file>
<file os-type="aix">aix-stat.sh</file>
</executable-task>
</monitor-run-task>
</monitor>
os-type 属性は、executable-task ファイル要素のオプションです(1 つの os-type のみ指定されている場合)。1 つの monitor.xml ファイルで、os-type ごとに 1 つのスクリプトを実行します。
実行スタイル(
continuousまたはperiodic)を選択します。実行形式
説明
例
continuous
一定期間のデータ収集を平均する必要がある場合は、
continuousを選択します。たとえば、1 分間の平均 CPU 使用率に使用します。
モニタを "continuous" として宣言する場合、スクリプトも無限ループで実行する必要があります。これにより、マシンエージェントプロセスが終了するまで、スクリプトは継続して実行されます。while [ 1 ]; do
...実際のスクリプトがここに入ります...sleep 60doneperiodic
システム パフォーマンス カウンタからデータを定期的にレポートするには、
periodicを選択します。periodic タスクは、デフォルトで 1 分ごとに実行され、データが集約されます。異なる頻度を指定するには、
execution-frequency-in-seconds要素を使用します。実行頻度は 60 未満にする必要があります。periodic 実行形式の場合、タイムアウト設定を指定することもできます(例に示しています)。<monitor-run-task>...<execution-style>periodic</execution-style> <execution-frequency-in-seconds>30</execution-frequency-in-seconds> <execution-timeout-in-secs>30</execution-timeout-in-secs>...</monitor-run-task><execution-frequency-in-seconds>を 300 秒(5 分)よりも大きい値に設定しないでください。拡張機能では、少なくとも 5 分ごとにメトリックを収集する必要があります。スクリプトファイルの名前を、
monitor.xmlファイルの<file>要素に追加します。必ず正しいos-type属性を使用してください。os-type値は、System.getProperty("os.name")の呼び出しから返された値と一致する必要があります。<file os-type="your-os-type">{script file name}</file>スクリプトの相対パスまたは絶対パスのいずれかを使用できます。
ステップ 1 で作成したサブディレクトリへの monitor.xml ファイルのコピー
マシンエージェントの再起動
必須のエージェントプロパティ
controller-info.xml ファイルおよびコマンドラインのエージェントの start コマンドで、エージェントが正しく設定されていることを確認します。「データベースエージェントの構成プロパティ」を参照してください。
Machine Agentを再起動すると、ログファイルに次のメッセージが表示されます。
Executing script [<script_name>] on the console to make sure your changes work with the machine agent.
モニタリング拡張スクリプトの実行の確認
拡張機能の実行を確認するには、少なくとも 1 分間待ってから、Metric Browserでメトリックデータを確認します。
これらのメトリックのいずれかに基づいてアラートを作成できるようになりました。
例:UNIX でのオープンファイル用のモニタリング拡張機能の作成
JVM のすべてのオープンファイルをモニタするためのカスタムモニタを作成するには、次の手順を実行します。
- カスタムモニタリポジトリに新しいディレクトリを作成します。
特定のプロセス名(たとえば、Author、Publish など)に対応するようにこの UNIX スクリプトを変更して、スクリプトファイルを作成します。
lookfor="<process name 1>" pid=`ps aux | grep "$lookfor" | grep -v grep | tr -s " " | cut -f2 -d' '` count1=`lsof -p $pid | wc -l | xargs` lookfor="<process name 2>" pid=`ps aux | grep "$lookfor" | grep -v grep | tr -s " " | cut -f2 -d' '` count2=`lsof -p $pid | wc -l | xargs` echo "name=JVM|Files|<process name 1>,value="$count1 echo "name=JVM|Files|<process name 2>,value="$count2
次の
monitor.xmlファイルを作成し、ステップ 2 で示した UNIX スクリプトをポイントします。<monitor> <name>MyMonitors</name> <type>managed</type> <description>Monitor open file count </description> <monitor-configuration> </monitor-configuration> <monitor-run-task> <execution-style>continuous</execution-style> <name>Run</name> <type>executable</type> <task-arguments> </task-arguments> <executable-task> <type>file</type> <file>openfilecount.sh</file> </executable-task> </monitor-run-task> </monitor>
例:Windows でのプロセスステータスを確認するためのモニタリング拡張機能の作成
- カスタムモニタリポジトリに新しいディレクトリを作成します。
特定のプロセス名(たとえば、Author、Publish など)に対応するようにこの Windows PowerShell スクリプトを変更して、スクリプトファイルを作成します。次の Windows PowerShell スクリプトは、プロセスインスタンスがマシンで実行されているかどうかを確認します。
Windows でカスタムメトリックを生成する場合、
.batファイルの代わりに PowerShell スクリプトおよび VBasic スクリプトを使用することを推奨します。
標準の Windows バッチ(.bat)スクリプトでメトリック名をエコーすると、名前が引用符で囲まれます。引用符が原因で、マシンエージェントはこれらのメトリックを無視します。PowerShell スクリプトと VBasic スクリプトにはこの問題はありません。$procName='<PROCESS_NAME>' $procStatus=Get-Process -Name $procName -ErrorAction SilentlyContinue if($procStatus) { write-output "name=Custom Metrics|Process|$procName|Running, value=1" } else { write-output "name=Custom Metrics|Process|$procName|Running, value=0" }次の
monitor.xmlファイルを作成し、ステップ 2 で示した Windows PowerShell スクリプトをポイントします。エラーが発生した場合は、「例:カスタマイズされたコマンドと引数を使用してマシンエージェントのカスタム拡張機能を実行」を試してみてください。<monitor> <name>MyMonitors</name> <type>managed</type> <description>Monitor open file count </description> <monitor-configuration> </monitor-configuration> <monitor-run-task> <execution-style>continuous</execution-style> <name>Run</name> <type>executable</type> <task-arguments> <argument name="" value="-Command"/> <argument name="" value="C:\\absolute\\path\\to\\powershell\\script\\mp.ps1"/> </task-arguments> <executable-task> <type>command</type> <command>C:\\absolute\\path\\to\\powershell\\executable\\powershell.exe</command> </executable-task> </monitor-run-task> </monitor>CODE
マシンエージェントに PowerShell プログラムを提供していて、カスタムメトリックを表示できない場合は、次の手順を実行します。
PowerShell スクリプトと
monitor.xmlファイルを作成したフォルダと同じフォルダに.batファイルを作成します。Example .bat file
process_checker.batCODE次のコードの行を
.batファイルに追加します。正しい PowerShell スクリプトファイル名を使用していることを確認します。この例では、PowerShell スクリプトファイル名はprocess_status_checker.ps1です。@echo off Powershell.exe -executionpolicy remotesigned -File process_status_checker.ps1CODE次のコードの行を
monitor.xmlファイルに追加します。正しい.batファイル名を使用していることを確認します。この例では、.bat ファイル名はprocess_checker.batです。<monitor> <name>MyMonitors</name> <type>managed</type> <description>Monitor process status</description> <monitor-configuration> </monitor-configuration> <monitor-run-task> <execution-style>periodic</execution-style> <execution-frequency-in-seconds>60</execution-frequency-in-seconds> <execution-timeout-in-secs>60</execution-timeout-in-secs> <name>MyMonitors</name> <type>executable</type> <task-arguments></task-arguments> <executable-task> <type>file</type> <file os-type=“windows”>process_checker.bat</file> </executable-task> </monitor-run-task> </monitor>CODE
例:カスタマイズされたコマンドと引数を使用してマシンエージェントのカスタム拡張機能を実行
デフォルトでは、マシンエージェントはシェルスクリプトとして bash シェルスクリプトを実行します。この例は、bash シェルスクリプトを bash スクリプトとして実行する方法を示します。
スクリプト example.shでは、以下の monitor.xml ファイルを作成するとスクリプトが ./example.sh として実行されます。
<monitor>
<name>HardwareMonitor</name>
<type>managed</type>
<enabled>false</enabled>
<enable-override os-type="solaris">true</enable-override>
<enable-override os-type="sunos">true</enable-override>
<description>Monitors system resources - CPU, Memory, Network I/O, and Disk I/O.
</description>
<monitor-configuration>
</monitor-configuration>
<monitor-run-task>
<execution-style>continuous</execution-style>
<name>Run</name>
<type>executable</type>
<task-arguments>
</task-arguments>
<executable-task>
<type>file</type>
<file>example.sh</file>
</executable-task>
</monitor-run-task>
</monitor>
スクリプトを "bash example.sh" として実行するには:
以下に示すように
monitor.xmlファイルを変更します。<task-arguments>オプションと<executable-task>オプションは実装の変更に合わせて調整します。<monitor> <name>ExampleMonitor</name> <type>managed</type> <enabled>true</enabled> <description>Monitors system resources - CPU, Memory, Network I/O, and Disk I/O. </description> <monitor-configuration> </monitor-configuration> <monitor-run-task> <execution-style>continuous</execution-style> <name>Run</name> <type>executable</type> <task-arguments> <argument name="arg1" is-required="true" default-value="example.sh"/> </task-arguments> <executable-task> <type>command</type> <command>bash</command> <arguments-pattern>$arg1</arguments-pattern> <wait-for-process-exit>true</wait-for-process-exit> </executable-task> </monitor-run-task> </monitor>CODE