Partager via


Installer Elastic Stack (ELK) sur une machine virtuelle Azure

S’applique à : ✔️ Machines virtuelles Linux ✔️ Groupes identiques flexibles

Cet article vous guide dans le déploiement d’Elasticsearch, de Logstash et de Kibana sur une machine virtuelle Ubuntu dans Azure. Pour voir Elastic Stack en action, vous pouvez éventuellement vous connecter à Kibana et travailler avec des exemples de données de journalisation.

Vous pouvez également suivre le module Déployer Elastic sur des machines virtuelles Azure pour avoir un tutoriel plus détaillé sur le déploiement d’Elastic sur des machines virtuelles Azure.

Ce didacticiel vous montre comment effectuer les opérations suivantes :

  • Créer une machine virtuelle Ubuntu dans un groupe de ressources Azure
  • Installer Elasticsearch, Logstash et Kibana sur la machine virtuelle
  • Envoyer des exemples de données à Elasticsearch avec Logstash
  • Ouvrir des ports et manipuler des données dans la console Kibana

Ce déploiement convient pour le développement de base avec Elastic Stack. Pour plus d’informations sur Elastic Stack, notamment des recommandations pour un environnement de production, voir la documentation d’Elastic et Azure Architecture Center.

Prérequis

  • Cet article nécessite la version 2.0.4 ou ultérieure de l’interface Azure CLI. Si vous utilisez Azure Cloud Shell, la version la plus récente est déjà installée.

Créer un groupe de ressources

Dans cette section, les variables d’environnement sont déclarées à utiliser dans les commandes suivantes. Un suffixe aléatoire est ajouté aux noms de ressources pour l’unicité.

export RANDOM_SUFFIX=$(openssl rand -hex 3)
export RESOURCE_GROUP="myResourceGroup$RANDOM_SUFFIX"
export REGION="eastus2"
az group create --name $RESOURCE_GROUP --location $REGION

Résultats :

{
  "id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxxxxx",
  "location": "eastus",
  "managedBy": null,
  "name": "myResourceGroupxxxxxx",
  "properties": {
    "provisioningState": "Succeeded"
  },
  "tags": null,
  "type": "Microsoft.Resources/resourceGroups"
}

Création d'une machine virtuelle

Cette section crée une machine virtuelle avec un nom unique, tout en générant également des clés SSH si elles n’existent pas déjà. Un suffixe aléatoire est ajouté pour garantir l’unicité.

export VM_NAME="myVM$RANDOM_SUFFIX"
az vm create \
    --resource-group $RESOURCE_GROUP \
    --name $VM_NAME \
    --image Ubuntu2204 \
    --admin-username azureuser \
    --generate-ssh-keys

Lorsque la machine virtuelle a été créée, l’interface de ligne de commande Azure affiche des informations similaires à l’exemple suivant. Prenez note du publicIpAddress. Cette adresse est utilisée pour accéder à la machine virtuelle.

Résultats :

{
  "fqdns": "",
  "id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxxxxx/providers/Microsoft.Compute/virtualMachines/myVMxxxxxx",
  "location": "eastus",
  "macAddress": "xx:xx:xx:xx:xx:xx",
  "powerState": "VM running",
  "privateIpAddress": "10.0.0.4",
  "publicIpAddress": "x.x.x.x",
  "resourceGroup": "$RESOURCE_GROUP"
}

Se connecter avec SSH à votre machine virtuelle

Si vous ne connaissez pas déjà l’adresse IP publique de votre machine virtuelle, exécutez la commande suivante pour la répertorier :

az network public-ip list --resource-group $RESOURCE_GROUP --query [].ipAddress

Utilisez la commande suivante pour créer une session SSH avec la machine virtuelle. Remplacez l’adresse IP publique correcte de votre machine virtuelle. Dans cet exemple, l’adresse IP est 40.68.254.142.

export PUBLIC_IP_ADDRESS=$(az network public-ip list --resource-group $RESOURCE_GROUP --query [].ipAddress -o tsv)

Installer Elastic Stack

Dans cette section, vous importez la clé de signature Elasticsearch et mettez à jour votre liste de sources APT pour inclure le référentiel de package Élastique. Cela est suivi de l’installation de l’environnement d’exécution Java requis pour les composants Elastic Stack.

ssh azureuser@$PUBLIC_IP_ADDRESS -o StrictHostKeyChecking=no "
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
echo "deb https://artifacts.elastic.co/packages/5.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-5.x.list
"

Installez la machine virtuelle Java sur la machine virtuelle et configurez la variable JAVA_HOME :

ssh azureuser@$PUBLIC_IP_ADDRESS -o StrictHostKeyChecking=no "
sudo apt install -y openjdk-8-jre-headless
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
"

Exécutez la commande suivante pour mettre à jour les sources de package Ubuntu et installer Elasticsearch, Kibana et Logstash.

ssh azureuser@$PUBLIC_IP_ADDRESS -o StrictHostKeyChecking=no "
  wget -qO elasticsearch.gpg https://artifacts.elastic.co/GPG-KEY-elasticsearch
  sudo mv elasticsearch.gpg /etc/apt/trusted.gpg.d/

  echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-7.x.list

  sudo apt update
  
  # Now install the ELK stack
  sudo apt install -y elasticsearch kibana logstash
"

Notes

Des instructions d’installation détaillées, notamment concernant les dispositions de répertoire et la configuration initiale, figurent dans la documentation d’Elastic.

