Comment rassembler des métriques d’infrastructure avec Packetbeat et ELK sur Ubuntu 16.04

introduction

Packetbeat vous permet de surveiller le trafic réseau en temps réel pour les protocoles au niveau de l’application, tels que HTTP et MySQL, ainsi que DNS et d’autres services.

Pour ce faire, vous configurez des agents, appelés «expéditeurs», sur des ordinateurs clients qui reniflent et analysent le trafic réseau et mappent les messages aux transactions. Ces expéditeurs génèrent ensuite des enregistrements pour chaque action et les envoient à Elasticsearch ou à Logstash. Une fois que vous avez les données, vous pouvez les rechercher, les analyser et les visualiser avec Kibana afin de pouvoir prendre des décisions éclairées concernant votre infrastructure ou résoudre les problèmes.

Dans ce didacticiel, vous allez configurer et utiliser Packetbeat avec une pile ELK pour collecter et visualiser les métriques d’infrastructure.

Conditions préalables

Étape 1 - Chargement du modèle d’index Packetbeat dans Elasticsearch

Parce que nous prévoyons d’utiliser Packetbeat pour envoyer des journaux à Elasticsearch, nous chargeons tout d’abord le modèle d’index Packetbeat, qui configure Elasticsearch pour analyser les champs Packetbeat entrants de manière intelligente.

Commencez par vous connecter à votre serveur ELK:

ssh @

Une fois connecté, téléchargez le modèle d’index Packetbeat dans votre répertoire personnel:

cd ~
curl -O https://raw.githubusercontent.com/elastic/beats/master/packetbeat/packetbeat.template-es2x.json

Puis chargez le template avec cette commande:

curl -XPUT 'http://localhost:9200/_template/packetbeat' [email protected]

Vous verrez la sortie si le modèle a été chargé avec succès.

Output{"acknowledged":true}

Maintenant que votre serveur ELK est prêt à accepter les données de Packetbeat, configurons l’expéditeur sur un serveur client.

Étape 2 - Configuration de Packetbeat sur un serveur client

Pour configurer l’expéditeur Packetbeat, vous devez obtenir le certificat SSL que vous avez créé dans le didacticiel préalable sur le serveur client. Il est nécessaire d’établir une communication entre les serveurs clients et le serveur ELK.

Localisez l’adresse IP de votre serveur client. Ensuite, * sur votre serveur ELK *, copiez le certificat SSL sur votre serveur client à l’aide de la commande + scp +:

scp /etc/pki/tls/certs/logstash-forwarder.crt :/tmp

Après avoir fourni votre mot de passe, assurez-vous que la copie du certificat a réussi.

Maintenant, connectez-vous à votre * serveur client *:

ssh

Une fois connecté, copiez le certificat SSL du serveur ELK dans le répertoire ++:

sudo mkdir -p /etc/pki/tls/certs
sudo cp /tmp/logstash-forwarder.crt /etc/pki/tls/certs/

Ensuite, nous devons installer Packetbeat lui-même. Sur votre serveur client, assurez-vous que la liste source Beats existe. Ouvrez le fichier ++ pour le modifier:

sudo nano /etc/apt/sources.list.d/beats.list

Si vous avez déjà installé des expéditeurs, ce fichier peut déjà contenir la ligne suivante:

/etc/apt/source.list.d/beats.list

deb https://packages.elastic.co/beats/apt stable main

Si le fichier est vide ou que cette ligne n’existe pas, ajoutez-le et enregistrez le fichier. Puis quittez l’éditeur.

Pour installer cette source, nous aurons besoin d’une clé GPG. Packetbeat utilise la même clé GPG que Elasticsearch, que nous installons avec cette commande:

wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

Maintenant, installez le paquet Packetbeat:

sudo apt-get update
sudo apt-get install packetbeat

Packetbeat est maintenant installé mais doit être configuré avant de pouvoir l’utiliser.

Étape 3 - Configuration de Packetbeat sur le client

Packetbeat doit savoir quoi consigner et où envoyer les données. Configurons-le pour qu’il se connecte à Logstash sur notre serveur ELK et définissons le type de trafic que nous souhaitons surveiller. Nous y parviendrons en modifiant le fichier de configuration par défaut fourni avec Packetbeat.

Sur le serveur client, éditez le fichier de configuration Packetbeat:

sudo nano /etc/packetbeat/packetbeat.yml

Près du haut du fichier, vous verrez la section + input +, où vous pouvez spécifier quelles métriques et statistiques doivent être envoyées au serveur ELK. Nous utiliserons les paramètres d’entrée par défaut, mais n’hésitez pas à les modifier pour répondre à vos besoins.

Sélectionnez l’interface réseau à partir de laquelle capturer le trafic. Sous Linux, Packetbeat prend en charge la capture de tous les messages envoyés ou reçus par le serveur sur lequel Packetbeat est installé. Pour cela, utilisez ++ comme périphérique:

packetbeat.yml

# Select the network interfaces to sniff the data. You can use the "any"
# keyword to sniff on all connected interfaces.
interfaces:
 device:

