Oxidized & LibreNMS

nms&oxi

Всегда нужно иметь под рукой бекап конфигурации сетевых устройств таких как cisco, mikrotik, edge-core и так далее в этом нам поможет oxidized. Очень много где расписано как установить oxidized и добавлять хосты в файл router.db. Но это не очень удобно в плане если добавляются новые устройства, то их приходится добавлять и в LibreNMS и в oxidized и хочется автоматизировать этот процесс. В этой заметки я опишу как это сделал я.

Подключаемся через ssh к хосту на котором у вас уже установлена LibreNMS или вы решили разместить oxidized на отдельной машине  это не важно.

Для начала переводим пользователя в сессию под root-ом

user@nms:~$ sudo -i

Обновляем все пакеты

root@nms:~# apt update && apt upgrade -y

Убедимся что репозиторий universe подключен

root@nms:~# add-apt-repository universe

Устанавливаем необходимые зависимости:

root@nms:~# apt-get install ruby ruby-dev libsqlite3-dev libssl-dev pkg-config cmake libssh2-1-dev libicu-dev zlib1g-dev g++

Устанавливаем gems

root@nms:~# gem install oxidized oxidized-script oxidized-web

Далее установим сам Git в котором и будем хранить конфигурации

root@nms:~# apt install git -y

Процесс желательно запускать под отдельным пользователем, создаем его:

root@nms:~# useradd -m oxidized

Настраиваем git:

root@nms:~# git config --global user.name "oxidized"
root@nms:~# git config --global user.email "oxidized@example.com"
root@nms:~# git init oxidized.git

Из-под пользователя запускаем программу первый раз чтобы создались необходимые каталоги и файл конфигурации:

root@nms:~# su - oxidized

Вводим команду oxidized (несколько раз 3-4) чтоб уж точно все необходимое добавилось

$ oxidized

Далее выходим обратно в root командой exit и переходим к редактированию файла config

root@nms:~# nano /home/oxidized/.config/oxidized/config

Базовый конфиг

---

username: username

password: Pa$$w0rd

model: os

resolve_dns: true

interval: 120

use_syslog: false

debug: false

threads: 30

timeout: 140

retries: 3

prompt: !ruby/regexp /^([\w.@-]+[#>]\s?)$/

rest: 127.0.0.1:8888

next_adds_job: false

vars: {}

groups: {}

models: {}

pid: "/home/oxidized/.config/oxidized/pid"

log: "/home/oxidized/.config/oxidized/log"

crash:
    directory: "/home/oxidized/.config/oxidized/crashes"
    hostnames: false

stats:
    history_size: 10

input:
    default: ssh
    debug: false
    ssh:
        secure: false
    ftp:
        passive: true
    utf8_encoded: true

output:
    default: git
    git:
        directory: "/home/oxidized/.config/oxidized/configs"
        user: oxidized
        email: oxidized@example.com
        repo: "/home/oxidized/.config/oxidized/devices.git"

source:
    default: http
    debug: false
    http:
        url: http://127.0.0.1/api/v0/oxidized
        map:
            name: hostname
            model: os
            group: group
        headers:
            X-Auth-Token: 'Токен api librenms'

model_map:
    juniper: junos
    cisco: ios
    ubiquiti: edgeos
    mikrotik: routeros
    eltex-mes23xx: eltex

Токен API получаем в LibreNMS:
Oxidized & LibreNMS
Описание наиболее важных переменных:
  • username: username – имя пользователя по умолчанию, под которым Oxidized бует подключаться к устройствам
  • password: Pa$$w0rd- пароль по умолчанию
  • model: routeros – модель устройства по умолчнию
  • interval: 120 – интервал создания бэкапов в секундах
  • timeout: 140 – тайм-аут подключения (по умолчанию 20), если есть задержки в сети – лучше увеличить
  • remove_secret: true – удаляет секреты (ключи, пароли и прочее), подробнее для каждой из железок тут: https://github.com/ytti/oxidized/tree/master/lib/oxidized/model
  • rest: 127.0.0.1:8888 – адрес и порт веб-сервиса
  • в секции input: значение default: ssh лучше исправить убрав telnet, т.к. это небезопасно
  • в секции output: сохраняем все в git → default: git
  • в секции source: файл с данными о оборудовании default: csv и далее путь до него, разделитель, назначение полей
Настроим Oxidized как службу
root@nms:~# cp /var/lib/gems/3.2.0/gems/oxidized-0.30.1/extra/oxidized.service /lib/systemd/system/
root@nms:~# cp /var/lib/gems/3.2.0/gems/oxidized-0.30.1/extra/oxidized.init.d /etc/init.d/oxidized.init.d
root@nms:~# systemctl enable oxidized.service
root@nms:~# systemctl start oxidized.service

Проверим работу службы

root@nms:~# systemctl status oxidized.service

● oxidized.service – Oxidized – Network Device Configuration Backup Tool
Loaded: loaded (/usr/lib/systemd/system/oxidized.service; enabled; preset: enabled)
Active: active (running) since Sun 2024-09-29 18:42:14 MSK; 1 day 3h ago
Main PID: 1428 (oxidized)
Tasks: 7 (limit: 4611)
Memory: 89.3M (peak: 108.3M)
CPU: 1min 38.558s
CGroup: /system.slice/oxidized.service
└─1428 “puma 6.4.3 (tcp://127.0.0.1:8888) [/]”

Sep 29 18:42:14 nms systemd[1]: Started oxidized.service – Oxidized – Network Device Configuration Backup Tool.
Sep 29 18:42:19 nms oxidized[1428]: Puma starting in single mode…
Sep 29 18:42:19 nms oxidized[1428]: * Puma version: 6.4.3 (ruby 3.2.3-p157) (“The Eagle of Durango”)
Sep 29 18:42:19 nms oxidized[1428]: * Min threads: 0
Sep 29 18:42:19 nms oxidized[1428]: * Max threads: 5
Sep 29 18:42:19 nms oxidized[1428]: * Environment: development
Sep 29 18:42:19 nms oxidized[1428]: * PID: 1428
Sep 29 18:42:20 nms oxidized[1428]: * Listening on http://127.0.0.1:8888
Sep 29 18:42:20 nms oxidized[1428]: Use Ctrl-C to stop

WEB интерфейс oxidized
Oxidized & LibreNMS
Добавляем oxidized в LibreNMS
Oxidized & LibreNMS

После этого появится дополнительный пункт

Oxidized & LibreNMS

Соответственно после добавления нового сетевого устройства в мониторинг оно автомотически будет добавлятся и в oxidized

Oxidized & LibreNMS