檢查json日誌的python指令碼

2021-08-14 09:13:33 字數 3091 閱讀 9083

工作中,常有其他部門或者其它公司打過來的json格式的日誌需要處理,往往是在解析的過程中發現了問題,比如格式錯誤,缺少欄位等,再讓研發去改,改完再檢查,一來一回耽誤時間也比較被動,所以寫了乙個python的指令碼,可以發給研發進行自檢,減少後面的麻煩。

json格式檢查

第一步是用python解析json串,常有巢狀的json在拼接時不規範的情況,比如多加了雙引號,對於這樣的問題,可用如下的**檢查

import json

try:

data = json.loads(line.strip()) #line是待檢查的json串

except:

print "json格式有誤,請檢查===>",line

continue

日期格式的檢查

有時日期格式不規範,可用如下方式檢查

import time

try:

dt = data['dt']

time.strptime(dt,"%y-%m-%d %h:%m:%s")

except:

print "日期時間字段(dt)格式有誤,請檢查===>",line

禁用中文的檢查

有時,一些字段,不希望出現中文,可用如下方式

import re

zh_pattern = re.compile(u'[\u4e00-\u9fa5]+')

tmp = zh_pattern.search(data['z'])

if tmp:

print "z欄位中,含有中文,請使用英文===>",line

必要欄位的檢查

日誌要求有若干字段,且不能為空,此時可用如下方式檢查

check = ['a','b','c']; tmp = ""

for tag in check:

if tag not in data or data[tag] is none or data[tag] == '':

tmp += tag+","

if len(tmp)>0:

tmp = tmp[:-1]

print tmp,"字段缺失或值為空,請檢查===>",line

綜合以上內容,完整的指令碼(check.py)如下

#!/usr/bin/env python

# -*- coding: utf-8 -*-

import sys

import re

import json

import time

reload(sys)

sys.setdefaultencoding('utf-8')

def checklog():

check = ['a','b','c']

cnt = 0; json_error = 0; dt_error = 0; zh_error = 0; miss_error = 0

for line in sys.stdin:

if not line or not line.strip():

continue

line = "".join(i for i in line if ord(i)>31) #去除特殊字元

cnt += 1

# json格式

try:

data = json.loads(line.strip())

except:

print "json格式有誤,請檢查===>",line

json_error += 1

continue

# dt欄位

try:

dt = data['dt']

time.strptime(dt,"%y-%m-%d %h:%m:%s")

except:

print "日期時間字段(dt)格式有誤,請檢查===>",line

dt_error += 1

# 禁用中文字段

zh_pattern = re.compile(u'[\u4e00-\u9fa5]+')

tmp = zh_pattern.search(data['z'])

if tmp:

print "z欄位中含有中文,請使用英文===>",line

zh_error += 1

# 其他必要字段

tmp = ""

for tag in check:

if tag not in data or data[tag] is none or data[tag] == '':

tmp += tag+","

if len(tmp)>0:

tmp = tmp[:-1]

print tmp,"字段缺失或值為空,請檢查===>",line

miss_error += 1

print '***************====完成***************===='

print '本次檢查共%d條日誌, json格式錯誤%d條,dt欄位錯誤%d條,z欄位錯誤或缺失%d條,其他必要字段缺失%d條'%(cnt,json_error,dt_error,zh_error,miss_error)

if __name__=='__main__':

checklog()

使用下面的檔案 (t.txt) 進行測試

}}}

"}}

會有如下的輸出

cat t.txt | python check.py
日期時間字段(dt)格式有誤,請檢查===> }

z欄位中含有中文,請使用英文===> }

json格式有誤,請檢查===> "}

b,c 字段缺失或值為空,請檢查===> }

***************====完成***************====

本次檢查共5條日誌, json格式錯誤1條,dt欄位錯誤1條,z欄位錯誤或缺失1條,其他必要字段缺失1條

Oracle Listener 日誌檔案檢查

listener.log太大,超過了2g,影響oracle的穩定執行。listener的日誌檔案 oracle home network log listener.log記錄了通過listener處理的網路請求資訊,它包含客戶端請求的時間,連線方式 專用或共享 連線程式,網路協議,主機名,網路埠號等...

Nginx列印json日誌

1.修改配置,在http 中新增 2.重啟 systemctl restart nginx或者 nginx s reload3.訪問,輸出日誌 日誌中變數的含義 log format access json 比如 參考 引數含義 1.訪問時間 ts 2.訪問埠 server addr 3.請求方式 ...

tomcat的啟動與錯誤日誌檢查

安裝好tomcat,確保jdk安裝並配置成功後,進入tomcat的檔案目錄下如 apache tomcat 8.5.23 開啟bin檔案 cd bin ls一下,如果bin下的檔案都是白色的 如果是綠色,跳過此步驟 說明tomcat沒有執行許可權,要給該tomcat賦予最高許可權,輸入命令 sudo...