GNU/Linux >> Tutoriels Linux >  >> Panels >> Docker

Instrumentation de conteneur avec la pile élastique

TheElastic Stack peut surveiller une variété de données générées par les conteneurs Docker. Dans ce guide, vous allez configurer un Linode pour analyser et visualiser les journaux et les métriques des conteneurs à l'aide d'outils tels que Kibana, Beats et Elasticsearch. Une fois terminé, vous pourrez configurer votre système pour collecter automatiquement des données pour des conteneurs supplémentaires.

Avant de commencer

  1. Si vous ne l'avez pas déjà fait, créez un compte Linode et une instance de calcul. Consultez nos guides Premiers pas avec Linode et Création d'une instance de calcul.

  2. Suivez notre guide Configuration et sécurisation d'une instance de calcul pour mettre à jour votre système. Vous pouvez également définir le fuseau horaire, configurer votre nom d'hôte, créer un compte utilisateur limité et renforcer l'accès SSH.

  3. Suivez notre Guide UFW pour installer et configurer un pare-feu (UFW) sur votre système basé sur Ubuntu ou Debian, ou notre Guide FirewallD pour les systèmes basés sur rpm ou CentOS. Après avoir configuré le pare-feu, assurez-vous que les ports nécessaires sont ouverts afin de procéder aux connexions via SSH pour le reste de ce guide :

    sudo ufw allow ssh
    
  4. Installez Docker sur votre Linode en suivant le guide d'installation du projet Docker.

Remarque Les services de ce guide se lient uniquement à localhost, ce qui signifie qu'ils ne sont pas accessibles en dehors de Linode à partir d'hôtes distants. Cela garantit que l'API REST d'Elasticsearch reste privée pour localhost et n'est pas accessible à distance depuis Internet. Si vous allez au-delà de ce guide pour configurer plus avant Elasticsearch et les composants associés, assurez-vous que votre pare-feu est en place et bloque correctement le trafic vers les nœuds Elasticsearch et Kibana depuis Internet (ports 9200 et 9300 pour Elasticsearch et 5601 pour Kibana) pour les garder correctement sécurisé.

Installer les composants Elastic Stack

Avant de configurer votre système pour surveiller les conteneurs en cours d'exécution, installez d'abord les composants nécessaires pour collecter et envoyer les journaux et les métriques à Elasticsearch.

Distributions basées sur Debian

Configurer l'élastique apt référentiel et installez les packages nécessaires et leurs dépendances.

  1. Installez la clé de signature officielle du package Elastic APT :

    wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
    
  2. Installez le apt-transport-https package, nécessaire pour récupérer deb packages servis via HTTPS :

    sudo apt-get install apt-transport-https
    
  3. Ajoutez les informations du référentiel APT à la liste des sources de votre serveur :

    echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list
    
  4. Actualisez la liste des packages disponibles :

    sudo apt-get update
    
  5. Avant d'installer Elasticsearch, le runtime Java doit être présent. Sur des systèmes tels que Ubuntu 18.04 LTS, en utilisant le default-jre-headless package installe un environnement d'exécution Java compatible :

    sudo apt-get install default-jre-headless
    
  6. Installez Elasticsearch, Kibana, Filebeat et Metricbeat :

    sudo apt-get install elasticsearch kibana filebeat metricbeat
    

Distributions basées sur Redhat

Configurer le rpm dépôt pour yum et les outils d'emballage associés.

  1. Faites confiance à la clé de signature Elastic :

    sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
    
  2. Créez une configuration de référentiel yum pour utiliser le référentiel Elastic yum :

    Fichier :/ etc/yum.repos.d/elasticsearch.repo
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    [elasticsearch-6.x]
    name=Elastic repository for 6.x packages
    baseurl=https://artifacts.elastic.co/packages/6.x/yum
    gpgcheck=1
    gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
    enabled=1
    autorefresh=1
    type=rpm-md
        
  3. Mettez à jour le yum cache pour s'assurer que tous les nouveaux packages deviennent disponibles :

    sudo yum update
    
  4. Avant d'installer Elasticsearch, le runtime Java doit être présent. Sur CentOS, par exemple, un runtime Java compatible peut être installé à l'aide d'un package Headless OpenJDK :

    sudo yum install java-11-openjdk-headless
    
  5. Installez Elasticsearch, Kibana, Filebeat et Metricbeat :

    sudo yum install elasticsearch kibana filebeat metricbeat
    

