如何向Azure虚拟机上安装的LogStash发送日志?
解答你的ELK & Azure端口配置疑问
Hey Marcus, 作为ELK新手,很容易混淆组件间的端口分工,我来帮你一步步理清问题:
1. 先澄清核心误区:9200是Elasticsearch的端口,不是Logstash的!
Logstash默认不会监听9200端口,这个端口是Elasticsearch的REST API默认端口。你如果现在用curl http://<你的VM公网IP>:9200,应该会得到Elasticsearch的集群状态响应,而不是Logstash的——这就是你之前测试没收到LS响应的核心原因。
2. 要让Logstash接收HTTP请求,得先配置HTTP输入插件
Logstash本身没有默认的HTTP监听端口,必须通过配置文件开启HTTP输入功能。举个最简单的配置示例:
- 编辑你的Logstash主配置文件(通常是
/etc/logstash/logstash.conf),添加以下内容:input { http { port => 8080 # 这里可以自定义端口,比如5000、8080都可以 codec => json # 指定接收JSON格式的日志 } } output { elasticsearch { hosts => ["localhost:9200"] # 将日志转发到本地Elasticsearch index => "http-test-logs-%{+YYYY.MM.dd}" # 生成带日期的索引 } stdout { codec => rubydebug } # 同时在控制台打印日志,方便测试 } - 重启Logstash服务使配置生效:
sudo systemctl restart logstash
3. 开放正确的端口(不是9200!)
既然你配置Logstash监听8080端口,那需要开放这个端口给外部访问:
- 用Azure CLI开放VM的网络端口:
az vm open-port --port 8080 --resource-group MyResourceGroup --name MyELK - 同时别忘了开放VM内部的系统防火墙(比如Ubuntu用ufw,CentOS用firewalld):
# Ubuntu/Debian系统 sudo ufw allow 8080/tcp sudo ufw reload # CentOS/RHEL系统 sudo firewall-cmd --add-port=8080/tcp --permanent sudo firewall-cmd --reload
4. 用curl测试Logstash的HTTP输入
配置完成后,就可以用curl发送测试请求了:
curl -X POST "http://<你的VM公网IP>:8080" -H "Content-Type: application/json" -d '{ "message": "这是来自curl的测试日志", "source": "curl-test" }'
如果配置正常,你会看到:
- Logstash的控制台(或日志文件)输出刚才发送的JSON内容
- 登录Kibana后,能找到名为
http-test-logs-YYYY.MM.dd的索引,里面包含这条测试日志
额外小提示
如果你之前已经开放了9200端口,其实是给Elasticsearch用的——外部直接访问ES的9200端口存在安全风险,建议只允许VM内部(比如Logstash)访问,或者通过Kibana的代理来操作ES,不要直接暴露9200到公网哦。
内容的提问来源于stack exchange,提问作者Marcus
相关产品推荐
相关产品推荐

