undownable

How to monitor TrueNAS externally

Updated Aug 19, 2026

TrueNAS will email you about a degraded pool, assuming the alert service is running, the network is up, and the mail configuration still works. External monitoring covers the case where none of that holds.

What the alert system cannot report

TrueNAS has a thorough internal alerting system. That is the trap: it is good enough that people assume it covers everything, when it structurally cannot report the failures where TrueNAS is not running.

The one signal that covers all of them is absence, observed from somewhere else.

What to check, and a caveat about the API

TrueNAS serves its web interface on port 80 for HTTP and 443 for HTTPS by default, which is unusual for a NAS and worth remembering when you write check URLs. Both are configurable under System and General Settings.

The REST API lives under /api/v2.0. One endpoint answers without credentials: core/ping returns pong, and it is intentionally unauthenticated. Unauthenticated requests are rate limited, so at a one or five minute cadence it is a clean keyword check target.

curl -fsSk https://truenas.example.com/api/v2.0/core/ping
# "pong"

Everything else requires an API key sent as a bearer token. Create one from the toolbar user menu under API Keys; it is shown once. TrueNAS treats API keys as password equivalent, they bypass two factor authentication, and key authentication attempted over plain HTTP is revoked automatically. Use HTTPS, and store the header encrypted, which Undownable does by default.

curl -fsSk https://truenas.example.com/api/v2.0/system/info \
  -H 'Authorization: Bearer YOUR_API_KEY'
# {"version":"...","hostname":"...","uptime_seconds":...}

The caveat: the REST API is deprecated in favour of a versioned JSON-RPC 2.0 API over websocket. The transition began in 25.04 Fangtooth, 25.10 Goldeye added a daily alert when deprecated endpoints are used, and removal is planned for the 26 line. It still works today, which is a good argument for keeping external monitoring to a cheap liveness signal rather than a rich integration you will have to rewrite.

Target Auth Notes
/api/v2.0/core/ping None, rate limited Returns pong; simplest keyword check
/api/v2.0/system/info Bearer API key Version, hostname, uptime_seconds
TCP 443 or 80 None Interface reachable at all
ICMP ping None Host on the network

If the interface is not published

It usually should not be. A NAS web interface on the public internet is a login page guarding all of your data, and no monitoring benefit justifies it. Push a heartbeat out instead. TrueNAS can run a cron job from the web interface under Data Protection, or you can add one on the shell:

*/2 * * * * curl -fsS -m 10 https://undownable.com/ping/your-monitor-id > /dev/null

Gate it on the local API so the heartbeat tracks the middleware rather than just the kernel:

*/2 * * * * curl -fsSk -m 10 https://127.0.0.1/api/v2.0/core/ping > /dev/null \
  && curl -fsS -m 10 https://undownable.com/ping/your-monitor-id > /dev/null

Here is where TrueNAS gets more interesting than most services. What you actually care about is not whether the web interface loads, it is whether your pool is healthy. Gate the heartbeat on zpool status and the monitor becomes a pool health alarm that reaches you off site:

*/10 * * * * zpool status -x | grep -q 'all pools are healthy' \
  && curl -fsS -m 10 https://undownable.com/ping/your-monitor-id > /dev/null

A degraded or faulted pool stops the ping, and you get paged whether or not the mail configuration on the box still works. Set the interval generously, say fifteen minutes for a ten minute cron, and keep it as a separate monitor from the liveness heartbeat.

Cover replication and snapshots too

Scheduled replication is a classic silent failure: the task stops being scheduled, and the fact only surfaces when a restore is needed. Give it a heartbeat monitor with an interval slightly longer than the schedule, pinged from the end of the task. The same applies to scrubs: a monthly scrub gets a 35 day window.

Alerts that do not depend on the NAS

TrueNAS alert channels are worth configuring and worth not relying on alone. External delivery reaches you when the box, the link, or the power is the problem:

Set a confirmation threshold so an update reboot does not page you, and a maintenance window over update night. If you run apps or VMs here, give the important ones their own checks.

Is there an unauthenticated TrueNAS endpoint I can check?

Yes. GET /api/v2.0/core/ping returns pong and is intentionally unauthenticated. Unauthenticated requests are rate limited, so use a normal interval.

What is the auth header for the TrueNAS API?

Authorization: Bearer followed by your API key, created from the user menu under API Keys. Keys are password equivalent, bypass two factor authentication, and are revoked if used over plain HTTP, so always use HTTPS.

Is the TrueNAS REST API going away?

It is deprecated in favour of a JSON-RPC 2.0 websocket API. The transition started in 25.04 Fangtooth, 25.10 Goldeye warns when deprecated endpoints are used, and removal is planned for the 26 line.

Can I alert on pool health from outside?

Yes, and it is the best trick on this page. Gate a heartbeat on zpool status -x reporting that all pools are healthy. A degraded pool stops the ping, and the alert comes from outside your network.

Related reading

Monitoring that watches from the outside

Free plan with 10 monitors, plus a 14-day Pro trial. No credit card required.

Start free