我們測試的過程中,如果遇到需要讀取日誌該怎麼通過python實現呢。測試小白的我寫了個python指令碼來實現讀取伺服器上的日誌。下面的例子是我的乙個測試需求:讀取日誌中的某個字段例如欄位a和我的預期結果作比較。
實現之前我們需要知道伺服器的位址、日誌檔案所在的路徑、日誌的名稱以及日誌的結構,最好先自己擼一條日誌看一下。大概思路是
連線伺服器;
確定自己上報日誌所在的路徑,以及自己需要的日誌在哪個日誌檔案下;
拿到該條日誌,讀取自己需要的字段(確定日誌格式在這就尤為重要)。
# 連線伺服器
defconnect_server
(server_ip, username, password)
:try
: client = paramiko.sshclient(
) client.set_missing_host_key_policy(paramiko.autoaddpolicy())
# print('------------開始連線伺服器(%s)-----------' % server_ip)
client.connect(server_ip,
22, username=username, password=password)
# print('------------認證成功!.....-----------')
except exception:
print
(f'連線遠端linux伺服器(ip:)發生異常!請檢查使用者名稱和密碼是否正確!'
)return client
#讀取日誌檔案
defread_log
(upload_ts)
:#a為我需要取的字段
a ='' upload_time_arr = time.localtime(upload_ts)
#因為我的日誌名稱為20201027.log
#確定上報的日誌所在的日誌檔名
log_name = time.strftime(
"%y%m%d%h"
, upload_time_arr)
+'.log'
print
(f'log_name = '
)#連線伺服器
client = connect_server(
'伺服器位址'
,'使用者名稱'
,'密碼'
)#通過命令讀日誌
cmd =
'cat 日誌檔案所在的路徑'
+ log_name
print
(cmd)
stdin, stdout, stderr = client.exec_command(cmd)
log_text =
str(stdout.read(
), encoding=
'utf8'
)#日誌檔案下若有多條日誌,將日誌之間用\n分隔
log_arr = log_text.split(
'\n'
)#檢查日誌格式,不合規的日誌丟棄
for s in
reversed
(log_arr)
: log_info = s.split(
'\t')if
len(log_info)
<5:
continue
#我需要的字段在最後乙個元素中,是個json格式的報文,所以轉成字典方便取值
dic = json.loads(log_info[4]
) a = dic[
'a']
print
(f'讀取到日誌中的a = '
) client.close(
)
日誌讀取 利用Python實現Web日誌分析
平時應急響應的時候可以利用一些小工具來使得工作事半功倍,看網上有一些比較優秀的web日誌分析工具。用過一次奇安信的360星圖日誌分析工具,該款工具會根據內建的一些攻擊規則生成分析報告。但是這個工具個性化還是有欠缺的,比如我想搜尋 日誌狀態碼為404的,請求體中帶有phpinfo的,所有就突發奇想寫了...
python讀取日誌檔案
下面是我們的日誌檔案,裡面都是一條條這樣的資料 為了將讀取的日誌檔案存入mysql,我們需要讀取日誌檔案,然後按照指定格式切割出需要的資料 表字段會是time,ip level,messages 這個可以處理大檔案,因此每次只讀取一行 def read log 讀取日誌檔案,進行資料重組,寫入mys...
python讀取日誌,存入mysql
2 在mysql中,使用sql查詢出現次數最多的ip,以及該ip的訪問次數。這裡寫 片 print 開始提取。print 已完成 count 行。count 1database coding utf 8 from sqlalchemy import create engine,table,colum...