1 场景
应用使开发写的,但应用使部署再服务器上,而开发没有ssh登陆服务器的权限。
so,开发总是请运维查日志,下载日志。
so and so,运维要花很多时间帮开发去搞日志。
这是件很没意义的事,所以必须kill
2 解决思路
首先想到的就是大名鼎鼎的ELK,试行了一段时间,结果暴毙。暴毙原因:
a 日志的目的是分析错误,所以info级别的日志没用,需要debug级别的,而业务体量大,导致日志很大,在网络传输、存储、ELK管理集群硬件成本上都是不小的负担。
b ELK有过滤后再存储的功能,但前提是日志标准化的推进。标准化没有推,所以回到a问题
c 开发人员习惯用文本编辑器(notepad++等)查日志,觉得这个更好用。
所以换成web服务,用django做。在web表格中提交相关日志信息的关键字,把对应服务器上的日志下载到本地。解决了关键问题:
让开发自己去下日志吧~~~
ssh登录线上服务器是不可能滴~~~
step1-简单的文件下载功能
使用django自带的form模块,在web的form中,使用post提交一个指令,然后在服务端将nginx的日志文件压缩并发送给客户端下载。
from django.shortcuts import render,HttpResponse from django.http import FileResponse from .forms import AddForm import zipfile # Create your views here. def LogServer(request): if request.method == 'POST': form = AddForm(request.POST) if form.is_valid(): flag = form.cleaned_data['flag'] if flag == 1: z = zipfile.ZipFile('accces.log.zip', 'w', zipfile.ZIP_DEFLATED) z.write('/app/nginx/logs/access.log') z.close() file = open('accces.log.zip', 'rb') response = FileResponse(file) response['Content-Type'] = 'application/octet-stream' response['Content-Disposition'] = 'attachment;filename="accces.log.zip"' return response else: return HttpResponse('try again') else: form = AddForm() return render(request, 'dosql.html', {'form': form})