運維自動化之使用PHP+MYSQL+SHELL打造私有監控系統(七)
X、create_province.sh指令碼內容
- #!binbash
- LANG=“zh_CN.UTF-8”
- LANG=C
- #mysql info
- mysql_ip=`1.1.1.1`
- ##資料庫的ip
- mysql_username=`root`
- ##資料庫的使用者名稱
- mysql_passwd=`****`
- ##資料庫的密碼
- mysql_database=`monitor`
- ##登入的資料庫
- new_here=`shanxi`
- ##需要新增的省份中文拼音
- new_name=`陝西`
- ##需要新增省份的中文名稱
- old_here=`gansu`
- ##已經新增過省份中文拼音
- old_name=`甘肅`
- ##已經新增過的省份中文名字
- memory_table=“$new_here`_memory`
- load_table=“$new_here`_load`
- io_table=“$new_here`_io`
- hardware_table=“$new_here`_hardware`
- message_table=“$new_here`_message`
- user_table=“$new_here`_user`
- disk_table=“$new_here`_disk`
- cpu_table=“$new_here`_cpu`
- service_table=“$new_here`_service`
- monitor_dir=`/tmp/monitor`
- ##當前php監控存放的位置
- test_dir=`/tmp/old`
- ##如果想新增新省份,臨時存放的位置
- #create table module
- create_table ()
- {
- #create table memory
- 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;”
- #create table load
- 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;”
- #create table io
- 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;”
- #create table hardware
- 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;”
- #create table message
- 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;”
- #create table user
- 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;”
- #create table disk
- 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;”
- #create table cpu
- 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;”
- #create table service
- 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;”
- }
- #create test directory
- if [ ! -d “$test_dir” ];then
- /bin/mkdir $test_dir
- fi
- #mondiy monitor software module
- mondiy_software ()
- {
- #copy monitor province software
- /usr/bin/rsync -avz $monitor_dir/*$old_here* $test_dir/ >>/dev/null 2>&1
- cd $test_dir
- #rename old_name to here_name
- /usr/bin/rename $old_here $new_here *
- #mondiy old_here and old_name
- sed -i `s/`$old_here`/`$new_here`/g` *$new_here*
- sed -i `s/`$old_name`/`$new_name`/g` *$new_here*
- #mondiy province.php
- sed -i `s/</b>/ | <a href=“`$new_here`.php”>`$new_name`</a></b>/` $monitor_dir/province.php
- #mondiy warn_province.php
- sed -i `s/</b>/ | <a href=“`$new_here`_warn.php”>`$new_name`</a></b>/` $monitor_dir/warn_province.php
- #mondiy view_day_province.php
- sed -i `s/</b>/ | <a href=“`$new_here`_day_view.php”>`$new_name`</a></b>/` $monitor_dir/view_day_province.php
- #mondiy view_month_province.php
- sed -i `s/</b>/ | <a href=“`$new_here`_month_view.php”>`$new_name`</a></b>/` $monitor_dir/view_month_province.php
- #mondiy view_year_province.php
- sed -i `s/</b>/ | <a href=“`$new_here`_year_view.php”>`$new_name`</a></b>/` $monitor_dir/view_year_province.php
- #copy test_dir to monitor_dir
- /usr/bin/rsync -avz $test_dir/*$new_here* $monitor_dir/ >>/dev/null 2>&1
- #delete test_dir file
- /bin/rm -rf $test_dir/*$new_here*
- }
- #check table is or not exist
- /usr/bin/mysql -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database -e “desc $io_table”>>/dev/null 2>&1
- if [ $? -eq 0 ];then
- echo “$io_table is exist!”
- else
- echo “$io_table is not exist!”
- echo “Do you want to create $new_here table?If you want to create $new_here table,please input:(yes|no)”
- read -t 30 -p “Please input you choose:” choose
- case $choose in
- yes|y)
- echo “Now start creaet $new_here table……”
- create_table
- echo “$new_here table crease finish!”
- echo “Now start to mondiy monitor software……”
- mondiy_software
- echo “$new_name has been added monitor software!”
- ;;
- no|n)
- echo “Your choose is no,so we will to exit!”
- exit
- ;;
- *)
- echo “please input:(yes|no)”
- ;;
- esac
- fi
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來進行新增,內容如下
- #!/bin/bash
- old_dir=`/tmp/old_dir`
- ##當前已經存在的資料實體化指令碼目錄
- new_dir=`/tmp/new_dir`
- ##臨時存放省份的資料實體化指令碼目錄
- if [ ! -d “$new_dir” ];then
- mkdir $new_dir
- fi
- for i in gansu tianjin guangxi guizhou hainan hebei hunan qinghai xinjiang henan xizang baotou hubei jiangxi ningxia shanxi
- ##在這裡輸入你想新增省份的中午拼音
- do
- ls $i.sh>>/dev/null 2>&1
- if [ $? -eq 0 ];then
- echo “$i.sh is exist!”
- else
- echo “$i.sh is not exist!”
- echo “Start to create $i.sh…”
- /usr/bin/rsync -avz $old_dir/gansu.sh $new_dir/$i.sh>>/dev/null 2>&1
- sed -i `s/gansu/`$i`/g` $new_dir/$i.sh
- /usr/bin/rsync -avz $new_dir/$i.sh $old_dir/$i.sh>>/dev/null 2>&1
- fi
- done
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個月,符合我之前的監控要求,能節省我更多的時間去做更多有用的事,現在檢視平臺也不需要在進入後臺一個一個的檢視了,可以檢視各省的監控詳情與監控檢視,更方便的瞭解平臺應用服務與資源的執行情況,希望我這個監控系統能對大家有更好的啟發,如果您有疑問或者好的觀點,希望您能留言給我,謝謝!
本文轉自 reinxu 51CTO部落格,原文連結:http://blog.51cto.com/dl528888/1035335,如需轉載請自行聯絡原作者
相關文章
- 分層運維自動化監控運維
- 運維自動化之賬單系統運維
- Telegraf+Influxdb+Grafana自動化運維監控UXGrafana運維
- IT運維之自動化運維運維
- 神荼之眼——打造現代化監控系統
- Python筆記之psutil模組(自動化運維利器psutil玩轉系統監控及管理)Python筆記運維
- 運維監控系統 PIGOSS BSM的監控策略運維Go
- Oracle 自動化運維-Python監控Oracle告警日誌Oracle運維Python
- 運維文件:網站監控系統運維網站
- 運維文件:伺服器監控系統運維伺服器
- 運維文件:系統監控及告警配置運維
- 打造前端監控系統前端
- Python自動化運維之psutil系統效能資訊模組Python運維
- DB2監控及自動化運維產品技術交流DB2運維
- SQL Server自動化運維繫列:監控效能指標指令碼SQLServer運維指標指令碼
- 用深度學習DIY自動化監控系統深度學習
- 系統運維監控的幾點建議運維
- 運維文件 - 伺服器效能監控系統運維伺服器
- 智和網管平臺打造“海量接入 智慧監控”的統一運維監控中心運維
- 立足信創國產化運維,打造安全可控IT運維管理系統運維
- 自動化運維工具之Puppet模組運維
- 供水泵站組態監控與故障運維一體化系統運維
- 簡化IT運維工作,就要學會使用自動化運維工具!運維
- 金融系統IT運維監控的探索與實踐運維
- 運維監控工具運維
- 資料庫監控工具--PIGOSSBSM運維監控管理系統資料庫Go運維
- IT監控(進階篇):運維監控系統手把手部署教學運維
- Python自動化運維之IPy模組Python運維
- MySQL自動化運維之安裝篇MySql運維
- Golang-自動化監控教務系統成績單Golang
- 自動化運維 Expect運維
- 用自動化運維工具解放IT運維運維
- 自動駕駛系列(七)——聊聊人機互動中的DMS駕駛員監控系統自動駕駛
- K8S部署WGCLOUD運維監控系統K8SGCCloud運維
- 分散式監控系統之Zabbix主動、被動及web監控分散式Web
- 半自動化運維之伺服器資訊維護運維伺服器
- 【IT運維監控】幾大運維監控工具優缺點介紹運維
- collectd+influxdb+grafana打造圖形化監控系統UXGrafana