importjsonimportargparseimportpandasaspdparser=argparse.ArgumentParser(description="Detects large intervals without any input in Docker json logs")parser.add_argument("inputFile",type=str,help="the log file to parse")parser.add_argument("--deltaMs",type=int,default=500,help="duration of the interval in ms")parser.add_argument("--previousLogs",type=int,default=10,help="number of lines to display before the detected interval")args=parser.parse_args()previousTimeStamp=NonepreviousLogs=[]withopen(args.inputFile)asf:forlineinf:jsonLine=json.loads(line)timeStamp=pd.to_datetime(jsonLine["time"],format="%Y-%m-%dT%H:%M:%S.%fZ")ifpreviousTimeStampisnotNoneand(timeStamp-previousTimeStamp)>pd.Timedelta(args.deltaMs,unit="ms"):forpinpreviousLogs:print(p["log"].rstrip())print(jsonLine["log"].rstrip())print("")previousTimeStamp=timeStamppreviousLogs.append(jsonLine)iflen(previousLogs)>args.previousLogs:previousLogs.pop(0)
importjsonimportargparseimportpandasaspdimportstatisticsparser=argparse.ArgumentParser(description="Show average TimeDelta after a given log in Docker json logs")parser.add_argument("inputFile",type=str,help="the log file to parse")parser.add_argument("--text",type=str,help="text to find in logs")parser.add_argument("--deltaMs",type=int,default=100,help="count the # of logs whose duration is greater than this interval in ms")args=parser.parse_args()previousTimeStamp=NonepreviousLine=Nonemeasures=[]longDurationCount=0withopen(args.inputFile)asf:forlineinf:jsonLine=json.loads(line)timeStamp=pd.to_datetime(jsonLine["time"],format="%Y-%m-%dT%H:%M:%S.%fZ")ifpreviousLineisnotNoneandargs.textinpreviousLine["log"]:ts=(timeStamp-previousTimeStamp).total_seconds()*1000measures.append(ts)# print("{m} ms".format(m = measures[len(measures) - 1]))ifts>args.deltaMs:longDurationCount=longDurationCount+1previousTimeStamp=timeStamppreviousLine=jsonLineprint("found {n} occurences of '{t}'".format(n=len(measures),t=args.text))print("{n} occurences took more than {d} ms".format(n=longDurationCount,d=args.deltaMs))print("average = {m} ms".format(m=statistics.mean(measures)))print("stddev = {m} ms".format(m=statistics.stdev(measures)))print("max = {m} ms".format(m=max(measures)))
# sample usages:# python interval.py c:\Users\alain\Downloads\delete-lify-json.log --textFrom="POST /instances" --textTo="New instance stored" --format="json"# python interval.py c:\Users\alain\Downloads\delete-lify-json.log --textFrom="DELETE /" --textTo="of type 2"importjsonimportargparseimportpandasaspdimportstatisticsparser=argparse.ArgumentParser(description="Show average TimeDelta between two logs Docker json logs")parser.add_argument("inputFile",type=str,help="the log file to parse")parser.add_argument("--format",type=str,default="json",help="docker logs format json/text")parser.add_argument("--textFrom",type=str,help="text to find in logs")parser.add_argument("--textTo",type=str,help="text to find in logs")parser.add_argument("--deltaMs",type=int,default=100,help="count the # of logs whose duration is greater than this interval in ms")args=parser.parse_args()fromTimeStamp=NonefromLog=Nonemeasures=[]longDurationCount=0withopen(args.inputFile)asf:forlineinf:ifargs.format=="json":jsonLine=json.loads(line)timeStamp=pd.to_datetime(jsonLine["time"],format="%Y-%m-%dT%H:%M:%S.%fZ")else:tsString=line.split(" ")[1]timeStamp=pd.to_datetime(tsString,format="%H:%M:%S.%f")jsonLine={"log":line}iffromTimeStampisNoneandargs.textFrominjsonLine["log"]:fromTimeStamp=timeStampfromLog=jsonLineiffromTimeStampisnotNoneandargs.textToinjsonLine["log"]:ts=(timeStamp-fromTimeStamp).total_seconds()*1000measures.append(ts)# print("{m} ms".format(m = measures[len(measures) - 1]))ifts>args.deltaMs:longDurationCount=longDurationCount+1print(fromLog["log"].rstrip())print(jsonLine["log"].rstrip())print("")fromTimeStamp=Noneprint("found {n} occurences of '{t1}' followed by '{t2}'".format(n=len(measures),t1=args.textFrom,t2=args.textTo))print("{n} occurences took more than {d} ms".format(n=longDurationCount,d=args.deltaMs))print("average = {m} ms".format(m=statistics.mean(measures)))print("stddev = {m} ms".format(m=statistics.stdev(measures)))print("max = {m} ms".format(m=max(measures)))
Comments (0)
HTTPSSSH
You can clone a snippet to your computer for local editing.
Learn more.