如何统计ZooKeeper管理的Solr实例查询请求量?按日/周/月维度
统计ZooKeeper管理的Solr集群查询请求量(按日/周/月维度)
一、用Solr内置Metrics直接统计
Solr自带的Metrics框架能轻松抓取查询相关指标,适配集群场景:
- 确认Metrics启用:solrconfig.xml默认已开启Metrics配置,核心关注
QUERY./select.requests指标(对应/select接口的查询请求数,其他查询接口可替换路径) - 集群数据聚合:通过Solr Admin的Cloud面板查看各节点Metrics,或用API批量拉取所有节点数据:
curl http://<solr-host>:<port>/solr/admin/metrics?group=query&prefix=QUERY./select - 时间维度统计:把拉取到的指标导入InfluxDB、Prometheus这类时序数据库,搭配Grafana工具,原生支持按日/周/月做聚合统计,直接生成可视化报表。
二、分析Solr访问日志
Solr访问日志会记录所有请求,解析日志就能实现统计:
- 日志格式参考:每行日志包含时间戳、请求路径等信息,示例:
127.0.0.1 - - [15/Oct/2024:10:00:00 +0800] "GET /solr/core/select?q=:&wt=json HTTP/1.1" 200 1234
- 单实例统计:用awk快速按日统计/select请求数:
awk '/\/select/ {split($4, date, /\[|\//); print date[2]"/"date[3]}' solr_access.log | sort | uniq -c - 集群统一统计:用Filebeat把所有节点的访问日志集中到一处,再用ELK Stack做统一分析,就能得到集群总请求量,轻松按日/周/月维度拆分。
三、自定义请求拦截器(进阶)
如果需要更精细化的统计规则,可自定义拦截器:
- 编写拦截器:继承
SolrRequestFilter,在doFilter方法里按日/周/月维护请求计数器,计数可存在Solr分布式缓存或外部数据库 - 配置拦截器:在solrconfig.xml中注册拦截器,指定对查询接口生效:
<requestHandler name="/select" class="solr.SearchHandler"> <lst name="defaults"> <str name="echoParams">explicit</str> <int name="rows">10</int> </lst> <arr name="filters"> <str>statsQueryFilter</str> </arr> </requestHandler> <filter name="statsQueryFilter" class="com.yourpackage.QueryStatsFilter"/> - 暴露查询接口:在拦截器中添加自定义接口,直接返回按时间维度聚合的请求数。
内容的提问来源于stack exchange,提问作者Jey
相关产品推荐
相关产品推荐

