Concepts Guide
SRS Daemon Statistics

This section contains details on the SRS's Daemon Statistics feature. You should already be familiar with the general information contained in Daemon Statistics.

The SRS Daemon Statistics are published in the form of JSON messages. These are ASCII text messages which represent internal SRS data structures containing statistical and configuration information.

The following sub-sections describe the content of the messages. Note that while the sample messages shown are "beautified" (whitespace inserted for readability), a receiver of these messages should make no assumption about the presence or absence of whitespace. Also, as it true generally with JSON, the order of the fields is not fixed and can vary.

The message types are:


Message Type: SRS_STATS  <-

Message type SRS_STATS contains information about the overall state of the SRS service.

EXAMPLE:

{
"monitorInfoCategory": "SRS_STATS",
"stats": [
{
"name": "clients.inactive.SIR.count",
"value": 0
},
{
"name": "clients.next.client.ID",
"value": 17
}
]
}

This example has two statistics. Be aware that a given message can have any number of statistic entries.

Overall structure of message:

FieldDescription
monitorInfoCategoryMessage type. Set to the string "SRS_STATS".
statsArray of sub-structures, one per statistic. The number and order of the contained statistics is not fixed.
. . stats[].nameName of statistic (see below).
. . stats[].valueValue of statistic.

Meaning of each statistic:

StatisticDescription
clients.next.client.ID Unique session ID that will be assigned to the next context to connect.
active.clients.count Number of currently connected contexts.
clients.connects.count Number of contexts that have connected since this SRS started.
clients.disconnects.count Number of contexts that have disconnected since this SRS started.
clients.max.concurrent.connections.count High water mark of simultaneous connections since the SRS service was started.
clients.active.SIR.count Number of sources being maintained from connected contexts.
clients.inactive.SIR.count Number of sources being temporarily maintained from disconnected contexts. These get cleaned up after the state lifetime expires.
clients.expired.SIR.count

Number of times the SRS deleted source records due to the state lifetime being expired. This will happen when applications exit without deleting their sources, which is not recommended. If this number increases frequently, consider modifying your applications to clean up before exiting.

All of the above statistics are included in a snapshot. Only the changed statistics are included during a periodic update.


Message Type: SRS_ERROR_STATS  <-

Message type SRS_ERROR_STATS contains counters for errors detected by the SRS service. These types of errors should not be happening in a properly configured network; context support if the counters are increasing frequently.

EXAMPLE:

{
"monitorInfoCategory": "SRS_ERROR_STATS",
"stats": [
{
"name": "clients.duplicate.SIR.count",
"value": 0
},
{
"name": "clients.invalid.SDR.no.OTID.match.count",
"value": 17
}
]
}

This example has two statistics. Be aware that a given message can have any number of statistic entries.

Overall structure of message:

FieldDescription
monitorInfoCategoryMessage type. Set to the string "SRS_ERROR_STATS".
statsArray of sub-structures, one per statistic. The number and order of the contained statistics is not fixed.
. . stats[].nameName of statistic (see below).
. . stats[].valueValue of statistic.

Meaning of each statistic:

