enh prometheus help messages

This commit is contained in:
Colin Gagnaire 2019-02-05 14:36:33 +01:00
parent d45b4de0da
commit 84f929bd9f
16 changed files with 169 additions and 20 deletions

View File

@ -100,6 +100,7 @@ sub new {
"critical-status:s" => { name => 'critical_status', default => '%{status} !~ /running/ || %{state} !~ /ready/' }, "critical-status:s" => { name => 'critical_status', default => '%{status} !~ /running/ || %{state} !~ /ready/' },
"extra-filter:s@" => { name => 'extra_filter' }, "extra-filter:s@" => { name => 'extra_filter' },
"metric-overload:s@" => { name => 'metric_overload' }, "metric-overload:s@" => { name => 'metric_overload' },
"filter-counters:s" => { name => 'filter_counters' },
}); });
return $self; return $self;
@ -236,10 +237,25 @@ Example : --extra-filter='name=~".*pretty.*"'
=item B<--metric-overload> =item B<--metric-overload>
Overload default metrics name (Can be multiple, metric can be 'status') Overload default metrics name (Can be multiple)
Example : --metric-overload='metric,^my_metric_name$' Example : --metric-overload='metric,^my_metric_name$'
Default :
- ready: ^kube_pod_container_status_ready$
- running: ^kube_pod_container_status_running$
- terminated: ^kube_pod_container_status_terminated$
- terminated_reason: ^kube_pod_container_status_terminated_reason$
- waiting: ^kube_pod_container_status_waiting$
- waiting_reason: ^kube_pod_container_status_waiting_reason$
- restarts: ^kube_pod_container_status_restarts_total$
=item B<--filter-counters>
Only display some counters (regexp can be used).
Example: --filter-counters='status'
=back =back
=cut =cut

View File

@ -231,10 +231,20 @@ Example : --extra-filter='name=~".*pretty.*"'
=item B<--metric-overload> =item B<--metric-overload>
Overload default metrics name (Can be multiple, metric can be 'status') Overload default metrics name (Can be multiple)
Example : --metric-overload='metric,^my_metric_name$' Example : --metric-overload='metric,^my_metric_name$'
Default :
- desired: ^kube_daemonset_status_desired_number_scheduled$
- current: ^kube_daemonset_status_current_number_scheduled$
- available: ^kube_daemonset_status_number_available$
- unavailable: ^kube_daemonset_status_number_unavailable$
- up_to_date: ^kube_daemonset_updated_number_scheduled$
- ready: ^kube_daemonset_status_number_ready$
- misscheduled: ^kube_daemonset_status_number_misscheduled$
=back =back
=cut =cut

View File

@ -214,10 +214,18 @@ Example : --extra-filter='name=~".*pretty.*"'
=item B<--metric-overload> =item B<--metric-overload>
Overload default metrics name (Can be multiple, metric can be 'status') Overload default metrics name (Can be multiple)
Example : --metric-overload='metric,^my_metric_name$' Example : --metric-overload='metric,^my_metric_name$'
Default :
- desired: ^kube_deployment_spec_replicas$
- current: ^kube_deployment_status_replicas$
- available: ^kube_deployment_status_replicas_available$
- unavailable: ^kube_deployment_status_replicas_unavailable$
- up_to_date: ^kube_deployment_status_replicas_updated$
=back =back
=cut =cut

View File

@ -205,10 +205,19 @@ Example : --extra-filter='name=~".*pretty.*"'
=item B<--metric-overload> =item B<--metric-overload>
Overload default metrics name (Can be multiple, metric can be 'status') Overload default metrics name (Can be multiple)
Example : --metric-overload='metric,^my_metric_name$' Example : --metric-overload='metric,^my_metric_name$'
Default :
- status: ^kube_namespace_status_phase$
=item B<--filter-counters>
Only display some counters (regexp can be used).
Example: --filter-counters='status'
=back =back
=cut =cut

View File

@ -258,10 +258,22 @@ Example : --extra-filter='name=~".*pretty.*"'
=item B<--metric-overload> =item B<--metric-overload>
Overload default metrics name (Can be multiple, metric can be 'status') Overload default metrics name (Can be multiple)
Example : --metric-overload='metric,^my_metric_name$' Example : --metric-overload='metric,^my_metric_name$'
Default :
- status: ^kube_node_status_condition$
- unschedulable: ^kube_node_spec_unschedulable$
- capacity: ^kube_node_status_capacity_pods$
- allocatable: ^kube_node_status_allocatable_pods$
=item B<--filter-counters>
Only display some counters (regexp can be used).
Example: --filter-counters='status'
=back =back
=cut =cut

