Aller au contenu

Aggrégation de Logs Ansible avec Splunk

logo ansible

Splunk est une plateforme qui permet de collecter, d’indexer, d’analyser et de visualiser les données en provenance de diverses sources. Splunk se charge de les analyser et de les transformer en informations exploitables.

Voyons comment installer et configurer splunk pour y envoyer les résultats de nos playbooks Ansible.

Installation de Splunk

Splunk met à disposition une version de démonstration de 60 jours de sa solution splunk Entreprise.

Il faut dans un premier temps s’enregistrer sur le site de Splunk pour obtenir les commandes de téléchargement des packages.

ansible splunk download

Une fois connecté, cliquez sur [Download] du tar.gz et annuler le de suite. Dans cet écran vous pouvez récupérer la commande de téléchargement à exécuter sur votre machine Linux.

Terminal window
wget -O /tmp/splunk-9.0.0-6818ac46f2ec-Linux-x86_64.tgz "https://download.splunk.com/products/splunk/releases/9.0.0/linux/splunk-9.0.0-6818ac46f2ec-Linux-x86_64.tgz"

Maintenant installons splunk. Créons dans un premier temps le user splunk

Terminal window
useradd -d /opt/splunk -m -g splunk splunk
sudo useradd -d /opt/splunk -m -g splunk splunk
sudo su - splunk

On peut maintenant décompresser l’archive

Terminal window
tar xvfz /tmp/splunk-9.0.0-6818ac46f2ec-Linux-x86_64.tgz -C /opt

Démarrons Splunk :

Terminal window
/opt/splunk/bin/splunk start --accept-license

Splunk vous demandera un nom pour le compte admin et son mot de passe. Par exemple admin et admin123!.

Normalement Splunk à démarrer. Il suffit de vérifier que le port 8000 est ouvert.

Terminal window
netstat -tlnp
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:8089 0.0.0.0:* LISTEN 3558/splunkd
tcp 0 0 0.0.0.0:8191 0.0.0.0:* LISTEN 3727/mongod
tcp 0 0 0.0.0.0:8000 0.0.0.0:* LISTEN 3558/splunkd
tcp 0 0 127.0.0.1:8065 0.0.0.0:* LISTEN 3983/python3.7

Configuration de l’Event Collector Http

Désormais passons à la configuration des collecteurs. Il faut se rendre sur le site avec l’adresse suivante : http://localhost:8000

ansible splunk login

Entrez le compte admin avec le mot de passe que vous avez défini précédemment.

ansible splunk collect

Allez dans le menu Paramètres > Données > Entrées de Données. Cliquez ensuite, sur [+Ajouter Nouveau] au niveau de collecteur d’événements HTTP.

Dans le premier écran, il faut juste entrer un nom, ansible par exemple. Cliquer sur [Suiv].

Laisser sourceType sur Automatique. Prenez l’index Main et cliquez sur [Résumé] puis [Soumettre]

Si vous retournez sur l’écran de type collecteur d’événements HTTP vous devriez retrouver votre collecteur ansible. Mais à droite le status est à désactiver. Il faut activer le collecteur.

Revenez à l’écran Collecteur de Données HTTP et cliquez sur paramètres globaux. Désactiver le SSL et Cliquez sur [Activé] puis enregistrer.

ansible splunk collect

Si vous cliquez dessus vous devriez voir ceci.

ansible splunk collect

On peut vérifier que le port 8088 est bien en écoute :

Terminal window
netstat -tlnp
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:8088 0.0.0.0:* LISTEN 3558/splunkd
tcp 0 0 0.0.0.0:8089 0.0.0.0:* LISTEN 3558/splunkd
tcp 0 0 0.0.0.0:8191 0.0.0.0:* LISTEN 3727/mongod
tcp 0 0 0.0.0.0:8000 0.0.0.0:* LISTEN 3558/splunkd
tcp 0 0 127.0.0.1:8065 0.0.0.0:* LISTEN 3983/python3.7

Il est bien là maintenant.

Activation du Callback splunk Ansible

Le plugin de callback splunk fait partie de la collection community.general. Si elle n’est pas encore installée, alors faites le :

Terminal window
ansible-galaxy collection install community.general

Maintenant ajoutons le à notre configuration Ansible. Éditer votre fichier ansible.cfg et Ajoutez ces lignes :

[defaults]
callback_whitelist = community.general.splunk
callbacks_enabled = community.general.splunk

Dans votre fenêtre terminal il faut définir le token et l’url de splunk :

Terminal window
export SPLUNK_AUTHTOKEN=4e33f2f9-faa8-4cd8-befe-d21f693e63b6
export SPLUNK_URL=http://localhost:8088/services/collector/

Maintenons écrivons un simple playbook qui ping localhost :

---
- hosts: localhost
gather_facts: false
tasks:
- name: test splunk
ansible.builtin.ping:

On l’exécute :

Terminal window
ansible-playbook -c local -i localhost, test-splunk.yml
localhost | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}

On ne voit rien du côté de l’affichage. Par contre, si vous faites un tour dans les logs de splunk :

Terminal window
cd /opt/splunk/var/log/introspection
tail http_event_collector_metrics.log |jq
...
"num_of_requests_waiting_ack": 0
}
}
{
"datetime": "06-22-2022 16:10:09.987 +0200",
"log_level": "INFO",
"component": "HttpEventCollector",
"data": {
"token_name": "ansible",
"series": "http_event_collector_token",
"transport": "http",
"format": "json",
"total_bytes_received": 1381,
"total_bytes_indexed": 1371,
"num_of_requests": 1,
"num_of_events": 1,
"num_of_errors": 0,
"num_of_parser_errors": 0,
"num_of_requests_to_disabled_token": 0,
"num_of_requests_in_mint_format": 0
}
}

Un petit tour dans l’interface de splunk, dans le menu Recherche. Entrez le filtre source="http:Ansible" et cliquer sur la loupe.

ansible splunk collect

Vous allez pouvoir suivre toutes les exécutions de playbooks et faire de beaux dashboard. À vous les KPI de vos exécutions.

Je mettrai à jour dans les prochains temps le billet sur comment faire la même chose depuis AWX