私は Azure Function で少し遊んでいます: ほとんどの場合、既存の Web ジョブを Azure Functions に移行しようとしていますが、今度は自分の関数の 1 つに Application Insights を統合する時が来ました。
したがって、基本的に必要なインスタンスは 1 つだけですTelemetryClient
が、これは、アプリケーションが停止したときにメモリ内バッファーをフラッシュできることを前提としています。
私は TimerTrigger を使用しましたが、それはテスト目的のためだけでした。
Microsoft.ApplicationInsights nuget パッケージ (この SO 投稿から)を参照しましたが、run.csx
ファイルは次のようになります。
using System;
using Microsoft.ApplicationInsights;
using Microsoft.Azure.WebJobs;
public static void Run(TimerInfo myTimer, TraceWriter log)
{
MyTimerJob.TelemetryClient.TrackEvent("AzureFunctionTriggered");
log.Verbose($"C# Timer trigger function executed at: {DateTime.Now}");
}
public static class MyTimerJob
{
public static readonly TelemetryClient TelemetryClient;
static MyTimerJob(){
TelemetryClient = new TelemetryClient()
{ InstrumentationKey = "MyInstrumentationKey" };
// When it shutdowns, we flush the telemty client.
new WebJobsShutdownWatcher().Token.Register(() =>
{
TelemetryClient.TrackEvent("TelemetryClientFlush");
TelemetryClient.Flush();
});
}
}
この実装は少しトリッキーです...
TelemetryClient
同じインスタンスを再利用することを確実にするためのスタティックがあります。WebJobsShutdownWatcher
TelemetryClient をフラッシュできるように、ホストの停止を検出するためにを使用してみました。
アプリケーションのシャットダウンをシミュレートするため"test"
に、基になる Web アプリでアプリ設定を作成し、ホストを再起動するときにそれを変更します。
残念ながら、これは機能しません..."TelemetryClientFlush"
アプリのインサイト ダッシュボードから、名前の付いたイベントが表示されませんでした:
だから、紺碧の機能ホストが停止しているときにインターセプトする方法があるかどうか疑問に思っていますか?