Skip to content
Snippets Groups Projects
Select Git revision
  • 961c63cd88d562eefbadc5acf8797e96da74ae5c
  • master default protected
  • simple-task/7248-eol-check-add-node-22
  • 6877_check_iml_deployment
4 results

check_onevm

Blame
  • check_dockercontainer_top 3.67 KiB
    #!/bin/bash
    # ======================================================================
    #
    # Check DOCKER PROCESSES
    #
    # requirements:
    # - docker
    # - sudo permissions on docker command
    # - jq
    #
    # ----------------------------------------------------------------------
    # Cli docs:
    # https://docs.docker.com/engine/reference/commandline/docker/
    # ----------------------------------------------------------------------
    # 2024-01-26  v1.0  <axel.hahn@unibe.ch>      init
    # 2024-01-29  v1.1  <axel.hahn@unibe.ch>      fix help;
    # ======================================================================
    
    
    . $(dirname $0)/inc_pluginfunctions
    . $(dirname $0)/inc_dockerfunctions.sh
    
    self_APPVERSION=1.1
    
    # ----------------------------------------------------------------------
    # FUNCTIONS
    # ----------------------------------------------------------------------
    
    
    # show help
    function _showHelp(){
        local _self=$( basename $0 )
        cat <<EOH
    $( ph.showImlHelpHeader )
    
    Show counts and processes of docker containers.
    
    It returns 
      CRITICAL if a created container is not running.
      OK if no container was created yet or all conmtainers are running.
      UNKNOWM if
        - docker or jq were not found
        - docker data were not fetched
        - docker cannot be connected
    
    This check provides performance data.
    
    USAGE:
      $_self [OPTIONS]
    
    OPTIONS:
    
      General:
      -h, --help        this help
      -d, --debug       Debug; Flag: show docker env values.
    
      Connect to docker:
      -p, --path        Custom directory for docker binary
      -t, --target      Custom docker target; value for DOCKER_HOST
                        Needed only if Docker does not run on a unix socket or
                        multiple users run a rootless docker daemon.
    
    EXAMPLES:
      $_self
        Show processes of all containers
    
      $_self -p /usr/bin
        Show processes of all containers. The docker binary will be searched in
        given path first - then in all other dirs of \$PATH
    
      $_self -d
        Show processes of all containers and json with docker env infos.
    
    EOH
    }
    
    # ----------------------------------------------------------------------
    # MAIN
    # ----------------------------------------------------------------------
    
    bOptDebug=0
    
    while [[ "$#" -gt 0 ]]; do case $1 in
        -h|--help)        _showHelp; exit 0;;
        -d|--debug)       bOptDebug=1; shift;;
        -p|--path)        if ! grep ":{$2}:" <<< ":{$PATH}:" >/dev/null; then
                            PATH="$2:$PATH"; 
                          fi
                          shift; shift;;
        -t|--target)      export DOCKER_HOST="$2"; shift; shift;;
        *) echo "ERROR: Unknown parameter: $1"; _showHelp; exit 1;
    esac; done
    
    ph.require "docker"
    ph.require "jq"
    
    _detectDockerenv
    
    # --- fetch data
    
    data=$( sudo -n --preserve-env docker ps --format "{{ json . }}" 2>/dev/null )
    _detectDockererror "$data"
    
    # --- collect data
    
    out=$(
    echo "$data" | while read -r line; do
        id=$(   echo "$line" | jq -r ".ID")
        name=$( echo "$line" | jq -r ".Names")
    
        pslist=$( sudo -n --preserve-env docker top "$id" "-o user,pid,pcpu,pmem,command" 2>/dev/null )
        
        typeset -i ipLines; ipLines=$( echo "$pslist" | wc -l )-1
        echo "----------| $ipLines |-- $name (id: $id) ----- "
        echo "$pslist"
    done
    )
    
    typeset -i iContainers; iContainers=$( echo "$data" | wc -l )
    typeset -i iLines;      iLines=$( echo "$out" | wc -l )
    typeset -i iProcesses;  iProcesses=$(( iLines-iContainers*2 ))
    
    # --- output
    
    ph.perfadd "processes" "$iProcesses" "" ""
    
    ph.status "Docker processes: $iProcesses .. containers: $iContainers"
    echo "$out"
    
    # if -d was given then show debug infos too
    test $bOptDebug -eq 1 && ( echo; echo "DEBUG: full docker system infos as json"; echo "$data" | jq ; _debugInfos)
    
    ph.exit
    
    # ----------------------------------------------------------------------