Search in sources :

Example 1 with ClusterStats

use of org.graylog2.system.stats.elasticsearch.ClusterStats in project graylog2-server by Graylog2.

the class ClusterAdapterES7 method clusterStats.

@Override
public ClusterStats clusterStats() {
    final Request request = new Request("GET", "/_cluster/stats/nodes/*");
    final JsonNode clusterStatsResponseJson = jsonApi.perform(request, "Couldn't read Elasticsearch cluster stats");
    final String clusterName = clusterStatsResponseJson.path("cluster_name").asText();
    String clusterVersion = null;
    if (clusterStatsResponseJson.path("nodes").path("versions").isArray()) {
        final ArrayNode versions = (ArrayNode) clusterStatsResponseJson.path("nodes").path("versions");
        // We just use the first version in the "versions" array. This is not correct if there are different
        // versions running in the cluster, but that is not recommended anyway.
        final JsonNode versionNode = versions.path(0);
        if (versionNode.getNodeType() != JsonNodeType.MISSING) {
            clusterVersion = versionNode.asText();
        }
    }
    final JsonNode countStats = clusterStatsResponseJson.path("nodes").path("count");
    final NodesStats nodesStats = NodesStats.create(countStats.path("total").asInt(-1), countStats.path("master_only").asInt(-1), countStats.path("data_only").asInt(-1), countStats.path("master_data").asInt(-1), countStats.path("client").asInt(-1));
    final JsonNode clusterIndicesStats = clusterStatsResponseJson.path("indices");
    final IndicesStats indicesStats = IndicesStats.create(clusterIndicesStats.path("count").asInt(-1), clusterIndicesStats.path("store").path("size_in_bytes").asLong(-1L), clusterIndicesStats.path("fielddata").path("memory_size_in_bytes").asLong(-1L));
    return ClusterStats.create(clusterName, clusterVersion, nodesStats, indicesStats);
}
Also used : NodesStats(org.graylog2.system.stats.elasticsearch.NodesStats) IndicesStats(org.graylog2.system.stats.elasticsearch.IndicesStats) ClusterGetSettingsRequest(org.graylog.shaded.elasticsearch7.org.elasticsearch.action.admin.cluster.settings.ClusterGetSettingsRequest) GetIndexRequest(org.graylog.shaded.elasticsearch7.org.elasticsearch.client.indices.GetIndexRequest) Request(org.graylog.shaded.elasticsearch7.org.elasticsearch.client.Request) ClusterHealthRequest(org.graylog.shaded.elasticsearch7.org.elasticsearch.action.admin.cluster.health.ClusterHealthRequest) JsonNode(com.fasterxml.jackson.databind.JsonNode) ArrayNode(com.fasterxml.jackson.databind.node.ArrayNode)

Example 2 with ClusterStats

use of org.graylog2.system.stats.elasticsearch.ClusterStats in project graylog2-server by Graylog2.

the class ClusterAdapterES6 method clusterStats.

@Override
public ClusterStats clusterStats() {
    final JestResult clusterStatsResponse = JestUtils.execute(jestClient, new Stats.Builder().build(), () -> "Couldn't read Elasticsearch cluster stats");
    final JsonNode clusterStatsResponseJson = clusterStatsResponse.getJsonObject();
    final String clusterName = clusterStatsResponseJson.path("cluster_name").asText();
    String clusterVersion = null;
    if (clusterStatsResponseJson.path("nodes").path("versions").isArray()) {
        final ArrayNode versions = (ArrayNode) clusterStatsResponseJson.path("nodes").path("versions");
        // We just use the first version in the "versions" array. This is not correct if there are different
        // versions running in the cluster, but that is not recommended anyway.
        final JsonNode versionNode = versions.path(0);
        if (versionNode.getNodeType() != JsonNodeType.MISSING) {
            clusterVersion = versionNode.asText();
        }
    }
    final JsonNode countStats = clusterStatsResponseJson.path("nodes").path("count");
    final NodesStats nodesStats = NodesStats.create(countStats.path("total").asInt(-1), countStats.path("master_only").asInt(-1), countStats.path("data_only").asInt(-1), countStats.path("master_data").asInt(-1), countStats.path("client").asInt(-1));
    final JsonNode clusterIndicesStats = clusterStatsResponseJson.path("indices");
    final IndicesStats indicesStats = IndicesStats.create(clusterIndicesStats.path("count").asInt(-1), clusterIndicesStats.path("store").path("size_in_bytes").asLong(-1L), clusterIndicesStats.path("fielddata").path("memory_size_in_bytes").asLong(-1L));
    return ClusterStats.create(clusterName, clusterVersion, nodesStats, indicesStats);
}
Also used : NodesStats(org.graylog2.system.stats.elasticsearch.NodesStats) IndicesStats(org.graylog2.system.stats.elasticsearch.IndicesStats) JsonNode(com.fasterxml.jackson.databind.JsonNode) ArrayNode(com.fasterxml.jackson.databind.node.ArrayNode) JestResult(io.searchbox.client.JestResult)

Example 3 with ClusterStats

use of org.graylog2.system.stats.elasticsearch.ClusterStats in project graylog2-server by Graylog2.

the class Cluster method elasticsearchStats.

public ElasticsearchStats elasticsearchStats() {
    final List<String> indices = Arrays.asList(indexSetRegistry.getIndexWildcards());
    final org.graylog2.system.stats.elasticsearch.ClusterStats clusterStats = clusterAdapter.clusterStats();
    final PendingTasksStats pendingTasksStats = clusterAdapter.pendingTasks();
    final ShardStats shardStats = clusterAdapter.shardStats(indices);
    final org.graylog2.system.stats.elasticsearch.ClusterHealth clusterHealth = org.graylog2.system.stats.elasticsearch.ClusterHealth.from(shardStats, pendingTasksStats);
    final HealthStatus healthStatus = clusterAdapter.health(indices).orElseThrow(() -> new IllegalStateException("Unable to retrieve cluster health."));
    return ElasticsearchStats.create(clusterStats.clusterName(), clusterStats.clusterVersion(), healthStatus, clusterHealth, clusterStats.nodesStats(), clusterStats.indicesStats());
}
Also used : ShardStats(org.graylog2.system.stats.elasticsearch.ShardStats) HealthStatus(org.graylog2.indexer.indices.HealthStatus)

Aggregations

JsonNode (com.fasterxml.jackson.databind.JsonNode)2 ArrayNode (com.fasterxml.jackson.databind.node.ArrayNode)2 IndicesStats (org.graylog2.system.stats.elasticsearch.IndicesStats)2 NodesStats (org.graylog2.system.stats.elasticsearch.NodesStats)2 JestResult (io.searchbox.client.JestResult)1 ClusterHealthRequest (org.graylog.shaded.elasticsearch7.org.elasticsearch.action.admin.cluster.health.ClusterHealthRequest)1 ClusterGetSettingsRequest (org.graylog.shaded.elasticsearch7.org.elasticsearch.action.admin.cluster.settings.ClusterGetSettingsRequest)1 Request (org.graylog.shaded.elasticsearch7.org.elasticsearch.client.Request)1 GetIndexRequest (org.graylog.shaded.elasticsearch7.org.elasticsearch.client.indices.GetIndexRequest)1 HealthStatus (org.graylog2.indexer.indices.HealthStatus)1 ShardStats (org.graylog2.system.stats.elasticsearch.ShardStats)1