shell+Python实现简单的链路监控

简介:

背景游戏公司,服务器上有充值服,世界服,经分服务器等,和前端的game有链接通信,为防止链接通信故障导致线上业务中断,需要一个小脚本时刻监控线上链接状况。

涉及:shell、python2.6、126免费邮箱

配置

1
2
3
4
5
6
7
vim  /usr/lightserver/server/operationanalysisserver/config .xml -->环境不同,这里只做范例
<?xml version= "1.0"  encoding= "utf-8"  ?>
<Root>
<Connect index= "0"  GSIP= "192.168.0.100"  GSPort= "8002"  DBIP= "192.168.0.110"  DBPort= "3306"  LoginName= "game"  Password= "game"  DBName= "oaserver1" />
<Connect index= "1"  GSIP= "192.168.0.100"  GSPort= "8004"  DBIP= "192.168.0.110"  DBPort= "3306"  LoginName= "game"  Password= "game"  DBName= "oaserver2" />
<Server IP= "192.168.0.110" />
< /Root >

shell脚本

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
#!/bin/bash 
WORK_DIR= "/usr/lightserver"
SERVER= "worldserver gmserver operationanalysisserver chargeserver"
MAIL_LIST= "*********@wo.cn *********@126.com"
while  :
do
         NUM=0
         sleep  5
         for  in  $SERVER
         do
           IP=` awk  -F "\""  '/GSIP/{print $4}'  $WORK_DIR /server/operationanalysisserver/config .xml`  --> #(这里没有使用$SERVER是因为配置文件可能有差异,但是IP是相同的)
 
             for  in  $IP
                 do
                         NUM=$(($NUM+1))
                         PID=` ps  aux| grep  $WORK_DIR /server/ $i /unix/ $i| grep  - v  grep | awk  '{print $2}' | sed  -n 1p`
                         if  [ -z $PID ] ; then
                                 PID=0
                         fi
                         if  lsof  -p $PID| grep  - v  grep | grep  - v  mysql| grep  $j| grep  ESTABL >  /dev/null  2>&1; then
                                 continue
                         else
                                 echo  "`date " +%Y-%m-%d %X "` $j link disconnected"
                                 echo  "-----------------------------------------------------------------"
                                 if  [ -f  /usr/local/check_server/lock/link_alert .lck ]; then     --> #短信通知有限制,1天最多只能发送10条,所以这里做了限制本次错误只发送1条,若无限制短信发送可直接省略此段,就是每5秒发一次。
                                         continue
                                 else
                                         mkdir  -p  /usr/local/check_server/lock
                                         touch  /usr/local/check_server/lock/link_alert .lck
                                         for  in  $MAIL_LIST
                                         do
                                         python  /usr/local/check_server/send_mail .py  "Server Fault"  "Links may be a problem,`date " +%Y-%m-%d %X "` $j link disconnected"  "$m"   --> #这里的收件人和平常邮件接收人一样。
                                         done
                                 fi
                         fi
                 done
         done
         if  [ $NUM - le  ` netstat  -nat| grep  - v  grep | grep  ESTABL| awk  '{print $5}' | grep  - v  0.0.0.0| egrep  '(8002|8004)' | wc  -l` ]; then
                 if  [ -f  /usr/local/check_server/lock/link_alert .lck ]; then
                         rm  -rf  /usr/local/check_server/lock/link_alert .lck 
                 fi
         fi
done

python脚本:

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
#!/usr/bin/env python
#coding: utf-8
__author__  =  'Yong'
__version__  =  '1.0.0'
 
 
import  os
import  sys
import  smtplib
from  email.mime.text  import  MIMEText
from  email.header  import  Header
 
 
def  send_mail(s, i, r):
 
     #Subject = 'python test mail'
     Subject  =  s
     #mail_info = 'test from python3'
     mail_info  =  i
     Receiver  =  r
 
     Smtp_Server  =  'smtp.126.com'    - - #这里用的是126的服务器,也可用公司的,做发件方使用
     Username  =  '*******'    - - #邮箱名,
     Passwd  =  '*******'      - - #邮箱密码
 
     if  Username.find( '@' ) <  0 :
         Sender  =  Username  +  '@126.com'
     else :
         Sender  =  Username
 
 
 
     msg  =  MIMEText(mail_info,  'plain' 'utf-8' )
     msg[ 'Subject' =  Header(Subject,  'utf-8' )
 
     smtp  =  smtplib.SMTP()
     smtp.connect(Smtp_Server)
     smtp.login(Username, Passwd)
     smtp.sendmail(Sender, Receiver, msg.as_string())
     smtp.quit()
 
 
if  __name__  = =  '__main__' :
     if  len (sys.argv) ! =  4 :
         print  'Usage:{0} 邮件主题 邮件内容 收件人地址\n' . format (sys.argv[ 0 ])
         sys.exit( 1 )
     send_mail(sys.argv[ 1 ], sys.argv[ 2 ], sys.argv[ 3 ])


小建议:联通的手机可用186邮箱,移动的可使用139邮箱。也可使用微信报警更多扩展需要博友们开拓,笔者不才就不一一实现了。




本文转自 z永 51CTO博客,原文链接:http://blog.51cto.com/pangge/1423038
相关文章
|
4月前
|
监控 算法 安全
深度洞察内网监控电脑:基于Python的流量分析算法
在当今数字化环境中,内网监控电脑作为“守城卫士”,通过流量分析算法确保内网安全、稳定运行。基于Python的流量分析算法,利用`scapy`等工具捕获和解析数据包,提取关键信息,区分正常与异常流量。结合机器学习和可视化技术,进一步提升内网监控的精准性和效率,助力企业防范潜在威胁,保障业务顺畅。本文深入探讨了Python在内网监控中的应用,展示了其实战代码及未来发展方向。
|
2月前
|
监控 算法 安全
基于 Python 广度优先搜索算法的监控局域网电脑研究
随着局域网规模扩大,企业对高效监控计算机的需求增加。广度优先搜索(BFS)算法凭借其层次化遍历特性,在Python中可用于实现局域网内的计算机设备信息收集、网络连接状态监测及安全漏洞扫描,确保网络安全与稳定运行。通过合理选择数据结构与算法,BFS显著提升了监控效能,助力企业实现智能化的网络管理。
48 7
|
3月前
|
缓存 Shell 开发工具
[oeasy]python064_命令行工作流的总结_vim_shell_python
本文总结了命令行工作流中的关键工具和操作,包括vim、shell和Python。主要内容如下: 1. **上次回顾**:完成了输入输出的代码编写,并再次练习了vim的使用。 2. **shell基础**:介绍了shell环境及其基本命令,如`pwd`、`cd`、`ll -l`等。 3. **Python游乐场**:通过`python3`命令进入Python交互环境,可以进行简单计算和函数调用,常用函数有`help`、`ord`、`chr`等。 4. **vim编辑器**:详细讲解了vim的三种模式(正常模式、插入模式、底行命令模式)及其切换方法,以及常用的底行命令如`:w`、`:q`、`
105 15
|
4月前
|
运维 Shell 数据库
Python执行Shell命令并获取结果:深入解析与实战
通过以上内容,开发者可以在实际项目中灵活应用Python执行Shell命令,实现各种自动化任务,提高开发和运维效率。
135 20
|
4月前
|
安全 Shell 数据处理
使用Python执行Shell命令并获取结果
在实际应用中,可以根据需要选择适当的参数和方法来执行Shell命令,并处理可能出现的各种情况。无论是系统管理、自动化任务还是数据处理,掌握这些技巧都将极大地提高工作效率。
168 12
|
5月前
|
存储 运维 监控
探索局域网电脑监控软件:Python算法与数据结构的巧妙结合
在数字化时代,局域网电脑监控软件成为企业管理和IT运维的重要工具,确保数据安全和网络稳定。本文探讨其背后的关键技术——Python中的算法与数据结构,如字典用于高效存储设备信息,以及数据收集、异常检测和聚合算法提升监控效率。通过Python代码示例,展示了如何实现基本监控功能,帮助读者理解其工作原理并激发技术兴趣。
121 20
|
7月前
|
监控 Shell 数据处理
Python执行Shell并获取结果的全面指南
Python执行Shell并获取结果的全面指南
539 1
|
8月前
|
机器学习/深度学习 监控 TensorFlow
使用Python实现深度学习模型:智能宠物监控与管理
使用Python实现深度学习模型:智能宠物监控与管理
231 0
|
8月前
|
监控 Ubuntu API
Python脚本监控Ubuntu系统进程内存的实现方式
通过这种方法,我们可以很容易地监控Ubuntu系统中进程的内存使用情况,对于性能分析和资源管理具有很大的帮助。这只是 `psutil`库功能的冰山一角,`psutil`还能够提供更多关于系统和进程的详细信息,强烈推荐进一步探索这个强大的库。
108 1
|
8月前
|
监控 网络协议 数据库连接
Python3 监控端口:使用 socket 库
Python3 监控端口:使用 socket 库
110 0