美文网首页技术杂谈程序员
基于python3下载生产日志

基于python3下载生产日志

作者: 数齐 | 来源:发表于2018-04-01 11:42 被阅读65次

    生产环境可能会遇到各种问题,最常用也是最有效的排查方式就是查看生产日志。但是有的生产日志是放到归档的日志服务器上,这就需要我们去下载。操作很繁琐,无非就是登陆日志服务器,找到日志文件,下载。只要是繁琐的重复性的内容都可以通过程序来解决(至少我是这么认为的),今天我们就利用python3来实现一下这个功能。

    观察文件路径

    一般来说,针对日志服务器存放的文件都会有一定的规律,比如说常见的就是项目名作为文件路径的元素。例如:/admin/2018/ttt/03/192.168.100.04-20180324.log,其中ttt代表了项目名称。

    分析文件路径

    得到了这个路径后,我们就得知道该怎么拼接得到这个路径。首先/admin/这个路径是固定的,所以我们不需要特别处理。20180320180324这些数据,我们可以通过方法的入参传递过来,我们需要的仅仅就是一个日志的时间即可。我们的日志时间入参为2018-03-24
    # 将2018-03-24格式的字符串变成python3的日期对象
    trans_time = time.strptime(log_time, '%Y-%m-%d')
    # 通过日期对象获得年:2018
    year = time.strftime('%Y', trans_time)
    # 通过日期对象获得月:03
    month = time.strftime('%m', trans_time)
    # 通过日期对象获得转化日期格式的字符串:20180324
    need_time_string = time.strftime("%Y%m%d", trans_time)
    
    

    目前为止,我们可以根据一个日期参数,得到链接中的大部分。

    登录日志服务器

    既然我们说下载,肯定要登录到日志服务器上去下载。所以登录日志服务器的操作是避免不了的。登录操作至少需要使用到ftp服务器的ip,登录用户名与密码三项。所以这三个参数也是少不了的。我们使用python的ftplib库来进行操作
    # 初始化ftp操作对象
    f = ftplib.FTP(host)
    # 登录ftp服务器
    f.login(user=username, passwd=password)
    

    通过分析文件路径那一步,我们已经可以得到目标文件存储的目录:/admin/2018/ttt/03/
    我们要做的就是,进入到这个目录里

    f.cwd(ori_directory)
    

    选择目标文件

    我们已经到了目标的文件夹,现在我们需要选择合适的数据。我们是分布式得到应用,一般不会部署一个实例,至少两台,那么我们的日志是“192.168.100.05-20180324.log”与“192.168.100.04-20180324.log”,这两个只是都是3月24号的,我们都需要获取到,前面我们已经获取到了20180324这个字符串,所以我们需要在这个目录中寻找文件名称包含20180324的文件名。我们也是这么做的
    # 列出目录中的所有文件名,放到file_list中
    file_list = f.nlst()
    # 过滤file_list中的包含20180324的文件名,数据放到need_files中
    need_files = list(filter(lambda x: True if need_time_string in x else False, file_list))  
    

    下载文件

    找到后我们就是下载,那么我们需要下载到本地的什么地方呢?所以需要设置一个本地的文件夹的地址,如果不存在,创建此目录。下载文件到这个目录中
    # 如果不存在,创建本地目录
    if not os.path.exists(des_directory):
        os.makedirs(des_directory)
    # 切换到本地目录中
    os.chdir(des_directory)
    for fileName in need_files:
        # 下载到本地
        f.retrbinary('RETR %s' % fileName, open(fileName, 'wb').write)
    

    OK,以上就是我们操作流程,完整的脚本是

    def getHistoryServerLog(des_directory, host, username, password, project_name, log_time):
        print("下载到本地目录:%s,主机IP:%s,用户名:%s,密码:%s,项目名称:%s,日志时间:%s" % (
            des_directory, host, username, password, project_name, log_time))
        print("===============下载开始==============")
        trans_time = time.strptime(log_time, '%Y-%m-%d')
        year = time.strftime('%Y', trans_time)
        month = time.strftime('%m', trans_time)
        need_time_string = time.strftime("%Y%m%d", trans_time)
        ori_directory = '/admin/' + year + "/" + project_name + "/" + month
    
        f = ftplib.FTP(host)
        f.login(user=username, passwd=password)
        f.cwd(ori_directory)
    
        file_list = f.nlst()
        need_files = list(filter(lambda x: True if need_time_string in x else False, file_list))
        if not os.path.exists(des_directory):
            os.makedirs(des_directory)
        os.chdir(des_directory)
        for fileName in need_files:
            f.retrbinary('RETR %s' % fileName, open(fileName, 'wb').write)
        f.close()
        print("===============下载完成==============")
    

    大家可以试着用起来啊.

    相关文章

      网友评论

        本文标题:基于python3下载生产日志

        本文链接:https://www.haomeiwen.com/subject/trvocftx.html