Apache JMeter™のSummary ReportをAzure Application Insights / Log Analyticsで表示する

Azure Application Insights / Log AnalyticsでJMeterのSummary Reportを見る方法を紹介します。

jmeter-backend-azureプラグインを利用してMeterでのテスト結果をAzure Application Insightsに送ることで、Application InsightsやLog AnalyticsでJMeterのテスト結果を参照することができるようになります。

今回はApplication InsightでJMeterのSummary Reportを表示してみましょう。

jmeter-backend-azureプラグインの導入と設定

こちらの記事を参照してください。

Application Insights / Log AnalyticsでのSummary Reportの表示

今回はApplication InsightsのログでSummary Reportを表示します。 Log Analyticsのブックでする場合はテーブル名や列名が異なるので、以下の対応表に従って置き換えてください。

- Application Insights Log Analytics
テーブル requests AppRequests
name Name
success Success
duration DurationMs
customDimensions Properties
  • 表示/分析対象の絞り込み
    requests (Application Insights) / AppRequests (Log Analytics)テーブルにはApplication Insightsに送った全てのテスト結果や、JMeterではない他のログも含まれている可能性があります。
    1つのテストのみを対象とした結果を表示/分析したい場合は、nameとcustomDimensions.TestStartTimeで、絞り込むことができます。(テストの度にBackend ListenerのtestNameを変更すればnameのみで絞り込むこともできます。)

    以下のKustoでは、nameとTestStartTimeの一覧を取得します。

    requests
    | extend
        TestStartTime = tostring(customDimensions.TestStartTime)
    | distinct TestStartTime, name
    | extend
        formattedTestStartTime
            = format_datetime(
                unixtime_milliseconds_todatetime(tolong(TestStartTime)),
                'yyyy/MM/dd HH:mm:ss'
            )
    | sort by TestStartTime desc
    

    テスト一覧

  • Summary Report
    先ほど取得したnameとTestStartTimeを指定して、対象となるテストのSummary Reportを表示します。

    let testName = "<先ほど取得したnameの値>";
    let TestStartTime = "<先ほど取得したTestStartTimeの値>";
    requests
    | where name == testName
        and customDimensions.TestStartTime == TestStartTime
    | summarize
        Samples = count(),
        Average = tolong(avg(duration)),
        Min = min(duration),
        Max = max(duration),
        StdDev = stdevp(duration),
        ErrorCount = countif(success == false),
        ReceivedKB = sum(tolong(customDimensions.Bytes)),
        SentKB = sum(tolong(customDimensions.SentBytes)),
        StartTime = min(tolong(customDimensions.SampleStartTime)),
        EndTime = max(tolong(customDimensions.SampleEndTime))
        by Label = tostring(customDimensions.SampleLabel)
    | extend s = 0
    | union (
    requests
    | where name == testName
        and customDimensions.TestStartTime == TestStartTime
    | summarize
        Samples = count(),
        Average = tolong(avg(duration)),
        Min = min(duration),
        Max = max(duration),
        StdDev = stdevp(tolong(duration)),
        ErrorCount = countif(success == false),
        ReceivedKB = sum(tolong(customDimensions.Bytes)),
        SentKB = sum(tolong(customDimensions.SentBytes)),
        StartTime = min(tolong(customDimensions.SampleStartTime)),
        EndTime = max(tolong(customDimensions.SampleEndTime))
    | extend Label = 'TOTAL', s = 9
    )
    | extend
        tp = Samples / ((EndTime - StartTime) / 1000.0),
        KBPeriod = (EndTime - StartTime) * 1024 / 1000.0
    | sort by s asc
    | project
        Label, Samples, Average,
        Min, Max,
        ['Std. Dev.'] = round(StdDev, 2),
        ['Error %'] = strcat(round(ErrorCount * 100.0 / Samples, 2), '%'),
        ['Throughput'] = iif(tp < 1.0,
                            strcat(round(tp * 60, 1), '/min'),
                            strcat(round(tp, 1), '/sec')
                        ),
        ['Received KB/sec'] = round(ReceivedKB / KBPeriod, 2),
        ['Sent KB/sec'] = round(SentKB / KBPeriod, 2),
        ['Avg. Bytes'] = round(ReceivedKB / toreal(Samples), 1)
    | project-reorder
        Label, Samples, Average, Min, Max,
        ['Std. Dev.'], ['Error %'], ['Throughput'],
        ['Received KB/sec'], ['Sent KB/sec'], ['Avg. Bytes']
    

    Application Insights Summary ReportJMeter Summary Report

以上、JMeterのSummary ReportをAzure Application Insights / Log AnalyticsでKusto queryを利用して表示する方法を紹介しました。

【宣伝】
AzureにJMeterの分散テスト環境を簡単構築
『Load Tester Powered by Apache JMeter™』