工作中,常有其他部門或者其它公司打過來的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...