forked from matrix207/scripts
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdmon.sh
190 lines (170 loc) · 5.26 KB
/
dmon.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
#!/bin/bash
############################################################
# monitor system info
#
# How to auto run script
# 1.run by crontab
# 1.1.crontab -e
# */10 * * * * /root/dmon.sh
# 1.2.service crond restart
# 2.run /etc/rc.local
# echo "/root/dmon.sh &" >>/etc/rc.local
#
# History:
# 2015-02-11 v0.3 Dennis update
# 2014-10-15 v0.2 Dennis Add log /proc/pid/fd
# 2014-10-14 v0.1 Dennis Create
#
# TODO:
############################################################
############################################################
# Global configs
############################################################
PROG=`basename $0`
LOG_PATH=/root/log
INTERVAL_TIME=5
############################################################
# Log message
############################################################
log() {
if [ ! -z "$DEBUG" ]; then
# print date time, line number and message
HDR_FMT="%.23s [%s]: "
MSG_FMT="${HDR_FMT}%s\n"
printf "$MSG_FMT" $(date +%F.%T.%N) ${BASH_LINENO[0]} "${@}"
fi
}
############################################################
# check
############################################################
check() {
echo "do checking"
}
############################################################
# log system info, include cpu,mem and disk
############################################################
log_prepare() {
test -d $LOG_PATH || mkdir $LOG_PATH
}
############################################################
# log system info, include cpu,mem and disk
############################################################
log_sys() {
log "log system info"
# CPU
local cpu_info=$(top -b -n 1 | grep Cpu)
echo "[ $(date +%F.%T) ]: " $cpu_info>>$LOG_PATH/cpu.log
if [ ! -f $LOG_PATH/vmstat.log ];then
vmstat >$LOG_PATH/vmstat.log
fi
vmstat |awk 'NR==3{print $0}'>>$LOG_PATH/vmstat.log
}
############################################################
# log network info
############################################################
log_net() {
log "log network info"
: <<COMMENTBLOCK
if [ ! -f $LOG_PATH/ustat.log ];then
ustat 1 1 >$LOG_PATH/ustat.log
fi
ustat 1 1 |awk 'END{print $0}' >>$LOG_PATH/ustat.log
COMMENTBLOCK
echo "route information" >>$LOG_PATH/network.log
ip addr >>$LOG_PATH/network.log
netstat -rn >>$LOG_PATH/network.log
netstat -apn >>$LOG_PATH/network.log
ifconfig -a >>$LOG_PATH/network.log
}
############################################################
# log io info
############################################################
log_io() {
log "log io info"
date +%F.%T.%N >>$LOG_PATH/iostat.log
iostat >>$LOG_PATH/iostat.log
}
############################################################
# log kernel message
############################################################
log_kmsg() {
log "log kernel message"
dmesg >$LOG_PATH/dmesg.log
# 保证日志文件是比较全的,防止重启后被新的覆盖了
local tmpfile=$LOG_PATH/dmesg.log
local bakfile=$LOG_PATH/dmesg.log.bak
if [ ! -f $bakfile ]; then
cp $tmpfile $bakfile
else
lc1=$(cat $tmpfile |wc -l)
lc2=$(cat $bakfile |wc -l)
if [ $lc1 -gt $lc2 ]; then
cp $tmpfile $bakfile
fi
fi
}
############################################################
# log resource of specify process
############################################################
log_res() {
log "log resource info"
local pro_name=StoreServer
pgrep $pro_name 1>/dev/null 2>&1
if [ $? == 1 ]; then
return 1
fi
local ps_num=$(pgrep $pro_name |awk 'END{print $0}')
# CPU, 如果有多行,只打印第一行
local pro_cpu_info=$(top -b -n 1 | grep -i $pro_name |awk 'NR==1{print $0}')
echo "[ $(date +%F.%T) cpu]: " $pro_cpu_info>>$LOG_PATH/${pro_name}.log
# PS, 如果有多行,只打印最后一行
local pro_ps_info=$(ps aux |grep -i $pro_name |grep -v grep |awk 'END{print $0}')
echo "[ $(date +%F.%T) ps ]: " $pro_ps_info>>$LOG_PATH/${pro_name}.log
# FD
echo "+++++++++++++++++++++++++++++++++">>$LOG_PATH/${pro_name}.fd.log
echo "[ $(date +%F.%T) ps ]: ">>$LOG_PATH/${pro_name}.fd.log
ls -l /proc/$ps_num/fd >>$LOG_PATH/${pro_name}.fd.log
}
############################################################
# log iscsi info
############################################################
log_iscsi() {
if [ -d /proc/net/iet ]
then
mkdir -p $LOG_PATH/iscsi
local iscsi_path=$LOG_PATH/iscsi
cat /proc/net/iet/session >$iscsi_path/session
cat /proc/net/iet/volume >$iscsi_path/volume
netstat -anp | grep 3260 >$iscsi_path/iscsi_conninfo
fi
cp -f /etc/{ietd.conf,initiators.allow,exports,krb5.conf,iscsi.user,initiators.deny,ietd.portal} $iscsi_path >&/dev/null
}
############################################################
# log iscsi wireshark info
############################################################
log_iscsi_wireshark() {
#tcpdump -l port 3260 |tee $LOG_PATH/tcpdump.pcap
tcpdump -U port 3260 -w $LOG_PATH/tcpdump.pcap
}
############################################################
# log all
############################################################
log_all() {
log_io
log_kmsg
log_net
#log_res
log_sys
}
do_log_loop() {
while :
do
log_all
sleep ${INTERVAL_TIME}
done
}
############################################################
# Main
############################################################
log_prepare
do_log_loop