적용 대상: ✔️ Linux VM ✔️ 유연한 확장 집합
이 문서에서는 Azure의 Ubuntu VM에 Elasticsearch, Logstash 및 Kibana를 배포하는 방법을 안내합니다. 탄력적 스택의 작동을 확인하려면 선택적으로 Kibana에 연결하고 일부 샘플 로깅 데이터를 사용할 수 있습니다.
또한 Azure Virtual Machines에 Elastic 배포 모듈을 따라 Azure Virtual Machines에 Elastic 을 배포하는 방법에 대한 자세한 자습서를 확인할 수 있습니다.
이 자습서에서는 다음 방법을 알아봅니다.
- Azure 리소스 그룹에서 Ubuntu VM 만들기
- VM에 Elasticsearch, Logstash 및 Kibana 설치
- Logstash를 사용하여 Elasticsearch에 샘플 데이터 보내기
- Kibana 콘솔에서 포트 열기 및 데이터 작업
이 배포는 Elastic Stack을 사용한 기본 개발에 적합합니다. 프로덕션 환경에 대한 권장 사항을 포함하여 Elastic Stack에 대한 자세한 내용은 Elastic 설명서 및 Azure 아키텍처 센터를 참조하세요.
필수 조건
Bash 환경을 Azure Cloud Shell에서 사용합니다. 자세한 내용은 Azure Cloud Shell 시작을 참조하세요.
CLI 참조 명령을 로컬에서 실행하려면 Azure CLI를 설치하십시오. Windows 또는 macOS에서 실행하는 경우 Docker 컨테이너에서 Azure CLI를 실행하는 것이 좋습니다. 자세한 내용은 Docker 컨테이너에서 Azure CLI를 실행하는 방법을 참조하세요.
로컬 설치를 사용하는 경우 az login 명령을 사용하여 Azure CLI에 로그인합니다. 인증 프로세스를 완료하려면 터미널에 표시되는 단계를 수행합니다. 다른 로그인 옵션은 Azure CLI를 사용하여 Azure에 인증을 참조하세요.
메시지가 표시되면 처음 사용할 때 Azure CLI 확장을 설치합니다. 확장에 대한 자세한 내용은 Azure CLI로 확장 사용 및 관리를 참조하세요.
az version을 실행하여 설치된 버전과 관련 종속 라이브러리를 확인합니다. 최신 버전으로 업그레이드하려면 az upgrade를 실행합니다.
- 이 문서에는 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"
}
가상 머신 만들기
이 섹션에서는 고유한 이름을 가진 VM을 만들고 SSH 키가 아직 없는 경우 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
VM이 만들어지면 Azure CLI는 다음 예제와 유사한 정보를 표시합니다. publicIpAddress를 기록해 둡다. 이 주소는 VM에 액세스하는 데 사용됩니다.
결과:
{
"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"
}
VM에 SSH 수행
VM의 공용 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 서명 키를 가져오고 Elastic 패키지 리포지토리를 포함하도록 APT 원본 목록을 업데이트합니다. 그 다음에는 Elastic Stack 구성 요소에 필요한 Java 런타임 환경을 설치합니다.
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
"
VM에 Java Virtual Machine을 설치하고 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 시작
다음 명령을 사용하여 VM에서 Elasticsearch를 시작합니다.
ssh azureuser@$PUBLIC_IP_ADDRESS -o StrictHostKeyChecking=no "
sudo systemctl start elasticsearch.service
"
이 명령은 출력을 생성하지 않으므로 Elasticsearch가 이 curl 명령을 사용하여 VM에서 실행되고 있는지 확인합니다.
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 파이프라인입니다.
이 VM에서 Elasticsearch로 커널 메시지를 전달하도록 Logstash를 설정합니다. 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
"
이 구성을 테스트하고 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
터미널에서 syslog 항목이 Elasticsearch로 전송될 때 에코되는 것을 볼 수 있습니다. 일부 데이터를 보낸 후 Ctrl+C를 사용하여 Logstash에서 종료합니다.
Kibana를 시작하고 Elasticsearch에서 데이터 시각화
Kibana 구성 파일(/etc/kibana/kibana.yml)을 편집하고 Kibana가 수신 대기하는 IP 주소를 변경하여 웹 브라우저에서 액세스할 수 있습니다.
server.host: "0.0.0.0"
다음 명령을 사용하여 Kibana를 시작합니다.
ssh azureuser@$PUBLIC_IP_ADDRESS -o StrictHostKeyChecking=no "
sudo systemctl start kibana.service
"
Azure CLI에서 포트 5601을 열어 Kibana 콘솔에 대한 원격 액세스를 허용합니다.
az vm open-port --port 5601 --resource-group $RESOURCE_GROUP --name $VM_NAME
다음 단계
이 자습서에서는 Elastic Stack을 Azure의 개발 VM에 배포했습니다. 당신은 다음을 배우셨습니다:
- Azure 리소스 그룹에서 Ubuntu VM 만들기
- VM에 Elasticsearch, Logstash 및 Kibana 설치
- Logstash에서 Elasticsearch로 샘플 데이터 보내기
- Kibana 콘솔에서 포트 열기 및 데이터 작업