FAQ
hello list,

I'm trying to write a script that will search through a directory of trace
logs for an oracle database. From what I understand new files are always
being created in the directory and it's not possible to know the exact
names of the files before they are created. The purpose of this is to
create service checks in nagios. Because you don't know the names of the
files ahead of time traditional plugins like check_logs or
check_logfiles.plwon't work.

Here's what I was able to come up with:

#!/bin/bash



log1='/u01/app/oracle/admin/ecom/udump/*'
crit1=($(grep 'ORA-00600' $log1))
crit2=($(grep 'ORA-04031' $log1))
crit3=($(grep 'ORA-07445' $log1))



if [ $crit1 ] ; then
echo "$crit1 on ecom1"
status=2


elif [ $crit2 ]; then
echo "$crit2 on ecom1"
status=2

elif [ $crit3 ]; then
echo "$crit3 on ecom1"
status=2
fi


echo $status
exit $status


This is a very early version of the scripts, so as you can see I'm echoing
a test message at the end letting you know the exit status.

The problem with this script is that it is only able to detect one error in
the logs. If you echo more than one test phrase into a log file or into
multiple log files it still only picks up one error message.

I was just wondering if anyone on the list might have a suggestion on how
best to accomplish this task?

Thanks
Tim

--
GPG me!!

gpg --keyserver pool.sks-keyservers.net --recv-keys F186197B

Search Discussions

  • Woodchuck at Aug 4, 2012 at 7:23 pm

    On Sat, Aug 04, 2012 at 06:19:39PM -0400, Tim Dunphy wrote:
    hello list,

    I'm trying to write a script that will search through a directory of trace
    logs for an oracle database. From what I understand new files are always
    being created in the directory and it's not possible to know the exact
    names of the files before they are created. The purpose of this is to
    create service checks in nagios. Because you don't know the names of the
    files ahead of time traditional plugins like check_logs or
    check_logfiles.plwon't work.

    Here's what I was able to come up with:

    #!/bin/bash



    log1='/u01/app/oracle/admin/ecom/udump/*'
    crit1=($(grep 'ORA-00600' $log1))
    crit2=($(grep 'ORA-04031' $log1))
    crit3=($(grep 'ORA-07445' $log1))



    if [ $crit1 ] ; then
    echo "$crit1 on ecom1"
    status=2


    elif [ $crit2 ]; then
    echo "$crit2 on ecom1"
    status=2

    elif [ $crit3 ]; then
    echo "$crit3 on ecom1"
    status=2
    fi


    echo $status
    exit $status


    This is a very early version of the scripts, so as you can see I'm echoing
    a test message at the end letting you know the exit status.

    The problem with this script is that it is only able to detect one error in
    the logs. If you echo more than one test phrase into a log file or into
    multiple log files it still only picks up one error message.

    I was just wondering if anyone on the list might have a suggestion on how
    best to accomplish this task?

    Thanks
    Tim
    I'm not sure I understand the problem well. But, perhaps something like
    this

    #!/bin/sh

    for log in /u01...../udump/*
    do
    egrep -e 'ORA-00600|ORA-04031|ORA-07445' ${log}
    done

    this will find any line matching any of the ORA- keys. You can
    capture the return code if you wish.

    Output of egrep could be passed to wc to echo instead a count of the
    errors. Filenames could be produced, too, with a bit more scripting,
    which you can obviously handle.

    Dave
    --
    The principles of accounting are not arbitrary. They are natural law.
    -- Mencius Moldbug
  • Tilman Schmidt at Aug 6, 2012 at 11:52 am

    Am 05.08.2012 00:19, schrieb Tim Dunphy:
    I'm trying to write a script that will search through a directory of trace
    logs [...] and it's not possible to know the exact
    names of the files before they are created. The purpose of this is to
    create service checks in nagios. [...]
    The problem with this script is that it is only able to detect one error in
    the logs. If you echo more than one test phrase into a log file or into
    multiple log files it still only picks up one error message.
    That is a consequence of using the variable=($(...)) + echo idiom.
    If you write your script as

    #!/bin/bash
    log1='/u01/app/oracle/admin/ecom/udump/*'
    grep -e 'ORA-00600' -e 'ORA-04031' -e 'ORA-07445' $log1 && status=2
    echo $status
    exit $status

    sending the result of grep to standard output, you'll get a complete
    list of matches. (If you need a specific output format you can replace
    "grep" with "sed".)

    But I doubt that Nagios will be able to receive more than one error
    from a single plugin invocation. AFAIK it expects a single-line result.

    HTH
    T.

    --
    Tilman Schmidt
    Phoenix Software GmbH
    Bonn, Germany

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
groupcentos @
categoriescentos
postedAug 4, '12 at 6:19p
activeAug 6, '12 at 11:52a
posts3
users3
websitecentos.org
irc#centos

People

Translate

site design / logo © 2022 Grokbase