Zabbix’ te .tr Uzantılı Domain Expiry Monitoring

İzel Bulut
TurkNet Technology
Published in
4 min readDec 7, 2022

Öncelikle bu konunun öneminden bahsetmek en mantıklısı olacaktır. Sahip olduğunuz domain çoğu zaman markanızı temsil etmektedir, bu da domaininizi sizin için vazgeçilmez kılar. Çoğu kişi tarafından bilinmese de bir domaini satın almak aslında kiralama olarak ifade edilebilir. Hosting firmanızın size verdiği sürede bu hizmeti yenilememeniz durumunda, domaininizin bir başkası tarafından kiralanma riskini almış olursunuz.

Turknet gibi büyük firmalar çok fazla domaine sahip olduğu için, domainleri manuel takip etmek pek mümkün olmaz ve takip edilmemesi büyük hatalara neden olabilir.

Peki Domainin Expire olacağı tarihi nasıl hatırlayacağız?
Hizmet alabileceğiniz domain expiry monitoring uygulamaları mevcut elbette. Bu yazıda, Zabbix ile Domain Expiry Monitoring entegrasyonunu bulabilirsiniz.

Zabbix de şu an domain expiry için hazır bir template bulunmuyor. Ancak basit bir UserParameter ile bu sorguyu kolayca görüntüleyebileceğiz.
Öncelikle yaratacağımız item’ ı atayabilmek için whois sorgusunu çalıştıracak agent’ ın IP si ile bir host oluşturduk. (Bu adıma birden fazla domain ekleneceği için ve dashboard üzerinden tek hostu izlemek için ihtiyaç duyduk.)

/etc/zabbix/zabbix_agentd.conf dosyasında aşağıdaki satırı ekleyelim.

UserParameter=expires[*],whois $1 | egrep -i "Expiration Date:|Expires on"| head -1 | awk '{print $NF}'

expires[*] : oluşturduğumuz item key.

Bu item key ile host üzerinde bir item oluşturuldu.

.tr Uzantılı Domainler için Domain Expiry Monitoring

Yukarı da bahsedildiği gibi, domain expiry için kullanılan bir çok uygulama mevcut. Ancak bu uygulamalarda bazı 3 oktetli ve .tr uzantılı domainler izlenemiyor.

Bunun sebebi şu şekilde: resimde de görüldüğü üzere 2 oktetli bir domainin whois sorgusunda “Expiry Date” verisi datetime türündedir. Ancak .tr uzantılı domainde bu bilgi Additional Info olarak görüntülenmektedir, bu yüzden verinin türü text’ tir.

Text türündeki bir veriden yola çıkılarak kalan gün hesabı yapılamayacağı için alışılagelmiş hesaplamalar burada maalesef işe yaramamaktadır.

Çözüm: Additional Info da görülen değer numeric bir veriye dönüştürülmelidir. Bu işlem aşağıdaki python kodu ile mümkün.

import sys
from time import strptime, strftime

if len(sys.argv) < 2 or len(sys.argv)>3:
print("Usage: python 2day.py 2023-Feb-14.")
exit()
try:
print(strftime("%Y-%m-%d",strptime(sys.argv[1],'%Y-%b-%d.')))
except Exception as e:
print("Usage: python 2day.py 2023-Feb-14.")
print("Error: "+str(e))

bu kod sayesinde whois sorgusuyla alabildiğimiz veriyi görebiliyor olacağız.
Monitoring sistemlerinin en işlevsel özelliklerinden biri de monitor ettiğiniz içerikle alakalı bildirim göndermesidir. Burada daha otomatize bir yapı oluşturmak için expiry date’ e kalan gün sayısının hesaplanması mantıklı olacaktır.

Expiry Date Kalan Gün Sayısı Hesaplama ve Trigger

Monitoring sisteminin Expiry Date’ e kalan gün sayısını belirlediğimiz günlerde atabilmesi adına yapılacak ilk adım kalan günün hesaplanmasıdır. Burada ana mantık, sonlanacak tarihten bugünün tarihinin çıkarılmasıdır elbette.

#!/bin/bash

#Specify all the domains you want to check
DOMAINS="turknet.net.tr"

current_epoch=`date '+%s'`
for dm in $DOMAINS
do
expiry_date=`variable=$(whois turknet.net.tr | egrep -i "Expiration Date:|Expires on"| head -1 | awk '{print $NF}');python3 /etc/zabbix/custom/zabbix-whois-expiry/2day.py $variable`
#echo -n " $dm - Expires on $expiry_date "
expiry_epoch=`date --date="$expiry_date" '+%s'`
epoch_diff=`expr $expiry_epoch - $current_epoch`
days=`expr $epoch_diff / 86400`
#echo " $days days remaining. "
printf '%i\n' "$days"
done

Burada DOMAINS değişkeninin altında birden fazla domain tanımlayarak for döngüsüyle her birinin kalan gün sayısı hesaplanabilir. Ya da diğer item key de yapıldığı gibi bu değer kullanıcıdan da istenebilir.
Artık gün hesaplama scripti ile yeni bir item key oluşturulabilir.

UserParameter=turknet,/bin/bash /etc/zabbix/custom/zabbix-whois-expiry/domaincheck.sh

Trigger Oluşturma

Domain sahipliği bitmeden yenilenmesi önerilmektedir. Bu sebeple 90, 60 ve 30 gün önceden olmak üzere alarmlar üretildi.

Trigger Expression kısmına, last komutuyla last(/host/item_key)<=30 komutu ile 30 günden az alarmını üretebiliriz.

Turknet’ de .tr uzantılı domainleri bu şekilde monitor ediyoruz.

Buraya kadar okuduğunuz için teşekkür ederim, sorularınızı cevaplamaktan memnuniyet duyarım. Sevgiler.

Referanslar:

  1. https://www.faqforge.com/linux/how-to-monitor-domain-expiry-date-using-shell-script-in-linux/
  2. https://www.zabbix.com/forum/zabbix-help/384473-many-domain-expiration-monitor
  3. https://www.vipinajayakumar.com/parsing-text-with-python/

--

--