Dans la section + protocoles +, configurez les ports sur lesquels Packetbeat peut trouver chaque protocole. Si vous utilisez des ports non standard, ajoutez-les ici. Sinon, les valeurs par défaut devraient suffire.

packetbeat.yml

protocols:
 dns:
   ports:

   include_authorities: true
   include_additionals: true

 http:
   ports:

 memcache:
   ports:

 mysql:
   ports:

 pgsql:
   ports:

 redis:
   ports:

 thrift:
   ports:

 mongodb:
   ports:

Ensuite, nous devons indiquer à Packetbeat où envoyer ses données.

Dans la section + output +, recherchez la ligne commençant par + elasticsearch: +, qui indique la section de sortie Elasticsearch. Nous n’allons pas utiliser cette section, donc * supprimez ou commentez la totalité de la section de sortie Elasticsearch *, jusqu’à la ligne «+ # logstash: +».

Commencez à supprimer ici:

packetbeat.yml

 ### Elasticsearch as output
 elasticsearch:
   # Array of hosts to connect to.
   # Scheme and port can be left out and will be set to the default (http and 9200)

   ...

Et continuez à supprimer jusqu’à ce que vous trouviez cette ligne:

packetbeat.yml

 ### Logstash as output

Au lieu d’envoyer les données à Elasticsearch, nous allons les envoyer à Logstash. Recherchez donc la section de sortie Logstash commentée, indiquée par la ligne commençant par + # logstash:. + Décommentez cette ligne en supprimant le précédent + # +. Puis décommentez la ligne ++ et remplacez + localhost + par l’adresse IP privée de votre serveur ELK. La section du fichier de configuration devrait ressembler à ceci:

packetbeat.yml

 ### Logstash as output
 logstash:
   # The Logstash hosts
   hosts: [":5044"]

Ceci configure Packetbeat pour qu’il se connecte à Logstash sur votre serveur ELK sur le port + 5044 +, le port que nous avons spécifié pour l’entrée Logstash dans le didacticiel relatif aux prérequis.

Ensuite, trouvez la section + tls +, et supprimez le commentaire devant + tls: +. Puis décommentez la ligne spécifiant + certificate_authorities + et changez sa valeur en ++:

packetbeat.yml

   tls:
     # List of root certificates for HTTPS server verifications
     certificate_authorities: []

Ceci configure Packetbeat pour utiliser le certificat que nous avons copié à partir du serveur ELK. Sans cela, le client ne pourra pas établir de connexion.

Si vous souhaitez revérifier votre fichier de configuration, comparez le vôtre avec cet exemple, dans lequel la plupart des commentaires inutiles ont été omis pour améliorer la lisibilité:

packetbeat.yml

############################# Sniffer #########################################
interfaces:
 device: any

############################# Protocols #######################################
protocols:
 dns:
   ports:

   include_authorities: true
   include_additionals: true

 http:
   ports:

 memcache:
   ports:

 mysql:
   ports:

 pgsql:
   ports:

 redis:
   ports:

 thrift:
   ports:

 mongodb:
   ports:

############################# Output ##########################################
output:

 ### Logstash as output
  logstash:
   hosts: [":5044"]

   tls:
     certificate_authorities: []

############################# Logging #########################################
logging:

 files:
   rotateeverybytes: 10485760 # = 10MB

Une fois que vous avez examiné votre configuration, enregistrez le fichier et quittez l’éditeur de texte.

Maintenant, redémarrez Packetbeat pour mettre vos modifications en place:

sudo service packetbeat restart

Et configurez Packetbeat pour qu’il démarre lorsque votre serveur redémarre:

sudo update-rc.d packetbeat defaults 95 10

Répétez cette section pour tous les autres serveurs que vous souhaitez surveiller.

Packetbeat devrait maintenant écouter le trafic réseau et l’envoyer à Logstash. Voyons si cela fonctionne.

Étape 4 - Test de l’installation de Packetbeat

À ce stade, Packetbeat sur votre serveur client doit envoyer les journaux de votre trafic réseau à Logstash sur votre serveur ELK. Logstash devrait charger les données de Packetbeat dans Elasticsearch dans un index horodaté appelé + packetbeat-YYYY.MM.DD +. Voyons si cela fonctionne en créant une requête HTTP simple sur la machine cliente et en recherchant cette requête dans Elasticsearch sur le serveur ELK.

Sur votre serveur client, utilisez + curl pour envoyer une requête à` + http: // www.elastic.co`.

curl http://www.elastic.co/ > /dev/null

Ensuite, sur votre serveur ELK, vérifiez qu’Elasticsearch reçoit effectivement les données en interrogeant l’index Packetbeat à l’aide de cette commande:

curl -XGET 'http://localhost:9200/packetbeat-*/_search?pretty'

Vous devriez voir un paquet de sortie qui ressemble à ceci:

