
This commit adds code in GO language to expose Physical Function interface device info and statistics (metrics) of a node using REST API service. NIC Statistics provided by Netlink. Following APIs are implemented: /metrics -- all statistics in OpenMetrics format /metrics/device/{DeviceName} -- particular device statistics in OpenMetrics format /metrics/pci-addr/{PciAddr} -- particular pci-address statistics in OpenMetrics format /json/metrics -- all metrics in json format /json/metrics/device/{DeviceName} -- particular device statistics in json format /json/metrics/pci-addr/{PciAddr} -- particular pci-address statistics in json format Test Plan: PASS: GO linting PASS: Unit test PASS: Api test. PASS: Docker image build process defined here [1] PASS: Created container image of this app, pushed to local registry and deployed on AIO-SX lab using sample deployment file. Then tested the APIs and validated the results. Story: 2010918 Task: 48794 [1]https://docs.starlingx.io/developer_resources/build_docker_image.html Change-Id: I5229b338b9e9afff3b02fe2389cfcd0c4e0590f6 Signed-off-by: AbhishekJ <abhishek.jaiswal@windriver.com>
app-node-interface-metrics-exporter
app-node-interface-metrics-exporter flux cd app
Top Level Directory Structure
├── app-node-interface-metrics-exporter # Root Folder
│ ├── debian_build_layer.cfg
│ ├── debian_iso_image.inc
│ ├── debian_pkg_dirs
│ ├── metrics-exporter-api # Go code for api server which will expose Metrics for NIC .
│ ├── python3-k8sapp-node-interface-metrics-exporter # lifecycle managemnt code to support flux apps
│ ├── README.md
│ ├── requirements.txt
│ ├── stx-node-interface-metrics-exporter-helm # helm Package manager for the app
│ ├── test-requirements.txt
│ └── tox.ini
all command related to go code should run from
app-node-interface-metrics-exporter/metrics-exporter-api/docker/metrics-exporter-api
About metrics-exporter-api
It is Simple Http Server which reads network interface (PCI devices) and exposes following API's
- http://{hostname}:{port}/metrics -- all node metrics in OpenMetrics format
- http://{hostname}:{port}/metrics/device/{DeviceName} -- specified interface metrics identified by device name in OpenMetrics format
- http://{hostname}:{port}/metrics/pci-addr/{PciAddr} -- specified interface metrics identified by PCI address in OpenMetrics format
- http://{hostname}:{port}/json/metrics -- all node metrics in JSON format
- http://{hostname}:{port}/json/metrics/device/{DeviceName} -- specified interface metrics identified by device name in JSON format
- http://{hostname}:{port}/json/metrics/pci-addr/{PciAddr} -- specified interface metrics identified by PCI address in JSON format
Makefile Support
$ make
help: Show this help.
install_dep: install go dependency
run: run app on host machine
test: run go unit test
testcov: run go coverage test
vet: run go vet
lint: run go lint
build_linux: Build application
build_image: Build docker image
$ make run
will start go dev http server
Run time Options / params for the metrics-exporter-app usage
Options | Help |
---|---|
-log.file |
Log file name (default "node_metrics_api.log") |
-log.level |
log level. (default "info"). Valid options trace, debug, info, warning, error, fatal and panic |
-log.file |
Log file name (default "node_metrics_api.log") |
-web.listen-address |
Port to listen on for web interface. (default ":9110") |
-path.sys |
mounted path for host /sys inside container (default "/sys") |
Local / Devlopment Set UP for metrics-exporter-api
pre requisite go 1.21.0
Container image reference for helm
References
Description
Languages
Go
69%
Python
21.8%
Makefile
7.8%
Dockerfile
1.3%