Artikel ini akan membahas kebutuhan saya sebagai network dan system administrator ketika weekend atau liburan. Ketika weekend atau liburan, saya harus tetap dapat memastikan kondisi network devices dan status webservices dalam kondisi beroperasi. Kendala yang dihadapi adalah semua aplikasi monitoring, sesuai best practices dalam Cybersecurity, hanya bisa diakses dari ruang SOC/ruang sys-admin. Jadi tidak mungkin dipantau dari rumah, atau harus menggunakan VPN (jika ada).
Kondisi itu yang membuat saya mencari aplikasi reporting kondisi network yang bisa langsung terhubung ke HP, dan tidak menemukan yang tepat dan cocok. Berbekal pengetahuan tentang programming dan telegram bot, saya memiliki ide untuk membuat sebuah script yang dapat dijalankan secara otomatis (melalui cronjob) dan mengirimkan report via telegram. Python saya pilih karena memiliki library yang lengkap dan umum digunakan untuk network programming.
Script yang saya buat harus memiliki kemampuan mengakses perintah pada OS dan menggunakan webhook. Webhook dibutuhkan untuk mengakses service via URL (bot telegram menggunakan webhook untuk mengirimkan pesan begitupula dengan slack). Jadi library yang harus saya import adalah
import os
import requests
Ambil data host, untuk memudahkan edit data host, saya menggunakan file csv sebagai sumber data pada script ini, jadi harus menambahkan satu library lagi. Data pada file csv saya masukkan kedalam variabel untuk diproses. Delimiter yang saya gunakan adalah semicolon (‘;’).
import csv
#open csv file
with open('hostlist.csv') as csv_file:
csv_reader = csv.reader(csv_file, delimiter=';')
for row in csv_reader:
#put data into variable
hostname = row[0]
ip_addr = row[1]
Untuk mengecek konektivitas perangkat jaringan, saya menggunakan ping. Lalu baca reply yang diterima, kalau hasil ping terbaca ‘0 received’ atau tidak ada reply berarti tidak ada koneksi atau offline. Selain itu, berarti online. Masukkan pesan ke dalam variabel.
stream = os.popen('ping -c 4 {}'.format(ip_addr)
#check feedback from host
output = stream.read()
if '0 received' in output:
message += f"\n{hostname} status: ---OFFLINE--"
else:
message += f"\n{hostname} status: Online"
Untuk mengecek webservice pun sama, menggunakan file csv sebagai sumber dan semicolon untuk delimiter.
#open csv file
with open('weblist.csv') as csv_file:
csv_reader = csv.reader(csv_file, delimiter=';')
for row in csv_reader:
#put csv data into variable
hostname = row[0]
url = row[1]
Cek dengan cara mengirimkan request ke url yang dituju. Jika diterima response status 200, maka webservice online, selain itu, tampilkan status dalam pesan bot.
#get response status code
status = response.status_code
#if connection success (response code 200)
if status == 200 :
message += f"\n{hostname} webservice online"
else:
message += f"\n{hostname} response status {status}"
Ambil data API Token dan chat ID telegram dari file csv juga, dengan delimiter semicolon.
with open('botinfo.csv') as bot_csv:
botinfo = csv.reader(bot_csv, delimiter=';')
for row in botinfo:
TOKEN = f"{row[0]}"
chat_id = f"{row[1]}"
Kirimkan request pengiriman pesan melalui bot telegram.
url = f"https://api.telegram.org/bot{TOKEN}/sendMessage?chat_id={chat_id}&text={message}"
(requests.get(url).json()) # this sends the message
Pesan pun diterima dengan lancar dan sesuai dengan kebutuhan.
Sebagai langkah terakhir saya buat cronjob untuk menjalankan script ini secara berkala. Buat crontab dari user root.
crontab -e
0 */4 * * * python3 /path/to/script.py
Script ini dijalan setiap menit ke-0, dengan interval 4 jam setiap eksekusi setiap hari. Script selengkapnya bisa dilihat pada link github saya.
Akhirnya saya pun bisa menjalankan liburan dengan tenang karena ada report yang masuk ke smartphone secara berkala. Semoga bisa membantu bagi yang memiliki masalah yang sama dengan saya. Selamat ngoprek.