Sebagai seorang network engineer atau ISP yang mengelola infrastruktur fiber optik, monitoring jaringan EPON (Ethernet Passive Optical Network) secara real-time adalah hal yang sangat krusial. Masalah pada ONU (Optical Network Unit) bisa berdampak langsung pada layanan pelanggan, dan deteksi dini sangat penting untuk menjaga kualitas layanan.
Hari ini, saya akan membahas sebuah solusi monitoring EPON yang powerful - Enhanced EPON Multi-OLT Monitor v2.1, yang dikembangkan menggunakan Python dengan berbagai fitur canggih untuk monitoring multiple OLT secara bersamaan.
Enhanced EPON Multi-OLT Monitor v2.1 hadir dengan fitur-fitur canggih:
Backend:
Frontend:
Integration:
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ Web Browser │ │ Python Flask │ │ SQLite DB │
│ (Dashboard) │◄──►│ Application │◄──►│ (Data Store) │
└─────────────────┘ └──────────────────┘ └─────────────────┘
│
▼
┌──────────────────┐
│ OLT Managers │
│ (Multi-threaded) │
└──────────────────┘
│
▼
┌─────────────────────────────┐
│ OLT Devices │
│ ┌─────┐ ┌─────┐ ┌─────┐ │
│ │OLT-1│ │OLT-2│ │OLT-N│ │
│ └─────┘ └─────┘ └─────┘ │
└─────────────────────────────┘
│
▼
┌──────────────────┐
│ WhatsApp API │
│ (Notifications)│
└──────────────────┘
Dashboard web adalah jantung dari sistem monitoring ini. Dibangun dengan Bootstrap 5 dan Chart.js, dashboard menyediakan:
Overview Statistics:
Real-time Charts:
Interactive Features:
Salah satu fitur paling powerful adalah kemampuan monitoring multiple OLT secara bersamaan:
# Concurrent monitoring untuk performa optimal
with concurrent.futures.ThreadPoolExecutor(max_workers=len(olt_managers)) as executor:
future_to_manager = {
executor.submit(enhanced_monitor_single_olt, manager, cycle_count): manager
for manager in olt_managers
}
for future in concurrent.futures.as_completed(future_to_manager):
manager = future_to_manager[future]
result = future.result()
# Process hasil monitoring
Keunggulan Concurrent Processing:
Sistem notifikasi WhatsApp sangat detail dan informatif:
Format Alert DOWN/PWRDOWN:
EPON MULTI-OLT STATUS ALERT
Time: 2024-12-20 10:30:15
Total OLT Monitored: 3
OLT KEDIRI PUSAT (OLT-KEDIRI-01)
──────────────────────────────────────
Status: 2 Total Problems
DOWN: 1
PWRDOWN: 1
NEW DOWN DETECTED:
CLIENT-WARUNG-MAKAN-PAK-BAMBANG
PON: 1/1/1
MAC: 00:11:22:33:44:55
Status: Down (Timeout)
Priority: HIGH
Temp: 45°C
Jarak: 150m
RX: -28 dBm
Offline: 00:05:30
Reason: TIMEOUT (Koneksi Terputus)
Disconnect: 3x
Laporan Rutin Setiap Jam:
HOURLY STATUS REPORT
Report Time: 2024-12-20 11:00:00
Multi-OLT Network Status
Fungsi: Laporan rutin setiap jam untuk monitoring kesehatan jaringan
NETWORK OVERVIEW:
Total OLT: 3
Total ONU: 150
Online: 145 (96.7%)
Problems: 5
OLT Kediri Pusat: 48/50 (96.0%) | 42°C | -22dBm
OLT Kediri Timur: 49/50 (98.0%) | 38°C | -20dBm
OLT Kediri Barat: 48/50 (96.0%) | 66°C | -28dBm
NETWORK HEALTH:
Avg Temperature: 48.7°C
Avg RX Power: -23.3 dBm
Network Uptime: 96.7%
Sistem menggunakan SQLite dengan skema database yang well-designed:
Tabel Utama:
olt_configs
: Konfigurasi OLTonu_status
: Status real-time ONUalert_history
: Riwayat semua alertmonitoring_stats
: Statistik performa monitoringwhatsapp_templates
: Template pesan yang dapat dikustomisasiAdvanced Features:
Sistem memiliki algoritma deteksi yang cerdas untuk mengkategorikan masalah:
def get_detailed_onu_status(self, onu):
"""Analisis status ONU secara detail"""
status = onu.get('Status', 'Unknown')
dying_gasp = onu.get('Dying_Gasp', '0')
auth_status = onu.get('Auth_Status', '0')
temperature = onu.get('Temperature', 0)
rx_power = onu.get('RX_Power', 0)
# Determine priority based on multiple factors
if status == 'Down':
if dying_gasp == '1':
return {'category': 'down_dying_gasp', 'status': 'Down (Dying Gasp)', 'priority': 'critical'}
elif auth_status == '0':
return {'category': 'auth_failed', 'status': 'Down (Auth Failed)', 'priority': 'high'}
# ... logika lainnya
Kategorisasi Prioritas:
Salah satu challenge terbesar adalah parsing data dari web interface OLT yang berbeda-beda format. Sistem ini menggunakan teknik parsing yang robust:
def _parse_onu_data(self, html_content):
"""Enhanced ONU data parsing"""
try:
# Extract JavaScript array from HTML
onutable_pattern = r'var onutable=new Array\((.*?)\);'
match = re.search(onutable_pattern, html_content, re.DOTALL)
# Enhanced JavaScript array parsing
in_quotes = False
current_item = ""
escape_next = False
for char in onu_raw_data:
if escape_next:
current_item += char
escape_next = False
elif char == '\\':
escape_next = True
current_item += char
# ... parsing logic
Untuk update real-time di dashboard, sistem menggunakan Socket.IO:
// Enhanced WebSocket connection
const socket = io();
socket.on('monitoring_update', function(data) {
console.log('Enhanced monitoring update received:', data);
// Update charts with new data
updateCharts(data);
// Show notification for new alerts
if (data.alerts && data.alerts.length > 0) {
showAlert('warning', `${data.alerts.length} new alerts detected!`);
}
});
Database schema dirancang untuk performa optimal:
-- Index untuk query yang sering digunakan
CREATE INDEX IF NOT EXISTS idx_onu_status_olt_id ON onu_status(olt_id);
CREATE INDEX IF NOT EXISTS idx_alert_history_created_at ON alert_history(created_at);
CREATE INDEX IF NOT EXISTS idx_monitoring_stats_timestamp ON monitoring_stats(timestamp);
-- Table untuk tracking perubahan status
CREATE TABLE previous_status (
olt_id TEXT,
onu_key TEXT,
status TEXT,
last_update TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (olt_id, onu_key)
);
# Clone repository
git clone https://github.com/classyid/epon-multi-olt-monitor-enhanced.git
cd epon-multi-olt-monitor-enhanced
# Setup virtual environment
python3 -m venv venv
source venv/bin/activate
# Install dependencies
pip install -r requirements.txt
# Jalankan aplikasi
python epon_monitor_enhanced.py
# Akses dashboard
# http://localhost:5000
OLT-KEDIRI-01
OLT Kediri Pusat
http://192.168.1.100:88
Skenario: ISP dengan 5-10 OLT dan 500-1000 pelanggan
Manfaat:
ROI: Pengurangan downtime hingga 70%
Skenario: NOC dengan puluhan OLT
Manfaat:
ROI: Efficiency improvement hingga 50%
Skenario: Teknisi lapangan yang perlu info real-time
Manfaat:
ROI: Faster problem resolution
Sistem mendukung customization template WhatsApp:
# Template custom untuk critical alert
custom_template = ''' CRITICAL ALERT
OLT: {olt_name}
Issue: {issue_type}
Action Required: {action_needed}
Contact: {support_number}'''
RESTful API memungkinkan integrasi dengan sistem lain:
# Get current status
curl http://localhost:5000/api/dashboard/enhanced-stats
# Start/stop monitoring
curl -X POST http://localhost:5000/api/monitoring/start
# Export data
curl http://localhost:5000/api/dashboard/export
Dapat menambahkan parameter monitoring custom:
# Monitor parameter tambahan
def get_custom_metrics(self, onu):
"""Custom metrics untuk monitoring specific"""
return {
'fiber_break_detection': self.detect_fiber_break(onu),
'customer_impact_score': self.calculate_impact(onu),
'maintenance_prediction': self.predict_maintenance(onu)
}
Monitoring Performance:
Resource Usage:
# Deploy dengan Docker
docker-compose up -d
# Setup dengan systemd
sudo systemctl enable epon-monitor
sudo systemctl start epon-monitor
# Reverse proxy dengan Nginx
# SSL certificate dengan Let's Encrypt
Project ini open source dan welcomes contributions:
Enhanced EPON Multi-OLT Monitor v2.1 adalah solusi monitoring yang powerful dan comprehensive untuk network engineer yang serious tentang network reliability. Dengan fitur-fitur canggih seperti:
Real-time monitoring dengan dashboard yang intuitif Smart alerting via WhatsApp dengan format yang informatif
Multi-OLT support dengan concurrent processing Comprehensive analytics untuk decision making Production-ready dengan deployment yang mudah
Sistem ini dapat significantly meningkatkan network uptime, mengurangi MTTR, dan memberikan visibility yang lebih baik terhadap network health.
Repository: GitHub - Enhanced EPON Multi-OLT Monitor
Support: Jika ada pertanyaan atau butuh bantuan implementation, feel free to reach out via GitHub issues atau email.
Tags: #EPON #NetworkMonitoring #Python #Flask #ISP #FiberOptic #NOC #TelecommunicationsReady to Get Started?