如何使用SolrJ获取Solr服务器的Metrics指标数据
SolrJ 8.4 获取Metrics指标实现方案
你当前使用的curl命令curl 'http://localhost:1080/MySolr/admin/metrics'对应的接口,SolrJ没有提供专门的封装方法,但可以通过通用请求类实现完全一致的效果,实现代码如下:
import org.apache.solr.client.solrj.impl.HttpSolrClient; import org.apache.solr.client.solrj.request.GenericSolrRequest; import org.apache.solr.client.solrj.response.SimpleSolrResponse; import org.apache.solr.common.params.ModifiableSolrParams; import java.util.Map; public class SolrMetricsFetcher { public static void main(String[] args) throws Exception { // 初始化SolrClient,替换为你自己的Solr服务地址 String solrBaseUrl = "http://localhost:1080/MySolr"; try (HttpSolrClient solrClient = new HttpSolrClient.Builder(solrBaseUrl).build()) { // 构造请求参数,不需要额外过滤可以不添加参数 ModifiableSolrParams params = new ModifiableSolrParams(); // 可选:如果要过滤指标类别可以加参数,比如只拿jvm指标:params.set("category", "jvm"); // 可选:指定核心级指标可以加params.set("core", "your_core_name"); // 构造通用请求,METHOD.GET对应GET请求,路径为/admin/metrics GenericSolrRequest metricsRequest = new GenericSolrRequest( GenericSolrRequest.METHOD.GET, "/admin/metrics", params ); // 执行请求获取响应 SimpleSolrResponse response = metricsRequest.process(solrClient); // 响应结果可以直接转为Map使用,结构和curl返回的JSON完全一致 Map<String, Object> metricsResult = response.asMap(); // 如果需要拿到原始JSON字符串,可以通过response.getResponse().toString()获取 // System.out.println(response.getResponse().toString()); } } }
补充说明:
- 上述代码返回的
metricsResult结构和你通过curl拿到的JSON结构完全一致,包含所有指标数据,可以直接按层级解析使用 - 如果需要对指标做过滤减少返回数据量,可以通过添加
params参数实现,比如指定category、key等过滤参数,和curl直接加请求参数的效果一致 - 不需要额外引入第三方依赖,完全基于SolrJ 8.4原生API实现
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

