用python写一个简单的Web查看系统日志

背景:

      公司的研发查看生产环境的日志,考虑安全问题,每次都要我们运维人员去拿日志发给研发人员,这样会浪费我们运维人员很多的时间,我就想能不能通过web端给研发人员自己去看日志。通过百度我发现python的paramiko库可以远程查看服务器的文件,我就想用paramiko+flask的方式写一个查看日志的小工具。以下是源码

源码及思路:

      首先我们用paramiko模块去尝试去获取服务端的日志信息

#获取服务端日志信息
import paramiko
import os
import codecs
import yaml
#Linux端
#with open('/app/application/log_find/host/hosts.yaml', 'r') as f:
#    host = yaml.load(f, Loader=yaml.FullLoader)
#Windows端
with open('E:/my_python/log_find_cornupay/host/hosts.yaml', 'r') as f:
    host = yaml.load(f, Loader=yaml.FullLoader)
try:
    client = paramiko.SSHClient()
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    client.connect(host['host_233']['hostname'], host['host_233']['port'], host['host_233']['username'], host['host_233']['password'], compress=True, timeout=65536)
    sftp_client = client.open_sftp()
except EOFError:
    client.connect(host['host_233']['hostname'], host['host_233']['port'], host['host_233']['username'], host['host_233']['password'], compress=True, timeout=65536)
    sftp_client = client.open_sftp()

class Get_log():
    def __init__(self,url):
        self.url = url
    def get_log(self):
        log = sftp_client.open(self.url,'rb')
        log_list = []
        for line in log:
            line = line.decode('GBK')
            log_list.append(line)
        log.close()
        return ''.join(log_list)

     这里我把账户密码写到hosts.yaml文件里了,然后把获取日志封装为一个class类了,后面在调用class写上文件路径会方便很多,用列表来显示日志信息是因为想要在web界面一行一行显示,因为日志里面有中文,所有用decode()函数来转换为GBK编码,不然会有乱码的情况。调用一下class查看是否能获取到文件内容

获取文件没问题了,接下来我们用flask的Web框架把获取到的内容显示到Web端

#us_lanpay_kernel蓝图
from flask import Blueprint, render_template
from host import host_233
us_lanpay_kernel = Blueprint('us_lanpay_kernel', __name__)
@us_lanpay_kernel.route('/us_lanpay_kernel_nohup')
def us_lanpay_kernel_nohup():
    us_lanpay_kernel_nohup_log = host_233.Get_log('/opt/weblogic/user_projects/domains/CN_LANPAY_KERNEL/test.txt')
    return render_template('Conupay/us_lanpay_kernel/us_lanpay_kernel_nohup.html', us_lanpay_kernel_nohup_log=us_lanpay_kernel_nohup_log.get_log())

这里用蓝图把获取到的内容渲染到前端的html上,由于我不会前端,找的是一个开源的框架随便改了改用的,大致思路就是这样,以下是效果图

你可能感兴趣的:(python)