使用python脚本捕获分布式环境日志信息

【使用场景】

有时候一些分布式服务器上的问题,日志获取是需要两段联动,比如:客户端出现了报错,这时候要去服务器上看服务器的原因,手工开启日志等等。人为在服务器等待守护不现实,比较好的方法就是写一个可以通信的脚本,客户端发现了报错,通知服务端,服务端侧进行日志收集

 

客户端代码

主要逻辑:

循环执行某一个命令,如果出现成功,则发消息给服务端,cmdstr写客户端需要捕获的日志的命令

# -*- coding: utf-8 -*-
# Created: huashan
import httplib  
import os
import commands
import time
cmdstr = "cat xx.log|tail -n 10 |grep xxx"
connectPort = 8000

def SendProblemOccurMeesage():
    conn = httplib.HTTPConnection("127.0.0.1:" + str(connectPort))  
    conn.request('GET', '/')  
    print conn.getresponse().read()  
    conn.close()
    
    
while True:
    status,output=commands.getstatusoutput(cmdstr)
    if int(status) == 0:
        print "problem occur, send message to server"
        SendProblemOccurMeesage()
    time.sleep(5)

服务端代码

主要逻辑

启动监听,收到客户端消息后,执行cmdstr上面配置的命令,可以是dump信息,可以是打印堆栈,可以是日志开启并收集等等

# -*- coding: utf-8 -*-
# Created: huashan
import os   #Python的标准库中的os模块包含普遍的操作系统功能  
import re   #引入正则表达式对象  
import urllib   #用于对URL进行编解码  
from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler  #导入HTTP处理相关的模块  
import commands

cmdstr = "server -dump xxxx"
listenPort = 8000 

#自定义处理程序,用于处理HTTP请求  
class TestHTTPHandler(BaseHTTPRequestHandler):
    #处理GET请求  
    def do_GET(self):
        #获取URL
        print 'URL=',self.path
        #页面输出模板字符串  
        templateStr = '''<html><body>receive</body></html>'''

        self.protocal_version = 'HTTP/1.1'  #设置协议版本  
        self.send_response(200) #设置响应状态码  
        self.send_header("Welcome", "Contect")  #设置响应头  
        self.end_headers()
        self.wfile.write(templateStr)   #输出响应内容  
        
        status,output=commands.getstatusoutput(cmdstr)
        

        #启动服务函数  
def start_server(port):
        http_server = HTTPServer(('', int(port)), TestHTTPHandler)
        http_server.serve_forever() #设置一直监听并接收请求  

start_server(listenPort)  #启动服务,监听8000端口

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值