beye.blog logo
Cisco Technologies

Automating ThousandEyes ICMP Tests with Python

3 min read
#ThousandEyes#Python#Network Monitoring#API#Network Automation
Automating ThousandEyes ICMP Tests with Python
Introduction

Let’s face it! Creating monitoring tests manually in the ThousandEyes web UI can feel like writing tickets by hand. It works, but when you have 40+ endpoints to check, that process doesn’t scale.

In my lab, I wanted to continuously monitor internal infrastructure across my ACI environment. Each node, APICs, leaves, spines, and servers, needed an ICMP reachability test from my thousandeyes enterprise agent. The manual way would have taken forever, so I automated it.

The Challenge

The goal was simple:

  • Read a CSV file of IPs and names
  • Create ICMP Agent-to-Server tests for each
  • Search for a specific

At first, I tried using the v7 API endpoint /v7/tests/agent-to-server/icmp, but that path doesn’t accept POST.
It returned a 405 “Method Not Allowed.” The correct endpoint is /v7/tests/agent-to-server, and you define “protocol”: “icmp” inside the body.

Another challenge came up quickly — ThousandEyes rejects private (RFC1918) targets when public BGP monitors are enabled. The fix was to disable BGP measurements automatically whenever the target IP is private.

The CSV Format

The input file is a simple CSV — one row per target. Include a header row with at least two columns:

ipname
10.xx.xx.xxserver1
10.yy.yy.yyserver2
10.zz.zz.zzserver3

You can name the first column ip, target, host, or hostname — the script detects any of them automatically.

Save it as your_file.csv and keep it in the same directory as the Python script.

The API Setup


				
					export THOUSANDEYES_TOKEN=te.xxxxxx
				
			

You can test that it works with:



				
					curl -H "Authorization: Bearer $THOUSANDEYES_TOKEN" https://api.thousandeyes.com/v7/agents

				
			

If you get JSON output with your agent list, you’re good to go.

The Script

The Python script connects to ThousandEyes, finds the agent named “thousandeyes-agent, reads your CSV, and creates an ICMP test for every target. For private IPs, it disables BGP measurements automatically.

You’ll need requests installed to execute it.

Here is the Python script:

Then simply run:



				
					python3 create_te_icmp_tests.py your_file.csv
				
			

The output should look like this:



				
					python3 create_te_icmp_tests.py Downloads/Book1.csv

Using agent 'thousandeyes-agent' (ID 1583875)

Found 45 targets. Creating ICMP tests...

[OK] Created ICMP - APIC-MGMT-1 (ID 7737792)

[OK] Created ICMP - Leaf-1111 (ID 7737793)

[OK] Created ICMP - Leaf-1112 (ID 7737794)

[OK] Created ICMP - Leaf-1113 (ID 7737795)

[OK] Created ICMP - Leaf-1114 (ID 7737797)

[OK] Created ICMP - Spine-1101 (ID 7737798)

[OK] Created ICMP - Leaf-1211 (ID 7737799)

[OK] Created ICMP - Leaf-1212 (ID 7737800)
				
			

Why It Matters

Once the script is in place, your monitoring setup becomes dynamic.
Add a new device? Just append it to the CSV and rerun the script.
Need to rebuild? Delete and regenerate all tests in a single command.

This small automation saves time, removes errors, and ensures consistent monitoring across environments.

Happy monitoring 🚀

Summary
  • Prepare a CSV with columns: ip,name

  • Generate a v7 Personal Access Token

  • Use /v7/tests/agent-to-server with "protocol": "icmp"

  • Disable BGP for private IPs

  • Automate everything with a single Python command

Automation isn’t about writing less, it’s about never writing the same thing twice.

References
Chris Beye

About the Author

Chris Beye

Network automation enthusiast and technology explorer sharing practical insights on Cisco technologies, infrastructure automation, and home lab experiments. Passionate about making complex networking concepts accessible and helping others build better systems.

Read More Like This