Skip to content
Snippets Groups Projects
Select Git revision
  • e479a50e0b4834278ccf1d6d53324ef3de56be3b
  • master default protected
  • 7771-harden-postgres-backup
  • pgsql-dump-with-snapshots
  • update-colors
  • update-docs-css
  • usb-repair-stick
  • desktop-notification
  • 7000-corrections
  • db-detector
10 results

restore.sh

Blame
  • check_dns_responsetime 3.16 KiB
    #!/bin/bash
    # ======================================================================
    #
    # Check DNS response time
    # requirements:
    # - netstat
    #
    # ----------------------------------------------------------------------
    # 2020-06-17  v1.0  <axel.hahn@iml.unibe.ch>
    # 2021-11-12  v1.1  <axel.hahn@iml.unibe.ch>  check fqd instead of fixed value
    #                                             test tcp 53 first
    #                                             check result depends on 1st nameserver only
    # ======================================================================
    
    
    . `dirname $0`/inc_pluginfunctions
    tmpfile=/tmp/check_netstat_out_$$
    infofile=/tmp/check_netstat_out_2_$$
    myHost=$( hostname -f )
    
    echo $myHost | cut -f 3- -d "." | grep "\." >/dev/null
    if [ $? -ne 0 ]; then
        ph.setStatus unknown
        ph.status "DNS check for [$myHost] - SKIP: hostname -f returned a FQDN with less than 2 dots"
        ph.exit
    fi
    
    # set default / override from command line params
    typeset -i iWarnLimit=`     ph.getValueWithParam  300 w "$@"`
    typeset -i iCriticalLimit=` ph.getValueWithParam 1000 c "$@"`
    
    rm -f $tmpfile $infofile 2>/dev/null
    
    typeset -i iMax=0
    typeset -i iTime=0
    
    typeset -i iCounter=0
    typeset -i iNotReachable=0
    
    # ----------------------------------------------------------------------
    # MAIN
    # ----------------------------------------------------------------------
    
    
    # --- check param -h
    if [ "$1" = "-h" ]; then
        echo "
        usage: $0 [ -w value -c value -h ]
    
            -w  Warning level
            -c  Critical level
            -h  this help
        "
        exit 0
    fi
    
    for mydns in `grep ^nameserver /etc/resolv.conf | awk '{ print $2 } ' `
    do
        iCounter=$iCounter+1
        typeset -i iSrvMax=0
        echo "" >>$infofile
    
        echo "---------- $iCounter - $mydns " >>$infofile
        # todo loop
        >/dev/tcp/${mydns}/53 >>$infofile 2>&1 
        if [ $? -ne 0 ]; then
          iNotReachable=$iNotReachable+1
          test $iCounter -eq 1 && ph.setStatus critical
          echo "ERROR: ${mydns} is not reachable on tcp 53" >>$infofile
        else
            for i in `seq 5`
            do
                (time nslookup ${myHost} $mydns) >$tmpfile 2>&1
    
                iTime=`cat $tmpfile | grep "^real.*m.*\..*s" | cut -f 2 -d "m" | sed "s#[\.s]##g" | sed "s#^0*##g" `
                echo "$mydns #$i >>> $iTime ms" >>$infofile
                test $iTime -ge $iWarnLimit && cat $tmpfile | grep -vE "^(real|user|sys)" >> $infofile
                test $iTime -gt $iSrvMax && iSrvMax=$iTime
    
            done
            echo "max: $iSrvMax ms" >>$infofile
    
            # --- set status
            test $iCounter -eq 1 && ph.setStatusByLimit $iSrvMax $iWarnLimit $iCriticalLimit
    
            label=`echo $mydns | sed "s#\.#-#g" `
            ph.perfadd "response-$label" "${iSrvMax}"
            test $iSrvMax -gt $iMax && iMax=$iSrvMax
        fi
        test $iCounter -eq 1 && (echo " ^"; echo " |"; echo " +--- 1st nameserver is relevant for total status of the check. Limits are warning=$iWarnLimit and critical=$iCriticalLimit") >>$infofile
        echo "" >>$infofile
    done
    
    
    ph.status "DNS check for $myHost - found maximum was $iMax ms - $iNotReachable of $iCounter nameservers not reachable"
    cat $infofile
    
    rm -f $tmpfile $infofile
    
    
    ph.exit
    
    # ----------------------------------------------------------------------