mtr
is a great tool for troubleshooting connection problems and is one of the first things I install on a Linux machine. It is a traceroute
on steroids. It provides additional information and can pinpoint problems with specific nodes on the network.
We’ll focus on mrt
on Linux and ICMP only, and I hope I can give you some insight into this simple but helpful tool.
The Basics
To get started, run the following command to get an interactive/ live view of the results:
mtr DESTINATION
My traceroute [v0.95]
mtr-server-name (192.168.10.175) -> dest-server-name (10.0.10.95) 2024-08-27T13:47:28+0000
Keys: Help Display mode Restart statistics Order of fields quit
Packets Pings
Host Loss% Snt Last Avg Best Wrst StDev
1. _gateway 0.0% 138 0.4 2.5 0.3 75.8 10.1
2. 10.254.3.254 0.0% 138 0.2 0.2 0.1 3.8 0.3
3. 10.254.1.254 0.0% 138 0.3 0.2 0.2 0.4 0.0
4. 10.254.28.70 0.0% 138 20.0 20.1 20.0 20.4 0.1
5. 10.0.10.95 0.0% 138 20.2 20.4 19.9 45.0 2.5
Results Explained
Host Loss% Snt Last Avg Best Wrst StDev
1. 10.11.0.1 0.0% 2 18.1 18.3 18.1 18.4 0.2
[...]
- Explained:
Host
- Hop information, which can be changedLoss%
- percentage of packet lossSnt
- number of packets/cycles sentLast
- is the Round-Tip-Time (RTT
) of the last packet sent.Avg
- averageRTT
of all packets sentBest
- fastestRTT
of all sent packetsWrst
- worstRTT
of all sent packetsStDev
- standard deviation of all sent packets
This is the default output explained, and it is all I need often enough. However, you can change the columns: the order, remove and even add additional columns with -o FIELDS, --order FIELDS
:
│L │ Loss ratio │
├──┼─────────────────────┤
│D │ Dropped packets │
├──┼─────────────────────┤
│R │ Received packets │
├──┼─────────────────────┤
│S │ Sent Packets │
├──┼─────────────────────┤
│N │ Newest RTT(ms) │
├──┼─────────────────────┤
│B │ Min/Best RTT(ms) │
├──┼─────────────────────┤
│A │ Average RTT(ms) │
├──┼─────────────────────┤
│W │ Max/Worst RTT(ms) │
├──┼─────────────────────┤
│V │ Standard Deviation │
├──┼─────────────────────┤
│G │ Geometric Mean │
├──┼─────────────────────┤
│J │ Current Jitter │
├──┼─────────────────────┤
│M │ Jitter Mean/Avg. │
├──┼─────────────────────┤
│X │ Worst Jitter │
├──┼─────────────────────┤
│I │ Interarrival Jitter │
└──┴─────────────────────┘
Common Options
mtr
gives us more options. I’ll show you the most common options here:
- Display the help menu:
-h, --help
- Choose the Internet Protocol Version:
-4
# IPv4-6
# IPv6- Don’t resolve any host names:
-n, --no-dns
- Show host name and IPs:
-b, --show-ips
- Choose a spcific interface:
-I NAME, --interface NAME
Choose a source IP address:
:-a ADDRESS, --address ADDRESS
- Manage the number of cycles and interval:
-c COUNT, --report-cycles COUNT
# number of cycles-i SECONDS, --interval SECONDS
# time in seconds between ICMP requests, default is 1 second-s PACKETSIZE, --psize PACKETSIZE
# payload in bytes, inclusive IP+ICMP headers. A negative number will randomize the size up to that number-f NUM, --first-ttl NUM
# set start TTL-m NUM, --max-ttl NUM
# set maximum TTL, default is 30
There are more specific options for MPLS, Autonomous System (AS) numbers and so on.
Interactive Mode
By default, mtr
starts in interactive or live mode.
The most important shortcuts to control this mode are p
to pause, SPACE
to resume, r
to reset all counters, n
to toggle hostname resolution, d
to switch the display mode, and h
to show help and all other options.
The display modes you can choose:
Report mode
This is not the official name, but it makes things a little bit clearer. If you want to** automate your workflow and save the results to a file**, use the -r
/ --report
options. This will only show the results and let you pipe the results out. By default, the --report
option sets the number of cycles to 10
.
Use -F FILENAME, --filename FILENAME
to import a list of hosts that get processed one after the other.
Saving results to file
I haven’t had any luck with showing the results live and saving them to a file at the same time. Instead, the following example runs 5 cycles, displays the final results in the terminal, and additionally saves them to a file named results
:
user@pleasejustwork:~$ mtr -n -r -c 5 server-name | tee results
Start: 2024-07-08T15:57:45+0000
HOST: server-name Loss% Snt Last Avg Best Wrst StDev
1.|-- 192.168.10.254 0.0% 5 0.4 0.3 0.3 0.4 0.0
2.|-- 10.254.3.254 0.0% 5 0.2 0.2 0.2 0.3 0.0
3.|-- 10.254.1.254 0.0% 5 0.3 0.3 0.3 0.4 0.1
4.|-- 198.51.100.44 0.0% 5 13.2 13.6 13.2 14.8 0.7
5.|-- 10.44.193.73 0.0% 5 13.5 13.5 13.5 13.6 0.1
6.|-- 100.64.48.248 0.0% 5 13.5 13.8 13.5 14.0 0.2
7.|-- 10.44.204.26 0.0% 5 18.9 18.9 18.9 19.0 0.0
8.|-- 10.254.32.2 0.0% 5 19.0 19.0 19.0 19.1 0.0
9.|-- 10.0.10.95 0.0% 5 19.8 20.9 18.9 27.5 3.7
user@pleasejustwork:~$ cat results
Start: 2024-07-08T15:57:45+0000
HOST: server-name Loss% Snt Last Avg Best Wrst StDev
1.|-- 192.168.15.254 0.0% 5 0.4 0.3 0.3 0.4 0.0
2.|-- 10.254.3.254 0.0% 5 0.2 0.2 0.2 0.3 0.0
3.|-- 10.254.1.254 0.0% 5 0.3 0.3 0.3 0.4 0.1
4.|-- 198.51.100.44 0.0% 5 13.2 13.6 13.2 14.8 0.7
5.|-- 10.44.193.73 0.0% 5 13.5 13.5 13.5 13.6 0.1
6.|-- 100.64.48.248 0.0% 5 13.5 13.8 13.5 14.0 0.2
7.|-- 10.44.204.26 0.0% 5 18.9 18.9 18.9 19.0 0.0
8.|-- 10.254.32.2 0.0% 5 19.0 19.0 19.0 19.1 0.0
9.|-- 10.0.10.95 0.0% 5 19.8 20.9 18.9 27.5 3.7
Further Processing
If you want to process the data in another system, it makes sense to save the results of mtr
in a different format. mtr
gives you some options:
-x, --xml
-C, --csv
-j, --json
Examples for the --csv
format:
Mtr_Version,Start_Time,Status,Host,Hop,Ip,Loss%,Snt, ,Last,Avg,Best,Wrst,StDev,
MTR.0.95,1720455178,OK,server-name,1,192.168.15.254,0.00,5,0,0.46,8.96,0.33,43.25,19.16
MTR.0.95,1720455178,OK,server-name,2,10.254.3.254,0.00,5,0,0.26,0.25,0.22,0.26,0.02
MTR.0.95,1720455178,OK,server-name,3,10.254.1.254,0.00,5,0,0.23,0.71,0.23,2.29,0.89
MTR.0.95,1720455178,OK,server-name,4,198.51.100.44,0.00,5,0,13.33,13.48,13.24,14.27,0.44
MTR.0.95,1720455178,OK,server-name,5,10.44.193.73,0.00,5,0,19.36,16.65,13.57,22.82,4.24
MTR.0.95,1720455178,OK,server-name,6,100.64.48.248,0.00,5,0,17.40,15.67,13.96,18.63,2.19
MTR.0.95,1720455178,OK,server-name,7,10.44.204.26,0.00,5,0,21.51,21.03,19.04,22.59,1.57
MTR.0.95,1720455178,OK,server-name,8,10.254.32.2,0.00,5,0,18.90,19.87,18.90,21.62,1.22
MTR.0.95,1720455178,OK,server-name,9,10.0.10.95,0.00,5,0,19.07,22.28,19.07,33.95,6.53
Conclusion
So, I hope you found this short primer helpful and can use it in your next troubleshooting session.
Most recent Articles: