- Home
- Monitoring
- TCP monitoring
TCP monitoring: is the service still accepting connections?
Open a TCP connection to a host and port on a schedule and record how long the handshake takes. It is the same check as port monitoring, described for people who search for it as TCP.
- 30 monitors free
- No credit card
- Failures confirmed from other regions
- Amsterdam19msopen
- London28msopen
- Connect time19 ms
- Port25
- Timeout10 s
Illustrative example
Check it now, in your browser
No account. TCP monitoring: type a target and see roughly what it looks at. Nothing you type is stored.
A browser cannot open raw TCP, UDP or ICMP connections, and the public check API only speaks HTTP(S). So instead of a fake result, here is the command a monitor automates: it runs it on a schedule from several regions and confirms failures.
What a tcp monitor looks at
Handshake as the verdict
The check is up when the three-way handshake completes. Nothing is sent after that, so the service is judged on whether it accepts connections, not on what it says.
Refused versus silent
A refused connection means the host is alive and the service is not listening. A timeout means packets vanish on the way. The incident names which one you have.
Any port you choose
Mail on 25, 465 or 993, SSH on 22, MySQL on 3306, Postgres on 5432, Redis on 6379, or a custom admin port. Public hosts only; private ranges are refused.
Connect time history
Each handshake time is stored, so a database host that takes 400 ms to accept connections shows up on the chart before it starts refusing them.
TCP monitoring: what an alert looks like
The same event arrives as an e-mail, a Telegram message or a Slack card. This is the wording the channels send; the host, times and numbers are made up.
mail.clienta.com:25
mail.clienta.com:25 · Connection refused on mail.clienta.com:25 · confirmed from Amsterdam (AMS), London (LON)
| Error | Connection refused on mail.clienta.com:25 |
|---|---|
| Confirmed by | Amsterdam (AMS), London (LON) |
| Since | 14:02:11 UTC |
| Target | mail.clienta.com:25 |
| Next step | Check the server / hosting panel. Acknowledge so the team knows you are on it. |
AcknowledgeOpen incident
Tenium · checked from Amsterdam · 14:02 UTC
Tenium alerts
🔴 DOWN · mail.clienta.com:25 · Connection refused on mail.clienta.com:25 · confirmed from Amsterdam (AMS), London (LON)
reply /ack or acknowledge · open incident
TTenium APP 2:02 PM
DOWN · mail.clienta.com:25
mail.clienta.com:25 · Connection refused on mail.clienta.com:25 · confirmed from Amsterdam (AMS), London (LON)
- Error: Connection refused on mail.clienta.com:25
- Confirmed by: Amsterdam (AMS), London (LON)
- Target: mail.clienta.com:25
AcknowledgeOpen incident
Check the server / hosting panel. Acknowledge so the team knows you are on it. · checked from Amsterdam
TCP monitoring: e-mail, Discord and Google Chat work on every plan; Slack, Telegram, Teams and Mattermost start on Starter. There are no SMS or voice-call alerts.
Response time with a threshold
Every check stores how long the response took. TCP monitoring: drag the threshold and see when a slow-response alert would have fired.
How fast you find out
Pick a plan to see its check interval and how long a failure takes to reach you, including the confirmation round.
TCP monitoring: a failure lands at a random moment between two checks, so on average you wait half an interval, and the worst case is a whole interval plus the confirmation window. A single failing region is not enough: all two regions must agree before an incident opens. The other regions are asked straight away, and we allow up to 60 seconds for the answers.
How to set up tcp monitoring in 30 seconds
Enter the target
Add the hostname or public IP and the TCP port, and Tenium fills in a sensible timeout and default confirmation settings.
Pick an interval
Fastest check interval: 30 s on Pro and Agency, 1 min on Starter, 5 min on Free. Slower intervals are available on every plan.
Choose alert contacts
Choose who is told. Email, Discord and Google Chat work on every plan, Slack, Telegram, Teams and Mattermost start on Starter, webhooks on Pro.
Save
The first check runs within seconds. If a check ever fails, other regions re-check it before an incident opens, so one bad route does not page you.
What each error means
This is the text an incident shows in its Error line, the usual cause, and the first thing to look at.
ECONNREFUSEDConnection refused on mail.clienta.com:25
The host is up but nothing is listening on the port: the service crashed or was never started. The fastest failure to diagnose.
Shown as: Connection refused on mail.clienta.com:25
TIMEOUTTimeout after 10 s connecting to mail.clienta.com:25
The SYN got no answer. A firewall dropping packets, an overloaded host, or a security group that lost our checker’s address.
Shown as: Timeout after 10 s connecting to mail.clienta.com:25
EHOSTUNREACHHost unreachable
There is no route to the host: a network outage or a routing change between a region and your provider.
Shown as: Host unreachable
ECONNRESETConnection reset by peer
The host accepted the connection and killed it at once, often a connection limit or a rate-limiting rule.
Shown as: Connection reset by peer
ENOTFOUNDDNS lookup failed for mail.clienta.com
The name does not resolve. Check the record before blaming the service.
Shown as: DNS lookup failed for mail.clienta.com
TCP monitoring by plan
| Free $0/mo | Starter $7/mo | Pro $29/mo | Agency $59/mo | |
|---|---|---|---|---|
| Available | ✓ | ✓ | ✓ | ✓ |
| Monitors | 30 | 100 | 300 | 1000 |
| Fastest interval | 5 min | 1 min | 30 s | 30 s |
| Regions | 1 | 2 | 2 | 2 |
| Custom headers | — | — | ✓ | ✓ |
| Response-time alerts | — | — | ✓ | ✓ |
| Escalation to a second contact | — | — | ✓ | ✓ |
| Status pages | 1 | 3 | 10 | Unlimited |
Other monitor types
Why a handshake is a useful, narrow signal
A TCP monitor does one thing: it resolves the hostname, refuses private addresses, opens a connection to the port you chose and stops the clock when the handshake completes. It sends no bytes afterwards and reads nothing back. That makes it equally valid for a mail server, a database, a game server or an SSH bastion, because none of them need to be spoken to in their own language.
The narrowness is also the limit. A database that accepts connections but is stuck replaying its log still passes. Treat a TCP check as the first line, "something is listening", and add a higher-level check where one exists: an HTTP check for a web app, a keyword check for a page that must render, a DNS check for a name server.
Ports people monitor, and what a failure usually means
The same three outcomes appear on every port, and they point in different directions. Use the table of causes below as a starting order for the investigation, not as a verdict.
- Connection refused: the host is up and the service is not listening. The process crashed, was stopped by a deploy, or binds to localhost only after a config change.
- Timeout: nothing came back. Think firewall or security group first, especially after an address change on the checker side (see the checker IP list), then an overloaded host.
- Reset by peer: the service accepted and dropped the connection at once. Connection limits, fail2ban-style rules and rate limiters behave like this.
- Handshake slow but successful: the chart climbs before anything fails. A database host with exhausted backlog slots often looks like this for hours.
Intervals, regions and plans
TCP checks are available on every plan. Free runs them every 5 min, Starter every 1 min, and Pro and Agency every 30 s. A failure is re-checked from the other live regions (2 regions today) before an incident opens, which matters more for TCP than for HTTP: transit trouble between one region and your provider looks exactly like a dead service from that one region.
Exposing a database port to the whole internet just to monitor it is not a good trade. Prefer to monitor the public service in front of it, and use an allow-list that includes the checker addresses only for ports that are meant to be public, such as SMTP.
TCP monitoring questions
Is TCP monitoring different from port monitoring?
No. It is the same check under the name many people search for. The [port monitoring page](/monitoring/port) covers the same feature with database examples.
Can it check that a service answers correctly?
Not at the TCP level. It proves the port accepts connections. For protocol-level proof use an HTTP, keyword or DNS check, or a heartbeat sent by the service itself.
Does it work for UDP services?
No, UDP has no handshake. Use the separate [UDP monitor](/monitoring/udp), which sends a probe and waits for any reply.
Can I monitor a private IP or a service behind a VPN?
No. Private ranges are refused because the checker regions cannot reach them. Use a heartbeat that the internal service sends to Tenium instead.
Start tcp monitoring free
30 monitors on the Free plan, no card needed, with failures confirmed from other regions (2 regions live today). Upgrade when the client list grows.