去年接手的一个企业级日志分析项目中,客户需要将Easysearch中的业务日志实时可视化展示。当时尝试了多种方案,最终发现Grafana+Easysearch的组合既能满足实时性要求,又具备高度定制化的仪表盘能力。这种方案特别适合需要快速搭建业务监控大屏,但又不想投入大量开发资源的团队。
Easysearch作为一款兼容主流协议的开源搜索分析引擎,在企业内部数据检索场景中越来越常见。而Grafana作为可视化领域的瑞士军刀,其丰富的插件体系和灵活的Panel配置,让非专业前端开发的运维和数据分析人员也能快速构建专业级数据看板。
建议使用Linux系统作为运行环境,我这里以CentOS 7.9为例。硬件配置方面,如果只是测试验证,2核4G的虚拟机就足够;生产环境建议至少4核8G起步。需要提前安装:
注意:Grafana和Easysearch的版本兼容性很重要。太老的Grafana可能不支持新版Easysearch的数据源插件。
Grafana默认不包含Easysearch数据源支持,需要手动安装插件:
bash复制# 进入Grafana插件目录
cd /var/lib/grafana/plugins
# 下载并解压插件
wget https://github.com/opensearch-project/grafana-opensearch-datasource/releases/download/v2.0.0/opensearch-datasource-2.0.0.zip
unzip opensearch-datasource-2.0.0.zip
# 重启Grafana服务
systemctl restart grafana-server
安装完成后,在Grafana的Configuration -> Data Sources页面应该能看到OpenSearch Data Source选项(Easysearch兼容OpenSearch协议)。
在Grafana中添加数据源时,关键参数包括:
测试连接时常见的几个坑:
在Data Source配置页的JSON Model中,可以添加这些优化参数:
json复制{
"database": "[your_index_pattern]",
"esVersion": "2.0.0",
"timeField": "@timestamp",
"interval": "1m",
"timeInterval": "1m",
"maxConcurrentShardRequests": 5
}
其中timeField的配置尤为关键,这决定了时间序列数据的正确展示。Easysearch中常见的日志类数据通常使用@timestamp字段。
以创建一个请求量趋势图为例:
json复制{
"query": {
"bool": {
"filter": [
{
"range": {
"@timestamp": {
"gte": "$__timeFrom()",
"lte": "$__timeTo()"
}
}
},
{
"term": {
"status": "200"
}
}
]
}
},
"aggregations": {
"count_over_time": {
"date_histogram": {
"field": "@timestamp",
"fixed_interval": "$__interval"
}
}
}
}
在Dashboard设置中添加变量可以实现动态过滤:
json复制{
"name": "app_name",
"query": {
"query": "{\"aggs\":{\"apps\":{\"terms\":{\"field\":\"app.keyword\",\"size\":100}}}}",
"refId": "StandardVariableQuery"
},
"type": "query"
}
然后在Panel的查询条件中引用变量:
json复制{
"term": {
"app.keyword": {
"value": "${app_name}"
}
}
}
Grafana 8.0+的告警引擎可以直接基于Easysearch数据设置告警:
avg() OF query(A,5m,now) IS BELOW 100实测发现对Easysearch的告警查询不宜太频繁,建议评估周期不小于5分钟,避免给集群造成压力。
ini复制[dataproxy]
enabled = true
cache_ttl = 60s
当监控的Easysearch集群本身负载较高时,可以:
json复制{
"sampler": {
"shard_size": 100
},
"aggs": {
"metrics": {
"avg": {
"field": "response_time"
}
}
}
}
现象:面板显示"No data"
排查步骤:
现象:面板加载缓慢
优化方向:
现象:突然出现认证失败
常见原因:
通过配置多个Easysearch数据源,可以在一个Dashboard中展示跨集群的聚合数据。关键点是在Panel的查询中选择不同的数据源,然后使用Grafana的混合数据源功能进行关联展示。
通过Grafana的Alerting Webhook,可以将Easysearch的异常指标推送到企业现有的告警平台。一个实用的技巧是在告警信息中包含直接跳转到相关Dashboard的链接,方便快速定位问题。
json复制{
"title": "请求量异常下降",
"message": "应用 ${app_name} 请求量低于阈值100,当前值 ${values.A.value}",
"dashboardURL": "https://grafana.example.com/d/abc123"
}
利用Grafana的Reporting功能,可以定期将Easysearch数据分析结果生成PDF报告并自动发送。配置时需要注意: