Contents
When an EventFlow engine process starts up, an EventFlow container named system
is always included alongside the container, usually named default
, that holds the top-level EventFlow module. The system
container emits continuous streams of information and statistics about the currently running server engine.
There are several system
streams emitted from server, described in sections below:
system.connections |
system.control |
system.subscriptions |
system.error |
system.statv2 |
system.statv3 |
You can see the containers in a running fragment by issuing an sbc list
command or
epadmin --ad=adminport
display container
In general, do not make a long-running direct connection to a system
stream with an sbc dequeue
command. (The epadmin command does not allow dequeuing from system
streams.) To monitor control streams, use a container connection between EventFlow containers with an asynchronous connection type, or use the StreamBaseMonitor API for Java or .NET.
Do not design a StreamBase application architecture that assumes you can make long-term connections to any system
stream with the synchronous connection type.
Caution
TIBCO does not recommend and does not support directly connecting to any system
stream with a synchronous container connection. Doing so is likely to hamper the functioning of the system container or of
the StreamBase server itself.
Synchronous connections to the control stream are not prevented, but produce a warning message instead of an error.
StreamBase provides a number of ways to connect to and interpret system
streams, especially the busy system.statv2
stream:
-
Use the StreamBase Manager, available as either a StreamBase Studio perspective or as a standalone app.
-
Use the Cluster Monitor application.
-
Use the sbprofile command.
-
Add a StreamBase Monitor adapter to an EventFlow module in your EventFlow fragment, or to a separately run fragment.
-
Develop a custom monitor app that uses the StreamBaseMonitor class from the Java or .NET client APIs.
Emits a tuple every time a client connects to or disconnects from this server. The schema of the system.connections
stream is the following:
Field | Data Type | Comments |
---|---|---|
connectionid | string | A global ID for this connection. This is first field returned from an sbadmin listConnections command, and is used as the argument for the getClientIP() function. |
connect | bool | Shows true for a connection event or false for a disconnection event.
|
time | timestamp | The date and time of the connection or disconnection event. |
Tuples are emitted from the control stream in response to certain system-level events. These tuples have the following schema:
Field | Type |
---|---|
subsystem | string |
id | int |
param0 | string |
param1 | string |
param2 | string |
The use and meaning of fields in the control stream schema differ according to which control stream subsystem sends the tuple. The subsystems are: CONTAINER, CLUSTER, HEARTBEAT, and HA (deprecated). You can identify the subsystem type from the string sent in the first field.
The control stream schema has the following meanings for tuples emitted from the CONTAINER subsystem, which tracks start and stop events for EventFlow containers:
Field | Type | Description | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
subsystem | string | String literal container |
||||||||
id | int |
Contains one of:
|
||||||||
param0 | string |
Contains the name of the container whose start or stop event is being reported. |
||||||||
param1 | string | Contains one of STARTING , START , STOPPING , or STOPPED . The meanings of these event states are described in the table below.
|
||||||||
param2 | string | Not used. |
The CONTAINER subsystem sends the event tuples described in the following table:
id Field | Param1 Field | Description |
---|---|---|
-100 | STARTING |
A request to start the specified container has been received by the Server, but the container has not completed startup. While the STARTING tuple is sent on the control stream, the container being added does not see this tuple, as it has not yet finished starting. Instead, the STARTING tuple is seen by other containers. For example, add container X with a container connection to the |
0 | START | The specified container has completed startup. |
100 | STOPPING | A request to stop the specified container has been received by the Server, but the container has not completed stopping. |
200 | STOPPED | The specified container has successfully stopped. |
If the specified container is removed and re-added, another pair of event tuples are sent.
Note
The container START event is not guaranteed to be the first event processed by modules being started in the newly added container. In most cases, it is the first event, but not all cases.
The CLUSTER subsystem of the control
stream emits tuples in response to state changes in the containing node's participation in a StreamBase Runtime cluster.
For example, a tuple is sent when a partition becomes active on the local node, or when quorum among nodes is attained or
lost.
The control stream schema has the following meanings for tuples emitted from the CLUSTER subsystem:
Field | Type | Description | ||||||
---|---|---|---|---|---|---|---|---|
subsystem | string | String literal CLUSTER |
||||||
id | int |
Contains the event target, one of:
|
||||||
param0 | string |
Contains the event type:
|
||||||
param1 | string |
Contains the event reason:
|
||||||
param2 | string |
Contains the event description, one of:
|
The control stream schema has the following meanings for tuples emitted from the HEARTBEAT subsystem:
Field | Type | Description |
---|---|---|
subsystem | string | String literal heartbeat .
|
id | int |
Contains the heartbeat period in seconds. |
param0 | string |
Contains the sequence number of the current heartbeat event since this EventFlow engine started, converted to a string. |
param1 | string | Not used. |
param2 | string | Not used. |
Heartbeat tuples are emitted every heartbeat period for the benefit of StreamBase clients that have enabled heartbeat detection
with the TupleConnections.enableHeartbeating()
method in the StreamBase Client API. The heartbeat period is 10,000 milliseconds (10 seconds) by default. You can manage
the heartbeat period with the clientHeartbeatIntervalMilliseconds parameter in a configuration file like the following example. Set the period to zero to disable heartbeating for all clients.
name = "clientapilistenersettings" version = "1.0.0" type = "com.tibco.ep.streambase.configuration.sbclientapilistener" configuration = { ClientAPIListener = { apiListenerAddress = { portNumber = 10000 } ... clientHeartbeatIntervalMilliseconds = 60000 } }
The system.subscriptions
stream emits a tuple every time a client starts or stops dequeuing from any stream on this server. The schema of the system.subscriptions
stream is the following:
Field | Data Type | Comments |
---|---|---|
connectionid | string | A global ID for the connection, the same ID described for the connections stream.
|
path | string | The path to the stream that had a dequeue event, using StreamBase path notation. Examples: system.control , default.outputstream |
logicalPath | string | The path to the stream specified in a filtered subscription, or the path field repeated, if not filtered. See Narrowing Dequeue Results with Filtered Subscribe.
|
subscribe | bool | Shows true when a stream starts dequeuing or false when a stream stops dequeuing.
|
time | timestamp | The date and time of the dequeue event. |
The system.error
stream is part of the EventFlow try-catch error streams system. This system and the schema of this stream are described on
Using Error Ports and Error Streams.
The system.statv2
stream continuously emits tuples containing EventFlow engine monitoring statistics for operators, queues, threads, client
connections, and memory use in the running server.
As with all system
streams, do not make a synchronous container connection to the system.statv2
stream. The statistics tuples are not designed to be human readable or parseable; use one of the tools listed in Connecting to System Streams to interpret this stream.
For reference when developing a custom monitor app, the following is the schema of the statv2
stream:
Field | Data Type | Comments |
---|---|---|
cycle | int | The snapshot number of a group of statistics emitted together from a snapshot. Tuples from the same snapshot are grouped between
a tuple whose what value is begn and a tuple with all null values except time .
|
what | string | A four-letter string that identifies the type of statistic in that tuple. |
name | string | The name of the feature whose statistic is reported, such as the name of stream, queue, or operator, or a connection ID |
index | int | Used for Java garbage collection statistics (when the what field is gctm ) to report the collection count; otherwise null .
|
value | long | The value of the statistic reported in the tuple, if appropriate; otherwise null .
|
status | string | A status string, if appropriate; usually null .
|
time | timestamp | The date and time of the reported statistic event. |
Note
Do not confuse the system
stream's statistics output from within a running EventFlow engine with the node level statistics that you can enable and display with the statistics
target of the epadmin command. See epadmin help statistics
at the command prompt for instructions.
The system.statv3
stream is an optional alternative to the statv2
stream described above. An EventFlow engine emits either a system.statv2
or system.statv3
stream, and must be configured to emit the latter. Without configuration, the statv2
stream is the default.
The statv3
stream reports the same statistics information as statv2
, but in a different, binary format that is not human readable. All of the StreamBase tools that interpret a statv2
stream, listed in Connecting to System Streams above, can detect and interpret a statv3
stream, if encountered. The statv3
stream can result in around a ten times improvement in network bandwidth usage, especially with large LiveVew projects.
To enable the statv3
stream for an EventFlow engine, set the Java system property streambase.appgen.stats.schema.version
equal to 3. The following example configures to use the statv3
stream and also slows down the frequency of each statistics tuple emission:
name = "sbengine" type = "com.tibco.ep.streambase.configuration.sbengine" version = "1.0.0" configuration = { StreamBaseEngine = { systemProperties { "streambase.appgen.stats-schema-version" = "3" } streamBase = { engineMonitor = { statsFrequencyMilliseconds = 10000 } } } }
For reference, the schema of the statv3
stream has three of the same fields as statv2
, but adds a blob field to contain the binary statistics information:
Field | Data Type | Comments |
---|---|---|
cycle | int | The snapshot number of a group of statistics emitted together from a snapshot. Tuples from the same snapshot are grouped between
a tuple whose what value is begn and a tuple with all null values except time .
|
what | string | A four-letter string that identifies the type of statistic in that tuple. |
time | timestamp | The date and time of the reported statistic event. |
data | blob | Binary statistics data. |