部署ELK到Azure VM后无法向Elasticsearch写入数据如何解决?
排查解决方案
1. 网络端口规则验证
- 首先检查Azure门户中虚拟机关联的网络安全组(NSG)9200端口入站规则的源地址配置:如果规则源地址不是
0.0.0.0/0,需要确认是否包含你本地设备的公网IP,未包含的话本地请求会被NSG拦截。 - 其次检查虚拟机内部操作系统防火墙规则:如果是Linux系统,执行
ufw status或者firewall-cmd --list-all确认9200端口已放行;如果是Windows系统,检查Windows Defender防火墙的入站规则是否允许9200端口的外部访问。
2. Elasticsearch服务配置排查
- 先运行本地MVC项目,抓取ES客户端的请求报错信息:如果报错为连接超时,可确定是网络规则拦截问题;如果返回4xx/5xx状态码,属于ES服务侧的配置问题。
- 检查
elasticsearch.yml中的xpack.security.enabled配置:如果开启了安全认证,你本地MVC项目的ES客户端未配置对应用户名密码的话,写入请求会被直接拒绝,不会生成索引。可以直接在浏览器访问http://<虚拟机公网IP>:9200验证,如果弹出登录框说明已开启认证,需要在MVC项目的ES客户端配置中补充认证信息。 - 登录虚拟机执行
curl http://localhost:9200/_cat/indices?v命令查看所有已存在的索引,确认是索引真的未创建,还是你在Kibana中创建索引模式时填写的索引名称匹配规则有误导致找不到。
3. 应用侧配置校验
检查你的MVC项目中ES写入配置,是否开启了自动创建索引权限,或者配置的索引名称是否符合ES命名规范(不能包含大写字母、特殊符号等),不符合规范的索引创建请求会被ES直接驳回。
内容的提问来源于stack exchange,提问作者MarkCo
相关产品推荐
相关产品推荐

