Monitor MySQL Server Menggunakan Twilio untuk Real Time Status Update via SMS

Belakangan saya sedang sibuk mencoba layanan dari Twilio. Di artikel sebelumnya saya sudah membuat sebuah artikel Mengirimkan Pesan Singkat SMS dengan Python Menggunakan Twilio API. Di artikel kali ini saya akan membuat sebuah tulisan yang mungkin sangat bermanfaat untuk Sysadmin. Tulisan ini sebelumnya telah saya aplikasikan untuk saya sendiri untuk memonitor beberapa server client dan tentu saja server Bukan Coder sendiri. Ini mungkin sangat berguna untuk memonitor MySQL server untuk menghindari hal-hal yang tidak kita inginkan. Silahkan ikuti petunjuk di dalam artikel ini.

Yang dibutuhkan

Untuk petunjuk mendaftar dan menggunakan Twilio, silahkan bisa dibaca di Mengirimkan Pesan Singkat SMS dengan Python Menggunakan Twilio API.

Monitor MySQL dengan PHP Menggunakan Twilio

Pertama kita buat sebuah dir untuk MySQL Monitor

mkdir mysql-monitor
cd mysql-monitor

Download PHP Library untuk Twilio

git clone https://github.com/twilio/twilio-php.git

Selanjutnya kita buat sebuah file dengan nama check.php

nano check.php

Lalu kita bisa menggunakan code berikut

<?php

    // Database connection credentials
    $hostname = 'localhost';
    $user     = 'usermysql';
    $password = 'passwordmysql';
    $dbName   = 'dbname';

    // Twilio credentials
    $sid      = 'AC9XXXXXXXXXXXXXXXXXXXXXXXX'; // Your Account SID from www.twilio.com/console
    $token    = '669XXXXXXXXXXXXXXXXXXXXXX'; // Your Auth Token from www.twilio.com/console
    $senderNo = '+12XXXXXXXXXX'; // An active phone number from www.twilio.com/console/phone-numbers/

    // Message details
    $timezone    = 'Asia/Jakarta'; // Your timezone
    ini_set('date.timezone', $timezone); // Set timezone
    $textMessage = 'MySQL down saat ini pada pukul : '. date('Y-m-d H:i'); // Specify the contents of the message you want to send
    $recipientNo = '+62XXXXXXXXXXXX'; // The phone number to which you want to send the message

    // Connect to the database
    $db = new mysqli($hostname, $user, $password, $dbName);

    // If there is an error connecting to the database:
    if($db->connect_errno > 0){
        // Echo MySQL-down error; this should be displayed in the log file for MySQL-status history purposes
        echo "MySQL DOWN ON PREVIOUS ATTEMPT AT " . date('Y-m-d H:i') . "\n";
        // Check the downtime status
        $downtimeStatus = file_get_contents(__DIR__ . "/downtime.txt");
        // If the downtime status is not 1 (the message hasn't yet been sent):
        if ($downtimeStatus != "1"){
            // 1) Send the message
            include(__DIR__ . "/twilio-php/Twilio/autoload.php"); // Include the Twilio library
            $client  = new Twilio\Rest\Client($sid, $token);
            $message = $client->messages->create(
              $recipientNo,
              array(
                'from' => $senderNo,
                'body' => $textMessage
              )
            );
            // 2) Set the downtime status to 1 once the message is sent, to avoid repeating messages whilst working to fix the problem with the MySQL service
            $filename = __DIR__ . "/downtime.txt";
            $myfile = fopen($filename,"w");
            $downtimeStatus = "1";
            fwrite($myfile, $downtimeStatus);
        }

    }else{
    // Set downtime status to 0
    $filename = __DIR__ . "/downtime.txt";
    $myfile = fopen($filename,"w");
    $downtimeStatus = "0";
    fwrite($myfile, $downtimeStatus);
    // Echo MySQL-running message; this should be displayed in the log file for MySQL-status history purposes
    echo "MySQL RUNNING ON PREVIOUS ATTEMPT " . date('Y-m-d H:i') . "\n";
    }

?>

Silahkan disesuaikan di bagian Database connection & Twilio credentials dan $recipientNo. Lalu kita buat sebuah file dengan nama downtime.txt

nano downtime.txt

File downtime.txt ini berguna sebagai sebuah fungsi. Jika kita set 1, ini dapat membantu untuk menghindari mengirimkan sms berulang kali ketika kita sedang berusaha untuk meng-handle MySQL server.

Jalankan script menggunakan task scheduler

Kita buat sebuah cron jobs untuk mengeksekusi file check.php sesuai dengan waktu yang sudah kita tetapkan

crontab -e

Berikut kira-kira cron jobs yang harus kita insert

*/1 * * * * php /home/teguh/www/bukancoder.co/public_html/mysql-monitor/check.php >> /var/log/statusChecker.log 2>&1

Silahkan ganti dengan dir yang sesuai dengan dir file check.php. Default editor untuk crontab adalah vim, setelah selesai, tekan tombol esc di pojok kiri keyboard setelah itu ketikkan :wq kemudian tekan enter. Selanjutnya kita check cron jobs yang telah kita buat.

crontab -l

Selanjutnya jangan lupa untuk membuat file statusChecker.log di dir /var/log

Apa yang terjadi ketika MySQL Server down atau crash?

Ketika MySQL Server dalam status down, kita otomatis akan menerima SMS seperti berikut ini.

Sekian dari saya, semoga bermanfaat.

Salam,
Teguh Aprianto

Add a Comment