モニタリング拡張スクリプト(別名、カスタムモニタまたはハードウェアモニタ)を作成して、AppDynamics がすでに収集してコントローラにレポートしているメトリックセットにカスタムメトリックを追加できます。スクリプトは、1 分ごとにカスタムメトリックをマシンエージェントに報告します。マシンエージェントは、これらのメトリックをコントローラに渡します。

このページでは、シェルスクリプトを使用してカスタムメトリックを追加する手順について説明します。この手順には例が含まれます。

既存の拡張機能の確認

独自の拡張機能を作成する前に、作成され、AppDynamics コミュニティのメンバー間で共有されている拡張機能を確認してください。新しい拡張機能が継続的に追加されています。他のユーザが必要なもの、または必要なものに近いものをすでに作成している可能性があります。必要なものに近いものをダウンロードし、変更をいくつか加えれば使用できる場合があります。 

無料ダウンロードについては、「AppDynamics Exchange」を参照してください。

エージェントの設定要件

controller-info.xml ファイルおよびコマンドラインのエージェントの start コマンドで、マシンエージェントが正しく設定されていることを確認します。詳細については、「マシンエージェントの設定プロパティ」を参照してください。

モニタリング拡張機能の作成

スクリプトを使用してモニタリング拡張機能を作成するには、次のようにします。

  1. スクリプトを作成します。「スクリプトファイルの作成」を参照してください。
  2. monitor.xml 設定ファイルを作成します。monitor.xml ファイルの作成」を参照してください。
  3. <machine_agent_home>/monitors に サブディレクトリ <your_extension_dir> を作成します。「マシンエージェントのモニタディレクトリの下へのディレクトリの作成」を参照してください。
  4. スクリプトファイルと monitor.xml ファイルを新しいサブディレクトリにコピーします。

  5. マシンエージェントを再起動します。

メトリックの定義

メトリック名は、同じメトリックパス内で一意である必要がありますが、メトリック階層全体に対して一意である必要はありません。AppDynamics では、メトリックブラウザに表示されるときに名前全体が表示されるように、短いメトリック名を使用することを推奨しています。メトリックをコントローラにアップロードするときにメトリック名の前にメトリックパスを付加します。

メトリック処理修飾子

コントローラには、メトリックの処理方法(集約、時間ロールアップ、および階層ロールアップ)を示すさまざまな修飾子があります。メトリック修飾子には、次の 3 つのタイプがあります。

  1. アグリゲータ修飾子
  2. 時間ロールアップ修飾子
  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" という名前のサブディレクトリを作成します。構造は次のようになります。

Machine Agent Subdirectory

スクリプトファイルの作成

スクリプトは、STDOUT にデータを書き込みます。マシンエージェントは、STDOUT を解析して、1 分ごとにコントローラに情報を送信します。スクリプトファイルを作成するには、次の手順を使用します。

Windows カスタムメトリックの場合、.bat ファイルよりも PowerShell と VBScript が推奨されます。

Windows でカスタムメトリックを生成する場合、AppDynamics では .bat ファイルの代わりに PowerShell スクリプトおよび VBasic スクリプトを使用することを推奨しています。
標準の Windows バッチ(.bat)スクリプトでメトリック名をエコーすると、名前が引用符で囲まれます。引用符が原因で、マシンエージェントはこれらのメトリックを無視します。PowerShell スクリプトと VBasic スクリプトにはこの問題はありません。

  1. メトリックの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>

  2. メトリックのカテゴリを定義します。次に例を示します。
    1. インフラストラクチャ(デフォルトのハードウェアメトリックについては、「マシンエージェント」を参照してください)
    2. JVM
    3. カスタムメトリック。カスタムメトリックには、パスのプレフィックスが必要です。
      - Custom Metrics
      - Server|Component:<tier-name-or-tier-id>
  3. カスタム メトリック プレフィックスが付加されたメトリックは、アプリケーション内のすべての階層で共通です。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

  4. この後、このメトリックを、他のタイプの 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 つのスクリプトを実行します。

  1. 実行スタイル(continuous または periodic)を選択します。

    実行形式

    説明

    continuous

    一定期間のデータ収集を平均する必要がある場合は、continuous を選択します。たとえば、1 分間の平均 CPU 使用率に使用します。
    モニタを "continuous" として宣言する場合、スクリプトも無限ループで実行する必要があります。これにより、マシンエージェントプロセスが終了するまで、スクリプトは継続して実行されます。

    while [ 1 ]; do
    ...実際のスクリプトは次のようになります...
    sleep 60
    done

    periodic

    システム パフォーマンス カウンタからデータを定期的にレポートするには、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 分ごとにメトリックを収集する必要があります。

  2. スクリプトファイルの名前を、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でメトリックデータを確認します。

これらのメトリックのいずれかに基づいてアラートを作成できるようになりました。

例:オープンファイル用のモニタリング拡張機能の作成

JVM のすべてのオープンファイルをモニタするためのカスタムモニタを作成するには、次の手順を実行します。

  1. カスタムモニタリポジトリに新しいディレクトリを作成します。
  2. スクリプトファイルを作成します。次の 2 つの例を確認できます。

    特定のプロセス名(たとえば、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


    次の Windows .bat の例では、マシンで Java プロセスが実行されている場合に、コントローラにメトリックがレポートされます。 


    Windows でカスタムメトリックを生成する場合、AppDynamics では .bat ファイルの代わりに PowerShell スクリプトおよび VBasic スクリプトを使用することを推奨しています。
    標準の Windows バッチ(.bat)スクリプトでメトリック名をエコーすると、名前が引用符で囲まれます。引用符が原因で、マシンエージェントはこれらのメトリックを無視します。PowerShell スクリプトと VBasic スクリプトにはこの問題はありません。

    SETLOCAL enabledelayedexpansion
    
    REM  Check to see if there is a java process running
    TASKLIST /FI "IMAGENAME eq java.exe" 2&gt;NUL | find /I /N "java.exe"&gt;NUL
    if "%ERRORLEVEL%"=="0" (
        SET metric="Custom Metrics|Process|java|Running,value=1"
        REM This strips the quotes that are added by the bat script
        REM so that the machine agent can understand the metric
        @echo !metric:"=!
    )


  3. 次の 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>