---
title: TCP monitors
description: Check that a TCP port accepts connections — for databases, brokers and anything that isn't HTTP.
sidebar:
  label: TCP
---

{/* Source of truth: packages/shared/src/monitors.ts — tcpConfigSchema. */}

A TCP monitor opens a connection to a host and port and reports success if the
connection is accepted within the timeout.

## Configuration

| Setting | Allowed values | Required |
| --- | --- | --- |
| `host` | hostname or IP, 1–255 characters | yes |
| `port` | 1–65535 | yes |

Everything else — interval, timeout, retries, regions, confirmations — is
[shared with all monitors](/monitors).

## What it does and does not tell you

A successful TCP check proves the port is open and something accepted the
connection. It does **not** prove the service behind it is healthy: a database
that has run out of connections, or is stuck replaying a log, will usually still
complete a TCP handshake.

Use TCP when there is no richer check available. When the service speaks HTTP,
an [HTTP monitor](/monitors/http) with an assertion tells you far more.

## Common uses

| Service | Typical port |
| --- | --- |
| PostgreSQL | 5432 |
| MySQL / MariaDB | 3306 |
| Redis / Valkey | 6379 |
| SMTP | 25, 465, 587 |
| SSH | 22 |

:::caution
Check TCP services from regions that are actually allowed to reach them. If your
database only accepts connections from your application's network, a check from
a Glowo region will fail — correctly, but uselessly. Watch it with a
[push monitor](/monitors/push) driven from inside your network instead.
:::
