このページでは、PHP アプリケーションのインフォメーションポイントを定義する方法について説明します。

インフォメーションポイントは、ユーザが構成したメソッドとコードデータポイントの主要パフォーマンスメトリックとカスタムメトリックを反映します。

PHPのインフォメーションポイントについて

PHP のインフォメーションポイントを作成するには、次の手順を実行します。

  1. JSON 表記を使用してインフォメーションポイントを定義。
  2. 定義で、インフォメーションポイントのメソッドを指定。
  3. オプションで、カスタムメトリックとしてキャプチャするコード内のポイント(パラメータ値や戻り値など)を指定。 
  4. [More ] > [ Information Points] に移動し、インフォメーションポイントを追加。 
  5. エージェントタイプとして [PHP] を選択し、定義を [Information Point] テキストボックスに貼り付けます。

Java または .NET アプリケーションの場合、定義の要素は [Add Information Point] ダイアログで利用可能な構成オプションに対応しています。

しかし、PHP ではインフォメーションポイントが JSON 構文で定義されるため、構成オプションにいくつかの制限があります。1 つは、クラスの一致がクラス名ベースの一致のみに制限されることです(スーパークラスの一致や注釈の一致は使用できません)。また、一致するメソッドに対して 1 つの一致条件しか定義できません(一致条件でパラメータ値または戻り値を検査することにより、メソッドの一致を絞り込みます)。

カスタムメトリックを構成しない場合、インフォメーションポイントは、一致したメソッドの包括的な KPI(応答時間、コール数、1 分あたりのコール数、エラー数、1 分あたりのエラー数)をキャプチャします。カスタムメトリックは、メソッドの戻り値、メソッドのパラメータ値、または呼び出されたオブジェクトの値をキャプチャすることで、インフォメーションポイントを拡張します。   

はじめに

コントローラ UI でインフォメーションポイントを作成するには、Configure Information Points 権限を持つユーザとしてログインする必要があります。詳細については、カスタムロールの作成と管理を参照してください。 

メソッドの一致条件

一致の定義は、インフォメーションポイントとしてキャプチャする値に関連付けられたメソッドを指定します。一致の定義では、メソッドを必ず指定しますが、メソッドを含むクラスと絞り込み用の一致条件を指定することもできます。一致条件によって、メソッドパラメータの値、戻り値、または呼び出されたオブジェクトの戻り値を検査できます。

以下のテンプレートを使って一致の定義を作成します。

{
  "probe": {
    "phpDefinition": {
      "classMatch": {
        "type": "MATCHES_CLASS",
        "classNameCondition": {
          "type": "EQUALS",
          "matchStrings": [
            "<class name>"
          ]
        }
      },
      "methodMatch": {
        "methodNameCondition": {
          "type": "EQUALS",
          "matchStrings": [
            "<method name>"
          ]
        }
      }
    }
  }
}

次の方法で JSON オブジェクトを編集します。

  • classMatchはオプション。一致するクラスを指定しない場合は、phpDefinition オブジェクトから classMatch オブジェクトを削除。
  • クラスの一致を使用する場合、classNameCondition 一致文字列の値をクラス名に設定。
    • クラスは、インスタンス化され呼び出されたファイルとは別のファイルとして定義されていること。
    • クラス名がネームスペースに定義される場合、エスケープバックスラッシュでネームスペースのバックスラッシュをエスケープ。
  • methodMatchは必須。methodNameCondition 一致文字列の値をメソッド名に設定。

PHPのインフォメーションポイントでは、以下の値が必要です。

  • classMatch タイプ: MATCHES_CLASS
  • classNameCondition タイプ: EQUALS
  • methodNameCondition タイプ: EQUALS

たとえば、以下の JSON はクラス名が CheckoutManager、メソッド名が processPayment と等しいクラスにインフォメーションポイントを作成します。

{
  "probe": {
    "phpDefinition": {
      "classMatch": {
        "type": "MATCHES_CLASS",
        "classNameCondition": {
          "type": "EQUALS",
          "matchStrings": [
            "Bundy\\ShoesBundle\\Entity\\CheckoutManager"
          ]
        }
      },
      "methodMatch": {
        "methodNameCondition": {
          "type": "EQUALS",
          "matchStrings": [
            "processPayment"
          ]
        }
      }
    }
  }
}

主にメソッドの KPI メトリックをキャプチャする目的でインフォメーションポイントを作成する場合は、メソッドのクラスを定義します。しかし、コードメトリックを実装するためにインフォメーションポイントを作成する場合は、一致するメソッド名を指定するだけで済みます。

次の例は、メソッドの呼び出し回数を追跡するメソッド一致を示しています。

{
  "probe": {
    "phpDefinition": {
      "methodMatch": {
        "methodNameCondition": {
          "type": "EQUALS",
          "matchStrings": [
            "deleteCartItems"
          ]
        }
      }
    }
  }
}

一致条件

matchConditions オブジェクトで定義される)一致条件を使用して、パラメータ値、戻り値、または呼び出されたオブジェクトから返された値に基づく一致条件を指定することで、メソッドの一致基準を絞り込むことができます。 

一致条件はオプションですが、インフォメーションポイントに1つだけ設定できます。一致条件を設定しない場合、インフォメーションポイントには一致したメソッドのすべての呼び出しが含まれます。 

