P4 is a language for programming the data plane of network devices,
such as Programmable Switches or Programmable Network Interface Cards.
The P4Runtime API is a control plane specification to manage
the data plane elements of those devices dynamically by a P4 program.
The p4runtime
plugin gathers metrics about Counter
values
present in P4 Program loaded onto networking device.
Metrics are collected through gRPC connection with
P4Runtime server.
P4Runtime Plugin uses PkgInfo.Name
field.
If user wants to gather information about program name, please follow
6.2.1. Annotating P4 code with PkgInfo instruction and apply changes
to your P4 program.
Global configuration options
In addition to the plugin-specific configuration settings, plugins support
additional global and plugin configuration settings. These settings are used to
modify metrics, tags, and field or create aliases and configure ordering, etc.
See the CONFIGURATION.md for more details.
Configuration
# P4Runtime telemetry input plugin
[[inputs.p4runtime]]
## Define the endpoint of P4Runtime gRPC server to collect metrics.
# endpoint = "127.0.0.1:9559"
## Set DeviceID required for Client Arbitration.
## https://p4.org/p4-spec/p4runtime/main/P4Runtime-Spec.html#sec-client-arbitration-and-controller-replication
# device_id = 1
## Filter counters by their names that should be observed.
## Example: counter_names_include=["ingressCounter", "egressCounter"]
# counter_names_include = []
## Optional TLS Config.
## Enable client-side TLS and define CA to authenticate the device.
# enable_tls = false
# tls_ca = "/etc/telegraf/ca.crt"
## Set minimal TLS version to accept by the client.
# tls_min_version = "TLS12"
## Use TLS but skip chain & host verification.
# insecure_skip_verify = true
## Define client-side TLS certificate & key to authenticate to the device.
# tls_cert = "/etc/telegraf/client.crt"
# tls_key = "/etc/telegraf/client.key"
Metrics
P4Runtime gRPC server communicates using p4runtime.proto Protocol Buffer.
Static information about P4 program loaded into programmable switch
are collected by GetForwardingPipelineConfigRequest
message.
Plugin gathers dynamic metrics with Read
method.
Readrequest
is defined with single Entity
of type CounterEntry
.
Since P4 Counter is array, plugin collects values of every cell of array
by wildcard query.
Counters defined in P4 Program have unique ID and name.
Counters are arrays, thus counter_index
informs
which cell value of array is described in metric.
Tags are constructed in given manner:
p4program_name
: P4 program name provided by user.
If user wants to gather information about program name, please follow
6.2.1. Annotating P4 code with PkgInfo instruction and apply changes
to your P4 program.
counter_name
: Name of given counter in P4 program.
counter_type
: Type of counter (BYTES, PACKETS, BOTH).
Fields are constructed in given manner:
bytes
: Number of bytes gathered in counter.
packets
Number of packets gathered in counter.
counter_index
: Index at which metrics are collected in P4 counter.
Example Output
Expected output for p4runtime plugin instance
running on host named p4runtime-host
:
p4_runtime,counter_name=MyIngress.egressTunnelCounter,counter_type=BOTH,host=p4 bytes=408i,packets=4i,counter_index=200i 1675175030000000000