Available solutions
Domain RDAP by HTTP
Overview
This template monitors domain registration and related information using RDAP (Registration Data Access Protocol) over HTTP. It retrieves data such as expiration dates, registrar information, status, and more for the specified domains. The template also includes low-level discovery (LLD) rules to automatically discover additional information like notices and entities associated with each domain.
Requirements
Zabbix version: 8.0 and higher.
Tested versions
This template has been tested on:
- Tested on
zabbix.comdomain.
Configuration
Zabbix should be configured according to the instructions in the Templates out of the box section.
Setup
Set values for the macros according to your monitoring requirements.
{$RDAP.DOMAINS}. Required. Enter one or more domains, separated by commas (e.g., example.com,test.net).{$RDAP.INTERVAL.TLD.CHECK}(Optional) TLD data does not change frequently. The default value of 12h (12 hours) or even 1d (1 day) is optimal to reduce the load on the Zabbix server and external RDAP services.{$RDAP.INTERVAL.DOMAIN.CHECK}(Optional) Use 1h as the standard. Checking too frequently may cause rate-limiting by RDAP services.
Notes
- Accepts seconds or time unit with suffix (e.g., 30s, 1m, 2h, 1d) and, optionally, one or more custom intervals, all separated by semicolons.
Macros used
| Name | Description | Default |
|---|---|---|
| {$HTTP.TLS.VERIFY} | TLS certificate verification for script items: "none" - disabled, "peer" - verify the certificate chain and expiration, "full" - full verification. Any other value enables full verification. To override the setting for this template only, define the macro with the context "Domain RDAP", e.g. {$HTTP.TLS.VERIFY:"Domain RDAP"}. |
full |
| {$RDAP.DOMAINS} | List of domains separated by commas. |
|
| {$RDAP.LLD.ADDITIONAL.INFO.ENABLED} | Enable discovery additional information in LLD (1 - enabled, 0 - disabled). |
1 |
| {$RDAP.EXPIRATION.WARNING.DAYS} | Number of days before expiration to trigger a warning. |
7 |
| {$RDAP.NOT.UPDATED.WARNING.DAYS} | Number of days after last update to trigger a warning. |
7 |
| {$RDAP.INTERVAL.TLD.CHECK} | Interval for checking TLD registration data. |
12h |
| {$RDAP.INTERVAL.DOMAIN.CHECK} | Interval for checking domain registration data. |
1h |
Items
| Name | Description | Type | Key and additional info |
|---|---|---|---|
| Get registration data for domains | Get registration data for domains using RDAP protocol over HTTP. |
Script | rdap.domain.info |
| Error retrieving registration data for domains | Error message when retrieving registration data for domains. |
Dependent item | rdap.domain.info.error Preprocessing
|
Triggers
| Name | Description | Expression | Severity | Dependencies and additional info |
|---|---|---|---|---|
| RDAP: Error retrieving registration data for domains | last(/Domain RDAP by HTTP/rdap.domain.info.error)<>"" |
High |
LLD rule Discovery domains with RDAP server
| Name | Description | Type | Key and additional info |
|---|---|---|---|
| Discovery domains with RDAP server | Discover domains using RDAP protocol over HTTP. |
Dependent item | rdap.domain.with.rdap.discovery Preprocessing
|
Item prototypes for Discovery domains with RDAP server
| Name | Description | Type | Key and additional info |
|---|---|---|---|
| [{#DOMAIN}]: Get data | Get registration data for domain |
HTTP agent | rdap.domain.data[{#DOMAIN}] Preprocessing
|
| [{#DOMAIN}]: Expiration date | Expiration date for domain |
Dependent item | rdap.domain.expiration[{#DOMAIN}] Preprocessing
|
| [{#DOMAIN}]: Days until expiration | Days until expiration for domain |
Dependent item | rdap.domain.registrar.until[{#DOMAIN}] Preprocessing
|
| [{#DOMAIN}]: Registrar | Registrar for domain |
Dependent item | rdap.domain.registrar[{#DOMAIN}] Preprocessing
|
| [{#DOMAIN}]: Last changed | Last changed date for domain |
Dependent item | rdap.domain.changed[{#DOMAIN}] Preprocessing
|
| [{#DOMAIN}]: Last update of RDAP data | Last update date of RDAP data for domain |
Dependent item | rdap.domain.updated[{#DOMAIN}] Preprocessing
|
| [{#DOMAIN}]: Status | Status of domain |
Dependent item | rdap.domain.status[{#DOMAIN}] Preprocessing
|
| [{#DOMAIN}]: Authority RDAP server | Authority RDAP server for |
Dependent item | rdap.domain.authority[{#DOMAIN}] Preprocessing
|
Trigger prototypes for Discovery domains with RDAP server
| Name | Description | Expression | Severity | Dependencies and additional info |
|---|---|---|---|---|
| RDAP: [{#DOMAIN}] will expire soon | Until domain |
last(/Domain RDAP by HTTP/rdap.domain.registrar.until[{#DOMAIN}]) < {$RDAP.EXPIRATION.WARNING.DAYS:"{#DOMAIN}"} |
High | Depends on:
|
| RDAP: [{#DOMAIN}] is expired | Domain |
last(/Domain RDAP by HTTP/rdap.domain.registrar.until[{#DOMAIN}]) = -1 |
High | Depends on:
|
| RDAP: [{#DOMAIN}] expiration date is unknown | Expiration date not found for domain |
last(/Domain RDAP by HTTP/rdap.domain.registrar.until[{#DOMAIN}]) = -2 |
Average | Depends on:
|
| RDAP: [{#DOMAIN}] was changed recently | Domain |
(now() - last(/Domain RDAP by HTTP/rdap.domain.changed[{#DOMAIN}])) < 604800 |
Info | Manual close: Yes |
| RDAP: [{#DOMAIN}] not updated data for {$RDAP.NOT.UPDATED.WARNING.DAYS:"{#DOMAIN}"} days | RDAP data for domain |
(now() - last(/Domain RDAP by HTTP/rdap.domain.updated[{#DOMAIN}])) / 86400 > {$RDAP.NOT.UPDATED.WARNING.DAYS:"{#DOMAIN}"} |
Info | Manual close: Yes |
| RDAP: [{#DOMAIN}] status was changed recently | Domain |
length(last(/Domain RDAP by HTTP/rdap.domain.status[{#DOMAIN}]))>0 and change(/Domain RDAP by HTTP/rdap.domain.status[{#DOMAIN}])=1 |
Warning | Manual close: Yes Depends on:
|
| RDAP: [{#DOMAIN}] not exist | Status information not found for domain |
last(/Domain RDAP by HTTP/rdap.domain.status[{#DOMAIN}])="Error get data" |
Average | |
| RDAP: [{#DOMAIN}] authority RDAP server not found | The domain is not registered, there's a typo in your query, |
last(/Domain RDAP by HTTP/rdap.domain.authority[{#DOMAIN}])="" |
Warning |
LLD rule Discovery notices for domain [{#DOMAIN}]
| Name | Description | Type | Key and additional info |
|---|---|---|---|
| Discovery notices for domain [{#DOMAIN}] | Discover notices for domain |
Dependent item | rdap.domain.notices.discovery[{#DOMAIN}] Preprocessing
|
Item prototypes for Discovery notices for domain [{#DOMAIN}]
| Name | Description | Type | Key and additional info |
|---|---|---|---|
| [{#DOMAIN}]: Notice [{#NOTICE_TITLE}] | {#NOTICE_DESCRIPTION} |
Script | rdap.domain.notice.title[{#DOMAIN},{#NOTICE_TITLE}] Preprocessing
|
LLD rule Discovery entities for domain [{#DOMAIN}]
| Name | Description | Type | Key and additional info |
|---|---|---|---|
| Discovery entities for domain [{#DOMAIN}] | Discover entities for domain |
Dependent item | rdap.domain.entities.discovery[{#DOMAIN}] Preprocessing
|
Item prototypes for Discovery entities for domain [{#DOMAIN}]
| Name | Description | Type | Key and additional info |
|---|---|---|---|
| [{#DOMAIN}]: {#ENTITY_VCARD_NAME} | Information about entity |
Script | rdap.domain.entity.vcard.entry[{#DOMAIN},{#ENTITY_VCARD_KEY}] Preprocessing
|
Feedback
Please report any issues with the template at https://support.zabbix.com
You can also provide feedback, discuss the template, or ask for help at ZABBIX forums