Configurer la pile élastique

Afin de découvrir et de capturer correctement les métriques de conteneur, chaque composant de la pile Elastic doit être configuré.

Elasticsearch

Dans le fichier /etc/elasticsearch/jvm.options deux valeurs commençant par -Xm doit être décommenté. Ces paramètres indiquent à la JVM d'allouer une quantité spécifique de mémoire. La valeur recommandée pour ces paramètres est de 50 % de la RAM système disponible. Par exemple, sur un système avec 1 Go de RAM, ces paramètres doivent être :

Fichier :/ etc/elasticsearch/jvm.options
1
2
-Xms512m
-Xmx512m
  1. Avant de démarrer Elasticsearch, installez quelques plugins nécessaires pour traiter les données geoip et user-agent.

    sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install ingest-user-agent
    sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install ingest-geoip
    
  2. Une fois ces paramètres en place, démarrez elasticsearch services.

    sudo systemctl start elasticsearch
    
  3. Attendez un court instant qu'Elasticsearch démarre, puis vérifiez qu'Elasticsearch répond via l'API REST :

    curl http://localhost:9200
    

    Vous devriez voir une sortie semblable à la suivante :

    {
      "name" : "iQEk_-M",
      "cluster_name" : "elasticsearch",
      "cluster_uuid" : "tQeLgbKrTNOp2AoqdmTItw",
      "version" : {
            "number" : "6.5.4",
            "build_flavor" : "default",
            "build_type" : "deb",
            "build_hash" : "d2ef93d",
            "build_date" : "2018-12-17T21:17:40.758843Z",
            "build_snapshot" : false,
            "lucene_version" : "7.5.0",
            "minimum_wire_compatibility_version" : "5.6.0",
            "minimum_index_compatibility_version" : "5.0.0"
      },
      "tagline" : "You Know, for Search"
    }
    

    Elasticsearch est prêt à indexer des documents.

Kibana

La plupart des paramètres par défaut de Kibana conviennent aux fins de ce guide. Aucune modification de configuration n'est nécessaire ; lancer le kibana services.

sudo systemctl start kibana

Filebeat

Utiliser le docker entrée pour permettre à Filebeat de capturer dynamiquement les conteneurs démarrés. Cela évite d'avoir à spécifier les chemins d'accès aux fichiers journaux Docker et permet à la place à Filebeat de découvrir les conteneurs lorsqu'ils démarrent.

  1. Ajoutez ce qui suit près du haut du fichier de configuration Filebeat pour instruire le filebeat démon pour capturer les journaux du conteneur Docker. Ces lignes doivent être saisies sous la clé de configuration filebeat.inputs :

    Fichier :/ etc/filebeat/filebeat.yml
    1
    2
    3
    4
    5
    6
    
    filebeat.inputs:
    - type: docker
      containers.ids:
      - '*'
      processors:
      - add_docker_metadata: ~
  2. Décommentez la ligne suivante et changez sa valeur en true , qui permettra à Filebeat de créer des tableaux de bord Kibana associés pour les journaux de conteneur capturés :

    Fichier :/ etc/filebeat/filebeat.yml
    1
    
    setup.dashboards.enabled: true
  3. Enfin, ajoutez le autodiscover suivant configuration à la fin du filebeat.yml fichier :

    Fichier :/ etc/filebeat/filebeat.yml
    1
    2
    3
    4
    
    filebeat.autodiscover:
      providers:
        - type: docker
          hints.enabled: true
  4. Activer le nginx module, qui sera utilisé plus tard dans ce tutoriel :

    sudo /usr/bin/filebeat modules enable nginx
    
  5. Le reste du fichier de configuration demandera à Filebeat d'envoyer les journaux à l'instance Elasticsearch exécutée localement, qui peut rester inchangée. Démarrer Filebeat :

    sudo systemctl start filebeat
    

