X、
create_province.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
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228 1
2
3
4
5 #!binbash
6
7 LANG="zh_CN.UTF-8"
8
9 LANG=C
10
11 #mysql info
12
13 mysql_ip='1.1.1.1'
14
15 ##数据库的ip
16
17 mysql_username='root'
18
19 ##数据库的用户名
20
21 mysql_passwd='****'
22
23 ##数据库的密码
24
25 mysql_database='monitor'
26
27 ##登录的数据库
28
29 new_here='shanxi'
30
31 ##需要添加的省份中文拼音
32
33 new_name='陕西'
34
35 ##需要添加省份的中文名称
36
37 old_here='gansu'
38
39 ##已经添加过省份中文拼音
40
41 old_name='甘肃'
42
43 ##已经添加过的省份中文名字
44
45 memory_table=''$new_here'_memory'
46
47 load_table=''$new_here'_load'
48
49 io_table=''$new_here'_io'
50
51 hardware_table=''$new_here'_hardware'
52
53 message_table=''$new_here'_message'
54
55 user_table=''$new_here'_user'
56
57 disk_table=''$new_here'_disk'
58
59 cpu_table=''$new_here'_cpu'
60
61 service_table=''$new_here'_service'
62
63 monitor_dir='/tmp/monitor'
64
65 ##当前php监控存放的位置
66
67 test_dir='/tmp/old'
68
69 ##如果想添加新省份,临时存放的位置
70
71 #create table module
72
73 create_table ()
74
75 {
76
77 #create table memory
78
79 mysql -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database -e "create table $memory_table(id int(10) not null primary key auto_increment,province varchar(30) not null,server varchar(30) not null,ip varchar(20) not null,monitor_server varchar(30) not null,service varchar(20) not null,alert int(10) not null,value int(10) not null,status varchar(10) not null,date datetime)ENGINE=InnoDB DEFAULT CHARSET=utf8;"
80
81 #create table load
82
83 mysql -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database -e "create table $load_table(id int(10) not null primary key auto_increment,province varchar(30) not null,server varchar(30) not null,ip varchar(20) not null,monitor_server varchar(30) not null,service varchar(20) not null,alert int(10) not null,value int(10) not null,status varchar(10) not null,date datetime)ENGINE=InnoDB DEFAULT CHARSET=utf8;"
84
85 #create table io
86
87 mysql -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database -e "create table $io_table(id int(10) not null primary key auto_increment,province varchar(30) not null,server varchar(30) not null,ip varchar(20) not null,monitor_server varchar(30) not null,service varchar(20) not null,alert int(10) not null,value int(10) not null,status varchar(10) not null,date datetime)ENGINE=InnoDB DEFAULT CHARSET=utf8;"
88
89 #create table hardware
90
91 mysql -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database -e "create table $hardware_table(id int(10) not null primary key auto_increment,province varchar(30) not null,server varchar(30) not null,ip varchar(20) not null,monitor_server varchar(30) not null,service varchar(20) not null,alert int(10) not null,value int(10) not null,status varchar(10) not null,date datetime)ENGINE=InnoDB DEFAULT CHARSET=utf8;"
92
93 #create table message
94
95 mysql -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database -e "create table $message_table(id int(10) not null primary key auto_increment,province varchar(30) not null,server varchar(30) not null,ip varchar(20) not null,monitor_server varchar(30) not null,service varchar(20) not null,alert int(10) not null,value int(10) not null,status varchar(10) not null,date datetime)ENGINE=InnoDB DEFAULT CHARSET=utf8;"
96
97 #create table user
98
99 mysql -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database -e "create table $user_table(id int(10) not null primary key auto_increment,province varchar(30) not null,server varchar(30) not null,ip varchar(20) not null,monitor_server varchar(30) not null,service varchar(20) not null,alert int(10) not null,value int(10) not null,status varchar(10) not null,date datetime)ENGINE=InnoDB DEFAULT CHARSET=utf8;"
100
101 #create table disk
102
103 mysql -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database -e "create table $disk_table(id int(10) not null primary key auto_increment,province varchar(30) not null,server varchar(30) not null,ip varchar(20) not null,monitor_server varchar(30) not null,service varchar(20) not null,alert int(10) not null,partition varchar(30) not null,value int(10) not null,status varchar(10) not null,date datetime)ENGINE=InnoDB DEFAULT CHARSET=utf8;"
104
105 #create table cpu
106
107 mysql -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database -e "create table $cpu_table(id int(10) not null primary key auto_increment,province varchar(30) not null,server varchar(30) not null,ip varchar(20) not null,monitor_server varchar(30) not null,service varchar(20) not null,alert int(10) not null,value int(10) not null,status varchar(10) not null,date datetime)ENGINE=InnoDB DEFAULT CHARSET=utf8;"
108
109 #create table service
110
111 mysql -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database -e "create table $service_table(id int(10) not null primary key auto_increment,province varchar(30) not null,server varchar(30) not null,ip varchar(20) not null,monitor_server varchar(30) not null,service varchar(20) not null,status varchar(10) not null,date datetime)ENGINE=InnoDB DEFAULT CHARSET=utf8;"
112
113 }
114
115 #create test directory
116
117 if [ ! -d "$test_dir" ];then
118
119 /bin/mkdir $test_dir
120
121 fi
122
123 #mondiy monitor software module
124
125 mondiy_software ()
126
127 {
128
129 #copy monitor province software
130
131 /usr/bin/rsync -avz $monitor_dir/*$old_here* $test_dir/ >>/dev/null 2>&1
132
133 cd $test_dir
134
135 #rename old_name to here_name
136
137 /usr/bin/rename $old_here $new_here *
138
139 #mondiy old_here and old_name
140
141 sed -i 's/'$old_here'/'$new_here'/g' *$new_here*
142
143 sed -i 's/'$old_name'/'$new_name'/g' *$new_here*
144
145 #mondiy province.php
146
147 sed -i 's/<\/b>/ | <a href="'$new_here'.php">'$new_name'<\/a><\/b>/' $monitor_dir/province.php
148
149 #mondiy warn_province.php
150
151 sed -i 's/<\/b>/ | <a href="'$new_here'_warn.php">'$new_name'<\/a><\/b>/' $monitor_dir/warn_province.php
152
153 #mondiy view_day_province.php
154
155 sed -i 's/<\/b>/ | <a href="'$new_here'_day_view.php">'$new_name'<\/a><\/b>/' $monitor_dir/view_day_province.php
156
157 #mondiy view_month_province.php
158
159 sed -i 's/<\/b>/ | <a href="'$new_here'_month_view.php">'$new_name'<\/a><\/b>/' $monitor_dir/view_month_province.php
160
161 #mondiy view_year_province.php
162
163 sed -i 's/<\/b>/ | <a href="'$new_here'_year_view.php">'$new_name'<\/a><\/b>/' $monitor_dir/view_year_province.php
164
165 #copy test_dir to monitor_dir
166
167 /usr/bin/rsync -avz $test_dir/*$new_here* $monitor_dir/ >>/dev/null 2>&1
168
169 #delete test_dir file
170
171 /bin/rm -rf $test_dir/*$new_here*
172
173 }
174
175 #check table is or not exist
176
177 /usr/bin/mysql -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database -e "desc $io_table">>/dev/null 2>&1
178
179 if [ $? -eq 0 ];then
180
181 echo "$io_table is exist!"
182
183 else
184
185 echo "$io_table is not exist!"
186
187 echo "Do you want to create $new_here table?If you want to create $new_here table,please input:(yes|no)"
188
189 read -t 30 -p "Please input you choose:" choose
190
191 case $choose in
192
193 yes|y)
194
195 echo "Now start creaet $new_here table......"
196
197 create_table
198
199 echo "$new_here table crease finish!"
200
201 echo "Now start to mondiy monitor software......"
202
203 mondiy_software
204
205 echo "$new_name has been added monitor software!"
206
207 ;;
208
209 no|n)
210
211 echo "Your choose is no,so we will to exit!"
212
213 exit
214
215 ;;
216
217 *)
218
219 echo "please input:(yes|no)"
220
221 ;;
222
223 esac
224
225 fi
226
227
228
Y、数据视图化
shell脚本
每个省份都是单独的一个
shell脚本,脚本里包含各种省份以年、月、日为时间,以web、交换、引擎、备用、数据库为服务器类型,以disk、io、load、memory、user为视图化的服务。
下面是甘肃省份的数据视图化脚本,名字为
gansu.sh,运行在php程序的images文件里,使用nohup sh gansu.sh &运行
由于脚本内容非常的多,在word里超过200页,所以就不展示了,脚本我会放到最后一页的附件里。
7 、如何部署
(
1)、shell监控脚本部署
把
shell监控脚本存放到/usr/local/monitor/shell目录,给予755权限,然后再crontab里输入*/3 * * * * /usr/local/monitor/shell/脚本内容,使每3分钟轮询运行脚本。
(
2)mysql数据库部署
可以使用
create_database.sh脚本进行部署,也可以使用create_province.sh脚本部署。
(
3)php程序部署
先把
php程序部署到服务器里,然后添加省份的时候,使用create_province.sh来进行添加,方法为:
1、使用
sh create_province.sh运行脚本
2、如果添加脚本在数据库里数据库表存在,就会出现以下情况
如果不存在
你可以输入
yes或no来选择是否创建数据库表与进行添加相应省份的php文件(注意只有10秒钟的等待时间,为了节省服务器资源,我使用了read -n参数)
输入完
yes后,结果如下
可以看到数据库表创建完成,
php监控的省份添加完成
之后你在
web里就能直接观看添加省份的监控
添加省份的数据视图化的
shell文件,可以使用create_gnuplot.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 1
2
3
4
5 #!/bin/bash
6
7 old_dir='/tmp/old_dir'
8
9 ##当前已经存在的数据实体化脚本目录
10
11 new_dir='/tmp/new_dir'
12
13 ##临时存放省份的数据实体化脚本目录
14
15 if [ ! -d "$new_dir" ];then
16
17 mkdir $new_dir
18
19 fi
20
21 for i in gansu tianjin guangxi guizhou hainan hebei hunan qinghai xinjiang henan xizang baotou hubei jiangxi ningxia shanxi
22
23 ##在这里输入你想添加省份的中午拼音
24
25 do
26
27 ls $i.sh>>/dev/null 2>&1
28
29 if [ $? -eq 0 ];then
30
31 echo "$i.sh is exist!"
32
33 else
34
35 echo "$i.sh is not exist!"
36
37 echo "Start to create $i.sh..."
38
39 /usr/bin/rsync -avz $old_dir/gansu.sh $new_dir/$i.sh>>/dev/null 2>&1
40
41 sed -i 's/gansu/'$i'/g' $new_dir/$i.sh
42
43 /usr/bin/rsync -avz $new_dir/$i.sh $old_dir/$i.sh>>/dev/null 2>&1
44
45 fi
46
47 done
48
49
50
8 、维护与升级
1 、维护
** ** 由于采用了时间方法的日志分钟,每
3分钟检测一次 ,所以日常维护非常的方便,只要各位在目录的logs里,查看到有当天日志文件产生,在查看当天日志文件是否为每3分钟检测一次,如果满足上述条件,则此脚本正常运行。
2 、升级
** ** 在升级的时候,为了避免部署新的程序时监控系统检测不到相应的应用服务,而且还收到了服务宕掉的邮件提示,各位在部署新程序时,应在相应用户里(部署监控系统
crontab -e所在的用户)里,在监控系统自动启动检测的那一行里,在前面加上#,例如,在交换服务器里部署新的程序,需要在root用户下,输入crontab -e,然后在 */3 * * * * /usr/local/monitor/shell/ 监控脚本内容的最前面,加上
#,最后的结果为#*/3 * * * * /usr/local/monitor/shell/监控脚本。
9 、完整监控系统页面展示
(
1)shell部分
各省都有各自的
shell监控脚本,我以甘肃web为例
(
2)mysql数据库部分
我截图所有
mysql数据表
(
3)php程序部分
由于在首页里已经有了php界面展示,所以现在就不展示了。
现在这个php+mysql+shell已经成功的对生产平台监控了3个月,符合我之前的监控要求,能节省我更多的时间去做更多有用的事,现在查看平台也不需要在进入后台一个一个的查看了,可以查看各省的监控详情与监控视图,更方便的了解平台应用服务与资源的运行情况,希望我这个监控系统能对大家有更好的启发,如果您有疑问或者好的观点,希望您能留言给我,谢谢!