159 lines
9.3 KiB
Markdown
159 lines
9.3 KiB
Markdown
|
# Prometheus Statistics
|
||
|
|
||
|
Each contiv-agent exposes statistics in Prometheus format at port `9999` by default.
|
||
|
Exposed data is split into two groups:
|
||
|
- `/stats` provides statistics for VPP interfaces managed by contiv-agent
|
||
|
Prometheus data is a set of counters with labels. For each interface,
|
||
|
the following counters are exposed:
|
||
|
* *inPackets*
|
||
|
* *outPackets*
|
||
|
* *inBytes*
|
||
|
* *outBytes*
|
||
|
* *ipv4Packets*
|
||
|
* *ipv6Packets*
|
||
|
* *outErrorPackets*
|
||
|
* *dropPackets*
|
||
|
* *inMissPackets*
|
||
|
* *inNobufPackets*
|
||
|
* *puntPackets*
|
||
|
|
||
|
Labels let you add additional information to a counter. The *interfaceName* and *node*
|
||
|
labels are specified for all counters. If an interface is associated with a particular
|
||
|
pod, then the *podName* and *podNamespace* labels are also specified for its counters;
|
||
|
otherwise, a placeholder value (`--`) is used (for example, for node interconnect
|
||
|
interfaces).
|
||
|
- `/metrics` provides general go runtime statistics
|
||
|
|
||
|
To access Prometheus stats of a node you can use `curl localhost:9999/stats` from the node. The output of contiv-agent running at k8s master node looks similar to the following:
|
||
|
|
||
|
```
|
||
|
$ curl localhost:9999/stats
|
||
|
# HELP dropPackets Number of dropped packets for interface
|
||
|
# TYPE dropPackets gauge
|
||
|
dropPackets{interfaceName="GigabitEthernet0/9/0",node="dev",podName="--",podNamespace="--"} 0
|
||
|
dropPackets{interfaceName="tap-vpp2",node="dev",podName="--",podNamespace="--"} 52
|
||
|
dropPackets{interfaceName="tap0e6439a7a934336",node="dev",podName="web-667bdcb4d8-pxkfs",podNamespace="default"} 9
|
||
|
dropPackets{interfaceName="tap5338a3285ad6bd7",node="dev",podName="kube-dns-6f4fd4bdf-rsz9b",podNamespace="kube-system"} 12
|
||
|
dropPackets{interfaceName="vxlanBVI",node="dev",podName="--",podNamespace="--"} 0
|
||
|
# HELP inBytes Number of received bytes for interface
|
||
|
# TYPE inBytes gauge
|
||
|
inBytes{interfaceName="GigabitEthernet0/9/0",node="dev",podName="--",podNamespace="--"} 0
|
||
|
inBytes{interfaceName="tap-vpp2",node="dev",podName="--",podNamespace="--"} 24716
|
||
|
inBytes{interfaceName="tap0e6439a7a934336",node="dev",podName="web-667bdcb4d8-pxkfs",podNamespace="default"} 726
|
||
|
inBytes{interfaceName="tap5338a3285ad6bd7",node="dev",podName="kube-dns-6f4fd4bdf-rsz9b",podNamespace="kube-system"} 6113
|
||
|
inBytes{interfaceName="vxlanBVI",node="dev",podName="--",podNamespace="--"} 0
|
||
|
# HELP inErrorPackets Number of received packets with error for interface
|
||
|
# TYPE inErrorPackets gauge
|
||
|
inErrorPackets{interfaceName="GigabitEthernet0/9/0",node="dev",podName="--",podNamespace="--"} 0
|
||
|
inErrorPackets{interfaceName="tap-vpp2",node="dev",podName="--",podNamespace="--"} 0
|
||
|
inErrorPackets{interfaceName="tap0e6439a7a934336",node="dev",podName="web-667bdcb4d8-pxkfs",podNamespace="default"} 0
|
||
|
inErrorPackets{interfaceName="tap5338a3285ad6bd7",node="dev",podName="kube-dns-6f4fd4bdf-rsz9b",podNamespace="kube-system"} 0
|
||
|
inErrorPackets{interfaceName="vxlanBVI",node="dev",podName="--",podNamespace="--"} 0
|
||
|
# HELP inMissPackets Number of missed packets for interface
|
||
|
# TYPE inMissPackets gauge
|
||
|
inMissPackets{interfaceName="GigabitEthernet0/9/0",node="dev",podName="--",podNamespace="--"} 0
|
||
|
inMissPackets{interfaceName="tap-vpp2",node="dev",podName="--",podNamespace="--"} 0
|
||
|
inMissPackets{interfaceName="tap0e6439a7a934336",node="dev",podName="web-667bdcb4d8-pxkfs",podNamespace="default"} 0
|
||
|
inMissPackets{interfaceName="tap5338a3285ad6bd7",node="dev",podName="kube-dns-6f4fd4bdf-rsz9b",podNamespace="kube-system"} 0
|
||
|
inMissPackets{interfaceName="vxlanBVI",node="dev",podName="--",podNamespace="--"} 0
|
||
|
# HELP inNobufPackets Number of received packets ??? for interface
|
||
|
# TYPE inNobufPackets gauge
|
||
|
inNobufPackets{interfaceName="GigabitEthernet0/9/0",node="dev",podName="--",podNamespace="--"} 0
|
||
|
inNobufPackets{interfaceName="tap-vpp2",node="dev",podName="--",podNamespace="--"} 0
|
||
|
inNobufPackets{interfaceName="tap0e6439a7a934336",node="dev",podName="web-667bdcb4d8-pxkfs",podNamespace="default"} 0
|
||
|
inNobufPackets{interfaceName="tap5338a3285ad6bd7",node="dev",podName="kube-dns-6f4fd4bdf-rsz9b",podNamespace="kube-system"} 0
|
||
|
inNobufPackets{interfaceName="vxlanBVI",node="dev",podName="--",podNamespace="--"} 0
|
||
|
# HELP inPackets Number of received packets for interface
|
||
|
# TYPE inPackets gauge
|
||
|
inPackets{interfaceName="GigabitEthernet0/9/0",node="dev",podName="--",podNamespace="--"} 0
|
||
|
inPackets{interfaceName="tap-vpp2",node="dev",podName="--",podNamespace="--"} 97
|
||
|
inPackets{interfaceName="tap0e6439a7a934336",node="dev",podName="web-667bdcb4d8-pxkfs",podNamespace="default"} 9
|
||
|
inPackets{interfaceName="tap5338a3285ad6bd7",node="dev",podName="kube-dns-6f4fd4bdf-rsz9b",podNamespace="kube-system"} 60
|
||
|
inPackets{interfaceName="vxlanBVI",node="dev",podName="--",podNamespace="--"} 0
|
||
|
# HELP ipv4Packets Number of ipv4 packets for interface
|
||
|
# TYPE ipv4Packets gauge
|
||
|
ipv4Packets{interfaceName="GigabitEthernet0/9/0",node="dev",podName="--",podNamespace="--"} 0
|
||
|
ipv4Packets{interfaceName="tap-vpp2",node="dev",podName="--",podNamespace="--"} 68
|
||
|
ipv4Packets{interfaceName="tap0e6439a7a934336",node="dev",podName="web-667bdcb4d8-pxkfs",podNamespace="default"} 0
|
||
|
ipv4Packets{interfaceName="tap5338a3285ad6bd7",node="dev",podName="kube-dns-6f4fd4bdf-rsz9b",podNamespace="kube-system"} 52
|
||
|
ipv4Packets{interfaceName="vxlanBVI",node="dev",podName="--",podNamespace="--"} 0
|
||
|
# HELP ipv6Packets Number of ipv6 packets for interface
|
||
|
# TYPE ipv6Packets gauge
|
||
|
ipv6Packets{interfaceName="GigabitEthernet0/9/0",node="dev",podName="--",podNamespace="--"} 0
|
||
|
ipv6Packets{interfaceName="tap-vpp2",node="dev",podName="--",podNamespace="--"} 26
|
||
|
ipv6Packets{interfaceName="tap0e6439a7a934336",node="dev",podName="web-667bdcb4d8-pxkfs",podNamespace="default"} 9
|
||
|
ipv6Packets{interfaceName="tap5338a3285ad6bd7",node="dev",podName="kube-dns-6f4fd4bdf-rsz9b",podNamespace="kube-system"} 8
|
||
|
ipv6Packets{interfaceName="vxlanBVI",node="dev",podName="--",podNamespace="--"} 0
|
||
|
# HELP outBytes Number of transmitted bytes for interface
|
||
|
# TYPE outBytes gauge
|
||
|
outBytes{interfaceName="GigabitEthernet0/9/0",node="dev",podName="--",podNamespace="--"} 0
|
||
|
outBytes{interfaceName="tap-vpp2",node="dev",podName="--",podNamespace="--"} 5203
|
||
|
outBytes{interfaceName="tap0e6439a7a934336",node="dev",podName="web-667bdcb4d8-pxkfs",podNamespace="default"} 0
|
||
|
outBytes{interfaceName="tap5338a3285ad6bd7",node="dev",podName="kube-dns-6f4fd4bdf-rsz9b",podNamespace="kube-system"} 17504
|
||
|
outBytes{interfaceName="vxlanBVI",node="dev",podName="--",podNamespace="--"} 0
|
||
|
# HELP outErrorPackets Number of transmitted packets with error for interface
|
||
|
# TYPE outErrorPackets gauge
|
||
|
outErrorPackets{interfaceName="GigabitEthernet0/9/0",node="dev",podName="--",podNamespace="--"} 0
|
||
|
outErrorPackets{interfaceName="tap-vpp2",node="dev",podName="--",podNamespace="--"} 0
|
||
|
outErrorPackets{interfaceName="tap0e6439a7a934336",node="dev",podName="web-667bdcb4d8-pxkfs",podNamespace="default"} 0
|
||
|
outErrorPackets{interfaceName="tap5338a3285ad6bd7",node="dev",podName="kube-dns-6f4fd4bdf-rsz9b",podNamespace="kube-system"} 0
|
||
|
outErrorPackets{interfaceName="vxlanBVI",node="dev",podName="--",podNamespace="--"} 0
|
||
|
# HELP outPackets Number of transmitted packets for interface
|
||
|
# TYPE outPackets gauge
|
||
|
outPackets{interfaceName="GigabitEthernet0/9/0",node="dev",podName="--",podNamespace="--"} 0
|
||
|
outPackets{interfaceName="tap-vpp2",node="dev",podName="--",podNamespace="--"} 49
|
||
|
outPackets{interfaceName="tap0e6439a7a934336",node="dev",podName="web-667bdcb4d8-pxkfs",podNamespace="default"} 0
|
||
|
outPackets{interfaceName="tap5338a3285ad6bd7",node="dev",podName="kube-dns-6f4fd4bdf-rsz9b",podNamespace="kube-system"} 45
|
||
|
outPackets{interfaceName="vxlanBVI",node="dev",podName="--",podNamespace="--"} 0
|
||
|
# HELP puntPackets Number of punt packets for interface
|
||
|
# TYPE puntPackets gauge
|
||
|
puntPackets{interfaceName="GigabitEthernet0/9/0",node="dev",podName="--",podNamespace="--"} 0
|
||
|
puntPackets{interfaceName="tap-vpp2",node="dev",podName="--",podNamespace="--"} 0
|
||
|
puntPackets{interfaceName="tap0e6439a7a934336",node="dev",podName="web-667bdcb4d8-pxkfs",podNamespace="default"} 0
|
||
|
puntPackets{interfaceName="tap5338a3285ad6bd7",node="dev",podName="kube-dns-6f4fd4bdf-rsz9b",podNamespace="kube-system"} 0
|
||
|
puntPackets{interfaceName="vxlanBVI",node="dev",podName="--",podNamespace="--"} 0
|
||
|
|
||
|
```
|
||
|
|
||
|
|
||
|
In order to browse stats in web UI Prometheus, it must be started locally by following the information in
|
||
|
the [Prometheus Getting Started Guide](https://prometheus.io/docs/prometheus/latest/getting_started/).
|
||
|
|
||
|
If you start Prometheus on a node, the following sample config can be used:
|
||
|
```yaml
|
||
|
global:
|
||
|
scrape_interval: 15s
|
||
|
|
||
|
scrape_configs:
|
||
|
- job_name: 'contiv_stats'
|
||
|
metrics_path: '/stats'
|
||
|
static_configs:
|
||
|
- targets: ['localhost:9999']
|
||
|
- job_name: 'contiv_agent'
|
||
|
# metrics_path defaults to '/metrics'
|
||
|
static_configs:
|
||
|
- targets: ['localhost:9999']
|
||
|
```
|
||
|
|
||
|
Once Prometheus is started with the specified config, you should be able access its web UI at
|
||
|
`localhost:9090`.
|
||
|
```
|
||
|
tester@dev:~/Downloads/prometheus-2.1.0.linux-amd64$ ./prometheus --config.file=config.yml
|
||
|
```
|
||
|
|
||
|
If security features are enabled for the HTTP endpoint, then the config must be adjusted:
|
||
|
```yaml
|
||
|
- job_name: 'contiv_secured'
|
||
|
|
||
|
scheme: https
|
||
|
basic_auth:
|
||
|
username: user
|
||
|
password: pass
|
||
|
metrics_path: /stats
|
||
|
tls_config:
|
||
|
insecure_skip_verify: true
|
||
|
# CA certificate to validate API server certificate with.
|
||
|
#[ ca_file: <filename> ]
|
||
|
static_configs:
|
||
|
- targets: ['localhost:9191']
|
||
|
```
|