App-ElasticSearch-Utilities
view release on metacpan or search on metacpan
scripts/es-status.pl view on Meta::CPAN
my @indexes = es_indices();
foreach my $index ( sort @indexes ) {
output({color=>"cyan"},"$index:");
my $stats = es_index_segments($index);
my $shards = 0;
my $segments = 0;
my $index_size = 0;
foreach my $id (sort keys %{ $stats->{indices}{$index}{shards} } ) {
$shards++;
verbose({kv=>1,color=>"magenta",indent=>1}, "shard", $id);
my $shard = $stats->{indices}{$index}{shards}{$id}[0];
my $color = $shard->{num_search_segments} > 1 ? 'yellow' : 'green';
$segments += $shard->{num_search_segments};
verbose({kv=>1,color=>$color,indent=>2}, "segments", $shard->{num_search_segments} );
my $size = 0;
foreach my $seg ( keys %{ $shard->{segments} }) {
$size += $shard->{segments}{$seg}{size_in_bytes};
}
verbose({kv=>1,indent=>2}, "size_bytes", $size);
my @units = qw(kb mb gb tb);
my $unit = 'b';
my $size_short = $size;
while( $size_short > 1024 && @units ) {
$size_short /= 1024;
$unit = shift @units;
}
verbose({kv=>1,indent=>2}, "size", sprintf("%.2f %s", $size_short, $unit) );
$index_size += $size;
}
my $ratio = $shards > 0 ? sprintf("%.2f", $segments / $shards ) : 0;
my $color = $ratio == 1 ? "green" : "yellow";
output({kv=>1,color=>$color,indent=>1}, "segments_to_shards", $ratio);
# Index size
my @units = qw(kb mb gb tb);
my $unit = 'b';
my $size_short = $index_size;
while( $size_short > 1024 && @units ) {
$size_short /= 1024;
$unit = shift @units;
}
verbose({kv=>1,indent=>1}, "index_size", sprintf("%.2f %s", $size_short, $unit) );
verbose({kv=>1,indent=>1,level=>2}, "index_size_bytes", $index_size );
}
}
sub handle_node {
my $stats = es_node_stats();
output({clear=>1,color=>"cyan"}, "Node Status Check", "-="x20);
my $node_id = (keys %{ $stats->{nodes} })[0];
my $node = $stats->{nodes}{$node_id};
output({kv=>1,color=>"cyan"}, "name", $node->{name});
output({kv=>1}, "index_size", $node->{indices}{store}{size} );
verbose({kv=>1}, "index_size_bytes", $node->{indices}{store}{size_in_bytes} );
verbose({kv=>1}, "docs", $node->{indices}{docs}{count} );
output({kv=>1}, "open_fd", $node->{process}{open_file_descriptors} );
# JVM Stats
output({kv=>1}, "jvm", '');
# Threads
output({indent=>1,kv=>1}, "threads_current", $node->{jvm}{threads}{count});
output({indent=>1,kv=>1}, "threads_peak", $node->{jvm}{threads}{peak_count});
# Memory
output({indent=>1,kv=>1}, "mem", '');
output({indent=>2,kv=>1,color=>"yellow"}, "heap_used", $node->{jvm}{mem}{heap_used});
verbose({indent=>2,kv=>1,color=>"yellow"}, "heap_used_bytes", $node->{jvm}{mem}{heap_used_in_bytes});
output({indent=>2,kv=>1}, "heap_committed", $node->{jvm}{mem}{heap_committed});
verbose({indent=>2,kv=>1}, "heap_committed_bytes", $node->{jvm}{mem}{heap_committed_in_bytes});
# GC
output({indent=>1,kv=>1}, "gc", '');
# GC Details
foreach my $collector ( keys %{ $node->{jvm}{gc}{collectors} } ) {
output({indent=>2,kv=>1}, $collector, '');
output({indent=>3,kv=>1}, "collections", $node->{jvm}{gc}{collectors}{$collector}{collection_count} );
output({indent=>3,kv=>1}, "time", $node->{jvm}{gc}{collectors}{$collector}{collection_time} );
output({indent=>3,kv=>1}, "time_ms", $node->{jvm}{gc}{collectors}{$collector}{collection_time_in_millis} );
}
output({kv=>1}, "requests", $node->{transport}{rx_count});
output({indent=>1,kv=>1}, "rx", $node->{transport}{rx_size});
verbose({indent=>1,kv=>1}, "rx_bytes", $node->{transport}{rx_size_in_bytes});
output({kv=>1}, "responses", $node->{transport}{tx_count});
output({indent=>1,kv=>1}, "tx", $node->{transport}{tx_size});
verbose({indent=>1,kv=>1}, "tx_bytes", $node->{transport}{tx_size_in_bytes});
}
sub handle_settings {
my $stats = es_settings();
output({clear=>1,color=>"cyan"}, "Index Settings Check", "-="x20);
my $colorize = sub {
my ($v) = shift;
return "green" if $v eq 'false';
return "yellow" if $v eq 'not set';
return "red";
};
foreach my $index (sort keys %{ $stats } ) {
my %settings = %{ $stats->{$index}{settings} };
output({color=>'cyan'}, "$index:");
my $value = exists $settings{'index.auto_expand_replicas'} && defined $settings{'index.auto_expand_replicas'} ? $settings{'index.auto_expand_replicas'} : 'not set';
my $color = $colorize->($value);
output({indent=>1,kv=>1,color=>$color}, "auto_expand_replicas", $value);
verbose({indent=>1,kv=>1}, "replicas", $settings{'index.number_of_replicas'});
verbose({indent=>1,kv=>1}, "shards", $settings{'index.number_of_shards'});
}
}
__END__
=pod
=head1 NAME
es-status.pl - Simple ElaticSearch Status Checks
=head1 VERSION
version 8.9
=head1 SYNOPSIS
es-status.pl --health --verbose --color
( run in 2.098 seconds using v1.01-cache-2.11-cpan-c966e8aa7e8 )