Metricbeat

Comme Filebeat, configurez Metricbeat de la même manière pour découvrir dynamiquement les conteneurs en cours d'exécution à surveiller.

  1. Metricbeat utilise un module pour collecter les métriques des conteneurs. Exécutez la commande suivante pour activer le docker et nginx module :

    sudo /usr/bin/metricbeat modules enable docker
    sudo /usr/bin/metricbeat modules enable nginx
    
  2. Décommentez la ligne suivante et changez sa valeur en true , qui permettra à Metricbeat de créer des tableaux de bord Kibana associés pour les journaux de conteneurs capturés :

    Fichier :/ etc/metricbeat/metricbeat.yml
    1
    
    setup.dashboards.enabled: true
  3. Le reste du fichier de configuration demandera à Metricbeat d'envoyer des journaux à l'instance Elasticsearch exécutée localement, qui peut rester inchangée. Metricbeat peut maintenant être lancé :

    sudo systemctl start metricbeat
    

Visualiser les journaux et les métriques du conteneur

L'exemple suivant montre comment Filebeat et Metricbeat capturent automatiquement les données de conteneur accessibles dans Kibana.

  1. Pour commencer, exécutez un simple conteneur Docker nginx sur votre Linode.

    sudo docker run --name nginx -P -d --label co.elastic.logs/module=nginx nginx
    
    • Cette commande exécutera le serveur Web en arrière-plan et exposera le service HTTP d'écoute sous un numéro de port aléatoire.
    • Le --label L'argument est un indice pour permettre à Filebeat d'analyser automatiquement le format de journal de certains types de conteneurs, qui dans ce cas est nginx.
  2. Pour ouvrir une connexion sécurisée à Kibana, ouvrez un tunnel SSH vers le port 5601 sur votre Linode.

    ssh -L 5601:localhost:5601 <[email protected]>
    
    • Remplacer <[email protected]> avec le nom d'utilisateur et l'adresse IP de votre Linode.
    • Cela transfère le port 5601 localement vers le port 5601 sur votre Linode.
    • Un guide complet d'utilisation des tunnels SSH sur diverses plates-formes est disponible dans notre guide Créer un tunnel SSH pour MySQL.
  3. Accédez à http://localhost:5601 dans votre navigateur, qui affichera la page de destination initiale suivante pour Kibana.

  4. Cliquez sur Gestion lien dans la barre latérale en bas à gauche. La page suivante s'affichera. Ensuite, cliquez sur Modèles d'indexation pour accéder à la page de configuration du modèle d'index.

  5. Les modèles d'index dictent la manière dont Kibana comprend les index présents dans Elasticsearch. Pour que certaines visualisations s'affichent correctement, un modèle d'index par défaut doit d'abord être configuré. Sélectionnez filebeat-* sur le côté gauche de la page pour configurer le modèle d'index filebeat-*.

  6. Cliquez sur l'icône étoile dans le coin supérieur droit de la page pour définir ce modèle d'index comme modèle par défaut dans Kibana.

    Kibana est maintenant correctement configuré avec un modèle d'index par défaut.

  7. Filebeat et Metricbeat sont configurés pour configurer automatiquement Elasticsearch et Kibana, de sorte que les tableaux de bord et les modèles d'index sont chargés et prêts à être utilisés. Cliquez sur Tableau de bord dans la barre latérale gauche, qui affiche la page suivante.

  8. Dans la barre de recherche, tapez "container" pour afficher des tableaux de bord pré-remplis pour les conteneurs système. Cliquez sur Présentation de [Metricbeat Docker] lien.

  9. La présentation de [Metricbeat Docker] Le tableau de bord se charge, qui montre plusieurs aspects des métriques de conteneur en cours d'exécution. Le tableau de bord affiche une liste des conteneurs en cours d'exécution, le nombre total de conteneurs en cours d'exécution, en pause et arrêtés, ainsi que des métriques sur la consommation des ressources des conteneurs.

    En faisant défiler plus bas, il affiche également des graphiques indiquant l'utilisation des ressources du conteneur au fil du temps, y compris l'activité du processeur, de la mémoire et du réseau.

  10. Avant de passer à d'autres visualisations Kibana, générez une activité de journal à partir de nginx en envoyant des requêtes HTTP au conteneur d'écoute. Tout d'abord, recherchez le port sur lequel le conteneur écoute les requêtes en utilisant le docker commande :

    docker ps
    

    Vous devriez voir une sortie semblable à la suivante :

    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                   NAMES
    3f0c6d284f1f        nginx               "nginx -g 'daemon of…"   23 minutes ago      Up 23 minutes       0.0.0.0:32769->80/tcp   nginx
    

    À partir de cette sortie, nous savons que le serveur HTTP peut être atteint en envoyant des requêtes au port 32769, qui est transmis au port 80 dans le conteneur. Le port de votre système peut être différent.

  11. Envoyez plusieurs requêtes à ce port en utilisant le curl commande, remplaçant <port> avec le numéro trouvé à l'étape précédente :

    for i in $(seq 1 10) ; do curl localhost:<port> ; done
    
  12. Désormais, un certain nombre de journaux sont présents dans Kibana pour ce conteneur. Cliquez sur Découvrir dans la barre latérale gauche de Kibana. Il affiche l'écran suivant.

    • L'histogramme en haut de la page indique le nombre total de journaux de conteneurs au fil du temps.
    • Le tableau sous le graphique contient le contenu des journaux individuels.
    • Cliquez sur les flèches à gauche de l'horodatage de chaque journal pour afficher les informations de chaque journal capturé.
  13. Essayez d'émettre à nouveau le for ... commande pour envoyer dix autres curl requêtes au conteneur et observez comment l'histogramme des journaux change pour refléter les nouveaux journaux.

  14. Cliquez sur Tableau de bord dans la barre latérale gauche, puis cliquez dessus une seconde fois pour accéder à l'écran de sélection du tableau de bord. Recherchez "nginx" dans la barre de recherche.

  15. Cliquez sur [Filebeat Nginx] Journaux d'accès et d'erreurs lien, qui affichera un tableau de bord avec un certain nombre de visualisations concernant l'activité de nginx.