StatisticDescription
clients.duplicate.SIR.count While not a fatal condition, Informatica support should be informed if this count increments frequently. (Number of times that the SRS is informed about a source when it didn't need to be informed; i.e. the SRS already knew about it.)
clients.invalid.SDR.no.OTID.match.count While not a fatal condition, Informatica support should be informed if this count increments frequently. (A context deleted a source that the SRS does not know about, which should never happen.)
clients.invalid.SDR.no.transport.match.count While not a fatal condition, Informatica support should be informed if this count increments frequently. (A context deleted a source that the SRS does not know about, which should never happen.)
clients.invalid.DR.no.OTID.match.count While not a fatal condition, Informatica support should be informed if this count increments frequently. (A context deleted a source that the SRS does not know about, which should never happen.)
clients.invalid.DR.no.transport.match.count While not a fatal condition, Informatica support should be informed if this count increments frequently. (A context deleted a source that the SRS does not know about, which should never happen.)
clients.invalid.DR.inactive.SIR.count

This counter should never be greater than zero. While not a fatal condition, Informatica support should be informed if this count increments frequently. (A context disconnected while it has SIRs that were inactive, which should never happen.)


Message Type: UM_CLIENT_STATS  <-

Message type UM_CLIENT_STATS contains information related to an individual connected context. Multiple instances of this message can be sent, one per connected context.

EXAMPLE:

{
"monitorInfoCategory": "UM_CLIENT_STATS",
"srsRegistrationInfo": {
"ip": "10.29.3.43",
"port": "60681",
"sessionId": "0x9739b88f"
},
"stats": [
{
"name": "client.SIR.received.count",
"value": 1
},
{
"name": "client.SDR.received.count",
"value": 0
}
]
}

This example has two statistics. Be aware that a given message can have any number of statistic entries.

Overall structure of message:

FieldDescription
monitorInfoCategoryMessage type. Set to the string "UM_CLIENT_STATS".
srsRegistrationInfoStructure containing identifying information about the connected context.
. . srsRegistrationInfo.ipIP address of the context.
. . srsRegistrationInfo.portTCP "source port" the context used locally for its SRS connection. See resolver_service (context).
. . srsRegistrationInfo.sessionIdThe unique identifier assigned by the SRS to this connection.
statsArray of sub-structures, one per statistic. The number and order of the contained statistics is not fixed.
. . stats[].nameName of statistic (see below).
. . stats[].valueValue of statistic.

Meaning of each statistic:

StatisticDescription
record.queue.depth Snapshot of the context's SRS worker thread's work queue. I.e. number of Topic Resolution updates that need to be sent to the context. This number should normally be zero. If it remains above zero for significant time, contact Informatica support.
client.SIR.received.count Number of created sources that the context has informed the SRS. This number is not necessarily the current number of sources; i.e. the counter does not decrease as sources are deleted.
client.SDR.received.count Number of sources deleted that the context has informed the SRS.
client.active.SIR.count Number of sources that currently exist in the context.
client.max.concurrent.SIR.count High water mark of simultaneous sources managed since the SRS service started.
client.SIR.sent.count Number of sources that the SRS has informed the context of.
client.SER.sent.count

Number of source deletions that the SRS has informed the context of. Either the application explicitly deleted a source, or the context abnormally disconnected and the state lifetime expired.


Message Type: UM_CLIENT_ERROR_STATS  <-

Message type UM_CLIENT_ERROR_STATS contains error counters related to an individual connected context. Multiple instances of this message can be sent, one per connected context. These types of errors should not be happening in a properly configured network; context support if the counters are increasing frequently.

EXAMPLE:

{
"monitorInfoCategory": "UM_CLIENT_ERROR_STATS",
"srsRegistrationInfo": {
"ip": "10.29.3.43",
"port": "60681",
"sessionId": "0x9739b88f"
},
"stats": [
{
"name": "client.invalid.SRS.message.received.count",
"value": 1
},
{
"name": "client.invalid.SDR.received.count",
"value": 0
}
]
}

This example has two statistics. Be aware that a given message can have any number of statistic entries.

Overall structure of message:

FieldDescription
monitorInfoCategoryMessage type. Set to the string "UM_CLIENT_ERROR_STATS".
srsRegistrationInfoStructure containing identifying information about the connected context.
. . srsRegistrationInfo.ipIP address of the context.
. . srsRegistrationInfo.portTCP "source port" the context used locally for its SRS connection. See resolver_service (context).
. . srsRegistrationInfo.sessionIdThe unique identifier assigned by the SRS to this connection.
statsArray of sub-structures, one per statistic. The number and order of the contained statistics is not fixed.
. . stats[].nameName of statistic (see below).
. . stats[].valueValue of statistic.

Meaning of each statistic:

StatisticDescription
client.invalid.SRS.message.received.count This counter should never be greater than zero. While not a fatal condition, Informatica support should be informed if this count increments frequently. (Number of messages received from this context that could not be processed.)
client.invalid.SDR.received.count

This counter should never be greater than zero. While not a fatal condition, Informatica support should be informed if this count increments frequently. (Number of source delete messages received from this context which could not be processed correctly.)


Message Type: CONNECTION_EVENTS  <-


Message Subtype: UM_CLIENT_CONNECT  <-

Message type CONNECTION_EVENTS, sub-type UM_CLIENT_CONNECT, logs a single connect of a context to the SRS.

{
"monitorInfoCategory": "CONNECTION_EVENTS",
"srsRegistrationInfo": {
"ip": "10.29.3.42",
"port": "41873",
"sessionId": "0xaecbff98"
},
"connectionEventType": "UM_CLIENT_CONNECT",
"events": [
{
"connectionEventType": "UM_CLIENT_CONNECT",
"connectionEventTime": "Thu Jan 24 00:28:26 CET 2019",
}
]
}

Overall structure of message:

FieldDescription
monitorInfoCategoryMessage type. Set to the string "CONNECTION_EVENTS".
srsRegistrationInfoStructure containing identifying information about the connected context.
. . srsRegistrationInfo.ipIP address of the context.
. . srsRegistrationInfo.portTCP "source port" the context used locally for its SRS connection. See resolver_service (context).
. . srsRegistrationInfo.sessionIdThe unique identifier assigned by the SRS to this connection.
connectionEventTypetype of event contained in the events sub-structure. Set to "UM_CLIENT_CONNECT".
eventsTechnically events is constructed as an array of sub-structures, however each CONNECTION_EVENTS message contains exactly one event log.
. . events[].connectionEventTypetype of event contained in the events sub-structure. Set to "UM_CLIENT_CONNECT".
. . events[].connectionEventTimeASCII time/date stamp of event.


Message Subtype: UM_CLIENT_DISCONNECT  <-

Message type CONNECTION_EVENTS, sub-type UM_CLIENT_DISCONNECT, logs a single disconnect of a context to the SRS.

{
"monitorInfoCategory": "CONNECTION_EVENTS",
"srsRegistrationInfo": {
"ip": "10.29.3.42",
"port": "35350",
"sessionId": "0x0388cf20"
},
"connectionEventType": "UM_CLIENT_DISCONNECT",
"events": [
{
"srsRegistrationInfo": {
"ip": "10.29.3.42",
"port": "35350",
"sessionId": "0x0388cf20"
},
"connectionEventType": "UM_CLIENT_DISCONNECT",
"connectionEventTime": "Wed Jan 30 23:50:30 CET 2019",
}
]
}

Overall structure of message:

FieldDescription
monitorInfoCategoryMessage type. Set to the string "CONNECTION_EVENTS".
srsRegistrationInfoStructure containing identifying information about the connected context.   
. . srsRegistrationInfo.ipIP address of the context.
. . srsRegistrationInfo.portTCP "source port" the context used locally for its SRS connection. See resolver_service (context).
. . srsRegistrationInfo.sessionIdThe unique identifier assigned by the SRS to this connection.
connectionEventTypetype of event contained in the events sub-structure. Set to "UM_CLIENT_DISCONNECT".
eventsTechnically events is constructed as an array of sub-structures, however each CONNECTION_EVENTS message contains exactly one event log.
. . events[].srsRegistrationInfoStructure containing identifying information about the connected context.
. . . . events[].srsRegistrationInfo.ipIP address of the context.
. . . . events[].srsRegistrationInfo.portTCP "source port" the context used locally for its SRS connection. See resolver_service (context).
. . . . event[].srsRegistrationInfo.sessionIdThe unique identifier assigned by the SRS to this connection.
. . events[].connectionEventTypetype of event contained in the events sub-structure. Set to "UM_CLIENT_DISCONNECT".
. . events[].connectionEventTimeASCII time/date stamp of event.


Message Subtypes: SIR and SDR  <-

Message type CONNECTION_EVENTS, sub-types SIR and SDR, log a single context source creation or deletion message to the SRS.

{
"monitorInfoCategory": "CONNECTION_EVENTS",
"srsRegistrationInfo": {
"ip": "10.29.3.43",
"port": "60809",
"sessionId": "0x1c668bad"
},
"connectionEventType": "SIR" or "SDR",
"events": [
{
"topic": "srs_topic",
"source": "LBTRM:10.29.3.43:24000:47b87920:225.11.28.85:14400",
"connectionEventType": "SIR" or "SDR",
"connectionEventTime": "Fri Feb 1 02:16:06 CET 2019",
}
]
}

Overall structure of message:

FieldDescription
monitorInfoCategoryMessage type. Set to the string "CONNECTION_EVENTS".
srsRegistrationInfoStructure containing identifying information about the connected context.   
. . srsRegistrationInfo.ipIP address of the context.
. . srsRegistrationInfo.portTCP "source port" the context used locally for its SRS connection. See resolver_service (context).
. . srsRegistrationInfo.sessionIdThe unique identifier assigned by the SRS to this connection.
connectionEventTypetype of event contained in the events sub-structure. Set to "SIR" or "SDR".
eventsTechnically events is constructed as an array of sub-structures, however each CONNECTION_EVENTS message contains exactly one event log.
. . events[].connectionEventTypetype of event contained in the events sub-structure. Set to "SIR" or "SDR".
. . events[].connectionEventTimeASCII time/date stamp of event.


Message Type: CONFIG_OPTS  <-

Message type CONFIG_OPTS contains SRS configuration information.

EXAMPLE:

{
"monitorInfoCategory": "CONFIG_OPTS",
"configOptions": [
{
"name": "um-srs.daemon-monitor.lbm-attributes.context.context_name",
"value": "statsLbmContext",
},
{
"name": "um-srs.daemon-monitor.lbm-attributes.context.default_interface",
"value": "192.168.0.0/24",
}
]
}

This example has two options. Be aware that a given message can have any number of option entries.

Overall structure of message:

FieldDescription
monitorInfoCategoryMessage type. Set to the string "CONFIG_OPTS".
configOptionsArray of sub-structures, one per configuration option. The number and order of the contained options is not fixed.
. . configOptions[].nameName of option (see below).
. . configOptions[].valueValue of option.

Meaning of each option:

Option NameDescription
um-srs.version Value for 'version' attribute to SRS configuration element <um-srs>.
um-srs.daemon.log Value for the SRS configuration element <log>.
um-srs.daemon.log.type Value for 'type' attribute to SRS configuration element <log>.
um-srs.daemon.log.frequency Value for 'frequency' attribute to SRS configuration element <log>.
um-srs.daemon.log.size Value for 'size' attribute to SRS configuration element <log>.
um-srs.daemon.log.max-history Value for 'max-history' attribute to SRS configuration element <log>.
um-srs.daemon.log.total-size-cap Value for 'total-size-cap' attribute to SRS configuration element <log>.
um-srs.daemon.log.compression Value for 'compression' attribute to SRS configuration element <log>.
um-srs.daemon.pid-file Value for the SRS configuration element <request-stream-max-msg-count>.
um-srs.srs.interface Value for the SRS configuration element <interface> inside <srs>.
um-srs.srs.port Value for the SRS configuration element <port> inside <srs>.
um-srs.srs.state-lifetime Value for the SRS configuration element <state-lifetime>.
um-srs.srs.clientactor.request-stream-max-msg-count Value for the SRS configuration element <request-stream-max-msg-count>.
um-srs.srs.clientactor.source-info-queue-service-interval Value for the SRS configuration element <source-info-queue-service-interval>.
um-srs.srs.clientactor.batch-frame-max-record-count Value for the SRS configuration element <batch-frame-max-record-count>.
um-srs.srs.clientactor.batch-frame-max-datagram-size Value for the SRS configuration element <batch-frame-max-datagram-size>.
um-srs.debug-monitor.interface Value for the SRS configuration element <interface> inside <debug-monitor>.
um-srs.debug-monitor.port Value for the SRS configuration element <port> inside <debug-monitor>.
um-srs.debug-monitor.enabled Value for the SRS configuration element <enabled>.
um-srs.debug-monitor.ping-interval Value for the SRS configuration element <ping-interval>.
um-srs.daemon-monitor.topic Value for 'topic' attribute to SRS configuration element <daemon-monitor>.
um-srs.daemon-monitor.publishing-interval.default Value for the SRS configuration element <default>.
um-srs.daemon-monitor.publishing-interval.srs-stats Value for the SRS configuration element <srs-stats>.
um-srs.daemon-monitor.publishing-interval.um-client-stats Value for the SRS configuration element <um-client-stats>.
um-srs.daemon-monitor.publishing-interval.connection-events Value for the SRS configuration element <connection-events>.
um-srs.daemon-monitor.publishing-interval.srs-error-stats Value for the SRS configuration element <srs-error-stats>.
um-srs.daemon-monitor.publishing-interval.um-client-error-stats Value for the SRS configuration element <um-client-error-stats>.
um-srs.daemon-monitor.publishing-interval.config-opts Value for the SRS configuration element <config-opts>.
um-srs.daemon-monitor.publishing-interval.internal-config-opts Value for the SRS configuration element <internal-config-opts>.
um-srs.daemon-monitor.publish-connection-events.allow Value for 'allow' attribute to SRS configuration element <publish-connection-events>.
um-srs.daemon-monitor.remote-snapshot-request.allow Value for 'allow' attribute to SRS configuration element <remote-snapshot-request>.
um-srs.daemon-monitor.remote-config-changes-request.allow Value for 'allow' attribute to SRS configuration element <remote-config-changes-request>.
um-srs.daemon-monitor.lbm-attributes.lbmConfigOptionScope.lbmConfigOptionName

A UM configuration option, as documented in Configuration Overview, where 'lbmConfigOptionScope' is the option scope ('context', 'source', etc) and 'lbmConfigOptionName' is the option name.


Message Type: INTERNAL_CONFIG_OPTS  <-

Message type INTERNAL_CONFIG_OPTS contains SRS internal configuration information. These options are not intended for application use.

EXAMPLE:

{
"monitorInfoCategory": "INTERNAL_CONFIG_OPTS",
"configOptions": [
{
"name": "um-srs.srs.otidmap.async-receiver-distribution",
"value": "false",
},
{
"name": "um-srs.srs.otidmap.shards",
"value": "4",
}
]
}

This example has two options. Be aware that a given message can have any number of option entries.

Overall structure of message:

FieldDescription
monitorInfoCategoryMessage type. Set to the string "INTERNAL_CONFIG_OPTS".
configOptionsArray of sub-structures, one per configuration option. The number and order of the contained options is not fixed.
. . configOptions[].nameName of option (see below).
. . configOptions[].valueValue of option.

Meaning of each option:

Option NameDescription
um-srs.srs.otidmap.shards Value for the SRS configuration element <shards>.
um-srs.srs.otidmap.async-receiver-distribution

Value for the SRS configuration element <async-receiver-distribution>.


Request Type: REPORT_SRS_VERSION  <-

Request type REPORT_SRS_VERSION is sent by a monitoring application to determine the software version of the SRS.

{
"commandMessageType": "REPORT_SRS_VERSION"
}

The SRS will send a response of the form:

SRS Version 6.12


Request Type: REPORT_MONITOR_INFO  <-

Request type REPORT_MONITOR_INFO is sent by a monitoring application to initiate an immediate publishing of monitoring data.

The SRS will only process this request if the configuration contains <remote-snapshot-request allow="true"/>.

{
"commandMessageType": "REPORT_MONITOR_INFO",
"monitorInfoCategory": "SRS_STATS"
}

Where the "monitorInfoCategory" field is set to one of the following:

  • SRS_STATS
  • UM_CLIENT_STATS
  • CONNECTION_EVENTS
  • SRS_ERROR_STATS
  • UM_CLIENT_ERROR_STATS
  • CONFIG_OPTS
  • INTERNAL_CONFIG_OPTS

The SRS will send a response of the form:

snap SRS_STATS - OK!

Note that "SRS_STATS" is replaced by the requested category.


Request Type: SET_PUBLISHING_INTERVAL  <-

Request type SET_PUBLISHING_INTERVAL is sent by a monitoring application to Modify the publishing intervals for a running SRS. Note that SRS does not persist the new interval value; if the SRS is restarted, the value returns to the value configured via <daemon-monitor>.

The SRS will only process this request if the configuration contains <remote-config-changes-request allow="true"/>.

{
"commandMessageType": "SET_PUBLISHING_INTERVAL",
"monitorInfoCategory": "SRS_STATS",
"publishingInterval": 60000
}

Where the "monitorInfoCategory" field is set to one of the following:

  • SRS_STATS
  • UM_CLIENT_STATS
  • CONNECTION_EVENTS
  • SRS_ERROR_STATS
  • UM_CLIENT_ERROR_STATS
  • CONFIG_OPTS
  • INTERNAL_CONFIG_OPTS

The SRS will send a response of the form:

SRS_STATS 60000 - OK!

Note that "SRS_STATS" is replaced by the requested category.