應用日志獲取-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端可以下載指服務組件的日志

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM