Required Software
Statistic and metric logging in TrinityCore is implemented using two projects, InfluxDB, a time-series data storage and Grafana, graph and a dashboard builder for visualizing time series metrics.
Installing InfluxDB
Download and install InfluxDB from https://influxdata.com/downloads/#influxdb for your platform
Windows is not currently available officially but an older working version can be found at https://github.com/mvadu/influxdb/releases
Create an user and a database for TC using the Influx CLI
CREATE DATABASE worldserver CREATE USER grafana WITH PASSWORD 'grafana' GRANT READ ON worldserver TO grafana
Installing Grafana
- Download and install Grafana from http://docs.grafana.org/installation/
- Open the dashboard at http://localhost:3000
- Login with username admin and password admin (defaults can be changed in Grafana's .ini files)
- Go to
Data Sources
→+ Add Data Source
Name: Influx
Type: InfluxDB
Url: http://localhost:8086
Access: Proxy
Database: worldserver User: grafana Password: grafana - Go to
Dashboards
→Import
and import each .json file in TrinityCore's /contrib/grafana
Configuring TrinityCore
- Edit the worldserver.conf file
- Set
Metric.Enable = 1
- Edit
Metric.ConnectionInfo
with connection details (e.g"127.0.0.1;8086;worldserver"
) - Start worldserver, the dashboard should now start receiving values
Implemented and planned metrics
Technical oriented
- I/O networking traffic:
- Packets sent
- Packets received
- Average ping
- Traffic in
- Traffic out
- World session update time
- Map update time
- Map loads/unloads
- MMap queries
- Database async queries queued count
- Server uptime (through world initialize and world shutdown events)
- Active connections
- Queued connections
- CPU usage
- RAM usage
Game oriented
- Players online
- Logins per hour, per day, day of week, etc
- Mails sent
- Auction house usage
- Character levels
- Gold earn/spend
- LFG queues
We'd like help implementing these and other metrics, feel free to send us a pull request.
Adding new metrics
There are two kinds of metrics that can be logged: values and events.
Values correspond to measurements of a certain quantity, like number of online players or the update diff time.
Events are something that occurs in an instant of time, e.g, a player login, worldserver shutdown, etc..
To log new metrics, call TC_METRIC_EVENT
or TC_METRIC_VALUE
and add a new graph to the dashboard.
TC_METRIC_EVENT(category, title, description)
- category: Arbitrary string, table where the values and events are stored. By convention, event logs should be suffixed by "_events";
- title: Name of the event log;
- description: Additional info about a log event;
TC_METRIC_VALUE(category, value)
- category: Same as above;
- value: A measurement, it can have one of the following types: bool, std::string, float, double or any integral type (int, int32, uint, etc).
// Registering player logins: in WorldSession::HandlePlayerLogin(LoginQueryHolder* holder) TC_METRIC_EVENT("player_events", "Login", pCurrChar->GetName()); // Logging the update diff time: in World::Update(uint32 diff) TC_METRIC_VALUE("update_time_diff", diff);
Additional Reading
Learn more about InfluxDB and Grafana: