Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

Processor: Service Data Collector

The Service Data Collector processor collects data from the specified service. For example, 'bgp' service would be the status of BGP sessions. Objects to be monitored are configured via the graph query and key. In the BGP example, key should evaluate to locallp, localAs, remoteIp, or remote As. For interface-based services such as 'interface' and 'lldp', key is an interface name.

Parameter Description
Input Types No inputs. This is a source processor.
Output Types Table (number or discrete state)
Graph Query (graph_query)

One or more queries on graph specified as strings, or a list of such queries. (String will be deprecated in a future release.) Multiple queries should provide all the named nodes referenced by the expression fields (including additional_properties). Graph query is executed on the "operation" graph. Results of the queries can be accessed using the "query_result" variable with the appropriate index. For example, if querying property set nodes under name "ps", the result will be available as "query_result[0]["ps"]".

In collector processors (*_collector, if_counter) it is used to choose a set of nodes for further processing (for example, all leaf devices, or all interfaces between leaf and spine devices)

In other processors it is used for general parameterization and it is only supported as a list of queries.

graph_query: "node("system", role="leaf", name="system").
              out("hosted_interfaces").
              node("interface", name="iface").out("link").
              node("link", role="spine_leaf")"
graph_query: ["node("system", role="leaf", name="system")",
              "node("system", role="spine", name="system")"]
Service name (service_name) Name of the custom collector service.
Keys List of property names which values will be used as a key parameters for the service. Expression mapping from graph query to whatever key is necessary for the service. For lldp it's a string with interface name. For bgp it's a tuple like (src_addr, src_asn, dst_addr, dst_asn, vrf_name, addr_family), where addr_family should be one of ipv4, ipv6, or evpn. For interface it is a string with interface name.
Query Expansion For every path, originally returned by graph queries, passed to each generator the latter one produces a set of items and for each item it produces a new path extended by a corresponding property name which value is set of a value of the produced item.
Query Group by (query_group_by)

List (of strings) of node and relationship names used in the graph query to group query results by. Each element in this list represents a named node or relationship matcher in the graph_query field.It is not an expression to be consistent with existing group_by field in grouping processors. Non-expression is simple and more intuitive.

When grouping is active (query_group_by is not null), query results are d by the specified list of names, where one output item is created per each group. In this case, the expressions can only access matcher names specified in query_group_by and the query results for each group are accessed using a new group_items variable. The group_items variable is a list of query results, where each result has named nodes/relationships, not present in query_group_by.

The following list describes the behavior for various values of this field:

  • Value of query_group_by field - Semantics
  • Omitted or provided as json null (ala None in Python) - No grouping is done. This is equivalent to current behavior of extensible_data_collector. Using ‘group_items’ in this case is not permitted and results in probe error state.
  • Empty list ([]) - Produces one group containing all the query results.
  • One or more matcher names - The query results are grouped by the specified nodes or relationships. If this list covers all available matchers in the query, the number of groups is equal to the number of query results.
Query Tag Filter (query_tag_filter) Filters named nodes in the graph queries by assigned tags.
System ID Expression mapping from graph query to a system_id, e.g. "system.system_id" if "system" is a name in the graph query.
Additional Keys Each additional key/value pair is used to extend properties of output stages where value is considered as an expression executed in context of the graph query and its result is used as a property value with respective key. The value of this property is evaluated for each item to associate items with metrics provided by a corresponding collector service. The association is done by keys because each collector reports a set of metrics where each metric is identified by a key in a format that is specific for each collector.
Enable Streaming (enable_streaming) Makes samples of output stages streamed if enabled. An optional boolean that defaults to False. If set to True, all output stages of this processor are streamed in the generic protobuf schema.

Example: Service Data Collector

In this example, we create a DSS that has an entry for every fabric interface in the system. Each entry is implicitly tagged by "system_id" and "key" (where key happens to be the interface name for the interface service). Furthermore, as we have specified an additional property "role", each entry is also tagged by system role.