p4runtime

package
v1.30.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 22, 2024 License: MIT Imports: 16 Imported by: 0

README

P4 Runtime Input Plugin

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

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type P4runtime

type P4runtime struct {
	Endpoint            string          `toml:"endpoint"`
	DeviceID            uint64          `toml:"device_id"`
	CounterNamesInclude []string        `toml:"counter_names_include"`
	Log                 telegraf.Logger `toml:"-"`
	EnableTLS           bool            `toml:"enable_tls"`
	internaltls.ClientConfig
	// contains filtered or unexported fields
}

func (*P4runtime) Gather

func (p *P4runtime) Gather(acc telegraf.Accumulator) error

func (*P4runtime) Init

func (p *P4runtime) Init() error

func (*P4runtime) SampleConfig

func (*P4runtime) SampleConfig() string

func (*P4runtime) Stop

func (p *P4runtime) Stop()

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL