最近,自己业务进行上线,上线后,需要考虑的是对各种服务进行监控,包括(httpd服务,mysqld服务等),现在想以mysqld服务为例总结下那种方式的脚本最为专业和合理:

(1).根据mysql的端口号来监控mysql的服务。(常见于监控mysql的本地服务)

比较常见的一个脚本:

 netstat -natup|grep mysqld|awk -F'[ :]+' '{print $5}'

 上面是将mysqld的端口号进行了过滤,这个方法的缺点是:有可能是端口在,但是服务可能是不正常的。例如:系统负载很高,cpu的负载也很高,连接数满了,这个是其存在的问题之一。

(2).根据mysql的进程监控mysql的服务:

比较常见的一个脚本:

 ps -aux |grep mysqld |grep -v grep|wc -l

这种方式的缺点也是和上面的一样:有可能是端口在,但是服务可能是不正常的。例如:系统负载很高,cpu的负载也很高,连接数满了,这个是其存在的问题之一。

(3). 通过mysql客户端的命令以及用账户连接mysql,然后根据确定返回的命令状态或者返回的内容来确定mysql是否正常(本地或者是远程的连接状态)。

比较常见的一个判断脚本(只是其中的一些个核心内容):

 mysql -uroot -p1234 -e'select version();'>&/dev/null
echo $?

如果上面的$?是0 的话,说明是能够正常连接的,如果为1的话,则说明是连接失败的。

这种方式的缺点是,需要有mysql的连接客户端,要有数据的账号和密码,以及连接数据库主机的授权。

(4).通过php/java的方式直接连接mysql的方式来监控mysql的服务状态。

比较常见的一个脚本,也是比较简单的:

 <?php
$conn = mysql_connect('root','1234','locahost',3306) or die('mysql coulc not connect'.mysql_error()); ?>

这种方式是最接近用户的访问方式,效果是最好的,因为上面的这种方式尽管就算是端口存在,但是只要服务器的cpu负载很高,那用户的访问肯定是不正常的。

所以报警的最佳方式不是服务的报警是否开启了,而是网站的用户访问是否还是正常。这才是最佳的报警原则和方式。  我们应该从用户的角度出发考虑问题,而不是说从运维的角度来考虑问题。 所以应该在工作中使用这个方式。

(5).下面来看下Apache或者是nginx的监控脚本的一些常用的写法:

其实Apache的监控和mysql的监控本质上都是一样的,可以仿照上面的方法进行编写。

但是还是要介绍一个比较新的方式,使用nmap的方式来进行监测,服务的端口有没有打开,可以监控远端的服务器的端口有没有打开:

 HttpPortNum=`namp localhost -p |grep open |wc -l`
if [ HttpPortNum -eq ];then
echo "httpd is running!"
else
echo "httpd is not running!"
/data0/apache/bin/apachectl start &
fi

(6).使用URL的方式来进行监控:

 #!/bin/bash
wget -T -q --spider http://10.210.66.81/ >&/dev/null if [ $? -eq ];then
echo "httpd is running!"
else
echo "httpd is not running!"
/data0/http2/bin/apachectl start &
fi

(7).使用http code的方式来进行判断:

 #!/usr/bin/bash
httpCode=`curl -I -s http://10.210.66.81|grep 200|awk '{print $2}'` if [ "$httpCode" -eq ];then
echo "apache is running!"
else
echo "apache is not running!"
/data0/apache/bin/apachectl start &
fi

最新文章

  1. ORACLE使用GV_$TEMP_SPACE_HEADER统计临时表空使用情况不准确的问题
  2. 在编译命令行中添加 /D_SCL_SECURE_NO_DEPRECATE
  3. Verilog HDL那些事_建模篇笔记(实验七:数码管电路驱动)
  4. cocoapods 更新
  5. ASP.NET一些公共方法commTools
  6. SQL Server数据导入导出的几种方法
  7. UVa 10539 (筛素数、二分查找) Almost Prime Numbers
  8. iOS开发 - NSBundle, NSDevice, NSLocale
  9. 11.9 noip模拟试题
  10. Hadoop 学习笔记(一) HDFS API
  11. 转:SCHEME 语言是怎么来的 -1
  12. win7系统远程连接其它计算机,并且向远程机传输文件
  13. java 基本数据类型跟封装类型的差距
  14. 9、JavaScript常用函数
  15. 把excel数据导入mysql中
  16. OSG世界坐标转屏幕坐标(转载)
  17. InvalidateRect和UpdateWindow
  18. block的修饰词为什么选用copy
  19. vue和angular的区别:
  20. python字符串的魔法

热门文章

  1. 学习笔记:HSB、HSL
  2. 解决ubuntu下安装phpmyadmin访问不了的问题
  3. 使用curl获取Location:重定向后url
  4. hihoCoder-1036 (AC自动机模板题)
  5. codeForce-589D Boulevard(判断线段是否相交)
  6. HDU-2222 Keywords Search(AC自动机--模板题)
  7. Python asyncio库的学习和使用
  8. [cyber security][php]pfSense目录遍历漏洞分析
  9. msp430FR5739 FRAM的学习
  10. Android Studio IDE 简单学习和介绍