Projet

Général

Profil

Paste
Télécharger au format
Statistiques
| Branche: | Révision:

root / plugins / healthcheck / healthcheck_log @ 8589c6df

Historique | Voir | Annoter | Télécharger (4,08 ko)

1
#!/bin/bash
2
#
3
#healthcheck on munin
4
#egrep system log and alert.
5
#
6
#programed by rti (hiroyuki fujie) super.rti@gmail.com @super_rti
7
#LICENSE: NYSL (public domain)
8
#
9
#
10
#config file
11
#      /etc/munin/plugin-conf.d/munin-node
12
#
13
#example minimum config
14
#---------------------------------------------------
15
#[healthcheck_log]
16
#user root
17
#env.log_1  /var/log/messages
18
#---------------------------------------------------
19
#
20
#check two log
21
#---------------------------------------------------
22
#[healthcheck_log]
23
#user root
24
#env.log_1  /var/log/messages
25
#env.log_2  /var/log/syslog
26
#---------------------------------------------------
27
#
28
#check two three
29
#---------------------------------------------------
30
#[healthcheck_log]
31
#user root
32
#env.log_1  /var/log/messages
33
#env.log_2  /var/log/syslog
34
#env.log_3  /var/log/dmesg
35
#---------------------------------------------------
36
#
37
#set name
38
#---------------------------------------------------
39
#[healthcheck_log]
40
#user root
41
#env.log_1  /var/log/messages
42
#env.name_1 my_server_messages
43
#---------------------------------------------------
44
#
45
#set egrep string
46
#---------------------------------------------------
47
#[healthcheck_log]
48
#user root
49
#env.log_1  /var/log/messages
50
#env.grep_1 alert|warning
51
#---------------------------------------------------
52
#
53
#set egrep string
54
#---------------------------------------------------
55
#[healthcheck_log]
56
#user root
57
#env.log_1  /var/log/messages
58
#env.grep_1 alert|warning
59
#---------------------------------------------------
60
#
61
#full option
62
#/etc/munin/plugin-conf.d/munin-node
63
#---------------------------------------------------
64
#[healthcheck_log]
65
#user root                          #log file is read only root user.
66
#env.log_1  /var/log/messages       #target log filename
67
#env.grep_1 critical|error          #egrep string.
68
                                    #default by critical|error|warning|crash|fatal|kernel
69
#---------------------------------------------------
70
#
71

    
72

    
73
#edakari speed up.
74
CHECKMAX=`env | grep log_ | wc -l`
75
let CHECKMAX="$CHECKMAX + 1"
76
MINUTE_BY_GREP_RANGE=10
77

    
78
if [ "$1" = "autoconf" ]; then
79
    if [ $CHECKMAX -le 1 ]; then
80
         echo no
81
         exit 1
82
    fi
83
    echo yes
84
    exit 0
85
fi
86

    
87
if [ "$1" = "config" ]; then
88
    echo 'graph_title log grep (match count)'
89
    echo "graph_args --base 1000 -l 0 --vertical-label match_count"
90
    echo 'graph_scale no'
91
    echo 'graph_vlabel match_count'
92
    echo 'graph_category other'
93
    echo 'graph_info This graph shows the bad event count on log'
94

    
95
    for(( I = 1; I < $CHECKMAX; ++I ))
96
    do
97
         eval log=\$log_${I}
98
         eval name=\$name_${I}
99
         eval grep=\$grep_${I}
100
         if [ "x${log}" = "x" ]; then
101
              continue
102
         fi
103
         if [ "x${name}" = "x" ]; then
104
             name=`echo $log | sed 's#[/|\.]#_#g'`
105
         fi
106
         if [ "x${name}" = "x" ]; then
107
             grep="critical|error|crash|fatal|kernel"
108
         fi
109

    
110
         echo "$name.label $name"
111
         echo "$name.info egrep $grep $log | wc -l"
112
         echo "$name.draw LINE2"
113
         echo "$name.min 0"
114
         echo "$name.max 20"
115
         echo "$name.critical 0:0"
116
    done
117

    
118
    exit 0
119
fi
120

    
121
NOWTIME=`date --date "$MINUTE_BY_GREP_RANGE minute ago" +%s`
122

    
123
for(( I = 1; I < $CHECKMAX; ++I ))
124
do
125
    eval log=\$log_${I}
126
    eval name=\$name_${I}
127
    eval grep=\$grep_${I}
128
    if [ "x${log}" = "x" ]; then
129
         continue
130
    fi
131
    if [ "x${name}" = "x" ]; then
132
         name=`echo $log | sed 's#[/|\.]#_#g'`
133
    fi
134
    if [ "x${grep}" = "x" ]; then
135
         grep="critical|error|crash|fatal|kernel"
136
    fi
137

    
138
    COUNT=0
139
    MESSAGE=
140
    IFS=$'\n'
141
    MATCHLINES=(`egrep -i "$grep" "$log"`)
142
    for(( N = ${#MATCHLINES[@]} - 1; N >= 0 ; --N ))
143
    do
144
         LINE=${MATCHLINES[$N]}
145
         DATESTRING=`echo $LINE | awk '{ printf("%s %s %s",$1,$2,$3)}'`
146
         LOGTIME=`date --date "$DATESTRING" +%s`
147
         if [ $LOGTIME -lt $NOWTIME ]; then
148
               break
149
         fi
150
         let COUNT="$COUNT + 1"
151
         MESSAGE="$MESSAGE$LINE //@LINE@// "
152
    done
153

    
154

    
155
    if [ $COUNT -eq 0 ]; then
156
        echo "${name}.value 0"
157
    else
158
        echo "${name}.value ${COUNT}"
159
        echo "${name}.extinfo ${MESSAGE}"
160
    fi
161
done