Modules supplémentaires

Ce didacticiel a démontré comment Filebeat et Metricbeat peuvent capturer automatiquement les métriques et les journaux de conteneur sans qu'il soit nécessaire de configurer explicitement les chemins ou les configurations des fichiers journaux. En plus des exemples nginx présentés ici, les liens supplémentaires fournis ci-dessous énumèrent d'autres modules qui peuvent être chargés dans Filebeat et Metricbeat pour d'autres services.

Plus d'informations

Vous pouvez consulter les ressources suivantes pour plus d'informations sur ce sujet. Bien que ceux-ci soient fournis dans l'espoir qu'ils seront utiles, veuillez noter que nous ne pouvons pas garantir l'exactitude ou l'actualité des documents hébergés en externe.

  • Modules Filebeat
  • Modules Metricbeat
  • Surveillance des conteneurs élastiques
  • Référence de la ligne de commande Docker

Docker
  1. Comment installer WordPress avec Docker sur Ubuntu

  2. Installer ModSecurity avec Apache dans un conteneur Docker

  3. Comment installer l'imprimante avec Ubuntu ?

  4. Comment installer Docker et déployer une pile LAMP

  5. Comment installer Ghost sur Debian avec Nginx

Installer WordPress avec LEMP Stack sur Ubuntu 20.04

Installez phpMyAdmin avec LAMP Stack sur Ubuntu 18.04 LTS

Comment installer la pile LAMP sur CentOS 8

Comment installer WordPress avec LAMP Stack sur Ubuntu 20.04

Installer WordPress avec LEMP Stack sur Ubuntu 20.04

Utilisation des conteneurs Docker à partir de la ligne de commande