You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何向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输入功能。举个最简单的配置示例:

  1. 编辑你的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 }  # 同时在控制台打印日志,方便测试
    }
    
  2. 重启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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:28:06