菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
362
0

Ping监控脚本

原创
05/13 14:22
阅读数 46676

 

需求

内网服务器之间高频率检验延时信息,

脚本特点

多进程,可同时异步监控多个地址,不会互相影响。

使用方式

创建文件夹(可以替换为你自己的,我这里就用我们生产环境的标准目录了)
mkdir /data/w/falcon-agent/tmp
复制wiki里的代码至ping.py脚本并替换脚本内需要监控的地址
启动脚本
python ping.py &
关闭脚本(没必要关闭)
ps -ef|grep ping|awk -F '[ ]+' '{print $2}'|xargs kill

日志记录

/data/w/falcon-agent/tmp目录下会按照机器名+时间戳的方式进行日志记录,默认清除30天之前的ping日志

代码模板

#!/bin/python
#coding: utf-8
import multiprocessing
import time
import os
 
#替换掉需要ping的机器
ping_list = [
    "productu1.baseinfo.w.cn1",
    "productu2.baseinfo.w.cn1",
    "priceu1.baseinfo.w.cn1",
    "priceu2.baseinfo.w.cn1"
]
 
def ping_worker(hostname):
    while True:
        time.sleep(1)
        os.system("find /data/w/falcon-agent/tmp -mtime +30 -name '*.log'|xargs rm -f")
        os.system("echo $(date) >> {}.`date +%F`.log".format(hostname))
        os.system("echo $(ping -c 1 {}|grep -A 3 time=) >> {}.$(date +%F).log".format(hostname,hostname))
 
for hostname in ping_list:
    process = multiprocessing.Process(target = ping_worker, args = (hostname,))
    process.start()

 

日志分析脚本

分析指定日期日志,并展示延时大于10毫秒的ping记录

#!/bin/python
#coding: utf-8
import os
from sys import argv
logs = []
try:
    script, first = argv
except ValueError:
    print "请传入一个日期参数,例如 python scripts.py 2017-12-20"
else:
    logs = os.popen("ls *{}.log".format(first)).read().split('\n')[:-1]

def worker(*logs):
    for log in logs:
        times = os.popen("cat %s| awk '{print $8}' | awk -F '=' '{if($2>10)print $2}'" % (log)).read().split('\n')[:-1]
        for time in times:
            output = os.popen("cat %s|grep -B 1 'time=%s'" % (log, time)).read()
            print log
            print output

worker(*logs)

谢土豪

 

发表评论

0/200
362 点赞
0 评论
收藏
为你推荐 换一批