Бөлісу құралы:


Установка Эластичного стека (ELK) на виртуальной машине Azure

Область применения: ✔️ Виртуальные машины Linux ✔️ Гибкие масштабируемые наборы

В этой статье описано, как развернуть Elasticsearch, Logstash и Kibana на виртуальной машине Ubuntu в Azure. Чтобы увидеть Elastic Stack в действии, вы можете по желанию подключиться к Kibana и работать с образцами данных журналов.

Кроме того, вы можете следовать модулю Deploy Elastic на виртуальных машинах Azure , чтобы получить более подробное руководство по развертыванию Elastic на виртуальных машинах Azure.

В этом руководстве описано, как:

  • Создание виртуальной машины Ubuntu в группе ресурсов Azure
  • Установка Elasticsearch, Logstash и Kibana на виртуальной машине
  • Отправка примеров данных в Elasticsearch с помощью Logstash
  • Открытие портов и работа с данными в консоли Kibana

Это развертывание подходит для базовой разработки с помощью Elastic Stack. Дополнительные сведения об Эластичном стеке, включая рекомендации по рабочей среде, см. в документации по Elastic и в Центре архитектуры Azure.

Предпосылки

  • Для работы с этой статьей требуется Azure CLI версии 2.0.4 или более поздней. Если вы используете Azure Cloud Shell, последняя версия уже установлена.

Создайте группу ресурсов

В этом разделе переменные среды объявляются для использования в последующих командах. Случайный суффикс добавляется к именам ресурсов для уникальности.

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

Результаты:

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

Создание виртуальной машины

В этом разделе создается виртуальная машина с уникальным именем, а также создается ключи SSH, если они еще не существуют. Случайный суффикс добавляется для обеспечения уникальности.

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

При создании виртуальной машины Azure CLI отображает сведения, аналогичные следующему примеру. Обратите внимание на publicIpAddress. Этот адрес используется для доступа к виртуальной машине.

Результаты:

{
  "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"
}

SSH-подключение к виртуальной машине

Если вы еще не знаете общедоступный IP-адрес виртуальной машины, выполните следующую команду, чтобы перечислить ее:

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

Используйте следующую команду, чтобы создать сеанс SSH с виртуальной машиной. Замените правильный общедоступный IP-адрес виртуальной машины. В этом примере IP-адрес — 40.68.254.142.

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

Установка эластичного стека

В этом разделе вы импортируете ключ подписи Elasticsearch и обновите список источников APT, чтобы включить репозиторий пакетов Elastic. За этим следует установка среды выполнения Java, которая требуется для компонентов 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
"

Установите виртуальную машину Java на виртуальной машине и настройте переменную 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
"

Выполните следующую команду, чтобы обновить источники пакетов Ubuntu и установить Elasticsearch, Kibana и 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
"

Примечание.

Подробные инструкции по установке, включая макеты каталогов и начальную конфигурацию, хранятся в документации Elastic.

Запуск Elasticsearch

Запустите Elasticsearch на виртуальной машине с помощью следующей команды:

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

Эта команда не выдает выходных данных, поэтому убедитесь, что Elasticsearch выполняется на виртуальной машине с помощью этой команды curl:

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

Если выполняется Elasticsearch, вы увидите следующие выходные данные:

Результаты:

{
  "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"
}

Запуск Logstash и добавление данных в Elasticsearch

Запустите Logstash с помощью следующей команды:

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

Проверьте Logstash, чтобы убедиться, что он работает правильно:

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"
"

Это базовый конвейер Logstash, который отражает стандартные входные данные в стандартные выходные данные.

Настройте Logstash для пересылки сообщений ядра из этой виртуальной машины в Elasticsearch. Чтобы создать файл конфигурации Logstash, выполните следующую команду, которая записывает конфигурацию в новый файл с именем 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
"

Проверьте эту конфигурацию и отправьте данные системного журнала в 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

В терминале отображаются записи системного журнала, отправляемые в Elasticsearch. Используйте CTRL+C, чтобы выйти из Logstash после отправки некоторых данных.

Запуск Kibana и визуализация данных в Elasticsearch

Измените файл конфигурации Kibana (/etc/kibana/kibana.yml) и измените IP-адрес Kibana, чтобы получить доступ к нему из веб-браузера:

server.host: "0.0.0.0"

Запустите Kibana с помощью следующей команды:

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

Откройте порт 5601 из Azure CLI, чтобы разрешить удаленный доступ к консоли Kibana:

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

Дальнейшие действия

В этом руководстве вы развернули Elastic Stack в виртуальной машине разработки в Azure. Вы узнали, как:

  • Создание виртуальной машины Ubuntu в группе ресурсов Azure
  • Установка Elasticsearch, Logstash и Kibana на виртуальной машине
  • Отправка примеров данных в Elasticsearch из Logstash
  • Открытие портов и работа с данными в консоли Kibana