[Системное администрирование, DevOps] Ansible playbook для управления Windows/Linux агентами Zabbix
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Данная статья про написание простых ansible плейбуков для автоматической установки агентов на хосты с Linux/Windows и регистрации хостов через API Zabbix, включая SNMP хосты. Будут использоваться готовые роли и модули Ansible Galaxy Zabbix.Zabbix подготовил собственные роли и модули для конфигурации многих компонентов Zabbix посредством Ansible - полный список можно найти здесь -https://galaxy.ansible.com/community/zabbixВ этой статье поговорим только о zabbix_agent и zabbix_host.*Эта статья не рассматривает и не показывает установку и настройку Ansible, этого в интернете полно.zabbix_agent Это роль, которая поддерживает установку агента на следующие операционные системы:
- Red Hat
- Fedora
- Debian
- Ubuntu
- opensuse
- Windows (Best effort)
- macOS
Актуальный список на официальном github проекта (https://github.com/ansible-collections/community.zabbix/blob/main/docs/ZABBIX_AGENT_ROLE.md#operating-systems) zabbix_hostЭто модуль для добавления/удаления/изменения хостов на сервере zabbix. Полное описание модуля тут - https://docs.ansible.com/ansible/2.10/collections/community/zabbix/zabbix_host_module.htmlИтак переходим к настройкеПервым шагом будет установка коллекции ansible ( работает только в ansible версии 2.9+):
ansible-galaxy collection install community.zabbix
После установки коллекции, создаем файл с плейбуком. Данный плейбук делает две вещи - устанавливает роль community.zabbix.zabbix_agent на указанные хосты и вторым шагом регистрирует хост в zabbix через модуль community.zabbix.zabbix_host. Создаем файл zabbix-agent-all.yaml со следующим содержимым:
- hosts: all
tasks:
- name: Install agent
include_role:
name: community.zabbix.zabbix_agent # устанавливает готовую роль на хостах
tags:
- install # для удобства можно использовать тэги
- name: Create a new host or update an existing host's info # задача для регистрации агентов в zabbix сервере
local_action:
module: community.zabbix.zabbix_host # используем готовый модуль zabbix_host для регистрации агентов
server_url: "{{ zabbix_url }}" # переменная из инвентаря - url сервера для регистрации API
login_user: "{{ zabbix_api_user }}" # переменная из инвентаря - имя пользователя обычно Admin
login_password: "{{ zabbix_api_pass }}" # переменная из инвентаря - пароль
host_name: "{{ item }}" - # имя хоста из инвентаря
visible_name: "{{ hostvars[item].zabbix_visible_name | default(item) }}" # можно задать отображаемое имя отдельно для каждого хоста
description: "{{ hostvars[item].zabbix_host_description | default('') }} OS: {{ hostvars[item].ansible_distribution | default('') }} {{ hostvars[item].ansible_distribution_version | default('') }}" # берет описание из инвентаря и добавляет название операционной системы и версию из служебных переменных ansible
host_groups: "{{ hostvars[item].zabbix_host_groups }}" # в какую хост группу добавить хост
link_templates: "{{ hostvars[item].zabbix_link_templates }}" # какие template применить к хосту
status: "{{ hostvars[item].zabbix_host_status }}" # статус - Enabled или Disabled
state: present # указание ansible чтобы добавить хост, изменив на absent можно сделать обратную операцию удаления
inventory_mode: disabled # не включаем inventory mode
interfaces: # можно указать несколько интерфейсов
- type: "{{ hostvars[item].zabbix_interface_type }}" # переменная из инвентаря - может быть SNMP, Agent, JMX, IPMI
main: 1
useip: "{{ hostvars[item].zabbix_interface_use_ip }}" # можно использовать добавление по ip или по dns
ip: "{{ hostvars[item].zabbix_interface_ip }}" # если выбрано по ip - берется переменная с ip адресом
dns: "{{ item }}" # если выбрано useip: 0 то нужно указать FQDN хоста в переменных в инвентаре
port: "{{ hostvars[item].zabbix_interface_port }}" # указание порта
loop: "{{ groups['all'] }}" # цикл чтобы пройтись по всех хостам в инвентаре
run_once: true # цикл будет проходиться по всем хостам, чтобы он не прошёл по всем хостам на каждом хосте указываем чтобы данный модуль отработал один раз
tags:
- add-host # добавляем тэги для удобств
На странице проекта вы сможете найти множество других настроек, например подключение к zabbix сервер через http, изменить версию агента и т.д., все настройки тут:https://github.com/ansible-collections/community.zabbix/blob/main/docs/ZABBIX_AGENT_ROLE.md#role-variables Файлы инвентаряДалее нам нужно создать три файла linux-inventory, windows-inventory и snmp-inventory, можно сделать конечно в одном файле, но мне показалось удобнее разделить агенты по типу.Linux хостыСодержимое файла linux-inventory:
[all]
host1.local #тут вы указываете ваши хосты по FQDN или IP-адресу
host2.local zabbix_host_description=”The host2 description”
host3.local zabbix_host_status=disabled # можно указать чтобы отключать хосты после добавления
host4.local zabbix_host_groups=’["Custom group"]’ #можно передать группы отдельно для каждого хоста
[all:vars]
zabbix_agent_server=my.zabbix.server # адрес сервера
zabbix_url=https://my.zabbix.server # URL сервера
zabbix_api_use=true # говорим что будем добавлять через API
zabbix_api_user=Admin
zabbix_api_pass=StrongPa$$w0rd
zabbix_interface_port="10050" # номер порта где живет агент
zabbix_host_groups=["Linux servers"] # в какую группу добавлять хост по умолчанию
zabbix_link_templates=["Linux by Zabbix agent"] # список template для применения по умолчанию
zabbix_interface_type=agent # тип хоста - с использованием агента
zabbix_interface_use_ip="0" # говорим что будем добавлять по dns fqdn
zabbix_interface_ip=""
zabbix_host_description="My linux server" # описание по умолчанию
zabbix_host_status=enabled # состояние хоста по умолчанию
WindowsДля возможности установки агента на хосты с ОС Windows необходимо сначала настроить доступ для ansible - это вне темы этой статьи, но есть подробная инструкция на сайте ansible - https://docs.ansible.com/ansible/latest/user_guide/windows_setup.html Содержимое файла windows-inventory:
[all]
winhost01.local
winhost02.local zabbix_host_groups=’["Custom group"]’ #можно передать группы отдельно для каждого хоста
winhost03.local zabbix_host_status=disabled # можно указать чтобы отключать хосты после добавления
[all:vars]
ansible_user=user@DOMAIN.LOCAL # если хосты в домене необходимо указывать доменный путь, и также настроить kerberos в linux
ansible_password=StrongPa$$w0rd
ansible_connection=winrm # управление windows происходит через службу WinRM
ansible_winrm_server_cert_validation=ignore # если у вашего домена самоподписанные сертификаты, лучше поставить ignore
zabbix_agent_server=my.zabbix.server # адрес сервера
zabbix_url=https://my.zabbix.server # URL сервера
zabbix_api_use=true # говорим что будем добавлять через API
zabbix_api_user=Admin
zabbix_api_pass=StrongPa$$w0rd
zabbix_interface_port="10050" # номер порта где живет агент
zabbix_host_groups=["Windows servers"] # в какую группу добавлять хост по умолчанию
zabbix_link_templates=["Windows by Zabbix agent"] # список template для применения по умолчанию
zabbix_interface_type=agent # тип хоста - с использованием агента
zabbix_interface_use_ip="0" # говорим что будем добавлять по dns fqdn
zabbix_interface_ip=""
zabbix_host_description="My windows server" # описание по умолчанию
zabbix_host_status=enabled # состояние хоста по умолчанию
SNMP Для добавления SNMP хостов создаем файл snmp-inventory:
[all]
snmphost1.local zabbix_link_templates='["Cisco IOS SNMP","Network Generic Device SNMP"]' zabbix_host_groups='["Network devices"]'
snmp2.local zabbix_link_templates='["Template SNMP OS ESXi"]' zabbix_host_groups='["Hypervisors"]' zabbix_snmp_community=”Community”
[all:vars]
zabbix_url=https://my.zabbix.server # URL сервера
zabbix_api_use=true # говорим что будем добавлять через API
zabbix_api_user=Admin
zabbix_api_pass=StrongPa$$w0rd
zabbix_interface_port="161" # номер порта устройства, по умолчанию 161
zabbix_interface_type=snmp # тип snmp
zabbix_interface_use_ip="0" # указываем что добавляем по dns
zabbix_interface_ip="" # пустой ip
zabbix_host_description="My SNMP host" # описание по умолчанию
zabbix_host_status=enabled # состояние хоста по умолчанию
zabbix_snmp_community="MyCommunity" # указываем SNMP community
В итоге, файлы должны иметь следующую структуру файлов:
.
├── linux-inventory
├── snmp-inventory
├── windows-inventory
└── zabbix-agent-all.yaml
Запуск playbookДля запуска плейбуков, необходимо запустить следующие команды:Для установки на Linux хостах:
ansible-playbook -i linux-inventory zabbix-agent-all.yaml
Windows:
ansible-playbook -i linux-inventory zabbix-agent-all.yaml
SNMP:
ansible-playbook -i snmp-inventory zabbix-agent-all.yaml
Если нужна только установка, то можно запустить команды выше с тэгом install:
ansible-playbook -i linux-inventory zabbix-agent-all.yaml -t install
Если у вас есть особые настройки zabbix или вы хотите кастомизировать, полный список переменных роли и модуля можно найти на странице проекта: zabbix_agent и zabbix_hostВсе исходники данной статьи есть на github: https://github.com/piccadil/zabbix-agent
===========
Источник:
habr.com
===========
Похожие новости:
- [Настройка Linux, Системное администрирование] Ubuntu 16.04: Получаем обновления безопасности после окончания основной поддержки
- [Высокая производительность, Тестирование веб-сервисов, Конференции, DevOps] Приглашаем на Semrush IT meetup: Производительность веб-сервисов
- [Информационная безопасность, Системное администрирование, Сетевое оборудование] 1. Континент 4 Getting Started. Введение
- [Системное администрирование, Серверное администрирование, Карьера в IT-индустрии, DevOps] Практический курс по Ansible: анонс и предзаказ
- [IT-инфраструктура, Сетевые технологии, DevOps, Софт] Работа с пакетами в изолированной среде. Использование zfs datasets и jail’ов
- [Системное администрирование, Виртуализация, Серверное администрирование] Proxmox VE обновился для версии 6.4 (перевод)
- [IT-инфраструктура, DevOps, Облачные сервисы] Подход Multicloud Native Service: что это такое и как поможет сделать IT-систему максимально отказоустойчивой
- [Карьера в IT-индустрии, Конференции, IT-компании] Дорасти до сеньора и даже выше: советы по развитию IT-специалиста
- [Системное администрирование, IT-инфраструктура, Алгоритмы, Бизнес-модели] Доступность ИТ-сервисов как ключевой бизнес показатель, и причем тут арбуз
- [Информационная безопасность, Администрирование доменных имен, Системное администрирование] Пентагон объяснил, зачем передал частной компании 175 млн IP-адресов
Теги для поиска: #_sistemnoe_administrirovanie (Системное администрирование), #_devops, #_ansible, #_zabbix, #_sistemnoe_administrirovanie (
Системное администрирование
), #_devops
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 12:12
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Данная статья про написание простых ansible плейбуков для автоматической установки агентов на хосты с Linux/Windows и регистрации хостов через API Zabbix, включая SNMP хосты. Будут использоваться готовые роли и модули Ansible Galaxy Zabbix.Zabbix подготовил собственные роли и модули для конфигурации многих компонентов Zabbix посредством Ansible - полный список можно найти здесь -https://galaxy.ansible.com/community/zabbixВ этой статье поговорим только о zabbix_agent и zabbix_host.*Эта статья не рассматривает и не показывает установку и настройку Ansible, этого в интернете полно.zabbix_agent Это роль, которая поддерживает установку агента на следующие операционные системы:
ansible-galaxy collection install community.zabbix
- hosts: all
tasks: - name: Install agent include_role: name: community.zabbix.zabbix_agent # устанавливает готовую роль на хостах tags: - install # для удобства можно использовать тэги - name: Create a new host or update an existing host's info # задача для регистрации агентов в zabbix сервере local_action: module: community.zabbix.zabbix_host # используем готовый модуль zabbix_host для регистрации агентов server_url: "{{ zabbix_url }}" # переменная из инвентаря - url сервера для регистрации API login_user: "{{ zabbix_api_user }}" # переменная из инвентаря - имя пользователя обычно Admin login_password: "{{ zabbix_api_pass }}" # переменная из инвентаря - пароль host_name: "{{ item }}" - # имя хоста из инвентаря visible_name: "{{ hostvars[item].zabbix_visible_name | default(item) }}" # можно задать отображаемое имя отдельно для каждого хоста description: "{{ hostvars[item].zabbix_host_description | default('') }} OS: {{ hostvars[item].ansible_distribution | default('') }} {{ hostvars[item].ansible_distribution_version | default('') }}" # берет описание из инвентаря и добавляет название операционной системы и версию из служебных переменных ansible host_groups: "{{ hostvars[item].zabbix_host_groups }}" # в какую хост группу добавить хост link_templates: "{{ hostvars[item].zabbix_link_templates }}" # какие template применить к хосту status: "{{ hostvars[item].zabbix_host_status }}" # статус - Enabled или Disabled state: present # указание ansible чтобы добавить хост, изменив на absent можно сделать обратную операцию удаления inventory_mode: disabled # не включаем inventory mode interfaces: # можно указать несколько интерфейсов - type: "{{ hostvars[item].zabbix_interface_type }}" # переменная из инвентаря - может быть SNMP, Agent, JMX, IPMI main: 1 useip: "{{ hostvars[item].zabbix_interface_use_ip }}" # можно использовать добавление по ip или по dns ip: "{{ hostvars[item].zabbix_interface_ip }}" # если выбрано по ip - берется переменная с ip адресом dns: "{{ item }}" # если выбрано useip: 0 то нужно указать FQDN хоста в переменных в инвентаре port: "{{ hostvars[item].zabbix_interface_port }}" # указание порта loop: "{{ groups['all'] }}" # цикл чтобы пройтись по всех хостам в инвентаре run_once: true # цикл будет проходиться по всем хостам, чтобы он не прошёл по всем хостам на каждом хосте указываем чтобы данный модуль отработал один раз tags: - add-host # добавляем тэги для удобств [all]
host1.local #тут вы указываете ваши хосты по FQDN или IP-адресу host2.local zabbix_host_description=”The host2 description” host3.local zabbix_host_status=disabled # можно указать чтобы отключать хосты после добавления host4.local zabbix_host_groups=’["Custom group"]’ #можно передать группы отдельно для каждого хоста [all:vars] zabbix_agent_server=my.zabbix.server # адрес сервера zabbix_url=https://my.zabbix.server # URL сервера zabbix_api_use=true # говорим что будем добавлять через API zabbix_api_user=Admin zabbix_api_pass=StrongPa$$w0rd zabbix_interface_port="10050" # номер порта где живет агент zabbix_host_groups=["Linux servers"] # в какую группу добавлять хост по умолчанию zabbix_link_templates=["Linux by Zabbix agent"] # список template для применения по умолчанию zabbix_interface_type=agent # тип хоста - с использованием агента zabbix_interface_use_ip="0" # говорим что будем добавлять по dns fqdn zabbix_interface_ip="" zabbix_host_description="My linux server" # описание по умолчанию zabbix_host_status=enabled # состояние хоста по умолчанию [all]
winhost01.local winhost02.local zabbix_host_groups=’["Custom group"]’ #можно передать группы отдельно для каждого хоста winhost03.local zabbix_host_status=disabled # можно указать чтобы отключать хосты после добавления [all:vars] ansible_user=user@DOMAIN.LOCAL # если хосты в домене необходимо указывать доменный путь, и также настроить kerberos в linux ansible_password=StrongPa$$w0rd ansible_connection=winrm # управление windows происходит через службу WinRM ansible_winrm_server_cert_validation=ignore # если у вашего домена самоподписанные сертификаты, лучше поставить ignore zabbix_agent_server=my.zabbix.server # адрес сервера zabbix_url=https://my.zabbix.server # URL сервера zabbix_api_use=true # говорим что будем добавлять через API zabbix_api_user=Admin zabbix_api_pass=StrongPa$$w0rd zabbix_interface_port="10050" # номер порта где живет агент zabbix_host_groups=["Windows servers"] # в какую группу добавлять хост по умолчанию zabbix_link_templates=["Windows by Zabbix agent"] # список template для применения по умолчанию zabbix_interface_type=agent # тип хоста - с использованием агента zabbix_interface_use_ip="0" # говорим что будем добавлять по dns fqdn zabbix_interface_ip="" zabbix_host_description="My windows server" # описание по умолчанию zabbix_host_status=enabled # состояние хоста по умолчанию [all]
snmphost1.local zabbix_link_templates='["Cisco IOS SNMP","Network Generic Device SNMP"]' zabbix_host_groups='["Network devices"]' snmp2.local zabbix_link_templates='["Template SNMP OS ESXi"]' zabbix_host_groups='["Hypervisors"]' zabbix_snmp_community=”Community” [all:vars] zabbix_url=https://my.zabbix.server # URL сервера zabbix_api_use=true # говорим что будем добавлять через API zabbix_api_user=Admin zabbix_api_pass=StrongPa$$w0rd zabbix_interface_port="161" # номер порта устройства, по умолчанию 161 zabbix_interface_type=snmp # тип snmp zabbix_interface_use_ip="0" # указываем что добавляем по dns zabbix_interface_ip="" # пустой ip zabbix_host_description="My SNMP host" # описание по умолчанию zabbix_host_status=enabled # состояние хоста по умолчанию zabbix_snmp_community="MyCommunity" # указываем SNMP community .
├── linux-inventory ├── snmp-inventory ├── windows-inventory └── zabbix-agent-all.yaml ansible-playbook -i linux-inventory zabbix-agent-all.yaml
ansible-playbook -i linux-inventory zabbix-agent-all.yaml
ansible-playbook -i snmp-inventory zabbix-agent-all.yaml
ansible-playbook -i linux-inventory zabbix-agent-all.yaml -t install
=========== Источник: habr.com =========== Похожие новости:
Системное администрирование ), #_devops |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 12:12
Часовой пояс: UTC + 5