DNS Monitoring
A DNS monitor asks for one record type on one name and reports what came back. It answers two questions: does the name resolve at all, and does it resolve to the value you expect. It says nothing about the service behind the name — that is a different monitor.
What It Is For
The name stopped resolving
A zone that was deleted, a delegation that broke after a registrar change, nameservers that stopped answering. Your servers are fine and nobody can reach any of them. A DNS monitor names that cause in one line instead of an hour of guessing.
The record changed behind your back
Write down the value you expect and the monitor goes down the moment the answer stops containing it. This catches a hijacked or hacked account, a colleague editing the wrong zone, a migration that half rolled back, and a CDN or SaaS provider that moved your name somewhere new.
The records nobody looks at until something breaks
MX records that route your mail, TXT records holding SPF, DKIM or a provider's domain verification, NS records that carry the delegation, a CNAME pointing at a CDN. Nothing alerts you when one of these disappears — mail just stops being delivered, or a service quietly says your domain is no longer verified.
How long resolution takes
Every check records the time the lookup took. Slow DNS is added to the front of every single request a visitor makes, and it is invisible in server-side timings.
What It Is Not For
A DNS monitor reads a record. It never connects to whatever that record points at:
| You want to know | Use instead |
|---|---|
| Is the domain registration about to expire? This is the most common mix-up. Records keep resolving normally right up to the day the registry pulls the domain — a DNS monitor gives you no warning at all, it goes down together with everything else | WHOIS monitor |
| Does the site behind the name actually work? An A record resolves perfectly while the web server returns 502 to everyone | HTTP / HTTPS monitor |
| Does the mail server accept mail? An MX record only says which host is supposed to take it | SMTP monitor on the host the MX record names |
| Is my IP or domain on a spam blacklist? Blacklists are published over DNS, but checking them means querying dozens of providers, not one record | DNSBL monitor |
| Is the host reachable? A name can resolve to an address that answers nothing | Ping monitor |
| Is each of your nameservers alive, and do they all give the same answer? One monitor asks one server, never all of them in turn | One DNS monitor per nameserver, with that nameserver's IP as its DNS server and the same expected values. A UDP or TCP monitor on port 53 still proves only that the port answers, not what the server answers |
What Every Check Does
DNS is checked only from checkers, not from the PingZen server: from the Moscow checker by default, or from the checkers you choose in the monitor form. A monitor created without a checker through the API, MCP or a CSV import gets a public checker, Moscow first.
By default, one query for the record type you picked goes to Google Public DNS (8.8.8.8). If 8.8.8.8 times out, returns SERVFAIL for a reason other than DNSSEC, refuses the query or gives no usable answer, the check asks the same question once more through Cloudflare (1.1.1.1) and goes by its answer, so a hiccup at one resolver does not fail the check. NXDOMAIN, a missing record, a DNSSEC failure and an answer that differs from the expected values are final and are not asked again. When 8.8.8.8 fails and 1.1.1.1 answers without an expected value, the error message names both resolvers: Expected values not found: 9.9.9.9. Got: 1.2.3.4 (8.8.8.8: timeout 10 s; 1.1.1.1: answered).
With a DNS server of its own, the monitor asks only that server and goes by its answer. Either way, the check records:
- The resolved values — the full list of records that came back, kept with every check result
- Resolution time — how long the answer took, in milliseconds
By default the query goes through a public recursive resolver, so you see what the public internet sees, cached answers included. A record you changed a minute ago can take until the old TTL runs out to show up here. That is normally what you want from a monitor: it reports the answer your users are actually getting. With a DNS server of your own, you see that server’s answer instead.
Record Types
| Type | What you watch with it |
|---|---|
A | The IPv4 address the name points to. The default, and the right choice if you are not sure |
AAAA | The IPv6 address. Useful on its own, because an AAAA record can be missing or wrong while A is perfect |
CNAME | The alias target — a CDN, a load balancer, a SaaS host |
MX | Mail routing. Values are recorded as priority and host together, like 10 mail.example.com. |
TXT | SPF, DKIM, DMARC and domain-verification strings. A record split into several strings is recorded joined with a space |
NS | The delegation — which nameservers are meant to be authoritative for the zone |
SOA | The zone's own record. Mostly used as proof that the zone still exists and is being served |
PTR | Reverse lookup for an address. Mail servers are judged on this one |
Those eight are the whole list. Any other type — SRV, CAA and the rest — is refused when the monitor is saved, through the API and MCP alike, with a message listing the supported types.
Expected Values
Leave the expected values empty and the monitor only asks whether the name resolves. Fill them in and every value you listed has to appear in the answer.
- Each value you list has to match a whole value in the answer. It is not a substring search and not a pattern.
- The answer may contain more than you listed. Two A records when you listed one is fine; the listed one just has to be there.
- If any listed value is missing, the check fails and the error message shows both what was missing and what came back instead, so you can see the new value without leaving the monitor.
- The resolved values are still recorded on a failed check, exactly as on a passing one.
- Names match in any case, with or without the trailing dot:
Mail.Example.commatches the answermail.example.com..TXTvalues are compared exactly as written, case and spaces included.MXvalues carry the priority in front, so write it too:10 mail.example.com. - Up to 100 values per monitor.
Expected values are set in the monitor form, one value per line, and through the API or the MCP tools.
Status Logic
A DNS monitor is up or down. There is no degraded state and no slow-answer threshold — a lookup that takes a long time but returns the right answer is still up. An answer that differs from the expected values is DOWN and red like any other failure, but its badge reads “Answer differs” (“Mismatch” where space is short), so you can tell it from a name that stopped resolving.
| Result | Status |
|---|---|
| The record came back, and no expected values are set | UP |
| The record came back and contains every expected value | UP |
| An expected value is missing from the answer | DOWN |
| The name does not exist (NXDOMAIN) | DOWN |
| The name exists, but has no record of that type | DOWN |
| The domain's DNSSEC signature does not validate. The error quotes the extended DNS error (EDE) the resolver sent, such as EDE 9 for a missing DNSKEY | DOWN |
| The domain's DNS servers failed (SERVFAIL), and asking 1.1.1.1 did not help | DOWN |
| The resolvers refused the query or could not be reached | DOWN |
| 8.8.8.8 did not answer in time, and 1.1.1.1 gave no usable answer either or was not asked | TIMEOUT |
| The DNS server set in the monitor refused the query or could not be reached | DOWN |
| The DNS server set in the monitor did not answer in time | TIMEOUT |
Each of these failures has its own reason on the monitor page — “Domain does not exist”, “No record of this type”, “DNSSEC signature check failed”, “The domain’s DNS servers failed”, “No answer from public DNS”, “Your DNS server did not answer or refused”, “The answer differs from the expected values”. When the resolvers fail, the error message shows what each of them said, for example DNS servers failed for example.com (8.8.8.8: REFUSED; 1.1.1.1: SERVFAIL). Google’s 8.8.8.8 sometimes reports a broken DNSSEC signature as a plain SERVFAIL; the check then asks 1.1.1.1, and its answer names DNSSEC as the reason. With a DNS server of your own, its answer is final: 1.1.1.1 is not asked, and the error names your server, for example DNS servers failed for example.com (10.0.0.53: SERVFAIL).
Under the status header the page shows the Current answer card: the latest answer a check received, and the server the checks ask. When the answer differs from the expected values, the card shows which expected values are missing from the answer and which values are not in the expected list; if you changed the record yourself, Yes, accept the new answer makes the current values the expected ones. Any other failure gets a banner above the card with the reason in plain words and one next step.
One failed lookup is not an outage: as with every monitor, DOWN is confirmed only after several failing checks in a row, three by default. See incidents for what happens next.
Configuration
Name
The name to look up, with or without a dns:// prefix: example.com and dns://example.com behave the same. For a subdomain, write the full name — mail.example.com, not mail. No port.
Record type
One of the eight types above. A by default. One monitor asks for one type, so watching both the A record and the MX records of a domain means two monitors.
Expected values
Optional. Every value listed must be in the answer, or the check fails. Empty means "any answer will do". Up to 100 values.
DNS server
Optional. The IP address of the DNS server to send queries to instead of public DNS, without a port, such as 9.9.9.9 or 2620:fe::fe. Queries go to its port 53. We ask only this server and wait up to 10 seconds, less when the monitor's timeout is shorter. An address in a local network, such as 192.168.1.1 or 10.0.0.53, can be asked only by your private checker in that same network: public checkers cannot reach it, so PingZen does not save such a monitor with a public checker.
Check interval
60 seconds by default. Records change rarely, so a longer interval usually loses you nothing — unless the point of the monitor is to catch an unauthorised change quickly.
Timeout
5 seconds by default. The check waits for 8.8.8.8, or for the DNS server set in the monitor, up to the shorter of this timeout and PingZen's own ceiling on DNS queries, 10 seconds. If 1.1.1.1 has to be asked, it gets up to 5 seconds more, less when the monitor's timeout is short. A timeout error names the seconds the check actually waited.
Which resolver is used
Without a DNS server of its own, the monitor asks Google Public DNS (8.8.8.8) first, and Cloudflare (1.1.1.1) when 8.8.8.8 fails in one of the ways described above. With one, only that server is asked.
Key Features
- Eight record types: A, AAAA, CNAME, MX, TXT, NS, SOA and PTR
- Optional expected values, with the missing and the actual values both shown on failure
- Resolved values and resolution time recorded on every check, passing or failing
- A plain reason and one next step for each way a lookup can fail, instead of one flat “down”
- Sees the answer a public resolver gives, which is the answer your users get
- Can ask your own DNS server instead, an address in a local network too, through your private checker there