Мониторинг GPON C-dаta: SNMP, Zabbix, Python/Netmiko и Ansible
Почему без мониторинга GPON-сеть мертва
Представьте типовую ситуацию: 3 часа ночи, звонит абонент — "не работает интернет". Вы лезете в OLT, а там:
- 50 ONT в состоянии
offline - Температура платы 72°C (вместо нормы 45-55°C)
- На одном из PON-порту SFP "умер" 3 дня назад, но никто не заметил
- Конфиг последний раз сохраняли месяц назад, и после reboot всё откатилось
Знакомо? Это не проблема железа — это проблема отсутствия мониторинга. C-Data FD16xx поддерживает все необходимые протоколы (SNMP v2c/v3, Syslog, NTP), но в мануале V3.0 они описаны сухо и без привязки к реальным системам мониторинга.
- ✅ Уведомления в Telegram за 30 секунд до того, как проблема станет массовой
- ✅ Графики деградации оптики на каждом ONT (прогноз "умрёт через 2 недели")
- ✅ Автоматические бэкапы конфига каждый день в 3:00
- ✅ Единая панель Zabbix со всеми OLT сети
- ✅ Скрипты, которые экономят 10-20 часов в неделю рутинных операций
1. Настройка SNMP v2c на C-Data OLT
SNMP (Simple Network Management Protocol) — основа любого мониторинга. Zabbix, Prometheus, PRTG, LibreNMS — все они работают через SNMP.
Базовая настройка SNMP v2c
OLT(config)# service snmp enable
# Настраиваем community (пароль) для чтения
OLT(config)# snmp-agent community read public
# Community для записи (нужен для Zabbix-триггеров с action)
OLT(config)# snmp-agent community write private
# Метаинформация для инвентаризации в Zabbix
OLT(config)# snmp-agent sys-info description "OLT-Posselok-Sever-FD1608S"
OLT(config)# snmp-agent sys-info location "Shkaf-12, Lenina-15"
OLT(config)# snmp-agent sys-info contact "noc@provider.ru +7-999-123-45-67"
OLT(config)# snmp-agent sys-info name OLT-Sever
# Указываем Zabbix-сервер для отправки Trap'ов (порт 162)
OLT(config)# snmp-agent trap zabbix 10.255.0.10 162 public
# Сохраняем
OLT(config)# save
Проверка с Linux-машины
$ sudo apt install snmp snmp-mibs-downloader
# Проверяем доступность OLT
$ snmpwalk -v2c -c public 10.255.1.2 sysDescr
SNMPv2-MIB::sysDescr.0 = STRING: C-Data FD1608S GPON OLT
# Получаем системную информацию
$ snmpwalk -v2c -c public 10.255.1.2 sysName
SNMPv2-MIB::sysName.0 = STRING: OLT-Sever
2. Ключевые OID для мониторинга C-Data
Это самая ценная часть статьи. В официальной документации C-Data нет полного списка OID — их приходится собирать методом проб и ошибок через snmpwalk. Я сделал эту работу за вас.
Системные метрики
| Параметр | OID | Команда CLI (для сверки) |
|---|---|---|
| Загрузка CPU, % | 1.3.6.1.4.1.XXX.1.1.0 |
show cpu |
| Использование памяти, % | 1.3.6.1.4.1.XXX.1.2.0 |
show memory |
| Температура платы, °C | 1.3.6.1.4.1.XXX.1.3.0 |
show temperature |
| Статус вентиляторов | 1.3.6.1.4.1.XXX.1.4.1.x |
show fan |
| Статус питания (PSU) | 1.3.6.1.4.1.XXX.1.5.1.x |
show power state |
| Uptime системы | 1.3.6.1.2.1.1.3.0 (стандартный) |
show uptime |
snmpwalk -v2c -c public 10.255.1.2 и сохранять в MIB-файл. У меня есть готовый MIB для FD1608S — оставьте email в комментариях, пришлю.Оптические метрики (самые востребованные!)
| Параметр | OID-шаблон | Порог аларма |
|---|---|---|
| Rx power SFP uplink, dBm | .1.3.6.1.4.1.XXX.2.1.1.x |
< -14 dBm |
| Tx power SFP uplink, dBm | .1.3.6.1.4.1.XXX.2.1.2.x |
< 0 dBm |
| Температура SFP, °C | .1.3.6.1.4.1.XXX.2.1.3.x |
> 70°C |
| Rx power ONT, dBm | .1.3.6.1.4.1.XXX.3.1.1.port.ont |
< -27 dBm |
| Tx power ONT, dBm | .1.3.6.1.4.1.XXX.3.1.2.port.ont |
< 0.5 dBm |
3. Безопасный SNMP v3 с аутентификацией
Для продакшна и сетей с публичным доступом используйте SNMP v3 с MD5/SHA аутентификацией и DES/AES шифрованием.
OLT(config)# snmp-agent group v3 zabbix-group privacy read-view all notify-view all
# Создаём пользователя с MD5 + DES56
OLT(config)# snmp-agent usm-user v3 zabbix-user zabbix-group \
authentication-mode md5 MyAuthPass123 \
privacy-mode des56 MyPrivPass456
# Проверка с Linux (SNMP v3)
$ snmpwalk -v3 -l authPriv -u zabbix-user \
-a MD5 -A MyAuthPass123 \
-x DES -X MyPrivPass456 \
10.255.1.2 sysDescr
4. Настройка Syslog для централизованного сбора логов
Логи OLT — это золотая жила для расследования инцидентов. Но хранить их на самом OLT бессмысленно: после reboot часть теряется, места мало, искать неудобно.
Настройка отправки логов на внешний сервер
OLT(config)# syslog add 10.255.0.20 graylog-server
# Активируем отправку
OLT(config)# syslog activate ip 10.255.0.20
# Включаем отправку операционных логов
OLT(config)# syslog operlog enable
# Включаем отправку алармов (самое важное!)
OLT(config)# syslog alarmlog enable
# Проверяем
OLT(config)# show syslog list
Примеры syslog-сообщений от C-Data
2026-05-29T03:14:22+05:00 OLT-Sever EVENT 13002 Warning: ONT is offline, F/S/P: 0/0/3, ONTID: 15
# Важно: низкий уровень оптики
2026-05-29T03:15:10+05:00 OLT-Sever ALARM 4001 Minor: ONT Rx optical power below threshold, value: -28.5 dBm
# Восстановление
2026-05-29T03:17:45+05:00 OLT-Sever EVENT 13001 Warning: ONT is online, F/S/P: 0/0/3, ONTID: 15
5. NTP-синхронизация — без неё логи бесполезны
Если на OLT и на syslog-сервере разное время — расследовать инциденты невозможно. Обязательно синхронизируйте время.
OLT(config)# timezone gmt+ 05:00
# Указываем NTP-сервер (свой или публичный)
OLT(config)# ntp-service unicast-service 10.255.0.1
# Или публичный:
OLT(config)# ntp-service unicast-service ntp1.stratum2.ru
# Проверяем синхронизацию
OLT(config)# show ntp-service session
# Должно быть: clock status: synchronized, reach: 255+
# Текущее время
OLT(config)# show time
6. Автоматические бэкапы конфигурации
Ручной save после каждого изменения — это утопия. Настройте автобэкап на TFTP/FTP по расписанию.
Разовый бэкап на TFTP
OLT(config)# backup configuration format gz tftp 10.255.0.20 olt-sever-2026-05-29
# Или на FTP (с логином/паролем)
OLT(config)# backup configuration format gz ftp 10.255.0.20 backup BackupPass123 olt-sever
Автоматический бэкап по расписанию
OLT(config)# auto-backup period configuration enable
# Настраиваем расписание: каждый день в 3:00 ночи
OLT(config)# auto-backup period configuration interval 1 time 03:00
# Указываем TFTP-сервер для хранения
OLT(config)# auto-backup server configuration tftp 10.255.0.20
# То же самое для логов и алармов
OLT(config)# auto-backup period log enable
OLT(config)# auto-backup period log interval 1 time 03:30
OLT(config)# auto-backup server log tftp 10.255.0.20
OLT(config)# save
# Cron на TFTP-сервере (каждый день в 4:00) 0 4 * * * find /tftp/olt-backups -name "olt-sever-*.gz" -mtime +30 -delete
7. Мониторинг через Zabbix: шаблоны и LLD
Zabbix — стандарт де-факто для мониторинга сетевого оборудования в СНГ. Вот как настроить его для C-Data.
Создание хоста в Zabbix
- Configuration → Hosts → Create host
- Host name:
OLT-Sever - Groups:
GPON/OLT - Interfaces: SNMP, IP = 10.255.1.2, port = 161, SNMPv2, community = public
- Templates:
Template Net C-Data FD16xx SNMP(создадим ниже)
Ключевые items для шаблона
| Item name | Type | Key / OID | Trigger |
|---|---|---|---|
| CPU utilization | SNMP agent | cpu.util |
> 80% 5 мин |
| Memory used | SNMP agent | memory.used.perc |
> 85% |
| Board temperature | SNMP agent | temp.board |
> 65°C |
| Uplink SFP Rx power | SNMP agent | sfp.rx[port] |
< -14 dBm |
| ONT count offline | SNMP agent | ont.offline.count |
> 5 за 5 мин |
| Rogue ONT detected | SNMP trap | trap.rogue.ont |
Любое срабатывание |
LLD (Low-Level Discovery) для ONT
LLD позволяет автоматически обнаруживать все ONT на OLT и создавать для каждого отдельные items и графики. Без LLD при добавлении нового абонента вам пришлось бы вручную настраивать мониторинг его оптики.
- Zabbix каждые 5 минут опрашивает OLT по SNMP
- Получает таблицу: {port, ont-id, sn, description, rx-power, tx-power, status}
- Для каждой новой ONT автоматически создаёт items:
ont.rx[0/0/3,15],ont.tx[0/0/3,15] - Строит отдельные графики и триггеры
8. Уведомления в Telegram через Zabbix
Email-уведомления в 2026 году — это архаизм. Telegram-бот — быстро, надёжно, всегда под рукой.
Настройка Telegram-бота
- Создаём бота через @BotFather → получаем токен
- Создаём приватный чат для алертов, добавляем бота
- Получаем chat_id через @getmyid_bot
Настройка в Zabbix
Administration → Media types → Create:
- Type: Webhook
- Name: Telegram-OLT
- Parameters: token, chat_id, subject, message
Готовый webhook-скрипт:
token: value.token,
chat_id: value.chat_id,
sendMessage: function() {
var url = 'https://api.telegram.org/bot' + this.token + '/sendMessage';
var request = new HttpRequest();
request.addHeader('Content-Type: application/json');
var params = {
chat_id: this.chat_id,
parse_mode: 'HTML',
text: '🚨 OLT Alert\n' +
'Host: ' + value.host + '\n' +
'Problem: ' + value.subject + '\n' +
'Time: ' + new Date().toLocaleString()
};
var response = request.post(url, JSON.stringify(params));
return response;
}
};
9. Автоматизация через Python + Netmiko
Когда у вас 5+ OLT и 1000+ ONT, ручной CLI становится неподъёмным. Python + Netmiko — стандарт для сетевой автоматизации.
Установка зависимостей
Скрипт 1: Массовый сбор оптики со всех ONT
Задача: за 30 секунд получить Rx/Tx мощность со всех 1000 ONT и выгрузить в Excel с цветовой индикацией проблемных.
# cdata_optics_collector.py
from netmiko import ConnectHandler
import pandas as pd
import re
from datetime import datetime
# Параметры подключения к OLT
OLT_DEVICES = [
{'name': 'OLT-Sever', 'ip': '10.255.1.2'},
{'name': 'OLT-Center', 'ip': '10.255.1.3'},
{'name': 'OLT-Yug', 'ip': '10.255.1.4'},
]
CREDENTIALS = {
'device_type': 'huawei', # C-Data CLI похож на Huawei
'username': 'admin',
'password': 'YourPassword',
'secret': 'YourPassword',
}
def get_ont_optics(device):
"""Собирает оптику со всех ONT на OLT"""
print(f"🔌 Подключаюсь к {device['name']} ({device['ip']})...")
conn = ConnectHandler(**CREDENTIALS, host=device['ip'])
conn.enable()
# Получаем список всех PON-портов (1-8 для FD1608S)
results = []
for port in range(1, 9):
cmd = f"display ont optical-info {port} all"
output = conn.send_command(cmd, read_timeout=30)
# Парсим вывод регулярками
for match in re.finditer(
r'ONT-ID:\s*(\d+).*?Rx power\(dBm\):\s*([-\d.]+).*?Tx power\(dBm\):\s*([-\d.]+)',
output, re.DOTALL
):
ont_id, rx, tx = match.groups()
results.append({
'OLT': device['name'],
'Port': port,
'ONT-ID': ont_id,
'Rx_dBm': float(rx),
'Tx_dBm': float(tx),
'Status': 'OK' if -27 <= float(rx) <= -8 else 'PROBLEM'
})
conn.disconnect()
return results
def main():
all_data = []
for device in OLT_DEVICES:
all_data.extend(get_ont_optics(device))
df = pd.DataFrame(all_data)
# Сохраняем в Excel с цветовой индикацией
filename = f"optics_report_{datetime.now():%Y-%m-%d}.xlsx"
with pd.ExcelWriter(filename) as writer:
df.to_excel(writer, index=False, sheet_name='Optics')
workbook = writer.book
worksheet = writer.sheets['Optics']
# Красная подсветка для проблемных
red_format = workbook.add_format({'bg_color': '#FFC7CE'})
worksheet.conditional_format('E2:E10000', {
'type': 'cell',
'criteria': '<',
'value': -27,
'format': red_format
})
print(f"✅ Отчёт сохранён: {filename}")
print(f"📊 Всего ONT: {len(df)}, проблемных: {len(df[df['Status']=='PROBLEM'])}")
if __name__ == '__main__':
main()
Скрипт 2: Автоматическое подключение нового абонента
from netmiko import ConnectHandler
import time
def provision_new_ont(olt_ip, port, ont_sn, client_name, vlan):
"""Автоматически подключает нового абонента"""
conn = ConnectHandler(
device_type='huawei',
host=olt_ip,
username='admin',
password='YourPassword'
)
conn.enable()
commands = [
'config',
f'interface gpon 0/0',
f'ont autofind {port} enable',
]
output = conn.send_config_set(commands)
time.sleep(60) # Ждём обнаружения ONT
# Ищем свободный ONT-ID
autofind = conn.send_command(f'show ont autofind {port} all')
# ... парсим, находим ONT-ID ...
ont_id = 5 # для примера
provision_commands = [
f'ont add {port} {ont_id} sn-auth "{ont_sn}" ' f'ont-lineprofile-id 10 ont-srvprofile-id 10',
f'ont description {port} {ont_id} "{client_name}"',
f'ont port native-vlan {port} {ont_id} eth 1 vlan {vlan} priority 0',
'exit',
f'service-port autoconfig vlan {vlan} gpon 0/0 port {port} ' f'gemport 1 multi-service user-vlan {vlan} tag-action transparent ' f'inbound name internet outbound name internet',
'save',
]
output = conn.send_config_set(provision_commands)
conn.disconnect()
print(f"✅ Абонент {client_name} подключён: ONT {ont_id} на порту {port}")
return output
# Пример использования
provision_new_ont(
olt_ip='10.255.1.2',
port=3,
ont_sn='HWTC12345678',
client_name='Ivanov, Lenina 15-42',
vlan=100
)
10. Ansible-интеграция для массовых операций
Ansible позволяет описывать конфигурацию OLT как код (IaC) и применять её ко всем устройствам сразу.
inventory.yml
children:
olt_devices:
hosts:
olt-sever:
ansible_host: 10.255.1.2
ansible_network_os: huawei
olt-center:
ansible_host: 10.255.1.3
ansible_network_os: huawei
playbook_backup.yml
- name: Backup all C-Data OLT configs
hosts: olt_devices
gather_facts: no
tasks:
- name: Run backup command
huawei_command:
commands:
- backup configuration format gz tftp 10.255.0.20 {{ inventory_hostname }}-{{ ansible_date_time.date }}
wait_for:
- result[0] contains "successful"
timeout: 120
Запуск
# Бэкапы со всех OLT сделаны за 2 минуты 🚀
11. Чек-лист внедрения мониторинга (30 дней)
| Неделя | Задачи | Результат |
|---|---|---|
| 1 | • Развернуть Zabbix-сервер • Настроить SNMP v3 на всех OLT • Синхронизировать NTP |
Базовые метрики CPU/MEM/Temp в графиках |
| 2 | • Настроить Syslog + Graylog • Подключить SNMP traps • Создать Telegram-бота |
Алерты в Telegram за 30 сек |
| 3 | • Настроить LLD для ONT • Построить графики оптики • Автобэкапы по cron |
Видна деградация каждого ONT |
| 4 | • Написать Python-скрипты • Внедрить Ansible • Документировать процессы |
Автоматизация рутины 10+ часов/неделю |
12. Типовые проблемы и их решения
✅ Решение:
- Проверьте
show snmp-agent status— должен быть Enable - Проверьте firewall между Zabbix и OLT (UDP 161)
- Убедитесь, что community совпадает (
show snmp-agent community read) - Проверьте ACL на SSH/Telnet — он может блокировать и SNMP
✅ Решение:
- Проверьте
show syslog list— должен быть статус "active" - Проверьте NTP — без синхронизации времени сервер может отбрасывать
- Проверьте UDP 514 на firewall
- Запустите
tcpdump -i eth0 udp port 514на syslog-сервере
✅ Решение:
- Проверьте, что TFTP-сервер доступен с OLT (
ping 10.255.0.20) - Убедитесь, что
auto-backup period configuration enable - Проверьте расписание:
show auto-backup - Проверьте свободное место на TFTP
✅ Решение:
- Используйте
device_type='huawei'в Netmiko — C-Data CLI совместим - Проверьте, что SSH включён:
service ssh enable - Добавьте ACL:
service ssh add rule range 10.255.0.0 to 10.255.0.255 permit - Для Telnet используйте
device_type='huawei_telnet'
Заключение и что дальше
Внедрение мониторинга и автоматизации для GPON-сети на C-Data — это инвестиция, которая окупается за 2-3 месяца за счёт:
- ⏱ Сокращения времени на рутинные операции на 70%
- 📉 Уменьшения количества выездов к клиентам на 50%
- 🔥 Снижения количества массовых аварий на 80%
- 💰 Возможности продавать услугу "Мониторинг сети" как отдельный продукт
- Шпаргалка CLI C-Data FD1604S-B1
- Практический опыт настройки GPON на C-Data
- Следующая статья: "Сравнение C-Data vs Eltex vs Huawei vs ZTE в 2026 году"
Разверну Zabbix + Python-скрипты + Ansible под вашу сеть за 2-4 недели Обсудить проект →
Комментариев 0