Measurement Recorders - adjacentlink/opentestpoint GitHub Wiki

OpenTestPoint recorders can be used as part of an OpenTestPoint deployment to record all measurements available from one or more publishers. The otestpoint-recorder application can be configured with one or more publisher endpoints. For each listed endpoint, otestpoint-recorder will subscribe to all measurements and log all data in Probe Message Stream Format.

The below listing shows sample application configuration XML to record all probes available from node-1. More information on otestpoint-recorder can be found using the --help option.

<otestpoint-recorder file="persist/1/var/log/otestpoint-recorder.data">
  <testpoint publish="node-1:8882"/>
</otestpoint-recorder>

Although not required by the framework, it is a best practice to deploy one otestpoint-recorder on each node running otestpointd to locally record all available probes.

In addition to recording all probes to file, otestpoint-recorder creates an SQLite database that contains meta information and recording file offsets to make it easier to find specific measurements of interest.

The database contains a single probes table with the following items:

Field Description
time Probe timestamp in seconds since the epoch.
uuid The UUID of the Controller owning the reporting probe instance.
probe The name of the probe.
tag The tag assigned to the Controller owning the reporting probe instance.
pindex The index of the probe. Each probe instantiated by the same Controller is assigned a unique sequential index.
offset The offset of the serialized probe message. (Note: This offset points to the start of the serialized probe message not the length field of the entry in Probe Message Stream Format.)
size The size of the serialized probe message.

The otestpoint-filter application can be used to select measurements that match one or more specified probe names from an otestpoint-recorder data file and SQLite database file.

[me@host 1]$ otestpoint-filter persist/1/var/log/otestpoint-recorder.data EMANE.VirtualTransport.Counters.General
[1469213460] node-1/2 500b7fd3-cb91-4874-a2e4-a38a54110599
otestpoint.emane.virtualtransport Measurement_emane_virtualtransport_counters_general v1 133 bytes
avgdownstreamprocessingdelay = 21.5
avgprocessapiqueuedepth = 0.0
avgprocessapiqueuewait = 0.0
avgtimedeventlatency = 0.0
avgtimedeventlatencyratio = 0.0
avgupstreamprocessingdelay = 0.0
numdownstreambytesbroadcastgenerated = 0
numdownstreambytesbroadcastrx = 480
numdownstreambytesbroadcasttx = 480
numdownstreambytesunicastgenerated = 0
numdownstreambytesunicastrx = 0
numdownstreambytesunicasttx = 0
numdownstreampacketsbroadcastdrop = 0
numdownstreampacketsbroadcastgenerated = 0
numdownstreampacketsbroadcastrx = 6
numdownstreampacketsbroadcasttx = 6
numdownstreampacketsunicastdrop = 0
numdownstreampacketsunicastgenerated = 0
numdownstreampacketsunicastrx = 0
numdownstreampacketsunicasttx = 0
numupstreambytesbroadcastrx = 0
numupstreambytesbroadcasttx = 0
numupstreambytesunicastrx = 0
numupstreambytesunicasttx = 0
numupstreampacketsbroadcastdrop = 0
numupstreampacketsbroadcastrx = 0
numupstreampacketsbroadcasttx = 0
numupstreampacketsunicastdrop = 0
numupstreampacketsunicastrx = 0
numupstreampacketsunicasttx = 0
processedconfiguration = 0
processeddownstreamcontrol = 0
processeddownstreampackets = 0
processedevents = 0
processedtimedevents = 0
processedupstreamcontrol = 0
processedupstreampackets = 0

[1469213465] node-1/2 500b7fd3-cb91-4874-a2e4-a38a54110599
otestpoint.emane.virtualtransport Measurement_emane_virtualtransport_counters_general v1 133 bytes
avgdownstreamprocessingdelay = 19.6153850555
avgprocessapiqueuedepth = 0.0
avgprocessapiqueuewait = 0.0
avgtimedeventlatency = 0.0
avgtimedeventlatencyratio = 0.0
avgupstreamprocessingdelay = 0.0
numdownstreambytesbroadcastgenerated = 0
<...truncated for listing...>