Application Insights TrackEvent tidak pernah bertahan di Azure

Dec 17 2020

Saya mencoba menerapkan SDK untuk Node untuk melacak peristiwa khusus di basis kode kami. Layanan yang saya tulis dipanggil dari rantai metode asinkron dan berjalan dalam Fungsi Azure:

public async handleEvent(event: Event) {
    // Do stuff

    // Then report event
    this.reportEvent(event);
}

private reportEvent(event: Event) {
    if (this._applicationInsightsService) {
        this._applicationInsightsService.reportEvent(event)
        this._context.log("Successfully sent event to application insights")
    } else {
        this._context.log("Could not send metrics to application insights, service is not defined")
    }
}

Layanan itu sendiri terlihat seperti ini:

export class ApplicationInsightsService {

    private _instance: ApplicationInsights

    private constructor(connectionString: string) {
        this._instance = new ApplicationInsights({ 
            config: {
                connectionString: connectionString
            } 
        })
        this._instance.loadAppInsights()
    }

    public static create() {
        if (process.env.APPLICATION_INSIGHTS_CONNECTION_STRING === undefined) {
            throw new Error("APPLICATION_INSIGHTS_CONNECTION_STRING undefined, cannot report metrics")
        }
        return new ApplicationInsightsService(process.env.APPLICATION_INSIGHTS_CONNECTION_STRING)
    }

    public reportEvent(event: Event) {
        this._instance.trackEvent({
            name: event.type,
            properties: event
        })
        this._instance.flush()
    }
}

Namun kejadian yang saya kirim tidak pernah terlihat di Azure Portal saat saya membuat kueri customEventstabel. Saya telah menunggu> 10 menit karena saya tahu mungkin ada penundaan dalam wawasan aplikasi.

Saya sudah mencoba melakukan panggilan ke flush asynchronous sebagai gantinya dan menggunakan awaitsaat memanggilnya, tetapi itu juga tidak membantu:

Promise.resolve(this._instance.flush(true))

Variabel lingkungan APPLICATION_INSIGHTS_CONNECTION_STRINGmemiliki format InstrumentationKey=xxx;IngestionEndpoint=https://westeurope-1.in.applicationinsights.azure.com/.

Masalah saya tampaknya sangat mirip dengan C # Application Insight Failure: TrackEvent Tidak mengirim ke Azure Application Insight , tetapi apakah saya benar - benar perlu tidur / waktu habis untuk memperhitungkan pengaturan waktu?

Output log ketika saya menjalankan ini tidak mengatakan apa-apa, tidak ada kesalahan yang dihasilkan dan tidak ada yang mati:

[12/17/2020 11:06:10 AM] Executing 'Functions.EventHandler' (Reason='New ServiceBus message detected on 'integrator-events'.', Id=812ccf8f-3cd3-4c75-8ab4-20614556d597)
[12/17/2020 11:06:10 AM] Trigger Details: MessageId: 125f60d79c5a4b029a417bee68df95d7, DeliveryCount: 1, EnqueuedTime: 12/17/2020 11:06:11 AM, LockedUntil: 12/17/2020 11:07:11 AM, SessionId: (null)
[12/17/2020 11:06:10 AM] Received event
[12/17/2020 11:06:10 AM] Successfully sent event to application insights
[12/17/2020 11:06:10 AM] Executed 'Functions.EventHandler' (Succeeded, Id=812ccf8f-3cd3-4c75-8ab4-20614556d597)

Apa yang saya lewatkan?

Memperbarui

Begitu rupanya ada JavaScript dan sebuah Node SDK untuk membuat sesuatu yang lebih membingungkan. Saya akan mencoba dengan Node SDK, tetapi saya tidak mengerti mengapa yang pertama tidak berfungsi.

Larutan

Konstruksi berikut dari ApplicationInsightsService berfungsi:

// Previously:
// import { ApplicationInsights } from "@microsoft/applicationinsights-web"
import { TelemetryClient } from "applicationinsights"

export class ApplicationInsightsService {

    private _instance: TelemetryClient

    private constructor(connectionString: string) {
        this._instance = new TelemetryClient(connectionString)
    }
}

Untuk aplikasi node:

Lakukan :npm install --save applicationinsights

Jangan :npm install --save @microsoft/applicationinsights-web

Jawaban

jokarl Dec 17 2020 at 18:42

Konstruksi ApplicationInsightsServicepekerjaan berikut:

// Previously:
// import { ApplicationInsights } from "@microsoft/applicationinsights-web"
import { TelemetryClient } from "applicationinsights"

export class ApplicationInsightsService {

    private _instance: TelemetryClient

    private constructor(connectionString: string) {
        this._instance = new TelemetryClient(connectionString)
    }
}

Untuk aplikasi node:

Lakukan :npm install --save applicationinsights

Jangan :npm install --save @microsoft/applicationinsights-web