条件は、一致タイプと、比較するデータを定義する比較演算子で構成されます。一致タイプは以下のとおりです。

  • EQUALS
  • NOT_EQUALS
  • LT
  • GT
  • LE 
  • GE
  • 以下ではありません。
  • および
  • または

比較演算子は、演算の左辺(lhs)と右辺(rhs))を定義する式ノードです。これには次のものが含まれます。

  • タイプ:ENTITYSTRING、または INTEGER
  • 値:entityValuestringValue、または integerValue

タイプが ENTITY の場合、entityValue には INVOKED_OBJECTRETURN_VALUE、または PARAMETER のいずれかのタイプが含まれています。entityValue のタイプが PARAMETER の場合、parameterIndex は照合するパラメータのゼロベースの数値インデックスを示します。たとえば、メソッドが 2 つのパラメータ(1 つ目が文字列、2 つ目が整数)を取る場合、parameterIndex を 0 にすると文字列と照合され、parameterIndex を 1 にすると整数値と照合されます。

次の例のインフォメーションポイントは、(パラメータインデックス 1 の)2 つ目のパラメータが VISA と等しい processPayment メソッドの呼び出しとのみ一致します。

{
  "probe": {
    "phpDefinition": {
      "methodMatch": {
        "methodNameCondition": {
          "type": "EQUALS",
          "matchStrings": [
            "processPayment"
          ]
        },
        "matchCondition": {
          "type": "EQUALS",
          "comparisonOp": {
            "lhs": {
              "type": "ENTITY",
              "entityValue": {
                "type": "PARAMETER",
                "parameterIndex": 1
              }
            },
            "rhs": {
              "type": "STRING",
              "stringValue": "VISA"
            }
          }
        }
      }
    }
  }
}

メトリックの定義

インフォメーションポイントによってキャプチャされるデータのカスタムメトリックを定義するには、インフォメーションポイント定義で metricDefinitions オブジェクトを使用します。カスタムメトリックは、メトリックブラウザと、インフォメーションポイントのダッシュボードに表示されます。AppDynamics REST APIを使用して、カスタムメトリックに基づいた正常性ルールを作成し、カスタムメトリック値を取得できます。

1つのインフォメーションポイントに複数のカスタムメトリックがあることも可能です。例えば、平均に基づくメトリックと、インフォメーションポイントの集計値(合計)に基づくメトリックを使用できます。

metricDefinitions オブジェクトは 1 つ以上の定義で構成され、各定義は以下のような構造になっています。

  • 名前
  • ロールアップタイプ(AVERAGE または SUM
  • タイプ(ENTITYSTRING、または INTEGER)と値(entityValuestringValue、または integerValue)からなるデータ

タイプが ENTITY の場合、entityValue のタイプは INVOKED_OBJECTRETURN_VALUE、または PARAMETER です。entityValue のタイプが PARAMETER の場合、ゼロベースの parameterIndex は一致の対象となるパラメータを示します。戻り値およびパラメータメトリックは配列にはできません。 

たとえば以下の metricDefinitions オブジェクトは、2 つのカスタムメトリック(処理された Visa の支払い合計を報告する VisaTotal と、処理された Visa の支払いの平均値を報告する VisaAverage)を定義します。

"metricDefinitions": [
    {
      "name": "VisaTotal",
      "rollup": "SUM",
      "data": {
        "type" : "ENTITY",
        "entityValue": {
          "type": "RETURN_VALUE"
        }
      }
    },
    {
      "name": "VisaAverage",
      "rollup": "AVERAGE",
      "data": {
        "type" : "ENTITY",
        "entityValue": {
          "type": "RETURN_VALUE"
        }
      }
    }
    
  ]

JSONインフォメーションポイントの構成サンプル

以下の例は、PHPインフォメーションポイントウィンドウのJSONテキストフィールドにコピーして貼り付けられます。VisaTotalVisaAverage という名前の 2 つのメトリックが作成されます。

{
  "probe": {
    "phpDefinition": {
      "classMatch": {
        "type": "MATCHES_CLASS",
        "classNameCondition": {
          "type": "EQUALS",
          "matchStrings": [
            "CheckOutManager"
          ]
        }
      },
      "methodMatch": {
        "methodNameCondition": {
          "type": "EQUALS",
          "matchStrings": [
            "processPayment"
          ]
        },
        "matchCondition": {
          "type": "EQUALS",
          "comparisonOp": {
            "lhs": {
              "type": "ENTITY",
              "entityValue": {
                "parameterIndex": 1,
                "type": "PARAMETER"
              },
              "rhs": {
                "type": "STRING",
                "stringValue": "VISA"
              }
            }
          }
        }
      }
    }
  },
  "metricDefinitions": [
    {
      "name": "VisaTotal",
      "rollup": "SUM",
      "data": {
        "entityValue": {
          "type": "RETURN_VALUE"
        },
        "type": "ENTITY"
      }
    },
    {
      "name": "VisaAverage",
      "rollup": "AVERAGE",
      "data": {
        "type": "ENTITY",
        "entityValue": {
          "type": "RETURN_VALUE"
        }
      }
    }
  ]
}