View File

@ -71,10 +71,12 @@ sub new {
$self->{version} = '1.0'; $self->{version} = '1.0';
$options{options}->add_options(arguments => $options{options}->add_options(arguments =>
{ {
"cpu-attribute:s" => { name => 'cpu_attribute', default => 'cpu="total"' },
"container:s" => { name => 'container', default => 'container_name!~".*POD.*"' }, "container:s" => { name => 'container', default => 'container_name!~".*POD.*"' },
"pod:s" => { name => 'pod', default => 'pod_name=~".*"' }, "pod:s" => { name => 'pod', default => 'pod_name=~".*"' },
"extra-filter:s@" => { name => 'extra_filter' }, "extra-filter:s@" => { name => 'extra_filter' },
"metric-overload:s@" => { name => 'metric_overload' }, "metric-overload:s@" => { name => 'metric_overload' },
"filter-counters:s" => { name => 'filter_counters' },
}); });
return $self; return $self;
@ -117,7 +119,7 @@ sub manage_selection {
$self->{containers} = {}; $self->{containers} = {};
my $results = $options{custom}->query_range(queries => [ 'label_replace((irate({__name__=~"' . $self->{metrics}->{usage} . '",' . my $results = $options{custom}->query_range(queries => [ 'label_replace((irate({__name__=~"' . $self->{metrics}->{usage} . '",' .
'cpu="total",' . $self->{option_results}->{cpu_attribute} . ',' .
$self->{option_results}->{container} . ',' . $self->{option_results}->{container} . ',' .
$self->{option_results}->{pod} . $self->{option_results}->{pod} .
$self->{extra_filter} . '}[' . $self->{prom_step} . '])) * 100, "__name__", "usage", "", "")', $self->{extra_filter} . '}[' . $self->{prom_step} . '])) * 100, "__name__", "usage", "", "")',
@ -152,6 +154,10 @@ Check containers CPU usage and throttled.
=over 8 =over 8
=item B<--cpu-attribute>
Set the cpu attribute to match element (Must be a PromQL filter, Default: 'cpu="total"')
=item B<--container> =item B<--container>
Filter on a specific container (Must be a PromQL filter, Default: 'container_name!~".*POD.*"') Filter on a specific container (Must be a PromQL filter, Default: 'container_name!~".*POD.*"')
@ -178,10 +184,20 @@ Example : --extra-filter='name=~".*pretty.*"'
=item B<--metric-overload> =item B<--metric-overload>
Overload default metrics name (Can be multiple, metric can be 'usage', 'throttled') Overload default metrics name (Can be multiple)
Example : --metric-overload='metric,^my_metric_name$' Example : --metric-overload='metric,^my_metric_name$'
Default :
- throttled: ^container_cpu_cfs_throttled_seconds_total.*
- usage: ^container_cpu_usage_seconds_total.*
=item B<--filter-counters>
Only display some counters (regexp can be used).
Example: --filter-counters='throttled'
=back =back
=cut =cut

View File

@ -159,10 +159,14 @@ Example : --extra-filter='name=~".*pretty.*"'
=item B<--metric-overload> =item B<--metric-overload>
Overload default metrics name (Can be multiple, metric can be 'load') Overload default metrics name (Can be multiple)
Example : --metric-overload='metric,^my_metric_name$' Example : --metric-overload='metric,^my_metric_name$'
Default :
- load: ^container_cpu_load_average_10s$
=back =back
=cut =cut

View File

@ -175,6 +175,7 @@ sub new {
"extra-filter:s@" => { name => 'extra_filter' }, "extra-filter:s@" => { name => 'extra_filter' },
"units:s" => { name => 'units', default => '%' }, "units:s" => { name => 'units', default => '%' },
"metric-overload:s@" => { name => 'metric_overload' }, "metric-overload:s@" => { name => 'metric_overload' },
"filter-counters:s" => { name => 'filter_counters' },
}); });
return $self; return $self;
@ -298,11 +299,24 @@ Example : --extra-filter='name=~".*pretty.*"'
=item B<--metric-overload> =item B<--metric-overload>
Overload default metrics name (Can be multiple, metric can be 'limits', Overload default metrics name (Can be multiple)
'usage', 'working', 'cache', 'rss', 'swap'.)
Example : --metric-overload='metric,^my_metric_name$' Example : --metric-overload='metric,^my_metric_name$'
Default :
- limits: ^container_spec_memory_limit_bytes.*
- usage: ^container_memory_usage_bytes.*
- working: ^container_memory_working_set_bytes.*
- cache: ^container_memory_cache.*
- rss: ^container_memory_rss.*
- swap: ^container_memory_swap.*
=item B<--filter-counters>
Only display some counters (regexp can be used).
Example: --filter-counters='usage'
=back =back
=cut =cut

View File

@ -270,10 +270,15 @@ Example : --extra-filter='name=~".*pretty.*"'
=item B<--metric-overload> =item B<--metric-overload>
Overload default metrics name (Can be multiple, metric can be 'used', 'limit') Overload default metrics name (Can be multiple)
Example : --metric-overload='metric,^my_metric_name$' Example : --metric-overload='metric,^my_metric_name$'
Default :
- used: ^container_fs_usage_bytes.*
- limit: ^container_fs_limit_bytes.*
=back =back
=cut =cut

View File

@ -203,10 +203,14 @@ Example : --extra-filter='name=~".*pretty.*"'
=item B<--metric-overload> =item B<--metric-overload>
Overload default metrics name (Can be multiple, metric can be 'tasks_state') Overload default metrics name (Can be multiple)
Example : --metric-overload='metric,^my_metric_name$' Example : --metric-overload='metric,^my_metric_name$'
Default :
- tasks_state: ^container_tasks_state$
=back =back
=cut =cut

View File

@ -99,6 +99,7 @@ sub new {
"cpu:s" => { name => 'cpu', default => 'cpu=~".*"' }, "cpu:s" => { name => 'cpu', default => 'cpu=~".*"' },
"extra-filter:s@" => { name => 'extra_filter' }, "extra-filter:s@" => { name => 'extra_filter' },
"metric-overload:s@" => { name => 'metric_overload' }, "metric-overload:s@" => { name => 'metric_overload' },
"filter-counters:s" => { name => 'filter_counters' },
}); });
return $self; return $self;
@ -200,10 +201,19 @@ Example : --extra-filter='name=~".*pretty.*"'
=item B<--metric-overload> =item B<--metric-overload>
Overload default metrics name (Can be multiple, metric can be 'cpu') Overload default metrics name (Can be multiple)
Example : --metric-overload='metric,^my_metric_name$' Example : --metric-overload='metric,^my_metric_name$'
Default :
- cpu: ^node_cpu.*
=item B<--filter-counters>
Only display some counters (regexp can be used).
Example: --filter-counters='node'
=back =back
=cut =cut

