Skip to main content

PowerDNS records exporter

Project description

Python PowerDNS Records Exporter

powerdns auth 4.8.x powerdns auth 4.7.x powerdns auth 4.6.x powerdns auth 4.5.x powerdns auth 4.4.x

This tool can be usedto export PowerDNS records database in several ways:

  • bind zone format
  • metrics for Prometheus

Installation

PyPI

Deploy the pdns records exporter in your server with the pip command.

pip install pdns_exporter

After installation, you can execute the pdns_exporter to start-it. By default, the server is listening on the tcp port 9090.

See config file example for more options.

Docker Hub

Pull the pdns exporter image from Docker Hub.

sudo docker pull dmachard/pdns-exporter:latest

Deploy the container

sudo docker run -d -p 9090:9090 --name=pdnsexporter01 dmachard/pdns-exporter

The container can be configured with the following environment variables:

Variables Description
PDNSEXPORT_VERBOSE 1 or 0 to enable verbose mode
PDNSEXPORT_LOCAL_ADDRESS listening ip address of the server
PDNSEXPORT_LOCAL_PORT listening port
PDNSEXPORT_API_LOGIN login for basic authentication
PDNSEXPORT_API_PASSWORD password for basic authentication
PDNSEXPORT_DB_HOST Ip address of your database powerdns server
PDNSEXPORT_DB_PORT Port of your database powerdns server
PDNSEXPORT_DB_USER User database of your powerdns server
PDNSEXPORT_DB_PWD Password database of your powerdns server
PDNSEXPORT_DB_NAME Database name of your powerdns server

HTTP API

Security

Basic authentication method is only supported, don't forget to change the default login and password in settings.conf.

Swagger

See the swagger documentation.

Examples

Get all dns zones

$ curl -u changeme:changeme http://127.0.0.1:9090/zones | jq .
[
  {
    "id": 1,
    "name": "zone.test"
  }
]

Get a specific zone with zone file format

$ curl -u changeme:changeme http://127.0.0.1:9090/zone/1
$ORIGIN .
zone.test	3600	IN	SOA	a.misconfigured.dns.server.invalid hostmaster.zone.test 0 10800 3600 604800 3600
zone.test	3600	IN	NS	ns1.zone.test
ns1.zone.test	3600	IN	A	128.0.0.1
a.zone.test	300	IN	A	128.0.0.2
a2.zone.test	300	IN	A	128.0.0.2
a2.zone.test	300	IN	A	128.0.0.3
aaaa.zone.test	300	IN	AAAA	fe80::42:1eff:feed:f6d6
cname.zone.test	300	IN	CNAME	a.zone.test
txt.zone.test	300	IN	TXT	"hello world"

Get metrics for prometheus of each dns zones declared in your dns server

$ curl -u changeme:changeme http://127.0.0.1:9090/metrics
# HELP pdnsexporter_zones_total Total number of zones
# TYPE pdnsexporter_zones_total counter
pdnsexporter_zones_total 4
# HELP pdnsexporter_records_total Total number of records
# TYPE pdnsexporter_records_total counter
pdnsexporter_records_total 32
...

See metrics file example.

Development

Run

the dnstap receiver from source

sudo python3 -c "from pdns_exporter import exporter; exporter.start_exporter();" -v

Testunits

sudo python3 -m unittest -v

Build docker image

sudo docker build . --file Dockerfile -t pdns-exporter

About

Author Denis Machard d.machard@gmail.com
PyPI https://pypi.org/project/python-pdns-exporter/
Github https://github.com/dmachard/python-pdns-exporter
DockerHub https://hub.docker.com/r/dmachard/pdns-exporter

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pdns_exporter-0.3.0.tar.gz (7.7 kB view hashes)

Uploaded Source

Built Distribution

pdns_exporter-0.3.0-py3-none-any.whl (7.3 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page