diff --git a/src/apps/podman/restapi/custom/api.pm b/src/apps/podman/restapi/custom/api.pm index 064624981a..b2a3a27702 100644 --- a/src/apps/podman/restapi/custom/api.pm +++ b/src/apps/podman/restapi/custom/api.pm @@ -1,5 +1,5 @@ # -# Copyright 2024 Centreon (http://www.centreon.com/) +# Copyright 2025 Centreon (http://www.centreon.com/) # # Centreon is a full-fledged industry-strength solution that meets # the needs in IT infrastructure and application monitoring for @@ -23,6 +23,7 @@ package apps::podman::restapi::custom::api; use strict; use warnings; use centreon::plugins::http; +use centreon::plugins::misc; use JSON::XS; sub new { @@ -41,14 +42,14 @@ sub new { if (!defined($options{noptions})) { $options{options}->add_options(arguments => { - 'hostname:s' => { name => 'hostname' }, - 'port:s' => { name => 'port' }, - 'proto:s' => { name => 'proto' }, - 'url-path:s' => { name => 'url_path' }, - 'unix-socket:s' => { name => 'unix_socket' }, - 'timeout:s' => { name => 'timeout' } + 'hostname:s' => { name => 'hostname' }, + 'port:s' => { name => 'port' }, + 'proto:s' => { name => 'proto' }, + 'url-path:s' => { name => 'url_path' }, + 'timeout:s' => { name => 'timeout' } }); # curl --cacert /path/to/ca.crt --cert /path/to/podman.crt --key /path/to/podman.key https://localhost:8080/v5.0.0/libpod/info + # curl --unix-socket $XDG_RUNTIME_DIR/podman/podman.sock 'http://d/v5.0.0/libpod/pods/stats?namesOrIDs=blog' | jq } $options{options}->add_help(package => __PACKAGE__, sections => 'REST API OPTIONS', once => 1); @@ -198,17 +199,66 @@ sub list_pods { return $pods; } +sub get_pod_infos { + my ($self, %options) = @_; + + my $inspect = $self->request( + endpoint => 'pods/' . $options{pod_name} . '/json', + method => 'GET' + ); + + my $stats = $self->request( + endpoint => 'pods/stats?namesOrIDs=' . $options{pod_name}, + method => 'GET' + ); + + my $pod = { + cpu => 0, + memory => 0, + running_containers => 0, + stopped_containers => 0, + paused_containers => 0, + state => @{$inspect}[0]->{State} + }; + + foreach my $container (@{$inspect->[0]->{Containers}}) { + $pod->{running_containers}++ if ($container->{State} eq 'running'); + $pod->{stopped_containers}++ if ($container->{State} eq 'exited'); + $pod->{paused_containers}++ if ($container->{State} eq 'paused'); + } + + foreach my $container (@{$stats}) { + my $cpu = $container->{CPU}; + if ($cpu =~ /^(\d+\.\d+)%/) { + $pod->{cpu} += $1; + } + my $memory = $container->{MemUsage}; + if ($memory =~ /^(\d+\.?\d*)([a-zA-Z]+)/) { + $memory = centreon::plugins::misc::convert_bytes(value => $1, unit => $2); + } + $pod->{memory} += $memory; + } + + return $pod; +} + 1; __END__ =head1 NAME -Podman REST API +Podman REST API. =head1 SYNOPSIS -Podman Rest API custom mode +Podman Rest API custom mode. +To connect to the API with a socket, you must add the following command: +--curl-opt="CURLOPT_UNIX_SOCKET_PATH => 'PATH_TO_THE_SOCKET'" +If you use a certificate, you must add the following commands: +--curl-opt="CURLOPT_CAINFO => 'PATH_TO_THE_CA_CERTIFICATE'" +--curl-opt="CURLOPT_SSLCERT => 'PATH_TO_THE_CERTIFICATE'" +--curl-opt="CURLOPT_SSLKEY => 'PATH_TO_THE_KEY'" =head1 REST API OPTIONS @@ -216,75 +266,23 @@ Podman Rest API custom mode =item B<--hostname> -IP Addr/FQDN of the docker node (can be multiple). +Podman Rest API hostname. =item B<--port> -Port used (default: 8080) +Port used (Default: 443) =item B<--proto> -Specify https if needed (default: 'http') - -=item B<--credentials> - -Specify this option if you access server-status page with authentication - -=item B<--username> - -Specify the username for authentication (mandatory if --credentials is specified) - -=item B<--password> +Specify https if needed (Default: 'https') -Specify the password for authentication (mandatory if --credentials is specified) +=item B<--url-path> -=item B<--basic> - -Specify this option if you access server-status page over basic authentication and don't want a '401 UNAUTHORIZED' error to be logged on your web server. - -Specify this option if you access server-status page over hidden basic authentication or you'll get a '404 NOT FOUND' error. - -(use with --credentials) +Set path to get Podman Rest API information (Default: '/v5.0.0/libpod/') =item B<--timeout> -Threshold for HTTP timeout (default: 10) - -=item B<--cert-file> - -Specify certificate to send to the web server - -=item B<--key-file> - -Specify key to send to the web server - -=item B<--cacert-file> - -Specify root certificate to send to the web server - -=item B<--cert-pwd> - -Specify certificate's password - -=item B<--cert-pkcs12> - -Specify type of certificate (PKCS12) - -=item B<--api-display> - -Print json api. - -=item B<--api-write-display> - -Print json api in a file (to be used with --api-display). - -=item B<--api-read-file> - -Read API from file. - -=item B<--reload-cache-time> - -Time in seconds before reloading list containers cache (default: 300) +Set timeout in seconds (Default: 30) =back diff --git a/src/apps/podman/restapi/mode/listcontainers.pm b/src/apps/podman/restapi/mode/listcontainers.pm index 4d2028459e..40f5beb0c9 100644 --- a/src/apps/podman/restapi/mode/listcontainers.pm +++ b/src/apps/podman/restapi/mode/listcontainers.pm @@ -1,5 +1,5 @@ # -# Copyright 2024 Centreon (http://www.centreon.com/) +# Copyright 2025 Centreon (http://www.centreon.com/) # # Centreon is a full-fledged industry-strength solution that meets # the needs in IT infrastructure and application monitoring for diff --git a/src/apps/podman/restapi/mode/listpods.pm b/src/apps/podman/restapi/mode/listpods.pm index 206f295e65..c1a0c37fb7 100644 --- a/src/apps/podman/restapi/mode/listpods.pm +++ b/src/apps/podman/restapi/mode/listpods.pm @@ -1,5 +1,5 @@ # -# Copyright 2024 Centreon (http://www.centreon.com/) +# Copyright 2025 Centreon (http://www.centreon.com/) # # Centreon is a full-fledged industry-strength solution that meets # the needs in IT infrastructure and application monitoring for diff --git a/src/apps/podman/restapi/mode/podstatus.pm b/src/apps/podman/restapi/mode/podstatus.pm new file mode 100644 index 0000000000..e4e18e0857 --- /dev/null +++ b/src/apps/podman/restapi/mode/podstatus.pm @@ -0,0 +1,220 @@ +# +# Copyright 2025 Centreon (http://www.centreon.com/) +# +# Centreon is a full-fledged industry-strength solution that meets +# the needs in IT infrastructure and application monitoring for +# service performance. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +package apps::podman::restapi::mode::podstatus; + +use base qw(centreon::plugins::templates::counter); + +use strict; +use warnings; +use centreon::plugins::templates::catalog_functions qw(catalog_status_threshold_ng); + +sub set_counters { + my ($self, %options) = @_; + + $self->{maps_counters_type} = [ + { name => 'pod', type => 0 } + ]; + + $self->{maps_counters}->{pod} = [ + { label => 'cpu-usage', + nlabel => 'podman.pod.cpu.usage.percent', + set => { + key_values => [ { name => 'cpu' } ], + output_template => 'CPU: %.2f%%', + perfdatas => [ + { label => 'cpu', + value => 'cpu', + template => '%.2f', + unit => '%', + min => 0, + max => 100 } + ] + } + }, + { label => 'memory-usage', + nlabel => 'podman.pod.memory.usage.bytes', set => { + key_values => [ { name => 'memory' } ], + output_template => 'Memory: %sB', + output_change_bytes => 1, + perfdatas => [ + { label => 'memory', + value => 'memory', + template => '%s', + unit => 'B', + min => 0 } + ] + } + }, + { label => 'running-containers', + nlabel => 'podman.pod.containers.running.count', + set => { + key_values => [ { name => 'containers_running' } ], + output_template => 'Running containers: %s', + perfdatas => [ + { label => 'containers_running', + value => 'containers_running', + template => '%s', + min => 0 } + ] + } + }, + { label => 'stopped-containers', + nlabel => 'podman.pod.containers.stopped.count', + set => { + key_values => [ { name => 'containers_stopped' } ], + output_template => 'Stopped containers: %s', + perfdatas => [ + { label => 'containers_stopped', + value => 'containers_stopped', + template => '%s', + min => 0 } + ] + } + }, + { label => 'paused-containers', + nlabel => 'podman.pod.containers.paused.count', + set => { + key_values => [ { name => 'containers_paused' } ], + output_template => 'Paused containers: %s', + perfdatas => [ + { label => 'containers_paused', + value => 'containers_paused', + template => '%s', + min => 0 } + ] + } + }, + { label => 'state', + type => 2, + set => { + key_values => [ { name => 'state' } ], + output_template => 'State: %s', + closure_custom_perfdata => sub { return 0; }, + closure_custom_threshold_check => \&catalog_status_threshold_ng + } + } + ]; +} + +sub new { + my ($class, %options) = @_; + my $self = $class->SUPER::new(package => __PACKAGE__, %options, force_new_perfdata => 1); + bless $self, $class; + + $options{options}->add_options(arguments => { + 'pod-name:s' => { name => 'pod_name' } + }); + + return $self; +} + +sub check_options { + my ($self, %options) = @_; + $self->SUPER::check_options(%options); + + if (centreon::plugins::misc::is_empty($self->{option_results}->{pod_name})) { + $self->{output}->add_option_msg(short_msg => "Need to specify --pod-name option."); + $self->{output}->option_exit(); + } +} + +sub manage_selection { + my ($self, %options) = @_; + + my $result = $options{custom}->get_pod_infos( + pod_name => $self->{option_results}->{pod_name} + ); + + $self->{pod} = { + cpu => $result->{cpu}, + memory => $result->{memory}, + containers_running => $result->{running_containers}, + containers_stopped => $result->{stopped_containers}, + containers_paused => $result->{paused_containers}, + state => $result->{state} + }; +} + +1; + +__END__ + +=head1 MODE + +Check node status. + +=over 8 + +=item B<--pod-name> + +Pod name. + +=item B<--warning-cpu-usage> + +Threshold warning for CPU usage. + +=item B<--critical-cpu-usage> + +Threshold critical for CPU usage. + +=item B<--warning-memory-usage> + +Threshold warning for memory usage. + +=item B<--critical-memory-usage> + +Threshold critical for memory usage. + +=item B<--warning-running-containers> + +Threshold warning for running containers. + +=item B<--critical-running-containers> + +Threshold critical for running containers. + +=item B<--warning-stopped-containers> + +Threshold warning for stopped containers. + +=item B<--critical-stopped-containers> + +Threshold critical for stopped containers. + +=item B<--warning-paused-containers> + +Threshold warning for paused containers. + +=item B<--critical-paused-containers> + +Threshold critical for paused containers. + +=item B<--warning-state> + +Threshold warning for pod state. + +=item B<--critical-state> + +Threshold critical for pod state. + +=back + +=cut diff --git a/src/apps/podman/restapi/mode/systemstatus.pm b/src/apps/podman/restapi/mode/systemstatus.pm index baf9c48e45..454084869b 100644 --- a/src/apps/podman/restapi/mode/systemstatus.pm +++ b/src/apps/podman/restapi/mode/systemstatus.pm @@ -1,5 +1,5 @@ # -# Copyright 2024 Centreon (http://www.centreon.com/) +# Copyright 2025 Centreon (http://www.centreon.com/) # # Centreon is a full-fledged industry-strength solution that meets # the needs in IT infrastructure and application monitoring for diff --git a/src/apps/podman/restapi/plugin.pm b/src/apps/podman/restapi/plugin.pm index 024a802ca0..91afd62e89 100644 --- a/src/apps/podman/restapi/plugin.pm +++ b/src/apps/podman/restapi/plugin.pm @@ -31,10 +31,10 @@ sub new { $self->{version} = '1.0'; $self->{modes} = { - #'container-usage' => 'apps::podman::restapi::mode::containerusage', + 'container-usage' => 'apps::podman::restapi::mode::containerusage', 'list-containers' => 'apps::podman::restapi::mode::listcontainers', 'list-pods' => 'apps::podman::restapi::mode::listpods', - #'pod-status' => 'apps::podman::restapi::mode::podstatus', + 'pod-status' => 'apps::podman::restapi::mode::podstatus', 'system-status' => 'apps::podman::restapi::mode::systemstatus' }; diff --git a/tests/apps/podman/restapi/podman.json b/tests/apps/podman/restapi/podman.json index 55d545f24f..129a1dd672 100644 --- a/tests/apps/podman/restapi/podman.json +++ b/tests/apps/podman/restapi/podman.json @@ -94,6 +94,64 @@ } ], "responseMode": null + }, + { + "uuid": "29a8645f-5b09-44e3-a9af-130eb8674342", + "type": "http", + "documentation": "", + "method": "get", + "endpoint": "v5.0.0/libpod/pods/stats", + "responses": [ + { + "uuid": "f6d96ff7-cc6e-468e-b284-cd3646d6bde9", + "body": "[\n {\n \"CPU\": \"0.00%\",\n \"MemUsage\": \"49.15kB / 2.052GB\",\n \"MemUsageBytes\": \"48KiB / 1.911GiB\",\n \"Mem\": \"0.00%\",\n \"NetIO\": \"4.718kB / 1.188kB\",\n \"BlockIO\": \"-- / --\",\n \"PIDS\": \"1\",\n \"Pod\": \"5de0484a9d3b\",\n \"CID\": \"465c966f5696\",\n \"Name\": \"5de0484a9d3b-infra\"\n },\n {\n \"CPU\": \"1.43%\",\n \"MemUsage\": \"450MB / 2.052GB\",\n \"MemUsageBytes\": \"429.1MiB / 1.911GiB\",\n \"Mem\": \"21.93%\",\n \"NetIO\": \"4.718kB / 1.188kB\",\n \"BlockIO\": \"0B / 123.9kB\",\n \"PIDS\": \"35\",\n \"Pod\": \"5de0484a9d3b\",\n \"CID\": \"b9434955e2b8\",\n \"Name\": \"mysql\"\n },\n {\n \"CPU\": \"0.03%\",\n \"MemUsage\": \"9.363MB / 2.052GB\",\n \"MemUsageBytes\": \"8.93MiB / 1.911GiB\",\n \"Mem\": \"0.46%\",\n \"NetIO\": \"4.718kB / 1.188kB\",\n \"BlockIO\": \"3.047MB / 82.37MB\",\n \"PIDS\": \"6\",\n \"Pod\": \"5de0484a9d3b\",\n \"CID\": \"bde2cd1fa1af\",\n \"Name\": \"wordpress\"\n }\n]", + "latency": 0, + "statusCode": 200, + "label": "", + "headers": [], + "bodyType": "INLINE", + "filePath": "", + "databucketID": "", + "sendFileAsBody": false, + "rules": [], + "rulesOperator": "OR", + "disableTemplating": false, + "fallbackTo404": false, + "default": true, + "crudKey": "id", + "callbacks": [] + } + ], + "responseMode": null + }, + { + "uuid": "842a425b-7697-4c8d-8caf-1cd394c7fecc", + "type": "http", + "documentation": "", + "method": "get", + "endpoint": "v5.0.0/libpod/pods/blog/json", + "responses": [ + { + "uuid": "3b686944-9296-46ea-bfee-9ccdd90683f9", + "body": "[\n {\n \"Id\": \"5de0484a9d3bd4d2f0626292c6734fcf7de9059f6a6802298ed80c3c46b7207a\",\n \"Name\": \"blog\",\n \"Created\": \"2025-02-04T09:21:22.076484809+01:00\",\n \"CreateCommand\": [\n \"podman\",\n \"pod\",\n \"create\",\n \"--name\",\n \"blog\",\n \"--infra\",\n \"--publish\",\n \"8080:80\",\n \"--network\",\n \"bridge\"\n ],\n \"ExitPolicy\": \"continue\",\n \"State\": \"Degraded\",\n \"Hostname\": \"\",\n \"CreateCgroup\": true,\n \"CgroupParent\": \"user.slice\",\n \"CgroupPath\": \"user.slice/user-501.slice/user@501.service/user.slice/user-libpod_pod_5de0484a9d3bd4d2f0626292c6734fcf7de9059f6a6802298ed80c3c46b7207a.slice\",\n \"CreateInfra\": true,\n \"InfraContainerID\": \"465c966f56967d1e2cee42b8af6271375483875d1547e8a41238c5dbca9d91c4\",\n \"InfraConfig\": {\n \"PortBindings\": {\n \"80/tcp\": [\n {\n \"HostIp\": \"0.0.0.0\",\n \"HostPort\": \"8080\"\n }\n ]\n },\n \"HostNetwork\": false,\n \"StaticIP\": \"\",\n \"StaticMAC\": \"\",\n \"NoManageResolvConf\": false,\n \"DNSServer\": null,\n \"DNSSearch\": null,\n \"DNSOption\": null,\n \"NoManageHosts\": false,\n \"HostAdd\": null,\n \"Networks\": [\n \"podman\"\n ],\n \"NetworkOptions\": null,\n \"pid_ns\": \"private\",\n \"userns\": \"host\",\n \"uts_ns\": \"private\"\n },\n \"SharedNamespaces\": [\n \"uts\",\n \"ipc\",\n \"net\"\n ],\n \"NumContainers\": 3,\n \"Containers\": [\n {\n \"Id\": \"465c966f56967d1e2cee42b8af6271375483875d1547e8a41238c5dbca9d91c4\",\n \"Name\": \"5de0484a9d3b-infra\",\n \"State\": \"running\"\n },\n {\n \"Id\": \"b9434955e2b87c64e1d3b1ffb85768a9639486593765120c286cfebb2b04c830\",\n \"Name\": \"mysql\",\n \"State\": \"running\"\n },\n {\n \"Id\": \"bde2cd1fa1aff866cf5edd03d84677ed86792c9f1898861567ce4b1a1ca0a053\",\n \"Name\": \"wordpress\",\n \"State\": \"running\"\n },\n {\n \"Id\": \"bde2cd1fa1aff866cf5edd03d84677ed86792c9f1898861567ce4b1a1ca0a054\",\n \"Name\": \"run\",\n \"State\": \"running\"\n },\n {\n \"Id\": \"bde2cd1fa1aff866cf5edd03d84677ed86792c9f1898861567ce4b1a1ca0a053\",\n \"Name\": \"wordpress\",\n \"State\": \"running\"\n },\n {\n \"Id\": \"bde2cd1fa1aff866cf5edd03d84677ed86792c9f1898861567ce4b1a1ca0a063\",\n \"Name\": \"exit1\",\n \"State\": \"exited\"\n },\n {\n \"Id\": \"bde2cd1fa1aff866cf5edd03d84677ed86792c9f1898861567ce4b1a1ca0a064\",\n \"Name\": \"exit2\",\n \"State\": \"exited\"\n },\n {\n \"Id\": \"bde2cd1fa1aff866cf5edd03d84677ed86792c9f1898861567ce4b1a1ca0a073\",\n \"Name\": \"paused\",\n \"State\": \"paused\"\n }\n ],\n \"LockNumber\": 0\n }\n]", + "latency": 0, + "statusCode": 200, + "label": "", + "headers": [], + "bodyType": "INLINE", + "filePath": "", + "databucketID": "", + "sendFileAsBody": false, + "rules": [], + "rulesOperator": "OR", + "disableTemplating": false, + "fallbackTo404": false, + "default": true, + "crudKey": "id", + "callbacks": [] + } + ], + "responseMode": null } ], "rootChildren": [ @@ -108,6 +166,14 @@ { "type": "route", "uuid": "f8ac568a-c7e9-4116-9a2c-9de982ca9950" + }, + { + "type": "route", + "uuid": "29a8645f-5b09-44e3-a9af-130eb8674342" + }, + { + "type": "route", + "uuid": "842a425b-7697-4c8d-8caf-1cd394c7fecc" } ], "proxyMode": false, diff --git a/tests/apps/podman/restapi/podstatus.robot b/tests/apps/podman/restapi/podstatus.robot new file mode 100644 index 0000000000..ba854edb63 --- /dev/null +++ b/tests/apps/podman/restapi/podstatus.robot @@ -0,0 +1,47 @@ +*** Settings *** +Documentation Check the Podman pod status + +Resource ${CURDIR}${/}..${/}..${/}..${/}resources/import.resource + +Suite Setup Start Mockoon ${MOCKOON_JSON} +Suite Teardown Stop Mockoon +Test Timeout 120s + +*** Variables *** +${MOCKOON_JSON} ${CURDIR}${/}podman.json + +${cmd} ${CENTREON_PLUGINS} +... --plugin=apps::podman::restapi::plugin +... --custommode=api +... --mode=pod-status +... --hostname=${HOSTNAME} +... --port=${APIPORT} +... --proto=http +... --pod-name=blog + + +*** Test Cases *** +System status ${tc} + [Documentation] Check the pod status + [Tags] apps podman restapi + + ${command} Catenate + ... ${cmd} + ... ${extraoptions} + + Ctn Run Command And Check Result As Strings ${command} ${expected_result} + + Examples: tc extraoptions expected_result -- + ... 1 ${EMPTY} OK: CPU: 1.46%, Memory: 459.41B, Running containers: 5, Stopped containers: 2, Paused containers: 1, State: Degraded | 'podman.pod.cpu.usage.percent'=1.46%;;;0;100 'podman.pod.memory.usage.bytes'=481727346.688B;;;0; 'podman.pod.containers.running.count'=5;;;0; 'podman.pod.containers.stopped.count'=2;;;0; 'podman.pod.containers.paused.count'=1;;;0; + ... 2 --warning-cpu-usage=1 WARNING: CPU: 1.46% | 'podman.pod.cpu.usage.percent'=1.46%;0:1;;0;100 'podman.pod.memory.usage.bytes'=481727346.688B;;;0; 'podman.pod.containers.running.count'=5;;;0; 'podman.pod.containers.stopped.count'=2;;;0; 'podman.pod.containers.paused.count'=1;;;0; + ... 3 --critical-cpu-usage=1 CRITICAL: CPU: 1.46% | 'podman.pod.cpu.usage.percent'=1.46%;;0:1;0;100 'podman.pod.memory.usage.bytes'=481727346.688B;;;0; 'podman.pod.containers.running.count'=5;;;0; 'podman.pod.containers.stopped.count'=2;;;0; 'podman.pod.containers.paused.count'=1;;;0; + ... 4 --warning-memory-usage=250000000 WARNING: Memory: 459.41B | 'podman.pod.cpu.usage.percent'=1.46%;;;0;100 'podman.pod.memory.usage.bytes'=481727346.688B;0:250000000;;0; 'podman.pod.containers.running.count'=5;;;0; 'podman.pod.containers.stopped.count'=2;;;0; 'podman.pod.containers.paused.count'=1;;;0; + ... 5 --critical-memory-usage=400000000 CRITICAL: Memory: 459.41B | 'podman.pod.cpu.usage.percent'=1.46%;;;0;100 'podman.pod.memory.usage.bytes'=481727346.688B;;0:400000000;0; 'podman.pod.containers.running.count'=5;;;0; 'podman.pod.containers.stopped.count'=2;;;0; 'podman.pod.containers.paused.count'=1;;;0; + ... 6 --warning-running-containers=3 WARNING: Running containers: 5 | 'podman.pod.cpu.usage.percent'=1.46%;;;0;100 'podman.pod.memory.usage.bytes'=481727346.688B;;;0; 'podman.pod.containers.running.count'=5;0:3;;0; 'podman.pod.containers.stopped.count'=2;;;0; 'podman.pod.containers.paused.count'=1;;;0; + ... 7 --critical-running-containers=3 CRITICAL: Running containers: 5 | 'podman.pod.cpu.usage.percent'=1.46%;;;0;100 'podman.pod.memory.usage.bytes'=481727346.688B;;;0; 'podman.pod.containers.running.count'=5;;0:3;0; 'podman.pod.containers.stopped.count'=2;;;0; 'podman.pod.containers.paused.count'=1;;;0; + ... 8 --warning-stopped-containers=0 WARNING: Stopped containers: 2 | 'podman.pod.cpu.usage.percent'=1.46%;;;0;100 'podman.pod.memory.usage.bytes'=481727346.688B;;;0; 'podman.pod.containers.running.count'=5;;;0; 'podman.pod.containers.stopped.count'=2;0:0;;0; 'podman.pod.containers.paused.count'=1;;;0; + ... 9 --critical-stopped-containers=1 CRITICAL: Stopped containers: 2 | 'podman.pod.cpu.usage.percent'=1.46%;;;0;100 'podman.pod.memory.usage.bytes'=481727346.688B;;;0; 'podman.pod.containers.running.count'=5;;;0; 'podman.pod.containers.stopped.count'=2;;0:1;0; 'podman.pod.containers.paused.count'=1;;;0; + ... 10 --warning-paused-containers=0 WARNING: Paused containers: 1 | 'podman.pod.cpu.usage.percent'=1.46%;;;0;100 'podman.pod.memory.usage.bytes'=481727346.688B;;;0; 'podman.pod.containers.running.count'=5;;;0; 'podman.pod.containers.stopped.count'=2;;;0; 'podman.pod.containers.paused.count'=1;0:0;;0; + ... 11 --critical-paused-containers=0 CRITICAL: Paused containers: 1 | 'podman.pod.cpu.usage.percent'=1.46%;;;0;100 'podman.pod.memory.usage.bytes'=481727346.688B;;;0; 'podman.pod.containers.running.count'=5;;;0; 'podman.pod.containers.stopped.count'=2;;;0; 'podman.pod.containers.paused.count'=1;;0:0;0; + ... 12 --warning-state='\\\%{state} =~ /Degraded/' WARNING: State: Degraded | 'podman.pod.cpu.usage.percent'=1.46%;;;0;100 'podman.pod.memory.usage.bytes'=481727346.688B;;;0; 'podman.pod.containers.running.count'=5;;;0; 'podman.pod.containers.stopped.count'=2;;;0; 'podman.pod.containers.paused.count'=1;;;0; + ... 13 --critical-state='\\\%{state} =~ /Degraded/' CRITICAL: State: Degraded | 'podman.pod.cpu.usage.percent'=1.46%;;;0;100 'podman.pod.memory.usage.bytes'=481727346.688B;;;0; 'podman.pod.containers.running.count'=5;;;0; 'podman.pod.containers.stopped.count'=2;;;0; 'podman.pod.containers.paused.count'=1;;;0;