Below is example to get Cluster Detail in Java Object by using Elasticsearch REST Java client. Here client will call endpoint “/_cluster/health” to retrieve all detail of index list. It is same as we use GET by CURL
GET http://elasticsearchHost:9200/_cluster/health
Pre-requisite
- Minimum requirement for Java 7 version required.
- Add below dependency for Elasticsearch REST and JSON Mapping in your pom.xml or add in your class path.
Dependency
<!--Elasticsearch REST jar--> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>rest</artifactId> <version>5.1.2</version> </dependency> <!--Jackson jar for mapping json to Java --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.8.5</version> </dependency>
Sample Code
import java.io.IOException; import java.util.Collections; import org.apache.http.HttpEntity; import org.apache.http.HttpHost; import org.apache.http.auth.AuthScope; import org.apache.http.auth.UsernamePasswordCredentials; import org.apache.http.client.CredentialsProvider; import org.apache.http.impl.client.BasicCredentialsProvider; import org.apache.http.impl.nio.client.HttpAsyncClientBuilder; import org.elasticsearch.client.Response; import org.elasticsearch.client.RestClient; import org.elasticsearch.client.RestClientBuilder; import com.fasterxml.jackson.databind.ObjectMapper; public class ElasticsearchRESTClusterClient { public static void main(String[] args) { ClusterInfo clusterHealth = null; RestClient client = null; try { client = openConnection(); if (client != null) { // performRequest GET method will retrieve all cluster health // information from elastic server Response response = client.performRequest("GET", "/_cluster/health", Collections.singletonMap("pretty", "true")); // GetEntity api will return content of response in form of json // in Http Entity HttpEntity entity = response.getEntity(); ObjectMapper jacksonObjectMapper = new ObjectMapper(); // Map json response to Java object in ClusterInfo // Cluster Info clusterHealth = jacksonObjectMapper.readValue(entity.getContent(), ClusterInfo.class); System.out.println(clusterHealth); } } catch (Exception ex) { System.out.println("Exception found while getting cluster detail"); ex.printStackTrace(); } finally { closeConnnection(client); } } // Get Rest client connection private static RestClient openConnection() { RestClient client = null; try { final CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("userId", "password")); client = RestClient.builder(new HttpHost("elasticHost", Integer.parseInt("9200"))) .setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() { // Customize connection as per requirement public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) { return httpClientBuilder // Credentials .setDefaultCredentialsProvider(credentialsProvider) // Proxy .setProxy(new HttpHost("ProxyServer", 8080)); } }).setMaxRetryTimeoutMillis(60000).build(); } catch (Exception ex) { ex.printStackTrace(); } return client; } // Close Open connection private static void closeConnnection(RestClient client) { if (client != null) { try { client.close(); } catch (IOException ex) { ex.printStackTrace(); } } } }
Cluster Info Java Object where retrieve json response will map.
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; @JsonIgnoreProperties(ignoreUnknown = true) public class ClusterInfo { @JsonProperty(value = "cluster_name") private String clusterName; @JsonProperty(value = "status") private String clusterStatus; @JsonProperty(value = "active_primary_shards") private int primaryActiveShards; @JsonProperty(value = "active_shards") private int activeShards; @JsonProperty(value = "delayed_unassigned_shards") private int delayedUnAssignedShards; @JsonProperty(value = "unassigned_shards") private int unAssignedShards; @JsonProperty(value = "initializing_shards") private int initializingShards; @JsonProperty(value = "relocating_shards") private int relocatingShards; @JsonProperty(value = "number_of_nodes") private int totalNodeCount; @JsonProperty(value = "number_of_data_nodes") private int dataNodeCount; @Override public String toString() { StringBuffer str=new StringBuffer(60); str.append("{\n"); str.append(" \"").append("clusterName").append("\":\"").append(clusterName).append("\",\n"); str.append(" \"").append("clusterStatus").append("\":\"").append(clusterStatus).append("\",\n"); str.append(" \"").append("primaryActiveShards").append("\":\"").append(primaryActiveShards).append("\",\n"); str.append(" \"").append("activeShards").append("\":\"").append(activeShards).append("\",\n"); str.append(" \"").append("delayedUnAssignedShards").append("\":\"").append(delayedUnAssignedShards).append("\",\n"); str.append(" \"").append("unAssignedShards").append("\":\"").append(unAssignedShards).append("\",\n"); str.append(" \"").append("initializingShards").append("\":\"").append(initializingShards).append("\",\n"); str.append(" \"").append("relocatingShards").append("\":\"").append(relocatingShards).append("\",\n"); str.append(" \"").append("totalNodeCount").append("\":\"").append(totalNodeCount).append("\",\n"); str.append(" \"").append("dataNode").append("\":\"").append(dataNodeCount).append("\""); str.append(" \""); return str.toString(); } public String getClusterName() { return clusterName; } public void setClusterName(String clusterName) { this.clusterName = clusterName; } public String getClusterStatus() { return clusterStatus; } public void setClusterStatus(String clusterStatus) { this.clusterStatus = clusterStatus; } public int getPrimaryActiveShards() { return primaryActiveShards; } public void setPrimaryActiveShards(int primaryActiveShards) { this.primaryActiveShards = primaryActiveShards; } public int getActiveShards() { return activeShards; } public void setActiveShards(int activeShards) { this.activeShards = activeShards; } public int getDelayedUnAssignedShards() { return delayedUnAssignedShards; } public void setDelayedUnAssignedShards(int delayedUnAssignedShards) { this.delayedUnAssignedShards = delayedUnAssignedShards; } public int getUnAssignedShards() { return unAssignedShards; } public void setUnAssignedShards(int unAssignedShards) { this.unAssignedShards = unAssignedShards; } public int getInitializingShards() { return initializingShards; } public void setInitializingShards(int initializingShards) { this.initializingShards = initializingShards; } public int getRelocatingShards() { return relocatingShards; } public void setRelocatingShards(int relocatingShards) { this.relocatingShards = relocatingShards; } public int getDataNodeCount() { return dataNodeCount; } public void setDataNodeCount(int dataNodeCount) { this.dataNodeCount = dataNodeCount; } public int getTotalNodeCount() { return totalNodeCount; } public void setTotalNodeCount(int totalNodeCount) { this.totalNodeCount = totalNodeCount; } }
Read More on Elasticsearch REST
- Elasticsearch REST API and Configuration
- Elasticsearch REST Java Connection Client
- Elasticsearch REST Synchronous and Asynchronous performRequest APIs
- Elasticsearch REST Response Handling
- Elasticsearch REST JAVA Client to get Index Details List
Integration
Integrate Filebeat, Kafka, Logstash, Elasticsearch and Kibana
5 thoughts on “Elasticsearch REST JAVA Client for Cluster Detail”
You must log in to post a comment.