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
Integration
Integrate Filebeat, Kafka, Logstash, Elasticsearch and Kibana
Share this post with others:
Like this:
Like Loading...
You must be logged in to post a comment.