你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
适用于:✔️ Linux VM ✔️ 灵活规模集
本文逐步讲解如何在 Azure 中的 Ubuntu VM 上部署 Elasticsearch、Logstash 和 Kibana。 若要查看实际操作中的 Elastic Stack,可选择连接到 Kibana 并处理某些示例日志记录数据。
此外,可以按照在 Azure 虚拟机上部署 Elastic 模块进行操作,获取有关在 Azure 虚拟机上部署 Elastic 的更多指导性教程。
本教程介绍如何执行下列操作:
- 在 Azure 资源组中创建 Ubuntu VM
- 在 VM 上安装 Elasticsearch、Logstash 和 Kibana
- 使用 Logstash 将示例数据发送到 Elasticsearch
- 在 Kibana 控制台中打开端口并处理数据
此部署适用于使用 Elastic Stack 进行基本开发的情况。 有关 Elastic 堆栈的详细信息,包括针对生产环境的建议,请参阅 Elastic 文档和 Azure 体系结构中心。
先决条件
在 Azure Cloud Shell 中使用 Bash 环境。 有关详细信息,请参阅 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 密钥。 追加随机后缀以确保唯一性。
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 会显示类似于以下示例的信息。 记下公网IP地址。 此地址用于访问 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"
}
通过 SSH 连接到 VM
如果尚不知道 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)
安装 Elastic Stack
在本部分中,导入 Elasticsearch 签名密钥并更新 APT 源列表以包含 Elastic 包存储库。 随后安装弹性堆栈组件所需的 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 虚拟机并配置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
"
此命令不生成任何输出,因此请使用以下 curl 命令验证 Elasticsearch 是否在 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 管道,它将标准输入回响到标准输出。
设置 Logstash,将内核消息从此 VM 转发到 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
"
测试此配置,然后将 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 时回响的终端中会显示这些 syslog 项。 发送某些数据后,使用 Ctrl+C 退出 Logstash。
启动 Kibana 并在 Elasticsearch 中直观显示数据
编辑 Kibana 配置文件(/etc/kibana/kibana.yml),并更改 Kibana 侦听的 IP 地址,以便可以从 Web 浏览器访问它:
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 控制台中打开端口并处理数据