Output{
 "_index" : "packetbeat-2016.09.29",
 "_type" : "http",
 "_id" : "AVdDG6pDqHsDFrI4DAlI",
 "_score" : 1.0,
 "_source" : {
   "responsetime" : 80,
   "path" : "/",
   "beat" : {
     "hostname" : "",
     "name" : ""
   },
   "direction" : "out",
   "port" : 80,
   "server" : "",
   "status" : "OK",
   "params" : "",
   "count" : 1,
   "client_port" : 52072,
   "client_proc" : "",
   "ip" : "",
   "bytes_out" : 432,
   "bytes_in" : 78,
   "query" : "GET /",
   "http" : {
     "code" : 301,
     "content_length" : 178,
     "phrase" : "Permanently"
   },
   "proc" : "",
   "client_ip" : "",
   "client_server" : "",
   "@timestamp" : "2016-09-29T15:41:07.725Z",
   "type" : "http",
   "method" : "GET",
   "@version" : "1",
   "host" : "",
   "tags" : [ "beats_input_raw_event" ]
 }
}

Si votre sortie affiche un total de 0 occurrences, Elasticsearch ne charge aucune donnée Packetbeat dans l’index recherché et vous devez réessayer au bout de quelques secondes, car la récupération des données peut prendre un peu de temps. Si vous ne voyez toujours aucun résultat après avoir attendu, vérifiez si votre configuration contient des erreurs. Assurez-vous d’avoir pointé le fichier de configuration de Packetbeat sur le certificat que vous avez transféré, car cela échouera en silence si le chemin est incorrect.

Une fois que vous avez reçu le résultat attendu, vous pouvez passer à l’étape suivante et apprendre à utiliser Kibana pour afficher des graphiques et des diagrammes de votre trafic réseau.

Étape 5 - Visualiser des données avec Kibana

Lorsque vous avez fini de configurer Packetbeat sur tous les serveurs pour lesquels vous souhaitez collecter des statistiques système, examinons Kibana.

Dans un navigateur Web, accédez au nom de domaine ou à l’adresse IP publique de votre serveur ELK. Après avoir saisi les informations d’identification de votre serveur ELK, vous devriez voir votre page Kibana Discover.

Cliquez sur l’onglet * Paramètres * en haut de la page. Maintenant, sélectionnez * packetbeat - ** dans le menu * Index Patterns * du côté gauche de l’interface:

image: http: //i.imgur.com/Gcd1SSE.png [Sélectionnez le modèle d’index Packetbeat]

Puis sélectionnez l’onglet * Découvrir * en haut de l’écran pour afficher ces données. Vous verrez ce qui suit sur votre écran:

image: http: //i.imgur.com/JIhUioG.png [Entrées du journal Packetbeat]

À partir de là, vous pouvez afficher vos différentes entrées Packetbeat en filtrant les champs disponibles. Vous pouvez cliquer sur ces champs pour les ajouter ou les visualiser à l’aide d’agrégations (nombre, somme, min, max, médiane, etc.).

Kibana fournit également une large gamme de visualisations que vous pouvez utiliser pour analyser des données. Cliquez sur l’onglet * Visualiser * en haut de l’écran pour répertorier les visualisations ou ouvrir une visualisation enregistrée.

image: http: //i.imgur.com/7BTCiY2.png [Visualisations par paquets]

Voyons ensuite l’exemple de tableau de bord Packetbeat que nous avons chargé au début de ce didacticiel. Cliquez sur l’onglet * Tableau de bord * en haut de l’écran, puis cliquez sur l’icône * Charger le tableau de bord enregistré * à droite de l’écran. Vous verrez une liste de filtres de tableau de bord sous forme de suggestions paginées:

image: http: //i.imgur.com/hqDKrjo.png [Voir les exemples de types de tableau de bord Packetbeat]

Sélectionnez * Packetbeat-Dashboard * dans la liste des suggestions. Étant donné que nous ne disposons que de quelques requêtes Web en tant que documents dans notre index, le tableau de bord générera * Aucun résultat trouvé * pour la base de données, le cache, les transactions RPC ou d’autres résultats.

image: http: //i.imgur.com/e9HUsfn.png [Afficher l’exemple en haut du tableau de bord Packetbeat]

Mais si vous faites défiler l’écran vers le bas, vous verrez diverses mesures collectées à partir de vos serveurs clients sur lesquels vous avez installé Packetbeat.

image: http: //i.imgur.com/g5aQb8g.png [Voir l’exemple du tableau de bord Packetbeat en bas]

À partir de là, vous pouvez créer des graphiques basés sur les données d’index. Par exemple, vous pouvez créer un graphique présentant la répartition des requêtes HTTP en fonction du temps de réponse, ce qui peut permettre de suivre les réponses lentes de vos applications Web. Et vous pouvez explorer davantage en utilisant des sous-agrégations pour trouver le temps de réponse de chaque code, des domaines visités, etc.

Vous pouvez explorer la Packetbeat documentation pour en savoir plus.

Conclusion

Maintenant que les métriques de votre système sont centralisées via Elasticsearch et Logstash et que vous pouvez les visualiser avec Kibana, vous devriez pouvoir voir en un coup d’œil ce que vos serveurs font. À partir de là, vous voudrez peut-être enquêter sur d’autres expéditeurs, notamment Filebeat, Topbeat et autres. Consultez la page Beats pour plus d’informations sur les expéditeurs disponibles.

Related