背景描述
物理机网段
192.168.140.11~192.168.140.14
物理机描述
每台物理机上运行vncserver,用于远程图形界面登陆;
通过vnc远程登录后,运行virt-manager,用于对该物理机上所有虚拟机进行界面管理;
单一物理机上所有虚拟机负责单一场景的流量监控、终端监控。
虚拟机描述
虚拟机Fanalyser上运行着单一场景的流量监控数据采集及存储程序,且该场景的流量监控数据库也部署在Fanalyzer中,运行在交换机上的流量采集程序会定期将该场景的流量监控数据发送给Fanalyser的流量监控数据采集及存储程序;
虚拟机TerminalAnalyzerVM_*(140.11上三台)上运行着单一场景的终端监控数据采集及存储程序,该场景中受监控的的终端会定时将采集到的本机终端日志发送给TerminalAnalyzerVM_*中的终端监控数据采集及存储程序;
虚拟机Sink上部署着单一场景的终端监控数据库,TerminalAnalyzerVM_*上的终端监控数据采集及存储程序会写入到Sink的终端监控数据库。
问题描述
物理机问题
物理机经常重启,导致其上所有虚拟机关机,监控服务停止;
关系TerminalAnalyzerVM_*是否能将数据写入Sink的网卡p3p1和p3p2没有设置开机自启动,需要每次sudo ifconfig p3p1 up...
虚拟机问题
将两项配置加入MySQL配置文件,防止每次重启重新配置:
去掉sql_mode中ONLY_FULL_GROUP_BY,使得select中的域可以不是group by中字段;
设置event_scheduler=1,开启定时事件。
终端监控数据采集及存储程序开机自启动
问题解决
虚拟机问题
1)MySQL参数配置
参考http://www.cnblogs.com/aademeng/articles/3118445.html,mysql配置文件模板是/usr/share/mysql/my-default.cnf,如果mysql默认配置路径下没有my.cnf,可以copy这个文件到相应目录,并进一步根据需求设定参数,根据其内容知道直接写sql_mode=STRICT_TRANS_TABLES,... event_scheduler=1 ;
通过vnc登陆Sink 192.168.140.31,查看/etc/init.d/mysql文件,这是开机自启动文件,从中得知config file是/etc/mysql/my.cnf;
修改/etc/mysql/my.cnf,添加[mysqld],否则报错“found option without preceding group in config file”,之后添加sql_mode=STRICT_TRANS_TABLES,... event_scheduler=1
重启MySQL,"sudo service mysql restart",如果长时间命令不结束,用"sudo service mysql status"查看日志。
现在的配置文件是:
!includedir /etc/mysql/conf.d
!includedir /etc/mysql/mysql.conf.d
[mysql]
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FORDIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
event_scheduler=1
2)终端监控及存储程序开机自启动
开机自启动调研
服务开机自启动有ln -s 设置软连接,chkconfig,ntsysv三种,其中chkconfig只在Redhat系列中使用,详情请见:
http://www.cnblogs.com/nerxious/archive/2013/01/18/2866548.html
http://www.cnblogs.com/end/archive/2012/10/12/2721059.html
ubuntu主要有ln -s 软连接设置开机自启动(rcconf;将脚本放在/etc/init.d下,并在响应运行级别的rc*.d下设置/etc/init.d脚本的软连接,命名K打头表示停止,S打头表示启动;chkconfig(可用但是总出错,chkconfig --level [012345] [service name] [on//off] 或者 vi /etc/init.d/服务 添加 "chekconfig:[runlevels] [start number] [stop number]")、配置登入执行(添加需要执行的脚本名到~/.bash_profile、~/.bash_login、~/.profile中一个)、配置登出执行(~/.bash_logout)、配置多次执行的定时任务(crontab)、配置单次执行定时任务(at)。
问题现象
DataServer-inuse.jar是终端监控数据采集及存储程序;
现在TerminalAnalyzer_*虚拟机启动后,后台有时有以root身份启动的DataServer,有时没有该进程。
问题追踪
运行find ~/ -name "*" |xargs grep "DataServer",看到在同级目录下有runta.py包含DataServer-inuse.jar
运行find ~/ -name "*" |xargs grep "DataServer",看到通过ln -s 设置开机自启动到级别2
linux启动级别0~6,详情请
http://www.cnblogs.com/EasonJim/p/7168190.html
http://www.cnblogs.com/iiiiher/p/5356373.html
https://itbilu.com/linux/management/4JEzjDV8G.html
在/etc/init.d/下有runta.sh,用runlevel查看当前运行级别是2
/etc/init.d/runta.sh内容执行runta.py脚本:
所以唯一可以解释是否启动不确定的原因是,每次系统登录的运行级别不确定,目前的设置只要不是级别2就不执行,解决方法为固定设置运行级别为2或其他运行级别也添加设置该服务。
/etc/init.d/runta.sh中通过调用/home/nsr/server/runta.py执行DataServer-inuse.jar多余,所以修改自启动任务如下:
sudo mv /etc/init.d/runta.sh /etc/init.d/runta.bak.sh
sudo vi /etc/init.d/runta.sh //内容如下,注意这里必须先cd,否则无法将DataServer运行于后台,估计是该目录下配置文件的问题
chmod +x /etc/init.d/runta.sh
sudo rm /etc/rc2.d/S99runta.sh
sudo ln -s /etc/init.d/runta.sh /etc/rc2.d/S99runta.sh
sudo reboot
可以实现开机自启动,且Sink中收到监控数据。至于有时不能启动的原因,等到下次出现看看runlevel吧~
有一部分数据没有进入Sink,原因可能是配置文件没有正常关闭,所以无法读取配置文件。
在Ubuntu16.04中运行runlevel显示2,但是配置文件vi /etc/init/rc-sysinit.conf中显示启动级别是2:
预估TA偶尔以级别5开启,导致服务没启动,故在rc5.d中添加服务的软连接。
物理机问题
创建开机启动脚本/etc/init.d/upp3px.sh,内容如下图,其中provides~required-stop是update-rc.d命令需要的字段
/etc/rc*.d/目录中K*执行脚本中的stop,S*执行脚本中的start。
用update-rc.d命令管理开机启动脚本,它可以用来在/etc/rc*.d/目录下建立与start/stop level order的相关软连接,删除某一服务所有相关软连接等等,这里操作的命令为(注意start和stop放在一条命令中执行,否则执行一个再执行另一个会报错已经存在而失败),详情请见http://manpages.ubuntu.com/manpages/precise/en/man8/update-rc.d.8.html:
sudo update-rc.d upp3px.sh start 90 2 3 4 5 . stop 80 0 1 6 .
创建结果:
删除方法:
update-rc.d -f upp3px.sh remove
截止到目前,已经设置好p3p1/p3p2开机up/关机down。