Latar Belakang
Sebagai lanjutan dari pembahasan mengenai implementasi SNMP Collector dan integrasi ke database, tahap berikutnya adalah mempelajari proses pengambilan (get) dan parsing data SNMP. Setelah data berhasil diambil dari perangkat jaringan, data tersebut tidak selalu langsung siap digunakan, sehingga diperlukan proses pengolahan agar informasi yang diperoleh menjadi lebih terstruktur dan mudah dipahami.
Artikel ini dibuat dengan tujuan untuk mendokumentasikan hasil pembelajaran saya mengenai proses get dan parsing data dalam sistem monitoring berbasis Simple Network Management Protocol. Dengan memahami tahap ini, saya dapat mengolah data mentah menjadi informasi yang siap disimpan dan dianalisis.
Struktur Command dan Proses "Get"
Command snmp:fetch memiliki tanggung jawab utama sebagai collector data.
Alur Kerja Command:
-
Ambil Semua Perangkat Aktif
Query ke model Device dengan kondisi status = 1 (aktif). - Jika tidak ada perangkat aktif, proses dihentikan dengan pesan peringatan.
Looping Setiap Perangkat
-
Untuk setiap perangkat, siapkan koneksi SNMP dengan mengatur:
- hostname (alamat IP atau hostname perangkat)
- port (umumnya 161)
- community (string komunitas SNMP, default public)
Kirim Permintaan SNMP Get
- Menggunakan layanan SnmpClient (abstraksi untuk operasi SNMP di Laravel).
-
Beberapa OID yang diminta:
- Hostname Sistem (1.3.6.1.2.1.1.5.0)
- Uptime (1.3.6.1.2.1.1.3.0)
- CPU User Time (1.3.6.1.4.1.2021.11.9.0)
- CPU System Time (1.3.6.1.4.1.2021.11.10.0)
- CPU Idle Time (1.3.6.1.4.1.2021.11.11.0)
- Total RAM (1.3.6.1.4.1.2021.4.5.0)
- RAM Terpakai (1.3.6.1.4.1.2021.4.6.0)
Terima Raw Response
- Setiap pemanggilan $snmp->get() mengembalikan string mentah sesuai standar SNMP.
Format Data Mentah yang Diterima
Response dari SnmpClient untuk setiap OID masih berupa string dengan prefix tipe data SNMP.
Contoh Data Mentah:
- Hostname : "STRING: server-web-01", OctetString
- Uptime : "Timeticks: (12345678) 1 day, 10:17:36.78", TimeTicks
- CPU User : "INTEGER: 12", Integer32
- CPU System : "INTEGER: 5", Integer32
- CPU Idle : "INTEGER: 83", Integer32
- RAM Total : "INTEGER: 8192", Integer32
- RAM Used : "INTEGER: 2048", Integer32
Mengapa Data Ini Harus Diproses?
- Kolom uptime di database tidak bisa langsung menyimpan string "Timeticks: (12345678) ...".
- Perhitungan penggunaan CPU memerlukan nilai idle yang sudah bersih dari label "INTEGER: ".
- Nilai RAM perlu dikonversi ke satuan yang konsisten (misal MB atau GB) sebelum disimpan.
Proses Parsing Data
Parsing adalah langkah untuk membersihkan prefix tipe data dan mengambil nilai inti.
Di dalam kode:
- Parsing sederhana untuk nilai integer dilakukan langsung dengan type casting (int) saat menghitung CPU usage.
- Parsing khusus diterapkan untuk uptime melalui method parseUptime().
Parsing Uptime (TimeTicks)
Uptime yang dikembalikan perangkat dalam format TimeTicks memiliki dua bagian:
- Nilai numerik dalam satuan 1/100 detik (dalam kurung).
- Representasi teks yang mudah dibaca manusia.
Tujuan Parsing Uptime:
- Mengekstrak nilai numerik mentah (misal 12345678) dari dalam kurung.
- Mengabaikan bagian teks deskriptif.
Langkah Logis dalam parseUptime():
- Periksa apakah response valid (tidak null atau kosong).
- Cari pola angka yang diapit tanda kurung, misal "(12345678)".
- Ekstrak angka tersebut dan konversi ke tipe integer.
- Nilai ini merepresentasikan uptime dalam satuan 1/100 detik.
- (Opsional) Konversi lebih lanjut ke detik dengan membagi 100.
Contoh:
- Input: "Timeticks: (12345678) 1 day, 10:17:36.78"
- Hasil Parsing: 12345678 (integer)
Parsing Nilai Integer (CPU, RAM)
Untuk OID seperti CPU dan RAM, nilai mentahnya sudah berupa angka meskipun ada label INTEGER:.
Penanganan di Kode:
- Saat menghitung $cpuUsage = 100 - (int)$cpuIdle;
- Operator (int) secara otomatis mengonversi string "INTEGER: 83" menjadi integer 83.
- PHP akan mengabaikan karakter non-numerik di awal string saat konversi ke integer.
Keuntungan:
- Tidak perlu menulis logika split string secara manual untuk OID sederhana.
- Namun perlu kewaspadaan: jika response berupa teks error, (int) akan menghasilkan 0 yang dapat mengacaukan data.
Potensi Masalah dalam Proses Parsing
Berdasarkan kode yang ada, beberapa potensi masalah perlu diantisipasi:
1. Response Timeout atau Null
- Jika perangkat tidak merespons, $snmp->get() bisa mengembalikan null atau false.
- Saat kode melakukan (int)$cpuIdle, nilai null akan menjadi 0, menyebabkan CPU usage terhitung 100% (karena 100 - 0).
- Solusi: Validasi response sebelum diproses.
2. OID Tidak Didukung Perangkat
- Beberapa perangkat mungkin tidak mendukung OID CPU tertentu (terutama OID UCD-SNMP-MIB untuk Linux/Unix).
- Response bisa berupa string error "No Such Object...".
- (int) akan mengubahnya menjadi 0, merusak data.
3. Format Uptime Tidak Standar
- Tidak semua perangkat mengembalikan uptime dengan format kurung yang rapi.
- Method parseUptime() harus robust menangani variasi format.
Error Handling di Kode:
- Kode telah menggunakan blok try-catch yang membungkus seluruh proses per perangkat.
- Jika satu perangkat gagal, proses akan melanjutkan ke perangkat berikutnya tanpa menghentikan seluruh command.
Alur Lengkap Proses (Step-by-Step)
Berikut rangkuman alur logis berdasarkan kode snmp:fetch:
- Command Dipanggil (oleh Scheduler setiap menit).
- Ambil Semua Device Aktif dari database.
- Jika Tidak Ada Device → Tampilkan pesan peringatan & selesai.
Looping Setiap Device:
- Set Konfigurasi Koneksi (host, port, community).
- Lakukan SNMP Get untuk 7 OID (hostname, uptime, CPU user/system/idle, RAM total/used).
- Parsing Uptime → panggil method parseUptime() untuk ekstrak nilai numerik.
- Normalisasi CPU → hitung 100 - (int)$cpuIdle.
- Normalisasi RAM (opsional) → konversi KB ke MB/GB jika perlu.
- Simpan History ke database (tabel device_metrics atau sejenis).
- Tangani Error → jika terjadi exception pada satu device, tangkap, log, lalu lanjut ke device berikutnya.
Visualisasi Alur:
[Scheduler tiap menit]
↓
[Command snmp:fetch]
↓
[Ambil Device Aktif]
↓
[Loop Device] → [Set SNMP Config] → [Get OIDs] → [Parse & Normalisasi] → [Simpan DB]
↓ ↓
[Error?] → [Log & Continue] ←──────────────────────┘Hasil Pembelajaran
Melalui pembelajaran ini, saya memahami bahwa proses get dilakukan dengan mengirimkan permintaan ke perangkat jaringan menggunakan OID tertentu melalui protokol Simple Network Management Protocol. Data yang diterima biasanya masih dalam bentuk mentah, seperti nilai numerik atau format tertentu yang belum memiliki konteks yang jelas.
Oleh karena itu, diperlukan proses parsing untuk mengubah data mentah tersebut menjadi format yang lebih terstruktur dan mudah dipahami. Proses parsing dapat meliputi pemisahan nilai, konversi tipe data, serta penyesuaian satuan agar sesuai dengan kebutuhan monitoring. Selain itu, data juga dapat diperkaya dengan informasi tambahan seperti timestamp dan identitas perangkat.
Saya juga memahami bahwa proses parsing yang baik sangat penting agar data yang disimpan di database memiliki konsistensi dan dapat digunakan untuk analisis atau visualisasi secara akurat.
Kesimpulan
Proses get dan parsing data merupakan bagian penting dalam sistem monitoring berbasis Simple Network Management Protocol. Tahap ini memastikan bahwa data yang diambil dari perangkat jaringan tidak hanya dikumpulkan, tetapi juga diolah menjadi informasi yang bermakna.
Dengan memahami proses ini, saya dapat membangun sistem yang mampu mengelola data secara lebih efektif, sehingga hasil monitoring dapat digunakan untuk analisis dan pengambilan keputusan secara lebih tepat.