Русский
Русский
English
Статистика
Реклама

Ansible playbook для управления WindowsLinux агентами Zabbix

Данная статья про написание простых 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 # говорим что будем добавлять через APIzabbix_api_user=Adminzabbix_api_pass=StrongPa$$w0rdzabbix_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 fqdnzabbix_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.localwinhost02.local  zabbix_host_groups=["Custom group"] #можно передать группы отдельно для каждого хостаwinhost03.local zabbix_host_status=disabled # можно указать чтобы отключать хосты после добавления[all:vars]ansible_user=user@DOMAIN.LOCAL # если хосты в домене необходимо указывать доменный путь, и также настроить kerberos в linuxansible_password=StrongPa$$w0rdansible_connection=winrm # управление windows происходит через службу WinRMansible_winrm_server_cert_validation=ignore # если у вашего домена самоподписанные сертификаты, лучше поставить ignorezabbix_agent_server=my.zabbix.server # адрес сервераzabbix_url=https://my.zabbix.server # URL сервераzabbix_api_use=true # говорим что будем добавлять через APIzabbix_api_user=Adminzabbix_api_pass=StrongPa$$w0rdzabbix_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 fqdnzabbix_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 # говорим что будем добавлять через APIzabbix_api_user=Adminzabbix_api_pass=StrongPa$$w0rdzabbix_interface_port="161" # номер порта устройства, по умолчанию 161zabbix_interface_type=snmp # тип snmpzabbix_interface_use_ip="0" # указываем что добавляем по dnszabbix_interface_ip="" # пустой ipzabbix_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
К списку статей
Опубликовано: 02.05.2021 10:10:12
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Системное администрирование

Devops

Ansible

Zabbix

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru