Ansible - automatyzacja wdrażania zabbix-agent z użyciem

W dzisiejszym krótkim poście, pokażę Ci jak zautomatyzować wdrażanie na serwerach monitoringu zabbix-em, za pomocą Ansible. Stworzymy playbook, który prócz instalacji i konfiguracji usługi, przygotuje również zaporę sieciową. Na zakończenie, będzie mały bonus :)


Przygotowanie

Zaczniemy od utworzenia pliku będącego naszym scenariuszem:

playbooks\zabbix.yml

- hosts: all
become: yes
become_method: sudo
gather_facts: yes
roles:
- ../roles/zabbix
handlers:
- import_tasks: ../handlers/restart_zabbix.yml
- import_tasks: ../handlers/restart_firewalld.yml

Do którego dodamy nową rolę:

roles\zabbix\tasks\main.yml

- name: "Install zabbix-agent"
package:
name: "zabbix-agent"
state: present
tags: [install]

- name: "Setting firewall"
firewalld:
zone: public
port: 10051/tcp
permanent: true
state: enabled
notify: "Restart firewalld"
tags: [firewall]

- name: "Copy zabbix conf"
template: src=../files/zabbix_agentd.conf dest=/etc/zabbix_agentd.conf
notify: "Restart zabbix"
tags: [install]

Nasza rola korzysta z przygotowanego wcześniej pliku z konfiguracją:

roles/zabbix/files/zabbix_agentd.conf

PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server={{serwer}}
Hostname={{ansible_default_ipv4.address|default(ansible_all_ipv4_addresses[0])}}
ServerActive={{serwer}}

W którym zastosujemy zmienną serwer którą wynieśliśmy do katalogu defaults, celem zachowania dobrych praktyk:

roles\zabbix\defaults\main.yml

serwer: 10.0.0.0

Aby dopełnić całości dodamy dwa przechwytywacze zdarzeń, które pozwolą nam zrestartować usługi po dokonanych zmianach:

handlers/restart_firewalld.yml

- name: Restart firewalld
service:
name: firewalld
state: restarted

handlers/restart_zabbix.yml

- name: Restart zabbix
service:
name: zabbix-agent
state: restarted
enabled: true

*Dodatkowo, usługę zabbix-agent dodaliśmy do restartu.

Dodatkowo instalujemy odpowiednie moduły ansible-galaxy:

ansible-galaxy collection install ansible.posix

Na sam koniec dodajemy nasz plik z listą hostów:

prod:
ansible_host: 10.0.0.1
dev:
ansible_host: 10.0.10.1

Uruchomienie

W konsoli wykonujemy:

ansible-playbook -i hosts playbooks/zabbix.yml

Po czym zadzieje się magia :)


Bonus

Powyższą konfigurację również możemy skrócić, do jednego pliku:

---
- name: "Install zabbix-agent playbook"
hosts: all
gather_facts: no
become: true

vars:
serwer: 10.0.0.0
tasks:
- name: "Install zabbix-agent"
package:
name: "zabbix-agent"
state: present
tags: [install]
- name: "Setting firewall"
firewalld:
zone: public
port: 10051/tcp
permanent: true
state: enabled
notify: "Restart firewalld"
tags: [firewall]
- name: "Copy zabbix conf"
template: src=../files/zabbix_agentd.conf dest=/etc/zabbix_agentd.conf
notify: "Restart zabbix"
tags: [install]
handlers:
- name: Restart zabbix
service:
name: zabbix-agent
state: restarted
enabled: true
- name: Restart firewalld
service:
name: firewalld
state: restarted

Jest to podejście niezalecane, ale uważam że warto znać różne opcje, by zawsze móc wybrać odpowiednią pod siebie opcje.

Kamil Mirończuk

I kiedy czegoś gorąco pragniesz, to cały wszechświat sprzyja potajemnie twojemu pragnieniu
~Paulo Coelho

Komentarze

Zostaw komentarz

Twój adres mailowy NIE zostanie opublikowany. W razie otrzymania zapytania, otrzymasz na niego odpowiedź.
Wymagane pola są oznaczone jako *