Ansible pour déployer des agents Zabbix + auto-registration

ansible_logo-360x288+ zabbix_logo_500x131

Depuis quelques temps, j’utilise Ansible au boulot, et je doit dire c’est un outil super classe !

Je vais décrire ici comment déployer des agents Zabbix sur un ensemble de serveurs grâce à Ansible.

Rôle zabbix_agent

Voici le playbook zabbix_agent :

zabbix_agent.yml

---
- hosts: all:!localhost

  roles:
    - role: zabbix_agent

roles/zabbix_agent/task/main.yml

---
- name: "[zabbix_agent - linux] Installation agent zabbix"
  yum: name={{ item }} state=present
  with_items:
    - "zabbix-2.4.2-1.el6.x86_64.rpm"
    - "zabbix-agent-2.4.2-1.el6.x86_64.rpm"
  sudo: yes

- name: "[zabbix_agent - linux] Configuration de l'agent zabbix"
  template:
    src: "etc/zabbix/zabbix_agentd.conf.j2"
    dest: "/etc/zabbix/zabbix_agentd.conf"
    mode: 0644
  register: zabbix_config_updated
  sudo: yes


- name: "[zabbix_agent - linux] Demarrage de l'agent"
  service: name="zabbix-agent" state="restarted"
  when: zabbix_config_updated|changed
  sudo: yes

Il est bien sur possible d’étendre ce rôle pour qu’il puisse déployer des agents sur d’autres types de serveur (debian, aix, etc..)

roles/zabbix_agent/templates/etc/zabbix/zabbix_agentd.conf.j2

---
LogFileSize=0
Server={{ zabbix_server }}
ServerActive={{ zabbix_server }}
Hostname={{ inventory_hostname }}
HostMetadata={{ zabbix_metadata if zabbix_metadata is defined else "" }},{{ ansible_system }}
Include=/etc/zabbix/zabbix_agentd.d/

roles/zabbix_agent/vars/main.yml

---
zabbix_server: "IP DU SERVEUR ZABBIX"

Configuration Zabbix

Host Groups

Il faut d’abord créer des hosts groups dans Zabbix pour pouvoir « ranger » les équipements.
Par exemple, créer un host group « Recette » dans lequel on va ranger tous les serveurs de recette.

Actions

Une étape indispensable avant de lancer le playbook zabbix_agent est de configurer les règles d’auto-registration dans Zabbix.
Pour cela, aller dans le menu Config->Actions et sélectionner « auto-registration » dans le menu déroulant.
Puis, cliquer sur créer une nouvelle règle.

Dans le premier onglet Action, choisir un nom sympa pour cette règle. Par exemple « Linux auto-registration Recette »
Dans le second onglet Conditions, choisir les options « host metadata » like « recette » et host metadata like « linux »
Dans le troisième onglet Operations, choisir :

  • Add Host
  • Add host to host group Recette
  • Link host to template « Template OS Linux »

Lancement du playbook

Enfin, il ne reste plus qu’à lancer le playbook zabbix_agent en lui spécifiant le fichier d’inventaire de recette et les options zabbix_metadata qui vont bien :

ansible-playbook zabbix_agent.yml -i inventory/recette --extra-vars="zabbix_metadata=Recette"

Et voila !
Si tout se passe bien ansible va déployer un agent zabbix sur le serveur, configurer celui-ci avec la bonne IP du serveur zabbix et les méta données qu’on a fourni en paramètres.
Ensuite, le serveur Zabbix va auto ajouter les équipements en les classant dans les bons groupes et y associer les bons templates.

Petite astuce :
* Ne pas hésiter à créer plein de groupes zabbix pour ranger les équipements (un host peut bien évidement appartenir à plusieurs groupes)
* Utiliser le bouton « Cloner » dans la configuration des actions pour créer plein de règles en fonction des méta données (Linux + Recette, Aix + Recette, Linux + Préprod, Aix + Préprod, Linux + préprod + backup, etc…)