Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a: ✔️ Máquinas virtuales Linux ✔️ Conjuntos de escalado flexibles
En este artículo se le guiará acerca de cómo implementar Elasticsearch, Logstash y Kibana en una máquina virtual con Ubuntu en Azure. Para ver Elastic Stack en acción, puede conectarse opcionalmente a Kibana y trabajar con algunos de los datos de registro de ejemplo.
Además, puede seguir el módulo Implementación de Elastic en Azure Virtual Machines para ver un tutorial más guiado sobre la implementación de Elastic en Azure Virtual Machines.
En este tutorial, aprenderá a:
- Crear una máquina virtual con Ubuntu en un grupo de recursos de Azure
- Instalar Elasticsearch, Logstash y Kibana en la máquina virtual
- Enviar datos de ejemplo a Elasticsearch con Logstash
- Abrir los puertos y trabajar con datos en la consola de Kibana
Esta implementación es adecuada para el desarrollo básico con Elastic Stack. Para más información acerca de Elastic Stack, incluidas recomendaciones para un entorno de producción, consulte la documentación de Elastic y Azure Architecture Center.
Requisitos previos
Use el entorno de Bash en Azure Cloud Shell. Para más información, consulte Introducción a Azure Cloud Shell.
Si prefiere ejecutar comandos de referencia de la CLI localmente, instale la CLI de Azure. Si utiliza Windows o macOS, considere la posibilidad de ejecutar la CLI de Azure en un contenedor Docker. para obtener más información, consulte ejecución de la cli de azure en un contenedor de docker.
Si usa una instalación local, inicie sesión en la CLI de Azure mediante el comando az login. Siga los pasos que se muestran en el terminal para completar el proceso de autenticación. Para ver otras opciones de inicio de sesión, consulte Autenticación en Azure mediante la CLI de Azure.
En caso de que se le solicite, instale las extensiones de la CLI de Azure la primera vez que la use. Para obtener más información sobre las extensiones, consulte Uso y administración de extensiones con la CLI de Azure.
Ejecute az version para buscar cuál es la versión y las bibliotecas dependientes que están instaladas. Para realizar la actualización a la versión más reciente, ejecute az upgrade.
- En este artículo se necesita la versión 2.0.4 de la CLI de Azure, o cualquier versión posterior. Si usa Azure Cloud Shell, ya está instalada la versión más reciente.
Crear un grupo de recursos
En esta sección, las variables de entorno se declaran para su uso en comandos posteriores. Se anexa un sufijo aleatorio a los nombres de recursos para la unicidad.
export RANDOM_SUFFIX=$(openssl rand -hex 3)
export RESOURCE_GROUP="myResourceGroup$RANDOM_SUFFIX"
export REGION="eastus2"
az group create --name $RESOURCE_GROUP --location $REGION
Resultados:
{
"id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxxxxx",
"location": "eastus",
"managedBy": null,
"name": "myResourceGroupxxxxxx",
"properties": {
"provisioningState": "Succeeded"
},
"tags": null,
"type": "Microsoft.Resources/resourceGroups"
}
Creación de una máquina virtual
En esta sección se crea una máquina virtual con un nombre único, al tiempo que también se generan claves SSH si aún no existen. Se anexa un sufijo aleatorio para garantizar la unicidad.
export VM_NAME="myVM$RANDOM_SUFFIX"
az vm create \
--resource-group $RESOURCE_GROUP \
--name $VM_NAME \
--image Ubuntu2204 \
--admin-username azureuser \
--generate-ssh-keys
Cuando se ha creado la máquina virtual, la CLI de Azure muestra información similar al ejemplo siguiente. Tome nota de la dirección IP pública. Esta dirección se utiliza para tener acceso a la máquina virtual.
Resultados:
{
"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"
}
Conexión SSH con la máquina virtual
Si aún no conoce la dirección IP pública de la máquina virtual, ejecute el siguiente comando para enumerarlo:
az network public-ip list --resource-group $RESOURCE_GROUP --query [].ipAddress
Ejecute el comando siguiente para crear una sesión SSH con la máquina virtual. Sustituya la dirección IP pública correcta de la máquina virtual. En este ejemplo, la dirección IP es 40.68.254.142.
export PUBLIC_IP_ADDRESS=$(az network public-ip list --resource-group $RESOURCE_GROUP --query [].ipAddress -o tsv)
Instalación de Elastic Stack
En esta sección, importa la clave de firma de Elasticsearch y actualiza la lista de orígenes de APT para incluir el repositorio de paquetes de Elastic. Esto va seguido de la instalación del entorno de tiempo de ejecución de Java que es necesario para los componentes de 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
"
Instale la máquina virtual Java en la máquina virtual y configure 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
"
Ejecute el siguiente comando para actualizar los orígenes de paquetes de Ubuntu e instalar Elasticsearch, Kibana y 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
"
Nota
Las instrucciones de instalación detalladas, incluidos los diseños de directorio y la configuración inicial, se incluyen en la documentación de Elastic
Iniciar Elasticsearch
Inicie Elasticsearch en la máquina virtual con el siguiente comando:
ssh azureuser@$PUBLIC_IP_ADDRESS -o StrictHostKeyChecking=no "
sudo systemctl start elasticsearch.service
"
Este comando no genera ninguna salida, por lo que debe comprobar que Elasticsearch se está ejecutando en la máquina virtual con este comando curl:
ssh azureuser@$PUBLIC_IP_ADDRESS -o StrictHostKeyChecking=no "
sleep 11
sudo curl -XGET 'localhost:9200/'
"
Si Elasticsearch se está ejecutando, verá un resultado similar al siguiente:
Resultados:
{
"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"
}
Iniciar Logstash y agregar datos a Elasticsearch
Inicie Logstash con el siguiente comando:
ssh azureuser@$PUBLIC_IP_ADDRESS -o StrictHostKeyChecking=no "
sudo systemctl start logstash.service
"
Pruebe Logstash para asegurarse de que funciona correctamente:
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"
"
Se trata de una canalización básica de Logstash que repite la entrada estándar en la salida estándar.
Configure Logstash para reenviar los mensajes del kernel de esta máquina virtual a Elasticsearch. Para crear el archivo de configuración de Logstash, ejecute el siguiente comando que escribe la configuración en un nuevo archivo denominado 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
"
Pruebe esta configuración y envíe los datos de Syslog a 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
Verá las entradas de Syslog de su terminal repetidas cuando se envíen a Elasticsearch. Use CTRL+C para salir de Logstash una vez que haya enviado algunos datos.
Inicie Kibana y visualice los datos en Elasticsearch
Edite el archivo de configuración de Kibana (/etc/kibana/kibana.yml) y cambie la dirección IP en la que escucha Kibana para que pueda acceder a él desde el explorador web:
server.host: "0.0.0.0"
Inicie Kibana con el siguiente comando:
ssh azureuser@$PUBLIC_IP_ADDRESS -o StrictHostKeyChecking=no "
sudo systemctl start kibana.service
"
Abra el puerto 5601 desde la CLI de Azure para permitir el acceso remoto a la consola de Kibana:
az vm open-port --port 5601 --resource-group $RESOURCE_GROUP --name $VM_NAME
Pasos siguientes
En este tutorial, implementó Elastic Stack en una máquina virtual de desarrollo en Azure. Ha aprendido a:
- Crear una máquina virtual con Ubuntu en un grupo de recursos de Azure
- Instalar Elasticsearch, Logstash y Kibana en la máquina virtual
- Enviar datos de ejemplo a Elasticsearch desde Logstash
- Abrir los puertos y trabajar con datos en la consola de Kibana