Elasticsearch和Grafana集成的时候,是不是经常遇到连不上,或者好不容易连上了,索引数据又不显示的问题?今天就把我踩过的坑和排查的方法整理出来,手把手带你搞定这些问题。

一、连接失败类问题排查

1.1 网络连通性检查

首先排查最基础的网络问题,很多时候是端口没开或者IP写错了。你可以用下面的命令测试ES的端口能不能访问,注意替换成你自己的ES服务器IP和端口(默认是9200):

# 测试Elasticsearch服务器的网络连通性
curl http://你的ES服务器IP:9200

执行后,如果返回的是一段带有"name"、"cluster_name"等字段的JSON内容,说明网络是通的;如果返回超时或者连接被拒绝,那要么是ES没启动,要么是防火墙没开放9200端口,或者你填的IP不对。

1.2 认证配置错误

大部分生产环境的ES都开了用户名密码认证,要是Grafana里没填或者填错,就会连不上。可以用带认证的curl命令测试:

# 带用户名密码访问Elasticsearch,替换成你的账号和密码
curl -u "elastic:你的ES密码" http://你的ES服务器IP:9200

要是返回401错误,说明用户名或密码错了;返回403的话,说明这个账号没权限访问ES,得去ES后台给这个账号加权限。

二、索引映射问题排查

连上之后还是看不到数据,大概率是索引的问题,比如索引不存在、字段类型不对。

2.1 确认索引存在

先看看ES里有没有你要的那个索引,用下面的命令:

# 查看所有Elasticsearch索引,替换账号密码和地址
curl -u "elastic:你的ES密码" http://你的ES服务器IP:9200/_cat/indices?v

执行后会列出所有索引的详细信息,包括名字、文档数量、状态等。如果你要的索引(比如存微服务日志的microservice-log-2024.05.20)没在列表里,要么是索引名写错了,要么是程序还没往ES里存数据,索引还没生成。

2.2 检查索引的字段映射

Grafana要正常显示数据,索引的字段类型得符合要求,尤其是时间字段。比如你要做时间范围的图表,索引里的时间字段(一般是@timestamp)必须是date类型,要是是text或者keyword类型,Grafana就认不出来。用下面的命令查看索引的字段映射:

# 查看指定索引的字段结构,替换成你的索引名
curl -u "elastic:你的ES密码" http://你的ES服务器IP:9200/你的索引名/_mapping

返回结果里,找到时间字段,看它的"type"是不是"date",如果不是的话,就需要调整索引的映射,比如创建索引的时候指定字段类型,或者用ES的runtime字段临时转换,但新手的话建议先重新创建索引时正确设置类型。

三、常见特殊问题处理

3.1 时区不匹配导致的数据缺失

这个是最容易忽略的问题!ES默认存的是UTC时间(比北京时间晚8小时),而Grafana默认用本地时区(比如北京时间),要是两边时区没对齐,就会出现“ES里有数据,Grafana里选了最近1小时却看不到”的情况。举个例子:ES里存的时间是2024-05-20T12:00:00Z(UTC中午12点),对应北京时间是2024-05-20T20:00:00,如果你在Grafana里选的时间范围是“北京时间2024-05-20 19:00到20:00”,那这条数据就不在范围内,自然看不到。 解决方法:在Grafana里编辑Elasticsearch数据源,找到“Timezone”选项,改成“UTC+8”或者“Browser(和浏览器时区一致)”,也可以在查询时手动指定时区。

3.2 权限不足导致无数据

刚才提到认证是连不上的原因,还有一种是连上了但看不到数据,那就是账号权限不够。比如你的ES账号有访问所有索引的权限,但索引是按服务类型分前缀的,或者Grafana用的账号没对应索引的读取权限。可以用下面的命令查看账号权限:

# 查看指定ES账号的权限,替换成你的用户名
curl -u "elastic:你的ES密码" http://你的ES服务器IP:9200/_security/user/你的用户名

要是返回的权限里没有对应索引的read权限,就需要去ES后台给这个账号加角色,角色里要允许读取对应的索引。

四、应用场景、优缺点与注意事项

4.1 应用场景

这个搭配最常用在日志分析和监控可视化场景,比如公司用ES存储微服务的请求日志、系统的监控指标,用Grafana做实时仪表盘,展示每个服务的QPS、错误率、平均响应时间,还可以做日志的关键字搜索,快速定位问题。比如电商系统的交易日志存ES,用Grafana监控下单量的实时变化,这样运维人员能第一时间发现异常。

4.2 技术优缺点

优点方面,Grafana的可视化功能很强大,支持拖拽式做仪表盘,不用写复杂的代码,还能统一展示多种数据源的数据;ES适合存储海量的日志和指标,分布式架构扩展性好,成本低,两者搭配性价比很高。缺点的话,配置步骤多,新手容易踩端口、密码、时区的坑,排查起来要一步步来,集群模式下性能调优也需要一定经验,要是ES数据量太大,Grafana查询的时候可能会慢。

4.3 注意事项

要记得几个关键点:第一,ES的端口别和其他服务冲突,改端口后Grafana里要对应修改;第二,索引命名要统一,Grafana的索引模式要匹配,比如用通配符microservice-log-*来匹配所有日期分的索引;第三,时间字段一定要用date类型,时区要统一;第四,定期清理ES的旧索引,不然磁盘满了会出问题,间接导致Grafana查询失败;第五,改ES的权限时别给账号太高的权限,最小权限原则,避免数据泄露。

五、总结

Elasticsearch和Grafana集成的报错大多不是复杂问题,都是基础配置没做好。排查的时候按顺序来:先测网络通不通,再查账号密码对不对,接着确认索引存在,再看字段映射的类型,最后处理时区和权限的问题。遇到别慌,用命令一步步测试,很快就能找到问题。只要把这些坑避开,就能搭建一个稳定的可视化监控系统。