Skip to content

Commit

Permalink
device-metrics: create timeseries per-device with device_uuid tag
Browse files Browse the repository at this point in the history
Connects-to: https://github.com/balena-io/balena-monitor/pull/94
HQ: https://github.com/balena-io/balena/issues/1869
Change-type: minor
Signed-off-by: Matthew McGinn <matthew@balena.io>
  • Loading branch information
Matthew McGinn committed Oct 17, 2019
1 parent 7a00997 commit bc6673e
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 1 deletion.
9 changes: 9 additions & 0 deletions src/api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,9 @@ export const apiFactory = (serviceId: number) => {
return res.sendStatus(400);
}
metrics.inc(Metrics.OnlineDevices);
metrics.inc(Metrics.OnlineDevicesByUuid, undefined, {
device_uuid: req.body.common_name,
});
metrics.inc(Metrics.TotalDevices);

if (
Expand Down Expand Up @@ -106,6 +109,9 @@ export const apiFactory = (serviceId: number) => {
`AUTH FAIL: API Authentication failed for ${req.body.username}`,
);
metrics.inc(Metrics.AuthFailures);
metrics.inc(Metrics.AuthFailuresByUuid, undefined, {
device_uuid: req.body.common_name,
});
return res.sendStatus(401);
}
})
Expand Down Expand Up @@ -146,6 +152,9 @@ export const apiFactory = (serviceId: number) => {
clients
.disconnected(serviceId, req.params.worker, req.body)
.then(logStateUpdate);
metrics.dec(Metrics.OnlineDevicesByUuid, undefined, {
device_uuid: req.body.common_name,
});
res.send('OK');
});

Expand Down
37 changes: 36 additions & 1 deletion src/utils/metrics.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,14 @@ export const enum Metrics {
SessionRxBitrate = 'vpn_session_avg_rx_bitrate',
SessionTxBitrate = 'vpn_session_avg_tx_bitrate',
RxBytes = 'vpn_rx_bytes_total',
RxBytesByUuid = 'vpn_rx_bytes_by_uuid_total',
TxBytes = 'vpn_tx_bytes_total',
TxBytesByUuid = 'vpn_tx_bytes_by_uuid_total',
OnlineDevices = 'vpn_online_devices',
OnlineDevicesByUuid = 'vpn_online_devices_by_uuid',
TotalDevices = 'vpn_devices_total',
AuthFailures = 'vpn_auth_failures_total',

AuthFailuresByUuid = 'vpn_auth_failures_by_uuid_total',
ActiveTunnels = 'vpn_proxy_active_tunnels',
TotalTunnels = 'vpn_proxy_total_tunnels',
}
Expand All @@ -19,17 +22,49 @@ export const describeMetrics = () => {
if (cluster.isWorker) {
metrics.describe(Metrics.OnlineDevices, 'vpn current online devices');
metrics.gauge(Metrics.OnlineDevices, 0);
metrics.describe(
Metrics.OnlineDevicesByUuid,
'vpn current online devices',
{
labelNames: ['device_uuid'],
},
);
metrics.gauge(Metrics.OnlineDevicesByUuid, 0);
metrics.describe(Metrics.TotalDevices, 'vpn total devices since restart');
metrics.counter(Metrics.TotalDevices, 0);
metrics.describe(
Metrics.AuthFailures,
'vpn device auth failures since restart',
);
metrics.counter(Metrics.AuthFailures, 0);
metrics.describe(
Metrics.AuthFailuresByUuid,
'vpn device auth failures since restart',
{
labelNames: ['device_uuid'],
},
);
metrics.counter(Metrics.AuthFailuresByUuid, 0);
metrics.describe(Metrics.RxBytes, 'total rx bytes across all vpn sessions');
metrics.counter(Metrics.RxBytes, 0);
metrics.describe(
Metrics.RxBytesByUuid,
'total rx bytes across all vpn sessions',
{
labelNames: ['device_uuid'],
},
);
metrics.counter(Metrics.RxBytesByUuid, 0);
metrics.describe(Metrics.TxBytes, 'total tx bytes across all vpn sessions');
metrics.counter(Metrics.TxBytes, 0);
metrics.describe(
Metrics.TxBytesByUuid,
'total tx bytes across all vpn sessions',
{
labelNames: ['device_uuid'],
},
);
metrics.counter(Metrics.TxBytesByUuid, 0);
const min = 60;
const hour = 60 * min;
const day = 24 * hour;
Expand Down
2 changes: 2 additions & 0 deletions src/vpn-worker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,9 @@ const worker = (instanceId: number, serviceId: number) => {
const txDelta = data.bytes_sent - clientCache[clientId].bytes_sent;
const timeDelta = process.hrtime()[0] - clientCache[clientId].ts;
metrics.inc(Metrics.RxBytes, rxDelta);
metrics.inc(Metrics.RxBytesByUuid, rxDelta, { device_uuid: uuid });
metrics.inc(Metrics.TxBytes, txDelta);
metrics.inc(Metrics.TxBytesByUuid, txDelta, { device_uuid: uuid });
if (timeDelta > 0 && process.send != null) {
process.send({
type: 'bitrate',
Expand Down

0 comments on commit bc6673e

Please sign in to comment.