Knowledge Base: Practical Setup Tips for Horde Analytics & Performance Trends

This Knowledge Base article will highlight the practical steps to leveraging Horde’s analytics capabilities, some of the engine’s essential telemetry tools, and common debugging tips therein.

https://dev.epicgames.com/community/learning/knowledge-base/dOrL/unreal-engine-practical-setup-tips-for-horde-analytics-performance-trends

Very helpful guide. The practical setup and debugging tips make it much easier to understand Horde analytics and identify performance bottlenecks before they become bigger issues. Thanks for sharing! :+1:

Thank you. I have been trying to set this up for the past 3 days, the automated testing framework results generate ok locally into a SummaryTable.html, but I cannot send them reliably to Horde. It seems like it was made with P4 in mind, and I am not using that.

My goal: I just want to run the RunLocalTests and see the results in the Horde Performance Trends dashboard, and not look through it via the SummaryTable.html.

I am using the RunLocalTest and then sending it to horde with:

dotnet “C:\Unreal5.8\Engine\Binaries\DotNET\CsvTools/PerfReportTool.dll” -csvdir “C:\Unreal5.8\GameName\Saved\Performance\SequenceTest\Perf\Win64\CSV” -reportType ClientPerf -reportxmlbasedir “C:\Unreal5.8\Engine\Plugins\Performance\AutomatedPerfTesting\Build\Scripts\PerfReport” -summaryTable KeyStats -noDetailedReports -csvTable -summaryTableDataToTelemetry -telemetryTestIdentity “GameName”

The horde receives it fine (seemingly), but the resulting performance trends dashboard only shows one datapoint.

root@horde:~# docker logs -f horde-server | grep “Created table”
[10:23:54 inf] Created table horde.state_performance_key_stats from schema with 49 columns
[10:23:54 inf] Created table horde.state_performance_key_stats from schema with 49 columns
[10:23:54 inf] Created table horde.state_performance_key_stats from schema with 49 columns

Below are me server.json and globals.json (using placeholder db names and pws, this is running in local isolated proxmox LXC debian instance anyway).

The PerfReportTool does not fill the stream value, so the dashboard was not viewable, the data was wrong, and I wrote a simple “data backfill” for the missing db values. But still, the values are wrong… overall, settings this up was a complete headache and Matt Oztalay completely baited me with his enthusiasm, because it seemed like it is working right now with his local tests scripts and it gets sent to Horde automatically! IT DOES NOT.

Please, write a more comprehensive guide or give me a tip how to put this together. I just want to run the RunLocalTests and see the results in the Horde Performance Trends dashboard, and not look through it via the SummaryTable.html.

//server.json
{
“Horde”: {
“AuthMethod”: “Anonymous”,
“ConfigPath”: “globals.json”,
“Perforce”: [
],
“Telemetry”: [
{
“Type”: “Mongo”,
“RetainDays”: 1
}
],
“UseLocalPerforceEnv”: false,
“Plugins”: {
“Analytics”: {
“Enabled”: true,
“Sinks”: {
“Mongo”: { “Enabled”: true, “RetainDays”: 1 }
}
},
“StructuredAnalytics”: {
“Enabled”: true,
“BackendName”: “ClickHouse”,
“DisableStreamBasedAuth”: true
},
“PerformanceTrends”: {
“Enabled”: true,
“DisableStreamBasedAuth”: true
},
“ClickHouseTelemetry”: {
“Enabled”: true,
“ConnectionString”: “Host=horde-clickhouse;Port=8123;Database=my_database;Username=username;Password=password”,
“AutoCreateTables”: true
}
}
}
}

and globals.json

root@horde:~# cat globals.json
{
“version”: 2,
“include”: [
{ “path”: “$(HordeDir)/Defaults/default.global.json” }
],
“plugins”: {
“clickhousetelemetry”: {
“ConnectionString”: “Host=horde-clickhouse;Port=8123;Database=my_database;Username=username;Password=password”,
“AutoCreateTables”: true
},
“structuredanalytics”: {
“BackendName”: “ClickHouse”,
“DisableStreamBasedAuth”: true
},
“performancetrends”: {
“BackendName”: “ClickHouse”,
“DisableStreamBasedAuth”: true
},
“analytics”: {
“stores”: [
{
“id”: “engine”,
“include”: [
{ “path”: “$(HordeDir)/Defaults/default-metrics.telemetry.json” },
{ “path”: “$(HordeDir)/Defaults/default-views.telemetry.json” }
]
}
]
}
}
}