In diesem Artikel geht es darum, einfache ansible Playbooks zu schreiben, um Agenten automatisch auf Linux / Windows-Hosts zu installieren und Hosts ĂŒber die Zabbix-API, einschlieĂlich SNMP-Hosts, zu registrieren. Es werden vorgefertigte Rollen und Module von Ansible Galaxy Zabbix verwendet.
Zabbix hat eigene Rollen und Module fĂŒr die Konfiguration vieler Zabbix-Komponenten ĂŒber Ansible vorbereitet - eine vollstĂ€ndige Liste finden Sie hier .
In diesem Artikel werden wir nur ĂŒber zabbix_agent und zabbix_host sprechen .
* Dieser Artikel behandelt oder zeigt nicht die Installation und Konfiguration von Ansible. Vieles davon gibt es im Internet.
zabbix_agent
Dies ist eine Rolle, die die Installation des Agenten auf den folgenden Betriebssystemen unterstĂŒtzt:
roter Hut
Fedora
Debian
Ubuntu
opensuse
Windows (Bester Aufwand)
Mac OS
Eine aktuelle Liste auf dem offiziellen Github des Projekts .
zabbix_host
Dies ist ein Modul zum HinzufĂŒgen / Entfernen / Ăndern von Hosts auf dem zabbix-Server. Eine vollstĂ€ndige Beschreibung des Moduls finden Sie hier .
Fahren wir also mit der Einrichtung fort
Der erste Schritt ist die Installation der Ansible-Sammlung (funktioniert nur in Ansible-Version 2.9+):
ansible-galaxy collection install community.zabbix
Erstellen Sie nach der Installation der Sammlung eine Datei mit einem Playbook. Dieses Playbook fĂŒhrt zwei Dinge aus: Es setzt die Rolle community.zabbix.zabbix_agent auf die angegebenen Hosts und registriert im zweiten Schritt den Host in zabbix ĂŒber das Modul 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 #
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.
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
Daher sollten die Dateien die folgende Dateistruktur haben:
.
âââ linux-inventory
âââ snmp-inventory
âââ windows-inventory
âââ zabbix-agent-all.yaml
Ein Spielbuch starten
Um Playbooks auszufĂŒhren, mĂŒssen Sie die folgenden Befehle ausfĂŒhren:
So installieren Sie auf Linux-Hosts:
ansible-playbook -i linux-inventory zabbix-agent-all.yaml
Windows:
ansible-playbook -i windows-inventory zabbix-agent-all.yaml
SNMP:
ansible-playbook -i snmp-inventory zabbix-agent-all.yaml
Wenn nur eine Installation erforderlich ist, können Sie die obigen Befehle mit dem Installations-Tag ausfĂŒhren:
ansible-playbook -i linux-inventory zabbix-agent-all.yaml -t install
Wenn Sie spezielle zabbix-Einstellungen haben oder anpassen möchten, finden Sie eine vollstÀndige Liste der Rollen- und Modulvariablen auf der Projektseite: zabbix_agent und zabbix_host
Alle Quellen fĂŒr diesen Artikel sind auf Github .