リサーチデベロップメントの たかはしとし( @doushiman_jp ) です。 洗車をするたびに雨が降るルーティーン、なんとかなりませんかね。
Azure Functions を使用していてアプリケーションの挙動を監視したい時があります。
例えば関数内の各処理ごとの処理時間をログ出力してボトルネックを探したりといった、ユーザーの操作などといった内部的な状態をログ化して診断、といった場合です。
そんな時は、Application Insights API を使ってログ出力をすると、後からAzure Portal のApplication Insights から、必要な範囲だけ切り出して確認したりといった、フィルタリングが簡単にできるのでとても便利です。
ここではFunctions(node.js)を例としています。
まずは、Azure Portal などからApplication Insightsリソースを作成し、接続文字列を取得します。 接続文字列はApplication Insights の構成-プロパティから確認できます。
次に、Functions のコード内からApplication Insights API をコード内から呼び出し、先ほど取得した接続文字列を使って、Application Insightsへの接続を行います。
const appInsights = require("applicationinsights"); appInsights.setup(process.env["APPINSIGHTSへの接続文字列"]).start() let logClient = appInsights.defaultClient;
ログ出力自体は簡単で、先程作成したログクライアントに対してログ出力を実行することで、Application Insights での確認が可能になります。
client.trackEvent({name: "my custom event", properties: {customProperty: "custom property value"}});
上記で、my custom event というname のログを出力できます。
ログを確認する場合ですが、Azure Portal上から確認可能です。
Portal上から先ほど作成したApplication Insights リソースに移動し、監視-ログを表示します。
先程のログは[customEvents] というItemType で出力されているので、customEventsをダブルクリックし、「実行」をクリックします。
すると、指定した時間の範囲内のログが「結果」欄に出力されていると思います。
先程ログ出力のコードでPropertiesに格納した情報は、customDimensions に出力されます。
これで、独自のログ出力が確認できますね。
先程custom Events をダブルクリックした際に「customEvents」と表示された部分があったかと思います(下図)。
ここは実は検索クエリになっていて、このクエリ文字列を変更することでフィルタリングが可能です。
例えば「name にfailure という文字列が含まれる」かつ「1時間以内に出力された」ログ、に限定したい場合、クエリを
customEvents | where name contains "failure" and timestamp > ago(1h)
とすることで、大量のログからフィルタリングした情報のみ取り出すことができます。
今回は2つの指定をand で繋げただけですが、複雑なクエリも指定可能なので非常に便利です。 意外とログを追っていくのって大変だったりするので、こうやってフィルタリングできるとかなり調査が捗りますよね。
ではでは。