View File

@ -226,6 +226,7 @@ sub new {
"type:s" => { name => 'type', default => 'mode=~".*"' }, "type:s" => { name => 'type', default => 'mode=~".*"' },
"extra-filter:s@" => { name => 'extra_filter' }, "extra-filter:s@" => { name => 'extra_filter' },
"metric-overload:s@" => { name => 'metric_overload' }, "metric-overload:s@" => { name => 'metric_overload' },
"filter-counters:s" => { name => 'filter_counters' },
}); });
return $self; return $self;
@ -340,10 +341,19 @@ Example : --extra-filter='name=~".*pretty.*"'
=item B<--metric-overload> =item B<--metric-overload>
Overload default metrics name (Can be multiple, metric can be 'cpu') Overload default metrics name (Can be multiple)
Example : --metric-overload='metric,^my_metric_name$' Example : --metric-overload='metric,^my_metric_name$'
Default :
- cpu: ^node_cpu.*
=item B<--filter-counters>
Only display some counters (regexp can be used).
Example: --filter-counters='wait'
=back =back
=cut =cut

View File

@ -83,6 +83,7 @@ sub new {
"instance:s" => { name => 'instance', default => 'instance=~".*"' }, "instance:s" => { name => 'instance', default => 'instance=~".*"' },
"extra-filter:s@" => { name => 'extra_filter' }, "extra-filter:s@" => { name => 'extra_filter' },
"metric-overload:s@" => { name => 'metric_overload' }, "metric-overload:s@" => { name => 'metric_overload' },
"filter-counters:s" => { name => 'filter_counters' },
}); });
return $self; return $self;
@ -175,10 +176,21 @@ Example : --extra-filter='name=~".*pretty.*"'
=item B<--metric-overload> =item B<--metric-overload>
Overload default metrics name (Can be multiple, metric can be 'load1', 'load5', 'load15') Overload default metrics name (Can be multiple)
Example : --metric-overload='metric,^my_metric_name$' Example : --metric-overload='metric,^my_metric_name$'
Default :
- load1: ^node_load1$
- load5: ^node_load5$
- load15: ^node_load15$
=item B<--filter-counters>
Only display some counters (regexp can be used).
Example: --filter-counters='load15'
=back =back
=cut =cut

