zoukankan      html  css  js  c++  java
  • 应用日志获取-web系统

    1 场景

    应用使开发写的,但应用使部署再服务器上,而开发没有ssh登陆服务器的权限。

    so,开发总是请运维查日志,下载日志。

    so and so,运维要花很多时间帮开发去搞日志。

    这是件很没意义的事,所以必须kill

    2 解决思路

    首先想到的就是大名鼎鼎的ELK,试行了一段时间,结果暴毙。暴毙原因:

    a  日志的目的是分析错误,所以info级别的日志没用,需要debug级别的,而业务体量大,导致日志很大,在网络传输、存储、ELK管理集群硬件成本上都是不小的负担。

    b  ELK有过滤后再存储的功能,但前提是日志标准化的推进。标准化没有推,所以回到a问题

    c 开发人员习惯用文本编辑器(notepad++等)查日志,觉得这个更好用。

    所以换成web服务,用django做web框架,saltstack做远程命令执行,在web表格中提交相关日志信息的关键字,把对应服务器上的日志下载到本地。解决了关键问题:

    让开发自己去下日志吧~~~

    ssh登录线上服务器是不可能滴~~~

    step1-基本框架

    使用django自带的form模块,在web的form中,使用post提交指令,指向具体的服务器和日志信息

    然后在服务端调用saltstack,到目标服务器上执行日志的压缩命令,并且把压缩文件复制到指定目录

    在nginx中配置localtion,可以下载到这个文件

    使用django自动去下载这个文件

    views:

    注:xx代表业务参数

    from django.shortcuts import render,HttpResponse
    from django.http import FileResponse
    from .forms import AddForm
    import subprocess
    
    # Create your views here.
    def LogServer(request):
        if request.method == 'POST':
            form = AddForm(request.POST)
    
            if form.is_valid():
    
                # 获取参数
                server = form.cleaned_data['server']
                subtype = form.cleaned_data['xx']
                logpath = form.cleaned_data['logpath']
    
                # 执行命令
                zip_cmd = 'cd %s;zip a.zip `ls | grep ^xx%d`' %(logpath,xx)
                upload_cmd = 'cp %s;cp a.zip /data/download/' %logpath
                salt_cmd = "salt %s cmd.run '%s;%s'" %(server,zip_cmd,upload_cmd)
                subprocess.Popen(salt_cmd,stdout=subprocess.PIPE, shell=True)
    
                #返回文件给客户端
                file_dir = '%s/a.zip' %logpath
                file = open(file_dir, 'rb')
                response = FileResponse(file)
                response['Content-Type'] = 'application/octet-stream'
                response['Content-Disposition'] = 'attachment;filename="a.zip"'
                return response
    
        else:
            form = AddForm()
        return render(request, 'dosql.html', {'form': form})
    

      

    step2-web端可选择应用

    业务环境换到分布式上来,在单台服务器上,在web端可以下载指服务组件的日志

  • 相关阅读:
    C# 窗体间传值方法大汇总(转)
    STM32 配置PC13~PC15
    STM32的USART发送数据时如何使用TXE和TC标志
    STM32_NVIC寄存器详解
    protel99se 问题汇总(不定期更新)
    STM32串口IAP实验笔记
    Keil MDK下如何设置非零初始化变量(复位后变量值不丢失)
    STM32定时器配置(TIM1-TIM8)高级定时器+普通定时器,定时计数模式下总结
    帮助类-AD域操作
    GitHub贡献第一的公司是谁?微软开源软件列表
  • 原文地址:https://www.cnblogs.com/jabbok/p/9900932.html
Copyright © 2011-2022 走看看