應用日誌獲取-web系統
阿新 • • 發佈:2018-11-06
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})