设为首页 收藏本站
查看: 1984|回复: 6

[经验分享] python分析sa文件历史信息

[复制链接]

尚未签到

发表于 2013-5-5 09:35:24 | 显示全部楼层 |阅读模式

有时候收到服务器报警,cpu load值彪高。但是登录到服务器上去的时候发现load值已经在下降了。

可以通过分析生成的sa文件进行获取历史的load值

写一个python脚本如下:
分析结果如下:

日期|时间  PV  load-15
2013-04-26|00:00:00 611 0.122013-04-26|00:10:00 420 0.092013-04-26|00:20:00 422 0.102013-04-26|00:30:00 507 0.162013-04-26|00:40:00 491 0.132013-04-26|00:50:00 504 0.092013-04-26|01:00:00 455 0.09
python脚本如下:

#!/usr/bin/env python#import platform#print platform.python_version()import datetimeimport redef sar_process(LogDate, Datas):    """Process the yesterday sar log       CPU usage       load average       memory       network I/O       network sock       disk I/O    """    import os    import subprocess    #import multiprocessing    #cpus = multiprocessing.cpu_count()        lastLogFile = "/var/log/sa/sa%02d" % (LogDate.day)    ## print lastLogFile    newEnv = os.environ    newEnv["LANG"] = "C"    newEnv["S_TIME_FORMAT"] = "ISO"    #Datas = dict()    cmds = [               ['/usr/bin/sar', '-u', '-P', 'ALL', '-f', lastLogFile],               ['/usr/bin/sar', '-q', '-f', lastLogFile],               ['/usr/bin/sar', '-r', '-f', lastLogFile],               ['/usr/bin/sar', '-n', 'DEV', '-f', lastLogFile],               ['/usr/bin/sar', '-n', 'SOCK', '-f', lastLogFile],               ['/usr/bin/sar', '-b', '-f', lastLogFile],           ]    for cmd in cmds:        p = subprocess.Popen(cmd,                             stdout = subprocess.PIPE,                             stderr = subprocess.PIPE,                             env = newEnv                            )            (sardata, err) = p.communicate()        date = ''        lines = re.split('[\r\n]+', sardata)        date = lines.pop(0).rsplit('\t')[-1]        titles = re.split('[\s]+', lines.pop(0))        titles[0] = 'time'        Cols = len(titles)        for line in lines:            if re.search('^[0-9]', line):                ColData = re.split('[\s]+', line)                (Hour, Minute) = ColData[0].split(':')[:2]                newDay = datetime.datetime(2000,1,1,int(Hour),int(Minute),0) \                             - datetime.timedelta(minutes = 10)                ColData[0] = "%02d:%02d:00" % (newDay.hour, newDay.minute)                masterKey = date + '|' + ColData[0]                ColDict = dict()                for i in xrange(Cols):                    ColDict[titles] = ColData                del ColDict[titles[0]]                if titles[1] == 'CPU' or titles[1] == 'IFACE':                    del ColDict[titles[1]]                    secondKey = titles[1] + '|' + ColData[1]                else:                    secondKey = titles[1] + '|' + titles[1]                if masterKey not in Datas:                    Datas[masterKey] = dict()                Datas[masterKey][secondKey] = ColDict                        def ps_access_log_process(LogDate, Datas):    import glob    LogDateStr = "%04d-%02d-%02d" % (LogDate.year, LogDate.month, LogDate.day)    LogDir = '/data/pt8.49/webserv/alihr/logs/his'    Logs = glob.glob(LogDir + '/PIA_access.log*')    Logs.sort()    Logs = Logs[-20:]        for Log in Logs:        try:            f = open(Log, "r")        except IOError:            return None        while True:            line = f.readline().strip()            if re.search('^#', line):                continue            if re.search('^' + LogDateStr, line):                ColData = re.split('[\s]+', line)                AccTime = ColData[1].split(':')                AccTime[1] = AccTime[1][0] + '0'                ColData[1] = "%02d:%02d:%02d" % (int(AccTime[0]), int(AccTime[1]), 0)                MasterKey = LogDateStr + '|' + ColData[1]                SecondKey = 'access|access'                if MasterKey not in Datas:                    Datas[MasterKey] = dict()                                if SecondKey not in Datas[MasterKey]:                    Datas[MasterKey][SecondKey] = dict()                else:                    if 'access' not in Datas[MasterKey][SecondKey]:                        Datas[MasterKey][SecondKey]['access'] = 1                    else:                        Datas[MasterKey][SecondKey]['access'] += 1            else:                breakif __name__ == '__main__':    import platform    import sys    currentTime = datetime.datetime.now()    lastDay = currentTime - datetime.timedelta(days = 1)    PyVersion = platform.python_version()    if PyVersion < '2.4':        print "python 2.4 or later required."        sys.exit(1)    #digest_map = build_digest_map("/syslog2")    #print(len(digest_map))    Datas = dict()    sar_process(lastDay, Datas)    ps_access_log_process(lastDay, Datas)    Key1S = Datas.keys()    Key1S.sort()    for key1 in Key1S:        #Key2S = Datas[key1].keys()        #Key2S.sort()        #for key2 in Key2S:        #    print key1, key2, Datas[key1][key2]        if 'access|access' in Datas[key1] and 'runq-sz|runq-sz' in Datas[key1]:            if 'access' in  Datas[key1]['access|access']:                print key1, Datas[key1]['access|access']['access'],                print Datas[key1]['runq-sz|runq-sz']['ldavg-15']#    print len(Datas)

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-5628-1-1.html 上篇帖子: 使用脚本自动化远程备份mysql数据库 下篇帖子: python脚本批量更改ESXI主机名,DNS 历史 信息 python

尚未签到

发表于 2013-5-5 10:18:14 | 显示全部楼层
做爱做的事,交配交的人。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-5-18 17:09:51 | 显示全部楼层
禽兽尚且有半点怜悯之心,而我一点也没有,所以我不是禽兽。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-5-22 08:31:33 | 显示全部楼层
爱她,就请为她做无痛人流手术!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-5-27 20:39:41 | 显示全部楼层
如果跟导师讲不清楚,那么就把他搞胡涂吧!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-6-3 01:58:58 | 显示全部楼层
生我之前谁是我,生我之后我是谁?

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-6-6 17:42:22 | 显示全部楼层
相当不错,感谢无私分享精神!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表