RT clients observability¶
This page introduces the RT clients observability API, which provides information about publisher data merged by RT.
Use the /rt-clients-meta REST API to monitor publisher data and its state across the RT cluster.
You can call the REST API using one of the following methods:
Endpoint
The $ENDPOINT variable below is defined as the port-forwarded connection to port 6000 of any RT node.
bash-4.4$ curl http://$ENDPOINT/rt-clients-meta
Note
This query can be called directly on an RT node.
bash-4.4$ curl http://0:6000/rt-clients-meta
Endpoint
The $ENDPOINT variable below is defined as port 5001 or 5002 at the hostname of any RT node.
bash-4.4$ cd /opt/kx/app/rt/replicator/clib/
bash-4,4$ ./rest_proxy --endpoint $ENDPOINT --target rt-clients-meta
Response¶
The response includes a response header and a payload.
The API returns the result of a left-join between four state tables in the RT sequencer. This table shows details on how publisher data is being merged by RT.
len_upds.fw.tdir_inf.mrg.state.input
The payload members are:
| group | member | type | description |
|---|---|---|---|
id |
string | Name of the publisher to RT. | |
sess |
long | RT logs take the form, log.x.y. sess is the x part of the log. Details on the meaning of x and y in the RT log file name. |
|
no |
long | RT logs take the form, log.x.y. no is the y part of the log |
|
node |
string | The RT node in the cluster. | |
lu_tm |
string | Timestamp taken from the len_upds table. |
|
wd |
long | Watch descriptor, the number of files the sequencer is watching. | |
gs |
node | long | The position from all RT nodes that it's sequencer is subscribed to in the RT input log. |
len |
long | The position on this node that the sequencer is subscribed to in the RT input log. | |
fw_tm |
string | Timestamp taken from the .fw.t table. |
|
pos |
long | Positon taken from the dir_inf table. |
|
msgs |
long | Messages sequenced taken from the dir_inf table. |
|
bytes |
long | Bytes sequenced taken from the dir_inf table. |
|
dir_ts |
string | Timestamp taken from the dir_inf table. |
|
last_msg_seqn |
long | Taken from .mrg.state.input. |
|
last_msg_ts |
string | Time taken from .mrg.state.input. |
|
ms_pos |
long | Taken from .mrg.state.input. |
|
ms_msgs |
long | Taken from .mrg.state.input. |
|
ms_bytes |
long | Taken from .mrg.state.input. |
|
ms_tm |
string | Taken from .mrg.state.input. |
If the values in the gs group aren't aligned across the RT nodes, you might need to restart a node to recover the correct state from the other nodes in the RT cluster.
Example¶
Endpoint
An example of the $ENDPOINT variable is 0:6000.
bash-4.4$ curl http://$ENDPOINT/rt-clients-meta | jq .
{
"id": "pub1.data",
"sess": 1,
"no": 0,
"node": "n0",
"lu_tm": "2026-08-06T14:04:20.937885324",
"wd": null,
"gs": {
"n0": 366,
"n1": 366,
"n2": 366
},
"len": 366,
"fw_tm": "2026-08-06T14:04:20.938028827",
"pos": null,
"msgs": null,
"bytes": null,
"dir_ts": "",
"last_msg_seqn": null,
"last_msg_ts": "",
"ms_pos": null,
"ms_msgs": null,
"ms_bytes": null,
"ms_tm": ""
}
Note
First, you must exec onto a sequencer node.
bash-4.4$ curl http://0:6000/rt-clients-meta | jq .
{
"id": "pub1.data",
"sess": 1,
"no": 0,
"node": "n0",
"lu_tm": "2026-08-06T14:04:20.937885324",
"wd": null,
"gs": {
"n0": 366,
"n1": 366,
"n2": 366
},
"len": 366,
"fw_tm": "2026-08-06T14:04:20.938028827",
"pos": null,
"msgs": null,
"bytes": null,
"dir_ts": "",
"last_msg_seqn": null,
"last_msg_ts": "",
"ms_pos": null,
"ms_msgs": null,
"ms_bytes": null,
"ms_tm": ""
}
Endpoint
An example of the $ENDPOINT variable is kxi-mystream-0:5002.
bash-4.4$ cd /opt/kx/app/rt/replicator/clib/
bash-4,4$ ./rest_proxy --endpoint $ENDPOINT --target rt-clients-meta | jq .
{
"id": "pub1.data",
"sess": 1,
"no": 0,
"node": "n0",
"lu_tm": "2026-08-06T14:04:20.937885324",
"wd": null,
"gs": {
"n0": 366,
"n1": 366,
"n2": 366
},
"len": 366,
"fw_tm": "2026-08-06T14:04:20.938028827",
"pos": null,
"msgs": null,
"bytes": null,
"dir_ts": "",
"last_msg_seqn": null,
"last_msg_ts": "",
"ms_pos": null,
"ms_msgs": null,
"ms_bytes": null,
"ms_tm": ""
}