Aller au contenu principal

Aggrégation de Logs Ansible avec Splunk

· 4 minutes de lecture
Stéphane ROBERT
Consultant DevOps

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.

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.

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

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

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

Démarrons Splunk :

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

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

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

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.

Si vous cliquez dessus vous devriez voir ceci.

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

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 :

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 :

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 :

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 :

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.

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