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.
Komentarze