{"id":39604984,"url":"https://github.com/eda-labs/eda-telemetry-lab","last_synced_at":"2026-01-18T07:59:10.581Z","repository":{"id":278153689,"uuid":"924180825","full_name":"eda-labs/eda-telemetry-lab","owner":"eda-labs","description":"Modern telemetry for your data center","archived":false,"fork":false,"pushed_at":"2025-12-16T17:32:24.000Z","size":5770,"stargazers_count":27,"open_issues_count":2,"forks_count":7,"subscribers_count":5,"default_branch":"main","last_synced_at":"2025-12-18T20:56:01.258Z","etag":null,"topics":["clab-topo","nokia-eda","nokia-srlinux"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/eda-labs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-01-29T15:03:06.000Z","updated_at":"2025-12-17T15:49:54.000Z","dependencies_parsed_at":"2025-12-15T22:09:39.129Z","dependency_job_id":null,"html_url":"https://github.com/eda-labs/eda-telemetry-lab","commit_stats":null,"previous_names":["eda-labs/eda-telemetry-lab"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/eda-labs/eda-telemetry-lab","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eda-labs%2Feda-telemetry-lab","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eda-labs%2Feda-telemetry-lab/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eda-labs%2Feda-telemetry-lab/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eda-labs%2Feda-telemetry-lab/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eda-labs","download_url":"https://codeload.github.com/eda-labs/eda-telemetry-lab/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eda-labs%2Feda-telemetry-lab/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28533636,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-18T00:39:45.795Z","status":"online","status_checked_at":"2026-01-18T02:00:07.578Z","response_time":98,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["clab-topo","nokia-eda","nokia-srlinux"],"created_at":"2026-01-18T07:59:09.983Z","updated_at":"2026-01-18T07:59:10.574Z","avatar_url":"https://github.com/eda-labs.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Nokia EDA Telemetry Lab\n\n[![Discord][discord-svg]][discord-url]\n\n[discord-svg]: https://gitlab.com/rdodin/pics/-/wikis/uploads/b822984bc95d77ba92d50109c66c7afe/join-discord-btn.svg\n[discord-url]: https://eda.dev/discord\n\nThe great divide between the tools network engineers use for configuration and those used for telemetry and monitoring leaves a significant gap in operational efficiency. As engineers build abstractions to configure the network and deploy the services on top of it, they also need to ensure that they can monitor the health of these services, and not just individual node-scoped metrics.\n\n[**Nokia EDA (Event Driven Automation)**](https://docs.eda.dev/) platform enables its users not only solve the challenge of configuring the infrastructure services, but also to get real-time state associated with them.\n\nIn this lab, a leaf and spine network composed of six [Nokia SR Linux](https://learn.srlinux.dev/) data center switches is managed by EDA and integrated into a modern telemetry and logging stack powered by Prometheus, Grafana, Loki, Alloy and Kafka open-source projects.\n\n![pic](https://gitlab.com/-/project/7617705/uploads/fe986438695fb7116fe26807a8509a64/CleanShot_2025-09-30_at_18.06.40.png)\n\nThe _all-in-one_ lab features the Grafana dashboard that takes the central stage of this lab, providing real-time insights into the health of the fabric and the network services, as well as serving as a single pane of glass for log aggregation and alarm monitoring:\n\n\u003chttps://github.com/user-attachments/assets/38efb03a-c4aa-4a52-820a-b96d8a7005ea\u003e\n\n## Lab Components\n\n- **Kubernetes platform:** The platform to run Nokia EDA. In this lab also hosts the telemetry stack components. Deployed automatically with [Kind](https://kind.sigs.k8s.io/) in a local lab environment.\n  - **Nokia EDA:** Automation platform managing the network fabric and exporting telemetry data, logs and alarms to the downstream systems.\n    - **Digital Twin (CX):** Horizontally scalable network simulation platform powered by Kubernetes, included with EDA.  \n            A leaf-spine topology is created directly in EDA CX and features Nokia SR Linux nodes that have 100% YANG coverage and support gNMI streaming telemetry for all its paths.  \n            Servers are represented with Linux containers equipped with `iperf3` to generate traffic and see dynamic network metrics in action.\n  - **Kafka Exporter:** EDA application that can export various data from EDA to Kafka brokers. In this lab, it is used to export alarms and deviations.\n  - **Prometheus Exporter:** EDA application that exports telemetry data in Prometheus format. In this lab, it is used to export fabric and services metrics, along with node-specific metrics.\n  - **Telemetry \u0026 Logging Stack:**\n    - **Prometheus:** Collects and stores telemetry data exported by EDA Prometheus exporter.\n    - **Kafka:** Message broker that receives alarms and deviations from EDA via its Kafka exporter.\n    - **Alloy:** Stream processing engine that analyzes, parses, transforms and enriches telemetry data received from network nodes (syslog) and Kafka exporter (alarms). Alloy then forwards the processed data to Loki for storage.\n    - **Loki:** Log aggregation system that stores logs and alarms processed by Alloy.\n    - **Grafana:** Visualization platform that provides dashboards for telemetry metrics, logs and alarms.\n\n## Requirements\n\n\u003e [!IMPORTANT]\n\u003e **Nokia EDA Version:** 25.12.1 or later required. Free and automated [installation available](https://docs.eda.dev/25.12/getting-started/try-eda/).  \n\u003e The EDA platform must be installed and operational before proceeding with the lab deployment.\n\n1. **Helm**  \n    Kubernetes package manager. [Copy](https://docs.eda.dev/25.12/user-guide/using-the-clis/#helm) from your EDA playground directory or [install](https://helm.sh/docs/intro/install/).\n2. **Kubectl**  \n    Kubernetes CLI. [Copy](https://docs.eda.dev/25.12/user-guide/using-the-clis/#kubectl) from the playground directory or [install](https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/).\n\nBefore proceeding with the lab deployment, ensure you have a working EDA installation. You can use either:\n\n```bash\nkubectl -n eda-system get engineconfig engine-config \\\n-o jsonpath='{.status.run-status}{\"\\n\"}'\n```\n\nExpected output: `Started`\n\n## 🚀 Lab Deployment\n\nThe lab deployment is orchestrated by the `init.sh` script, which automates the setup by performing the following tasks:\n\n- Creates the `eda-telemetry` namespace\n- Deploys the fabric nodes\n- Deploys and configures the telemetry and logging stack\n- Configures the servers interfaces\n- Configures EDA resources for exporting telemetry, logs and alarms\n\nThe user must provide the `EDA_URL` environment variable pointing to their EDA UI/API endpoint:\n\n```bash\nEDA_URL=https://test.eda.com:9443 ./init.sh\n```\n\n\u003e [!NOTE]\n\u003e If you want to use Containerlab instead of EDA Digital Twin, refer to the [Containerlab deployment](./clab/README.md) instructions.\n\n### Verify Deployment\n\nWhen the deployment completes, you should see the URL to access Grafana dashboard. Note, that Grafana may take a few minutes to start up, until then you may see a proxy server error when accessing the URL.\n\n\u003e Navigate to the ${EDA_URL}/core/httpproxy/v1/grafana/d/Telemetry_Playground/ to access Grafana.\n\nThe dashboard should display the deployed topology, and all the panels should be populating with data.\n\nYou can also log in to EDA UI and see the `eda-telemetry` namespace in the list of namespaces and the associated resources created by the lab deployment script.\n\n## Accessing Network Elements\n\nTo access the SR Linux nodes, use the provided node-ssh.sh script in the `./cx` directory of the lab:\n\n```bash\n./cx/node-ssh leaf1\n```\n\n\u003e SR Linux default credentials: `admin` / `NokiaSrl1!`\n\nTo open up the shell to the server containers, use the provided container-shell script in the `./cx` directory of the lab:\n\n```bash\n./cx/container-shell server1\n```\n\nThe shell is opened for the `admin` user.\n\n## Telemetry \u0026 Logging Stack\n\n### Telemetry\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"./docs/eda_telemetry_lab-tooling.drawio.svg\" alt=\"Drawio Example\"\u003e\n\u003c/p\u003e\n\nNokia EDA is the single interface for the telemetry data collection and export. As part of its normal operation, EDA collects telemetry data such as node-scoped metrics, service metrics, alarms and deviations. The data is then exported to the downstream systems using the following EDA applications:\n\n- **Prometheus Exporter:** Using the `Export` resource the admin instructs the application what metrics to make available in a Prometheus format. See the [`0020_prom_exporters.yaml`](./cx/manifests/0020_prom_exporters.yaml) manifest for details.  \n    The Prometheus server running in the k8s cluster is configured to scrape the metrics exported by the Prometheus exporter app.  \n    The Prometheus UI can be accessed via:\n    \u003e `${EDA_URL}/core/httpproxy/v1/prometheus/query`\n- **Kafka Exporter:** Using the `Producer` resource the admin instructs the application to send deviations and alarms to the Kafka broker running in the cluster. See the [`0021_kafka_exporter.yaml`](./cx/manifests/0021_kafka_exporter.yaml) manifest for details.  \n    The Grafana Alloy application is configured to consume the alarms and deviations from Kafka, process them and forward them to Loki for storage.\n\n### Logging\n\nThe Syslog messages are sent directly from the SR Linux nodes to Grafana Alloy, which processes and forwards them to Loki for storage.\n\n## Services and Traffic Generation\n\nTo simulate a datacenter pod, the lab features four Linux containers acting as servers connected to the leaf switches.\n\nServers are configured with bond interfaces and a pair of VLANs simulating two different tenants in the datacenter. The tenants have their workloads connected using two distinct services:\n\n- Layer 2 service using MAC VRF\n- Layer 3 service using a combination of the MAC VRF and IP VRF\n\nThe following diagram illustrates the services and the participating VLANs:\n\n![high-level-svc](https://gitlab.com/-/project/7617705/uploads/641816f3d1380ed2ebdacbee7f7d28c9/CleanShot_2025-10-01_at_15.35.43.png)\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eDetailed connectivity diagram\u003c/b\u003e\u003c/summary\u003e\n\u003ca href=\"https://gitlab.com/-/project/7617705/uploads/1f1ccf12b0261b861ae6652d427b79ea/CleanShot_2025-10-01_at_15.36.18.png\"\u003e\u003cimg src=https://gitlab.com/-/project/7617705/uploads/1f1ccf12b0261b861ae6652d427b79ea/CleanShot_2025-10-01_at_15.36.18.png/\u003e\u003c/a\u003e\n\u003c/details\u003e\n\nThe `./cx/traffic.sh` script orchestrates bidirectional iperf3 tests between server containers to generate realistic network traffic for telemetry observation.\n\n### Traffic Parameters\n\n| Parameter | Default Value | Environment Variable |\n|-----------|--------------|---------------------|\n| Duration | 10000 seconds | `DURATION` |\n| Bandwidth | 120K | - |\n| Parallel Streams | 20 | - |\n| MSS | 1400 | - |\n| Report Interval | 1 second | - |\n\n### Usage Examples\n\n```bash\n# Start all traffic flows\n./cx/traffic.sh start all\n\n# Start specific server traffic\n./cx/traffic.sh start server3\n./cx/traffic.sh start server4\n\n# Stop all traffic\n./cx/traffic.sh stop all\n\n# Custom duration (60 seconds)\nDURATION=60 ./cx/traffic.sh start all\n```\n\n\u003e [!TIP]\n\u003e Monitor traffic impact in real-time through Grafana dashboards while tests are running.\n\n## EDA Configuration\n\nThe lab is entirely automated, with all the necessary EDA resources declaratively defined in the manifests located in the `./manifests` and `./manifests/common` directories. Here is a short summary of the manifests and their purposes:\n\n| File | Description |\n|------|-------------------------|\n| `0000_apps.yaml` | Install EDA Prometheus and Kafka exporter apps |\n| `0020_prom_exporters.yaml` | Configuring Prometheus exporters to expose metrics for Prometheus |\n| `0021_kafka_exporter.yaml` | Configuring Kafka exporter for event streaming (alarms, deviations) |\n| `0025_json-rpc.yaml` | Configlet to configure JSON-RPC server on SR Linux nodes |\n| `0026_syslog.yaml` | Configlet to configure logging on SR Linux nodes |\n| `0030_fabric.yaml` | Fabric resource to deploy EVPN fabric |\n| `0040_ipvrf2001.yaml` | L3 Virtual Network to support L3 overlay services |\n| `0041_macvrf1001.yaml` | L2 Virtual Network to support L2 overlay services |\n| `0050_http_proxy.yaml` | HTTP proxy service to expose Grafana and Prometheus UI |\n\n## Removing the lab\n\nTo remove the lab, remove the namespace it was deployed in using [edactl](https://docs.eda.dev/25.12/user-guide/using-the-clis/#edactl) and kubectl:\n\n```bash\nedactl delete namespace eda-telemetry \u0026\u0026 \\\nkubectl wait --for=delete namespace eda-telemetry --timeout=300s\n```\n\nAfter deleting the namespace, you can redeploy the lab by running the `init.sh` script again.\n\n## Troubleshooting\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003ePods stuck in pending state\u003c/b\u003e\u003c/summary\u003e\n\nCheck if images are still downloading:\n\n```bash\nkubectl get pods -n eda-telemetry -o wide\nkubectl describe pod \u003cpod-name\u003e -n eda-telemetry\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eAlloy service no external IP\u003c/b\u003e\u003c/summary\u003e\n\nVerify MetalLB or load balancer configuration:\n\n```bash\nkubectl get svc -n eda-telemetry\nkubectl logs -n metallb-system -l app=metallb\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eCX namespace bootstrap fails\u003c/b\u003e\u003c/summary\u003e\n\nManually run the bootstrap:\n\n```bash\nkubectl -n eda-system exec -it $(kubectl -n eda-system get pods \\\n  -l eda.nokia.com/app=eda-toolbox -o jsonpath=\"{.items[0].metadata.name}\") \\\n  -- edactl namespace bootstrap eda-st\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eTraffic script fails\u003c/b\u003e\u003c/summary\u003e\n\nEnsure containers are running (Containerlab only):\n\n```bash\nsudo docker ps | grep eda-st\ncontainerlab inspect -t eda-st.clab.yaml\n```\n\n\u003c/details\u003e\n\n## Resources\n\n- **Documentation:** [EDA Docs](https://docs.eda.dev/)\n- **Support:** [EDA Discord Community](https://eda.dev/discord)\n- **SR Linux Learn:** [SR Linux Learning Platform](https://learn.srlinux.dev/)\n- **Containerlab:** [Containerlab Documentation](https://containerlab.dev/)\n\n---\n\nHappy automating and exploring your network with EDA Telemetry Lab! 🚀\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feda-labs%2Feda-telemetry-lab","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feda-labs%2Feda-telemetry-lab","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feda-labs%2Feda-telemetry-lab/lists"}