shafiev Опубликовано 25 декабря, 2018 · Жалоба Коллеги, сейчас опять хочу вернуться к этому чудо софту http://0x1.tv/20150626F , поделитесь опытом использования и допилки LibreNMS Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Urs_ak Опубликовано 26 декабря, 2018 · Жалоба Я недавно изучал эту штуку - из коробки много что работает, но если надо что-то добавить чего нету, то это геморр. Железяку (например коммутатор Eltex) со стандартными метриками ещё можно добавить, через создание описания /opt/librenms/includes/definitions/eltex.yaml А чего-то новое, типа отображения на отдельной закладке ONT портов для gpon-терминала Eltex LTP, я сделал, но провозился неделю. По факту - это программирование на php. Потом мне попались на глаза графики "Interface Non Unicast" и я увидел что они не правильные. Написал разрабам, они проигнорили. Теперь не планирую особо использовать LibreNMS. В общем - ознакомился с продуктом. P.S. Жалко, конечно, т.к. от интерфейса Zabbix'а меня тошнит - помойка метрик. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
shafiev Опубликовано 26 декабря, 2018 · Жалоба 3 hours ago, Urs_ak said: Потом мне попались на глаза графики "Interface Non Unicast" и я увидел что они не правильные. Написал разрабам, они проигнорили. Теперь не планирую особо использовать LibreNMS. Ты им завели issue на github ? 3 hours ago, Urs_ak said: А чего-то новое, типа отображения на отдельной закладке ONT портов для gpon-терминала Eltex LTP, я сделал, но провозился неделю. По факту - это программирование на php. А можешь пояснить как или поделиться ? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Urs_ak Опубликовано 27 декабря, 2018 · Жалоба 19 часов назад, shafiev сказал: А можешь пояснить как или поделиться ? Я могу пояснить суть (на примере gpon-терминала Eltex LTP-4X), только без деталей, т.к. я охладел к LibreNMS на год-два точно Но есть ли в этом смысл, если это добавление довольно муторно делается? Из моих записей: 1. Добавить узнавание модели LTP-4X librenms/includes/definitions/eltex-olt.yaml Скрытый текст discovery: - sysObjectID: - .1.3.6.1.4.1.35265.1.70 2. Скопировать MIB'ы для LTP-4X в librenms/mibs/eltex-my 3. Собирать свои метрики poller'ом, сохранять в rrd, также сохранять в mysql номера портов и их описание librenms/includes/polling/eltex-pon.inc.php Скрытый текст use LibreNMS\RRD\RrdDefinition; ... // Get metrics from ONT ports $OLTmetrics = array(); $OLTmetrics = snmpwalk_cache_multi_oid($device, 'ltp8xONTStateChannel', $OLTmetrics, 'ELTEX-LTP8X', null, '-OQUsb'); $OLTmetrics = snmpwalk_cache_multi_oid($device, 'ltp8xONTStateID', $OLTmetrics, 'ELTEX-LTP8X', 'eltex-my', '-OQUsb'); $OLTmetrics = snmpwalk_cache_multi_oid($device, 'ltp8xONTConfigDescription', $OLTmetrics, 'ELTEX-LTP8X', 'eltex-my', '-OQUsb'); $OLTmetrics = snmpwalk_cache_multi_oid($device, 'ltp8xONTStateState', $OLTmetrics, 'ELTEX-LTP8X', 'eltex-my', '-OeQUsb'); $OLTmetrics = snmpwalk_cache_multi_oid($device, 'ltp8xONTStateDistance', $OLTmetrics, 'ELTEX-LTP8X', 'eltex-my', '-OQUsb'); $OLTmetrics = snmpwalk_cache_multi_oid($device, 'ltp8xONTStateTxPower', $OLTmetrics, 'ELTEX-LTP8X', 'eltex-my', '-OQUsb'); $OLTmetrics = snmpwalk_cache_multi_oid($device, 'ltp8xONTStateRxPower', $OLTmetrics, 'ELTEX-LTP8X', 'eltex-my', '-OQUsb'); $OLTmetrics = snmpwalk_cache_multi_oid($device, 'ltp8xONTStateTemperature', $OLTmetrics, 'ELTEX-LTP8X', 'eltex-my', '-OQUsb'); // Get traffic from ONT ports foreach ($OLTmetrics as $OLTmetricId=>$OLTmetric) { $snmp_query = "ltp8xONTCrossConnectDSCounterValue.$OLTmetricId.1.1 ltp8xONTCrossConnectUSCounterValue.$OLTmetricId.1.1"; $OLTmetrics_traffic = snmp_get_multi($device, $snmp_query, '-OQUsb', 'ELTEX-LTP8X', 'eltex-my'); $OLTmetrics[$OLTmetricId]['ltp8xONTCrossConnectDSCounterValue'] = $OLTmetrics_traffic["$OLTmetricId.1.1"]['ltp8xONTCrossConnectDSCounterValue']; $OLTmetrics[$OLTmetricId]['ltp8xONTCrossConnectUSCounterValue'] = $OLTmetrics_traffic["$OLTmetricId.1.1"]['ltp8xONTCrossConnectUSCounterValue']; } ... сохранить в mysql номера портов и desc ... // Generate RRD files foreach ($OLTmetrics as $OLTmetricId=>$OLTmetric) { $ONTchannel = $OLTmetric['ltp8xONTStateChannel']; $ONTstateid = $OLTmetric['ltp8xONTStateID']; $ONTifname = $ONTchannel.'/'.$ONTstateid; $ONTdesc = $OLTmetric['ltp8xONTConfigDescription']; $ONTstate = $OLTmetric['ltp8xONTStateState']; $ONTdistance = $OLTmetric['ltp8xONTStateDistance']; $ONTtxpower = $OLTmetric['ltp8xONTStateTxPower']; $ONTrxpower = $OLTmetric['ltp8xONTStateRxPower']; $ONTtemp = $OLTmetric['ltp8xONTStateTemperature']; $ONTdownload = $OLTmetric['ltp8xONTCrossConnectDSCounterValue']; $ONTupload = $OLTmetric['ltp8xONTCrossConnectUSCounterValue']; echo "* ONT Interface: ". $ONTifname."\n"; echo " ONT Description: ".$ONTdesc."\n"; echo " ONT State: ". $ONTstate."\n"; echo " ONT Distance: ". $ONTdistance."\n"; echo " ONT TX Power: ". $ONTtxpower."\n"; echo " ONT RX Power: ". $ONTrxpower."\n"; echo " ONT Temperature: ".$ONTtemp."\n"; echo " ONT Download: ". $ONTdownload."\n"; echo " ONT Upload: ". $ONTupload."\n"; $rrd_def = RrdDefinition::make() ->addDataset('state', 'GAUGE', 0) ->addDataset('distance', 'GAUGE', 0) ->addDataset('txpower', 'GAUGE', 0) ->addDataset('rxpower', 'GAUGE', null) ->addDataset('temp', 'GAUGE', 0) ->addDataset('download', 'COUNTER', 0) ->addDataset('upload', 'COUNTER', 0); $fields = array( 'state' => $ONTstate, 'distance' => $ONTdistance, 'txpower' => $ONTtxpower, 'rxpower' => $ONTrxpower, 'temp' => $ONTtemp, 'download' => $ONTdownload, 'upload' => $ONTupload, ); $tags = compact('rrd_def'); $rrdfname = "ponport-".$ONTchannel.'-'.$ONTstateid; data_update($device, $rrdfname, $tags, $fields); } 4. Проверочный запуск поллера librenms/poller.php -h <ip> -m eltex-pon -d -v 5. Сделать свою закладку для устройства Eltex LTP добавить код вызова закладки PON (122 строка) в страницу device librenms/html/pages/device.inc.php Скрытый текст if ($device['os'] == 'eltex-olt') { echo '<li role="presentation" '.$select['pon'].'> <a href="'.generate_device_url($device, array('tab' => 'pon')).'"> <i class="fa fa-sitemap fa-lg icon-theme" aria-hidden="true"></i> PON </a> </li>'; } 6. Сделать отображение этой закладки, по аналогии с таблицей обычных портов librenms/html/pages/device/pon.inc.php Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
shafiev Опубликовано 27 декабря, 2018 (изменено) · Жалоба 36 minutes ago, Urs_ak said: Но есть ли в этом смысл, если это добавление довольно муторно делается? Оки , а чем не муторно ? И еще пару вопросов : А где у тебя в коде вызывается сохраненение в mysql? И почему нельзя это плагином сделать , туда можно и функционал добавления, выключение ОНТ сделать ? Да и спасибо за код Изменено 27 декабря, 2018 пользователем shafiev Забыл добавить спасибо Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Urs_ak Опубликовано 27 декабря, 2018 · Жалоба 5 минут назад, shafiev сказал: А где у тебя в коде вызывается сохраненение в mysql? Там и вызывается, в п. 3 Я это не расписывал, т.к. это замыливание сути - как LibreNMS получает метрики и сохраняет в rrd Записи в mysql они больше нужны для вывода активных портов на закладке, для отображения 11 минут назад, shafiev сказал: И почему нельзя это плагином сделать , туда можно и функционал добавления, выключение ОНТ сделать ? Наверно можно, я же это делал чтобы разобраться как LibreNMS работает, на примере конкретной задачи Если я бы дошёл до стадии "отправить рабочий код разработчикам", то навёл бы красоты, может переписал бы через плугины Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
shafiev Опубликовано 27 декабря, 2018 · Жалоба 2 minutes ago, Urs_ak said: Я это не расписывал, т.к. это замыливание сути - как LibreNMS получает метрики и сохраняет в rrd Да у них сейчас и в influxdb и в Prometheus тоже поддержка есть, что радует , ведь проект сам по себе развивается. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
shafiev Опубликовано 27 декабря, 2018 · Жалоба 2 hours ago, Urs_ak said: discovery: - sysObjectID: - .1.3.6.1.4.1.35265.1.70 Если можно будет еще пару вопросов .Вот то что выше это запрос на все онт какие есть или уже готовый с ifindex интерфейса ? (Меня просто попросили помочь с OLT Huawei , там вначале спрашиваешь какие есть интерфейсы , потом выбираешь какие gpon ,чтобы потом получить как ONT ID к ним привязанны и дальше делаешь опросы ) ? И ты где инфу по внутреннестям брал( на каких ресурсах , примерах , и/или кого то спрашивал ) ? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
s.lobanov Опубликовано 27 декабря, 2018 · Жалоба В 26.12.2018 в 11:17, Urs_ak сказал: Потом мне попались на глаза графики "Interface Non Unicast" и я увидел что они не правильные. Написал разрабам, они проигнорили. Теперь не планирую особо использовать LibreNMS. А патч-то приложили? 2 часа назад, Urs_ak сказал: Я могу пояснить суть (на примере gpon-терминала Eltex LTP-4X), только без деталей, т.к. я охладел к LibreNMS на год-два точно Но есть ли в этом смысл, если это добавление довольно муторно делается? Из моих записей: 1. Добавить узнавание модели LTP-4X librenms/includes/definitions/eltex-olt.yaml Показать содержимое discovery: - sysObjectID: - .1.3.6.1.4.1.35265.1.70 2. Скопировать MIB'ы для LTP-4X в librenms/mibs/eltex-my 3. Собирать свои метрики poller'ом, сохранять в rrd, также сохранять в mysql номера портов и их описание librenms/includes/polling/eltex-pon.inc.php Показать содержимое use LibreNMS\RRD\RrdDefinition; ... // Get metrics from ONT ports $OLTmetrics = array(); $OLTmetrics = snmpwalk_cache_multi_oid($device, 'ltp8xONTStateChannel', $OLTmetrics, 'ELTEX-LTP8X', null, '-OQUsb'); $OLTmetrics = snmpwalk_cache_multi_oid($device, 'ltp8xONTStateID', $OLTmetrics, 'ELTEX-LTP8X', 'eltex-my', '-OQUsb'); $OLTmetrics = snmpwalk_cache_multi_oid($device, 'ltp8xONTConfigDescription', $OLTmetrics, 'ELTEX-LTP8X', 'eltex-my', '-OQUsb'); $OLTmetrics = snmpwalk_cache_multi_oid($device, 'ltp8xONTStateState', $OLTmetrics, 'ELTEX-LTP8X', 'eltex-my', '-OeQUsb'); $OLTmetrics = snmpwalk_cache_multi_oid($device, 'ltp8xONTStateDistance', $OLTmetrics, 'ELTEX-LTP8X', 'eltex-my', '-OQUsb'); $OLTmetrics = snmpwalk_cache_multi_oid($device, 'ltp8xONTStateTxPower', $OLTmetrics, 'ELTEX-LTP8X', 'eltex-my', '-OQUsb'); $OLTmetrics = snmpwalk_cache_multi_oid($device, 'ltp8xONTStateRxPower', $OLTmetrics, 'ELTEX-LTP8X', 'eltex-my', '-OQUsb'); $OLTmetrics = snmpwalk_cache_multi_oid($device, 'ltp8xONTStateTemperature', $OLTmetrics, 'ELTEX-LTP8X', 'eltex-my', '-OQUsb'); // Get traffic from ONT ports foreach ($OLTmetrics as $OLTmetricId=>$OLTmetric) { $snmp_query = "ltp8xONTCrossConnectDSCounterValue.$OLTmetricId.1.1 ltp8xONTCrossConnectUSCounterValue.$OLTmetricId.1.1"; $OLTmetrics_traffic = snmp_get_multi($device, $snmp_query, '-OQUsb', 'ELTEX-LTP8X', 'eltex-my'); $OLTmetrics[$OLTmetricId]['ltp8xONTCrossConnectDSCounterValue'] = $OLTmetrics_traffic["$OLTmetricId.1.1"]['ltp8xONTCrossConnectDSCounterValue']; $OLTmetrics[$OLTmetricId]['ltp8xONTCrossConnectUSCounterValue'] = $OLTmetrics_traffic["$OLTmetricId.1.1"]['ltp8xONTCrossConnectUSCounterValue']; } ... сохранить в mysql номера портов и desc ... // Generate RRD files foreach ($OLTmetrics as $OLTmetricId=>$OLTmetric) { $ONTchannel = $OLTmetric['ltp8xONTStateChannel']; $ONTstateid = $OLTmetric['ltp8xONTStateID']; $ONTifname = $ONTchannel.'/'.$ONTstateid; $ONTdesc = $OLTmetric['ltp8xONTConfigDescription']; $ONTstate = $OLTmetric['ltp8xONTStateState']; $ONTdistance = $OLTmetric['ltp8xONTStateDistance']; $ONTtxpower = $OLTmetric['ltp8xONTStateTxPower']; $ONTrxpower = $OLTmetric['ltp8xONTStateRxPower']; $ONTtemp = $OLTmetric['ltp8xONTStateTemperature']; $ONTdownload = $OLTmetric['ltp8xONTCrossConnectDSCounterValue']; $ONTupload = $OLTmetric['ltp8xONTCrossConnectUSCounterValue']; echo "* ONT Interface: ". $ONTifname."\n"; echo " ONT Description: ".$ONTdesc."\n"; echo " ONT State: ". $ONTstate."\n"; echo " ONT Distance: ". $ONTdistance."\n"; echo " ONT TX Power: ". $ONTtxpower."\n"; echo " ONT RX Power: ". $ONTrxpower."\n"; echo " ONT Temperature: ".$ONTtemp."\n"; echo " ONT Download: ". $ONTdownload."\n"; echo " ONT Upload: ". $ONTupload."\n"; $rrd_def = RrdDefinition::make() ->addDataset('state', 'GAUGE', 0) ->addDataset('distance', 'GAUGE', 0) ->addDataset('txpower', 'GAUGE', 0) ->addDataset('rxpower', 'GAUGE', null) ->addDataset('temp', 'GAUGE', 0) ->addDataset('download', 'COUNTER', 0) ->addDataset('upload', 'COUNTER', 0); $fields = array( 'state' => $ONTstate, 'distance' => $ONTdistance, 'txpower' => $ONTtxpower, 'rxpower' => $ONTrxpower, 'temp' => $ONTtemp, 'download' => $ONTdownload, 'upload' => $ONTupload, ); $tags = compact('rrd_def'); $rrdfname = "ponport-".$ONTchannel.'-'.$ONTstateid; data_update($device, $rrdfname, $tags, $fields); } 4. Проверочный запуск поллера librenms/poller.php -h <ip> -m eltex-pon -d -v 5. Сделать свою закладку для устройства Eltex LTP добавить код вызова закладки PON (122 строка) в страницу device librenms/html/pages/device.inc.php Показать содержимое if ($device['os'] == 'eltex-olt') { echo '<li role="presentation" '.$select['pon'].'> <a href="'.generate_device_url($device, array('tab' => 'pon')).'"> <i class="fa fa-sitemap fa-lg icon-theme" aria-hidden="true"></i> PON </a> </li>'; } 6. Сделать отображение этой закладки, по аналогии с таблицей обычных портов librenms/html/pages/device/pon.inc.php Круто, но где merge request в сторону разработчиков? Если так постить на форумах, то продукт за счёт комьюнити не разовьётся? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Urs_ak Опубликовано 27 декабря, 2018 · Жалоба 4 часа назад, shafiev сказал: Вот то что выше это запрос на все онт какие есть или уже готовый с ifindex интерфейса ? (Меня просто попросили помочь с OLT Huawei , там вначале спрашиваешь какие есть интерфейсы , потом выбираешь какие gpon ,чтобы потом получить как ONT ID к ним привязанны и дальше делаешь опросы ) ? Ну у вас , видимо, начальный уровень по этой теме, раз такой вопрос :) И наверно вы даже не читали это https://docs.librenms.org/Developing/os/Initial-Detection/ и вообще там всю ветку надо посмотреть sysObjectID - это в SNMP уникальный идентификатор железки/модели, по нему NMS'ы определяют куда соотнести железку и какие метрики, в итоге, запрашивать Запустите smpwalk на железку и полУчите этот код sysObjectID: snmpwalk -Oqnv -v2c -c <community> <ip> 1.3.6.1.2.1.1.2 Сделайте файл, по аналогии с соседними, напр. librenms/includes/definitions/huawei-olt.yaml и напишите туда полученный код sysObjectID и далее, по прочитанному Вот более простой пример, как добавить свою железку - коммутатор Eltex MES 3124F (это я себе заметку делал): Скрытый текст https://docs.librenms.org/#Developing/Support-New-OS/ /opt/librenms/includes/definitions/eltex.yaml - основной, с описанием железки /opt/librenms/includes/polling/os/eltex.inc.php - переменные для морды и т.п. /opt/librenms/includes/definitions/discovery/eltex.yaml - свои счётчики 0) Загрузка своих MIB загрузить wget https://eltex-co.ru/upload/iblock/12f/eltex_mib_2.5.48.zip и разархивировать private в mibs/eltex Пример обращений: snmpwalk -v2c -c <community> -M mibs:mibs/eltex -m RADLAN-rndMng <ip> rlCpuUtilDuringLast5Minutes.0 snmpwalk -v2c -c <community> -M mibs:mibs/eltex <ip> RADLAN-rndMng::rlCpuUtilDuringLast5Minutes.0 1) #/opt/librenms/includes/definitions/eltex.yaml os: eltex - уникальное имя (+ будет mib'ы искать в папке с таким именем) text: 'Eltex MES' ifname: true type: network icon: eltex mib_dir: - cisco - дополнительная папка с mib'ами bad_ifXEntry: - подстройка, чтобы метрики правильно показывать - 'MES3124F' - модель over: - графики "над мышкой" - { graph: device_bits, text: 'Device Traffic' } - { graph: device_processor, text: 'CPU Usage' } - processor - значит взять значения из modules->processors->data файла includes/definitions/discovery/eltex.yaml poller_modules: bgp-peers: false hr-mib: false ntp: false ospf: false ucd-diskio: false ucd-mib: false wireless: false discovery_modules: bgp-peers: false cisco-vrf-lite: false ntp: false ucd-diskio: false wireless: false discovery: - sysObjectID: - .1.3.6.1.4.1.35265.1.30 2) #/opt/librenms/includes/polling/os/eltex.inc.php <?php use LibreNMS\RRD\RrdDefinition; $version = str_replace('"', '', snmp_get($device, '.1.3.6.1.4.1.89.2.4.0', '-Oqv')); $hardware = str_replace('"', '', snmp_get($device, '.1.3.6.1.4.1.89.53.14.1.11.1', '-Oqv')); - переменные, которые будут отображаться в описании устройства * не обязательный * $cpu_usage не заработал 3) #/opt/librenms/includes/definitions/discovery/eltex.yaml mib: RADLAN-rndMng modules: processors: data: - oid: rlCpuUtilDuringLast5Minutes num_oid: '.1.3.6.1.4.1.89.1.9.{{ $index }}' * не обязательный 4) Проверка (для уже найденного уст-ва) /opt/librenms/discovery.php -h <ip> -d -m os /opt/librenms/poller.php -h <ip> -d -m processors * если сбилось и определяется как Generic,то надо запустить discovery опять /opt/librenms/discovery.php -h <ip> -d -v >lsd2 2>&1 Вообще в LibreNMS нету, на данный момент, инфраструктуры для нормального мониторинга OLT-терминалов. На том что есть, можно добавить узнавание железки и мониторинг стандартных метрик - обычные интерфейсы, CPU и т.п. Графики загрузки ONT портов вы так просто не получите. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
shafiev Опубликовано 27 декабря, 2018 · Жалоба 2 minutes ago, Urs_ak said: Графики загрузки ONT портов вы так просто не получите. Вот я и хочу сделать все нормально , чтобы был автодетектинг ОНТ со всеми параметрами . 3 minutes ago, Urs_ak said: Ну у вас , видимо, начальный уровень по этой теме, раз такой вопрос :) ну дык я ее когда тыкал еще этих доков не было ) Вопрос в догонку я потом же эти полученные ОНТшки по их SNMP ID полученным ранее смогу в своем плагине оперировать и если да то через mysql ? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Urs_ak Опубликовано 27 декабря, 2018 · Жалоба 6 минут назад, shafiev сказал: Вопрос в догонку я потом же эти полученные ОНТшки по их SNMP ID полученным ранее смогу в своем плагине оперировать и если да то через mysql ? Про плугины меня не спрашивайте я туда не погружался. Почитайте доки, там видимо много они добавили информации. Мне втемяшилось, что я хочу закладку "PON", рядом с Ports. Чтобы там был список сконфигуренных ONT портов на железке А по клику на выбранный ONT порт открывалась статистика для этого порта: UL/DL,уровень сигнала,расстояние и т.п. HTML код для отображения полученных метрик, взял с закладки "Ports": librenms/html/pages/device/ports.inc.php librenms/html/pages/device/port.inc.php librenms/html/includes/graphs/port/ и сделал по аналогии Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
shafiev Опубликовано 28 декабря, 2018 · Жалоба А для TR-69 у вас eltex.acs ? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
shafiev Опубликовано 5 января · Жалоба Больше никто не работал с ним ? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах