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
相关文章
|
24天前
|
监控 网络协议 Shell
【Shell 命令集合 网络通讯 】Linux 监控和记录网络中ARP(Address Resolution Protocol)活动 arpwatch命令 使用指南
【Shell 命令集合 网络通讯 】Linux 监控和记录网络中ARP(Address Resolution Protocol)活动 arpwatch命令 使用指南
33 0
|
3月前
|
监控 安全 Shell
Shell脚本实现企业电脑屏幕监控的自动化部署与维护
企业信息安全一直是重要的议题,而屏幕监控是一种有效的手段之一。本文将介绍如何使用Shell脚本实现企业电脑屏幕监控的自动化部署与维护,并在结尾部分说明如何将监控到的数据自动提交到指定网站。
204 1
|
4月前
|
监控 网络协议 Unix
Linux命令-nc(端口监控、文件传输、反弹shell等)
Linux命令-nc(端口监控、文件传输、反弹shell等)
88 0
|
5月前
|
监控 Java 数据处理
局域网监控的并发处理Python代码
处理局域网监控的并发代码可能涉及到很多方面,包括网络通信、数据处理、并发控制等。本文提供一个简单的Python示例。
469 0
|
13天前
|
存储 监控 异构计算
【Python】GPU内存监控脚本
【Python】GPU内存监控脚本
|
24天前
|
监控 Shell Linux
【Shell 命令集合 系统设置 】Linux 管理和监控电源管理 apmd命令 使用指南
【Shell 命令集合 系统设置 】Linux 管理和监控电源管理 apmd命令 使用指南
27 0
|
1月前
|
JSON 监控 数据安全/隐私保护
如何利用Python编写公司计算机监控软件的基本功能
在现代企业环境中,监控公司计算机的活动是至关重要的。它可以帮助企业保护数据安全、确保员工遵守公司政策以及提高整体网络性能。为了实现这一目标,我们可以利用Python编写一个简单而强大的公司计算机监控软件,来跟踪关键活动并自动处理收集到的数据。
96 2
|
2月前
|
监控 Python Windows
使用python脚本来监控进程
使用python脚本来监控进程
|
2月前
|
弹性计算 监控 Python
有趣的python脚本【监控公司出口ip变化并发送至钉钉群】
因为公司出口ip是动态的(拨号方式),重新拨号后就会变化。因此及时发现ip变化显得尤为重要(比如及时ecs安全组中的ip),另外可把py脚本打包成exe并加到办公电脑的计划任务里。
30 2
有趣的python脚本【监控公司出口ip变化并发送至钉钉群】
|
2月前
|
监控 测试技术 API
自动化测试工具与电脑桌面监控软件的集成:Selenium与Python的无缝整合
在当今数字化时代,软件质量保证是每个软件开发团队都必须面对的重要挑战之一。自动化测试工具和电脑桌面监控软件的结合,为开发团队提供了一种有效的方式来确保软件的稳定性和性能。本文将介绍如何利用Python编程语言中的Selenium库,与桌面监控软件进行无缝整合,以实现对应用程序的自动化测试和桌面监控。
175 5