View File

@ -143,6 +143,7 @@ sub new {
"units:s" => { name => 'units', default => '%' }, "units:s" => { name => 'units', default => '%' },
"extra-filter:s@" => { name => 'extra_filter' }, "extra-filter:s@" => { name => 'extra_filter' },
"metric-overload:s@" => { name => 'metric_overload' }, "metric-overload:s@" => { name => 'metric_overload' },
"filter-counters:s" => { name => 'filter_counters' },
}); });
return $self; return $self;
@ -245,13 +246,25 @@ Example : --extra-filter='name=~".*pretty.*"'
=item B<--metric-overload> =item B<--metric-overload>
Overload default metrics name (Can be multiple, metric can be 'total', 'available', 'cached', 'buffer') Overload default metrics name (Can be multiple)
Example : --metric-overload='metric,^my_metric_name$' Example : --metric-overload='metric,^my_metric_name$'
By default, 'node_memory_MemFree' node's metric will be used for 'available' metric as it is By default, 'node_memory_MemFree' node's metric will be used for 'available' metric as it is
more commonly used for now. The best being to use 'node_memory_MemAvailable' in the future. more commonly used for now. The best being to use 'node_memory_MemAvailable' in the future.
Default :
- total: ^node_memory_MemTotal.*
- available: ^node_memory_MemFree.*
- cached: ^node_memory_Cached.*
- buffer: ^node_memory_Buffers.*
=item B<--filter-counters>
Only display some counters (regexp can be used).
Example: --filter-counters='usage'
=back =back
=cut =cut

View File

@ -267,10 +267,15 @@ Example : --extra-filter='name=~".*pretty.*"'
=item B<--metric-overload> =item B<--metric-overload>
Overload default metrics name (Can be multiple, metric can be 'free', 'size') Overload default metrics name (Can be multiple)
Example : --metric-overload='metric,^my_metric_name$' Example : --metric-overload='metric,^my_metric_name$'
Default :
- free: ^node_filesystem_free.*
- size: ^node_filesystem_size.*
=back =back
=cut =cut

View File

@ -161,8 +161,6 @@ sub query_range {
my $uri = URI::Encode->new({encode_reserved => 1}); my $uri = URI::Encode->new({encode_reserved => 1});
foreach my $query (@{$options{queries}}) { foreach my $query (@{$options{queries}}) {
$self->{output}->output_add(long_msg => sprintf("Query range: '/query_range?query=%s&start=%s&end=%s&step=%s'",
$query, $start_time, $end_time, $options{step}), debug => 1);
my $result = $self->get_endpoint(url_path => '/query_range?query=' . $uri->encode($query) . my $result = $self->get_endpoint(url_path => '/query_range?query=' . $uri->encode($query) .
'&start=' . $start_time . '&end=' . $end_time . '&step=' . $options{step}); '&start=' . $start_time . '&end=' . $end_time . '&step=' . $options{step});
push @{$data}, @{$result->{result}}; push @{$data}, @{$result->{result}};
@ -178,7 +176,6 @@ sub query {
my $uri = URI::Encode->new({encode_reserved => 1}); my $uri = URI::Encode->new({encode_reserved => 1});
foreach my $query (@{$options{queries}}) { foreach my $query (@{$options{queries}}) {
$self->{output}->output_add(long_msg => sprintf("Query: '/query?query=%s'", $query), debug => 1);
my $result = $self->get_endpoint(url_path => '/query?query=' . $uri->encode($query)); my $result = $self->get_endpoint(url_path => '/query?query=' . $uri->encode($query));
push @{$data}, @{$result->{result}}; push @{$data}, @{$result->{result}};
} }
@ -190,6 +187,10 @@ sub get_endpoint {
my ($self, %options) = @_; my ($self, %options) = @_;
$self->settings; $self->settings;
$self->{output}->output_add(long_msg => "Query URL: '" . $self->{proto} . "://" . $self->{hostname} .
$self->{url_path} . $options{url_path} . "'", debug => 1);
my $response = $self->{http}->request(url_path => $self->{url_path} . $options{url_path}); my $response = $self->{http}->request(url_path => $self->{url_path} . $options{url_path});
my $content; my $content;