LoginSignup
4
2

More than 5 years have passed since last update.

Application InsightsをPHPのシステムに組み込む ~PHP SDKの使い方編~

Posted at

Application InsightsをPHPのシステムに組み込む ~基本情報とテレメトリの整理編~ - Qiita
の続きです。

SDKの組み込み

PHPのライブラリなのでcomposerで組み込みます。

$ composer require microsoft/application-insights

ちなみにGithubは以下
https://github.com/Microsoft/ApplicationInsights-PHP

今現在の最新バージョンはv0.4.4で、PHPのバージョンが5.4.2以上である必要があります。(あまりマメにメンテされているとは言い難いです…)
簡単な使い方はREADME.mdにある通りなんですが、以下でもう少し細かくパラメータなどを見ていきます。

コンテキストの種類、プロパティ一覧

その前にコンテキストってなに

Azure Application Insights Telemetry のデータ モデル - テレメトリ コンテキスト | Microsoft Docs

要は様々なテレメトリで共通的にセットしておけるProperty
調査しきれていないので、未使用部分について説明を割愛してます

  • Session
    • id(セッションID)
      省略してフレームワークに任せる
    • isFirst(調査中
      用途不明、未使用
  • User
    • id(ユーザID)
      システムのユーザIDは認証通過後にauthUserIdにセットするので今の所未使用
    • accountId(アカウントID)
      ログインIDをセットするか未使用にするか検討中
    • authUserId(認証ユーザID)
      認証通過後にシステムのユーザIDをセット
  • Application
    • ver(バージョン情報)
      クライアント側での工夫も必要になるが、Application.verにクライアントのバージョン情報を乗せておくとリリース後にクライアントがキャッシュのせいでうまく動いていないなどのトラブルの確認ができる
  • Location
    • ip(クライアントIPアドレス)
      省略でそのままデータが表示される
  • Operation
    • id(操作ID)
      省略しておくとAPI単位でいい感じにグルーピングされるので便利
    • parentId(親操作ID)
      処理の入れ子を意識していないため、未使用
    • name(操作名)
      クライアントから取得した操作の概要文字列をセットしておくと調査が捗る
    • syntheticSource(代理データのソース)
      用途不明、未使用
    • correlationVector(調査中
      用途不明、未使用
  • Device
    使用用途なし(自動設定に任せる)
  • Cloud
    使用用途なし(自動設定に任せる)
  • Internal
    使用用途なし(自動設定に任せる)

テレメトリ発行時のパラメーター詳細

Trace

$telemetryClient->trackMessage($message, [$severityLevel = NULL], [$properties = NULL]);
  • message
    ログの内容
  • severityLevel
    ログレベル的なもの
    定数が\ApplicationInsights\Channel\Contracts\Message_Severity_Levelに用意されてあるのでそれを使う
    • Verbose(冗長)
    • Information(情報)
    • Warning(警告)
    • Error(エラー)
    • Critical(致命的)
  • properties
    付加情報(Array1
    ここで追加した値はAzure PortalのFilterの条件として使える

Request

$telemetryClient->trackRequest($name, $url, $startTime, [$durationInMilliseconds = 0], [$httpResponseCode = 200], [$isSuccessful = true], [$properties = NULL], [$measurements = NULL]);

もしくは以下のように呼出前後に分けてCallすることも可能

$requestData = $telemetryClient->beginRequest($name, $url, $startTime);
  // 外部API呼出処理
$telemetryClient->endRequest($requestData, [$durationInMilliseconds = 0], [$httpResponseCode = 200], [$isSuccessful = true], [$properties = NULL], [$measurements = NULL]);
  • name
    リクエスト名(自由につけて構わない)
  • url
    リクエストURL
  • startTime
    呼出時刻(UnixTime)
  • durationInMilliseconds
    所要時間(ミリ秒)
  • httpResponseCode
    HTTPのレスポンスコード
  • isSuccessful
    呼出の成否(httpResponseCodeでもだいたい分かるとは思うが…)
  • properties
    付加情報(Array1
    ここで追加した値はAzure PortalのFilterの条件として使える
  • measurements
    計測情報(Array2
    ここで追加した値はAzure PortalのFilterの条件として使える

PageView

現状のシステムで使っていないため、割愛します

Custom Event

$telemetryClient->trackEvent($name, [$properties = NULL], [$measurements = NULL]);
  • name
    テレメトリの名称
    特に決まりはなく、文字列で自由につけられる模様
  • properties
    付加情報(Array1
    ここで追加した値はAzure PortalのFilterの条件として使える
  • measurements
    計測情報(Array2
    ここで追加した値はAzure PortalのFilterの条件として使える

Exception

$telemetryClient->trackException($exception, [$properties = NULL], [$measurements = NULL]);
  • exception
    PHPのExceptionを継承したinstance
  • properties
    付加情報(Array1
    ここで追加した値はAzure PortalのFilterの条件として使える
  • measurements
    計測情報(Array2
    ここで追加した値はAzure PortalのFilterの条件として使える

Dependency

$telemetryClient->trackDependency(
        $name,
        [$type = ""],
        [$commandName = NULL],
        [$startTime = NULL],
        [$durationInMilliseconds = 0],
        [$isSuccessful = true],
        [$resultCode = NULL],
        [$properties = NULL]);
  • name
    テレメトリの名称
    特に決まりはなく、文字列で自由につけられる模様
    DBのクエリー情報では"Query"を指定している
  • type
    テレメトリの種別
    こちらも特に決まりはなく、文字列で自由につけられる模様
    DBのクエリー情報では"MySQL"を指定している
  • commandName
    外部システムで実行するコマンドの名称
    DBのクエリー情報ではクエリーそのものを指定している
  • startTime
    外部システム呼び出し時間(UnixTime)
    Azure Portal上でタイムライン形式で表示する際に有益
  • durationInMilliseconds
    処理時間(ミリ秒)
    Azure Portal上でタイムライン形式で表示する際に有益
  • isSuccessful
    呼出が成功したか(Boolean)
  • resultCode
    結果コード(Integer)
  • properties
    付加情報(Array1
    ここで追加した値はAzure PortalのFilterの条件として使える

メモ

  • すべてのpropertiesに共通的に値を入れる場合はラッピングクラス化する

  1. 1次元配列で、value側は文字列を使用できる(多次元配列にするとログ自体が出力されなくなる)。Key名は英数字で大文字で始めたほうがAzure Portal上での見た目がいい。 

  2. 1次元配列で、value側は数値(double)を使用できる(多次元配列にするとログ自体が出力されなくなる)。Key名は英数字で大文字で始めたほうがAzure Portal上での見た目がいい。 

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2