Démarrer Elasticsearch

Démarrez Elasticsearch sur votre machine virtuelle avec la commande suivante :

ssh azureuser@$PUBLIC_IP_ADDRESS -o StrictHostKeyChecking=no "
sudo systemctl start elasticsearch.service
"

Cette commande ne produit aucune sortie. Vérifiez donc que Elasticsearch est en cours d’exécution sur la machine virtuelle avec cette commande curl :

ssh azureuser@$PUBLIC_IP_ADDRESS -o StrictHostKeyChecking=no "
sleep 11
sudo curl -XGET 'localhost:9200/'
"

Si Elasticsearch est en cours d’exécution, vous voyez une sortie telle que celle-ci :

Résultats :

{
  "name" : "w6Z4NwR",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "SDzCajBoSK2EkXmHvJVaDQ",
  "version" : {
    "number" : "5.6.3",
    "build_hash" : "1a2f265",
    "build_date" : "2017-10-06T20:33:39.012Z",
    "build_snapshot" : false,
    "lucene_version" : "6.6.1"
  },
  "tagline" : "You Know, for Search"
}

Démarrer Logstash et ajouter des données à Elasticsearch

Démarrez Logstash avec la commande suivante :

ssh azureuser@$PUBLIC_IP_ADDRESS -o StrictHostKeyChecking=no "
sudo systemctl start logstash.service
"

Testez Logstash pour vous assurer qu’il fonctionne correctement :

ssh azureuser@$PUBLIC_IP_ADDRESS -o StrictHostKeyChecking=no "
# Time-limited test with file input instead of stdin
sudo timeout 11s /usr/share/logstash/bin/logstash -e 'input { file { path => "/var/log/syslog" start_position => "end" sincedb_path => "/dev/null" stat_interval => "1 second" } } output { stdout { codec => json } }' || echo "Logstash test completed"
"

Voici un pipeline Logstash de base, qui renvoie une entrée standard en écho à la sortie standard.

Configurez Logstash pour transférer les messages du noyau de cet machine virtuelle vers Elasticsearch. Pour créer le fichier de configuration Logstash, exécutez la commande suivante qui écrit la configuration dans un nouveau fichier appelé vm-syslog-logstash.conf :

ssh azureuser@$PUBLIC_IP_ADDRESS -o StrictHostKeyChecking=no "
cat << 'EOF' > vm-syslog-logstash.conf
input {
    stdin {
        type => "stdin-type"
    }

    file {
        type => "syslog"
        path => [ "/var/log/*.log", "/var/log/*/*.log", "/var/log/messages", "/var/log/syslog" ]
        start_position => "beginning"
    }
}

output {

    stdout {
        codec => rubydebug
    }
    elasticsearch {
        hosts  => "localhost:9200"
    }
}
EOF
"

Testez cette configuration et envoyez les données syslog à Elasticsearch :

# Run Logstash with the configuration for 60 seconds
sudo timeout 60s /usr/share/logstash/bin/logstash -f vm-syslog-logstash.conf &
LOGSTASH_PID=$!

# Wait for data to be processed
echo "Processing logs for 60 seconds..."
sleep 65

# Verify data was sent to Elasticsearch with proper error handling
echo "Verifying data in Elasticsearch..."
ES_COUNT=$(sudo curl -s -XGET 'localhost:9200/_cat/count?v' | tail -n 1 | awk '{print $3}' 2>/dev/null || echo "0")

# Make sure ES_COUNT is a number or default to 0
if ! [[ "$ES_COUNT" =~ ^[0-9]+$ ]]; then
    ES_COUNT=0
    echo "Warning: Could not get valid document count from Elasticsearch"
fi

echo "Found $ES_COUNT documents in Elasticsearch"

if [ "$ES_COUNT" -gt 0 ]; then
    echo "✅ Logstash successfully sent data to Elasticsearch"
else
    echo "❌ No data found in Elasticsearch, there might be an issue with Logstash configuration"
fi

Votre terminal affiche un écho des entrées syslog à mesure que celles-ci sont envoyées à Elasticsearch. Utilisez Ctrl+C pour quitter Logstash une fois que vous avez envoyé des données.

Démarrer Kibana et visualiser les données dans Elasticsearch

Modifiez le fichier de configuration Kibana (/etc/kibana/kibana.yml) et modifiez l’adresse IP sur laquelle Kibana écoute pour pouvoir y accéder à partir de votre navigateur web :

server.host: "0.0.0.0"

Démarrez Kibana avec la commande suivante :

ssh azureuser@$PUBLIC_IP_ADDRESS -o StrictHostKeyChecking=no "
sudo systemctl start kibana.service
"

Ouvrez le port 5601 à partir d’Azure CLI pour autoriser l’accès à distance à la console Kibana :

az vm open-port --port 5601 --resource-group $RESOURCE_GROUP --name $VM_NAME

Étapes suivantes

Dans ce didacticiel, vous avez déployé Elastic Stack sur une machine virtuelle de développement dans Azure. Vous avez appris à :

  • Créer une machine virtuelle Ubuntu dans un groupe de ressources Azure
  • Installer Elasticsearch, Logstash et Kibana sur la machine virtuelle
  • Envoyer des exemples de données à Elasticsearch avec Logstash
  • Ouvrir des ports et manipuler des données dans la console Kibana