This script scans a json file that contains Atlas measurements, and calculates the delta between the first time an SOA serial was seen and when it was first seen for each (authoritative) server that returned that data to a probe.
If a dns probe failed (missing ['result'] key or missing ['result']['answers'] key), the serial was not seen.
If a probe result contains a high lts value (which documents the Last time seen), the serial was not seen.
{"dst_first_appeared": 1492560020, "serial": 2017041801, "serial_first_appeared": 1492560020, "dst": "198.41.0.4", "delta": 0}
{"dst_first_appeared": 1492577930, "serial": 2017041900, "serial_first_appeared": 1492577930, "dst": "198.41.0.4", "delta": 0}
{"dst_first_appeared": 1492592252, "serial": 2017041901, "serial_first_appeared": 1492592252, "dst": "198.41.0.4", "delta": 0}
This output then can be ingested in elasticsearch to show results.
serial: The serial in question dst_first_appeared: The time this serial appeared on this dst. serial_first_appeared: The first time this serial appeared on any dst dst: The thestination server that included the soa in the answer. delta: The difference between first time the serial was ever seen and seen for this dst.
We setup a new probe in atlas that monitors the SOA record on levington25.com on amir.ns.cloudflare.com (anycast address).
https://atlas.ripe.net/measurements/8311800/
This monitors the SOA for townsend101.com on amir.ns.cloudflare.com
https://atlas.ripe.net/measurements/8311819/
Shane thinks this is a good way to show the life and death of a serial:
>--------- Time ---->
Serial 2017032901: |---------|
Serial 2017032902: |-----------|
Serial 20170330: |----|
Serial 2017033001: |-----------|
Serial 2017033002: |-----------|
You need to set up elasticsearch mapping template:
$ curl -X PUT http://localhost:9200/_template/madprops -d @madprops.mapping
You may need some dependencies:
$ pip install --user elasticsearch
$ pip install --user dnslib
Then you can run the command:
$ ./madprops.py -h
usage: madprops.py [-h] [--start START] [--stop STOP] [--test TEST]
[--interval INTERVAL] [--tag TAG] [--index INDEX]
optional arguments:
-h, --help show this help message and exit
--start START
--stop STOP
--test TEST
--interval INTERVAL
--tag TAG
--index INDEX