Система управления конфигурациями Oxidized
Система управления конфигурациями Oxidized.
Содержание
1 Общая информация
- Создавался как альтернатива RANCID.
- Репозиторий: https://github.com/ytti/oxidized
2 Установка
2.1 Необходимое программное обеспечение
- Установите язык ruby:
dnf -y install ruby
- Установите необходимые средства разработки:
dnf -y group install "Development Tools" dnf -y install make cmake which sqlite-devel ruby gcc ruby-devel libicu-devel gcc-c++ dnf -y install openssl-devel
- Установите git для хранения файлов:
dnf -y install git
2.2 Установка Oxidized
- Добавьте пользователя
oxidized
:useradd -c "oxidized system account" -m -d /home/oxidized -s /bin/bash oxidized
- Устанавливаем Oxidized:
gem install oxidized gem install oxidized-script oxidized-web
2.3 Обновление Oxidized
- Логинимся под пользователем oxidized:
su - oxidized
- Обновляем Oxidized:
gem update oxidized gem update oxidized-script oxidized-web
3 Конфигурация
3.1 Конфигурация Oxidized
- Документация: https://github.com/ytti/oxidized/blob/master/docs/Configuration.md
- Запустите oxidized однократно для создания структуры каталогов и шаблона конфигурационного файла:
su - oxidized oxidized
- Отредактируйте шаблон файла конфигурации
~oxidized/.config/oxidized/config
. - Oxidized использует формат YAML для конфигурационных файлов, поэтому все отступы должны быть выполнены пробелами, допускается два или четыре пробела на отступ.
- Основные элементы файла конфигурации:
Задание имени пользователя и пароля по умолчанию для соединения с устройствами:
username: oxidized password: Password
Указание типа устройства по умолчанию (например, Cisco):
model: ios
- Список устройств можно посмотреть в https://github.com/ytti/oxidized/tree/master/lib/oxidized/model.
- Список операционных систем: https://github.com/ytti/oxidized/blob/master/docs/Supported-OS-Types.md.
Зададим интервал создания копий данных в секундах (рекомендуется делать копии раз в сутки, что соответствует 86400 секундам):
interval: 86400
Для устройств со слабыми характеристиками и медленными каналами связи рекомендуется увеличить таймаут (здесь таймаут 60 секунд, три повторные попытки):
timeout: 60 retries: 3
Если вы не хотите, чтобы ваши резервные копии содержали чувствительные данные, такие как ключи и пароли, добавьте следующую опцию:
remove_secret: true
Раздел
input
отвечает за связь с устройствами (по умолчанию используются протоколыssh
иtelnet
, протоколtelnet
не безопасен, рекомендуется использовать толькоssh
):input: default: ssh debug: false ssh: secure: false ftp: passive: true utf8_encoded: true
Раздел
output
определяет способ хранения собранной информации (будем использовать git для этой цели):output: default: git git: user: oxidized email: oxidized@MYDOMAIN.ru repo: "/home/oxidized/.config/oxidized/devices.git"
Раздел
source
задаёт базу данных устройств (используем CSV-файл с двоеточием в качестве разделителя):source: default: csv csv: file: "/home/oxidized/.config/oxidized/router.db" delimiter: !ruby/regexp /:/ map: name: 0 model: 1 ip: 2 port: 3 username: 4 password: 5 gpg: false
- Опция
file
задаёт путь к файлу с базой устройств. - Подсекция
map
определяет порядок параметров подключения к устройству в строке CSV-файла.
- Опция
- Весь файл конфигурации:
--- username: oxidized password: Password model: ios resolve_dns: true interval: 86400 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 remove_secret: true 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: user: oxidized email: oxidized@MYDOMAIN.ru repo: "/home/oxidized/.config/oxidized/devices.git" source: default: csv csv: file: "/home/oxidized/.config/oxidized/router.db" delimiter: !ruby/regexp /:/ map: name: 0 model: 1 ip: 2 port: 3 username: 4 password: 5 gpg: false model_map: juniper: junos cisco: ios
3.2 Хранение в git
3.2.1 Конфигурация сохранения в git
- Здесь используется интерфейс
libgit2
(не работают хуки).
Репозиторий без групп
- Конфигурация имеет вид:
output: default: git git: user: Oxidized email: o@example.com repo: "/home/oxidized/.config/oxidized/devices.git"
- Конфигурация имеет вид:
Репозитории с группами
- Конфигурация имеет вид:
output: default: git git: user: Oxidized email: o@example.com repo: "/home/oxidized/.config/oxidized/git-repos/default.git"
- Oxidized создаст репозиторий для каждой группы в том же каталоге, что и репозиторий
default.git
. - Если вы хотите использовать группы и один репозиторий, вы можете принудительно сделать это с помощью конфигурации
single_repo
:output: default: git git: single_repo: true repo: "/home/oxidized/.config/oxidized/devices.git"
- Конфигурация имеет вид:
3.2.2 Просмотр файлов устройств
- Перейдите в правильный репозиторий git для необходимого устройства и получите список устройств:
git ls-files -s
- Посмотрите содержимое файла:
git cat-file -p <object id>
3.2.3 Удалить отключённое устройство
- Очистить сохранённую конфигурацию устройства:
git rm --cached <object id>
3.3 Файл описания оборудования
- Создадим файл:
/home/oxidized/.config/oxidized/router.db
:sw01:ios:10.10.10.1 sw02:ios:10.10.10.10:22:test:PASSWORD
- Структура полей: наименование, тип оборудования, IP-адрес, порт, логин, пароль.
- Если значения отсутствуют, то используются значения по умолчания.
3.4 Службы запуска
- Запустим oxidized:
systemctl enable --now oxidized.service
4 Подключение к LibreNMS
- Подключим oxidized к LibreNMS (см. Система мониторинга LibreNMS)
4.1 Общая информация
- Интеграция LibreNMS с Oxidized дает следующие преимущества:
- Просмотр конфигурации: «Текущая», «История» и «Различия» на вкладке «Конфигурации» каждого устройства.
- Автоматическое добавление устройств в Oxidized: включая фильтрацию и группировку для упрощения управления учетными данными.
- Поиск конфигурации.
4.2 Порядок действий
- Установить Oxidized.
- Подключить Oxidized к web-интерфейсу LibreNMS.
- Чтобы устройства добавлялись автоматически, вам необходимо настроить извлечения их из LibreNMS.
- LibreNMS автоматически сопоставит ОС с именем модели Oxidized, не нужно использовать параметр конфигурации
model_map
в Oxidized.
4.3 SELinux
- Необходимо разрешить
httpd
исходящие подключения к сети:setsebool -P httpd_can_network_connect 1
4.4 Подключение Oxidized к web-интерфейсу LibreNMS
- Активируйте подключение к Oxidized/
Подключить можно в web-интерфейсе:
https://<ваш URL-адрес librenms>/settings/external/oxidized
Подключить можно в командной строке:
lnms config:set oxidized.enabled true lnms config:set oxidized.url http://127.0.0.1:8888
- Подключите управление версиями конфигурации (работает с модулем вывода git).
Подключить можно в web-интерфейсе:
https://<ваш URL-адрес librenms>/settings/external/oxidized
Подключить можно в командной строке:
lnms config:set oxidized.features.versioning true
4.5 Информация о группах
- Oxidized поддерживает различные способы использования учётных данных для входа на устройства.
- Вы можете указать глобальное имя пользователя и пароль в Oxidized, имя пользователя и пароль на уровне группы или для каждого устройства.
- При синхронизации с LibreNMS можно делать только конфигурации для групп.
- LibreNMS поддерживает отправку групп в Oxidized, чтобы вы могли затем определить учётные данные группы в Oxidized. Чтобы включить эту поддержку, включите «Включить возврат групп в Oxidized».
Подключить можно в web-интерфейсе:
https://<ваш URL-адрес librenms>/settings/external/oxidized
Подключить можно в командной строке:
lnms config:set oxidized.group_support true
- Можно установить группу по умолчанию (все устройства попадут в эту группу):
Подключить можно в web-интерфейсе:
https://<ваш URL-адрес librenms>/settings/external/oxidized
Подключить можно в командной строке:
lnms config:set oxidized.default_group default
4.5.1 Задание разделения на группы
- Группы для Oxidized никак не связаны с группами LibreNMS.
- Чтобы вернуть переопределение в Oxidized, вы можете сделать это, предоставив ключ переопределения, затем сопоставив поиск хоста (или хостов) и, наконец, определив само значение переопределения.
- LibreNMS не проверяет достоверность этих атрибутов, а передает их в Oxidized в соответствии с определением.
- Сопоставление хостов можно выполнить с помощью
hostname
,sysname
,os
,location
,sysDescr
,hardware
,purpose
,notes
. - Порядок соответствия следующий:
- hostname
- sysName
- sysDescr
- hardware
- os
- location
- ip
- purpose
- notes
- Пример:
lnms config:set oxidized.maps.group.os.+ '{"match": "ios", "value": "cisco"}' lnms config:set oxidized.maps.group.os.+ '{"match": "vrp", "value": "huawei"}' lnms config:set oxidized.maps.group.os.+ '{"match": "asa", "value": "asa"}' lnms config:set oxidized.maps.group.os.+ '{"match": "bdcom", "value": "bdcom"}'
4.5.2 Конфигурация в Oxidized
- При необходимости вы можете указать учетные данные для групп, используя следующее в вашей конфигурации Oxidized:
groups: <groupname>: username: <user> password: <password>
- Например:
groups: cisco: username: user1 password: password1 asa: username: user2 password: password2 huawei: username: user3 password: password3 bdcom: username: user5 password: password5 vars: enable: enpassword5 default: username: user4 password: password4
4.6 Автоматическое добавление устройств в Oxidized
Нужно настроить учётные данные по умолчанию для ваших устройств в конфигурации Oxidized:
source: default: http debug: false http: url: https://<ваш URL-адрес librenms>/api/v0/oxidized map: name: hostname model: os group: group headers: X-Auth-Token: '01582bf94c03104ecb7953dsadsadwed' vars_map: ssh_port: ssh_port telnet_port: telnet_port
Токен можно создать в меню Шестерёнка > API > API Settings:
https://<ваш URL-адрес librenms>/api-access
Проверить взаимодействие можно из командной строки:
curl -H 'X-Auth-Token: YOUR_AUTH_TOKEN' https://<ваш URL-адрес librenms>/api/v0/oxidized
LibreNMS может перезагружать список узлов каждый раз, когда устройство добавляется в LibreNMS.
Подключить можно в web-интерфейсе:
https://<ваш URL-адрес librenms>/settings/external/oxidized
Подключить можно в командной строке:
lnms config:set oxidized.reload_nodes true