目录
一、Python3采集GoBeansproxy日志SET路由数据存储到MySQL
二、Python3 MySQL 数据库连接 - PyMySQL 驱动模块
四、GoBeansproxy测试日志(为方便测试改变了原 SET 的 key 值)
写在最前:
进一步保障 GoBeansDB 集群内副本数据NWR中的 N。
一、Python3采集GoBeansproxy日志SET路由数据存储到MySQL
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
'''=====================================================================
@Project -> File :GoBeansDB -> gobeansproxy_log_analysis.py
@IDE :PyCharm
@Author :Mr. Wufei
@Date :2019/10/23 21:00
@Desc :Python3采集GoBeansproxy日志SET路由数据存储到MySQL,并清理历史日志
======================================================================'''
import re
import time
import datetime
import socket
import struct
import mysqlconn
from os import stat
class LogAnalysis(object):
def __init__(self, mysql_conn_dict, logsize_limit, logsize_days, logfile_path):
"""
:param mysql_conn_dict: 一个包含 MySQL 连接所需信息的字典(格式:{'host': '127.0.0.1', 'port': 3306, 'user': 'test', 'passwd': 'test', 'db': 'test'})
:param logsize_limit: 日志限制大小,单位:M
:param logsize_days: 删除指定日期以前的日志记录,大于等于 1
:param logfile_path: 日志文件路径
"""
self.__mysql_conn_dict = mysql_conn_dict
self.__in_logfile = logfile_path
self.__out_logdata = ''
self.__logsize_limit = logsize_limit
self.__logsize_days = logsize_days
def __getYesterday(self):
"""
:return: 昨天日期
"""
today = datetime.date.today()
oneday = datetime.timedelta(days = 1)
yesterday = today - oneday
yesterday = yesterday.strftime("%Y/%m/%d")
return yesterday
def __getNearlydate(self, n):
"""
:param n: 天数:近几天
:return:一个近 n 天的日期列表,格式为:['2019/10/23', '2019/10/22', '2019/10/21']
"""
nearlydate_list = []
today = datetime.date.today()
for i in range(n):
numday = datetime.timedelta(days = i)
nearlyday = today - numday
nearlyday = nearlyday.strftime("%Y/%m/%d")
nearlydate_list += [nearlyday]
return nearlydate_list
def __parseTime(self, log_date, log_time):
"""
:param log_date: 日志日期,格式为:"2019/09/12"
:param log_time: 日志时间,格式为:"12:29:29.081609"
:return: 10 位的日期时间戳(int类型) + 6 位毫秒(字符串)
"""
date_time = '%s %s' %(log_date, log_time)
data_time, microsecond = date_time.split('.')
data_time = time.strptime(data_time, "%Y/%m/%d %H:%M:%S")
timestamp = int(time.mktime(data_time))
return timestamp, microsecond
def __parseIpport(self, ipport):
"""
解析 IP、PORT,将 IP 、PORT 处理为 int 类型,并返回一个二维列表
:param ipport: 日志 IP、port 字符串,格式为:"xx.xx.3.36:7980,xx.xx.3.36:7981"
:return: 一个二维列表,格式为:[[xx.xx.3.36, 7980], [xx.xx.3.36, 7981]]
"""
gobeans_list = []
for item in str(ipport).split(','):
gobeans_ip, gobeans_port = item.split(':')
int_ip, int_port = struct.unpack('!I', socket.inet_aton(gobeans_ip))[0], int(gobeans_port)
gobeans_list += [[int_ip, int_port]]
return gobeans_list
def __mysqlOperations(self, mysql_conn_dict, sql_cnki, sql_insert):
"""
MySQL 操作
:param mysql_conn_dict: 一个包含 MySQL 连接所需信息的字典
:param sql_cnki: 一条标准查重 SQL 语句,防止插入重复数据或重复执行
:param sql_insert: 一条标准插入 SQL 语句
:return:
"""
with mysqlconn.MySqlDB(host = mysql_conn_dict['host'], port = mysql_conn_dict['port'], user=mysql_conn_dict['user'], passwd=mysql_conn_dict['passwd'], db=mysql_conn_dict['db']) as db:
db.execute(sql_cnki)
cnki_dict = db.fetchone()
cnki_v = list(cnki_dict.items())[0][1]
if cnki_v == 0:
db.execute(sql_insert)
return 'Data inserted successfully'
else:
return 'Data already exists'
def __processLine(self, line):
"""
解析日志,日志格式:2019/10/21 09:40:55.721872 V1 xx.xx.3.36:60895 SET SUCC 8 xx.xx.3.36:7980,xx.xx.3.36:7981 213626 xxx/_x/5d/32/c1926b02ec076353c44743f27a78_852_1280.cz.jpg
对应数据名称:log_date, log_time, log_v, proxy_ip_port, method_set, method_status, unknown_first, gobeans_ip_port, unknown_second, request_key
解析每一行数据,生成 SQL 语句
:param line: 如上格式的一行数据
:return:
"""
try:
(
log_date,
log_time,
_,
proxy_ip_port,
method_type,
method_status,
_,
gobeans_ip_port,
_,
request_key
) = line.split( )
except Exception:
return False
timestamp, microsecond = self.__parseTime(log_date, log_time)
proxy_ip, _ = str(proxy_ip_port).split(':')
proxy_ip = struct.unpack('!I', socket.inet_aton(proxy_ip))[0]
gobeans_list = self.__parseIpport(gobeans_ip_port)
# print(timestamp, microsecond, proxy_ip, method_status, gobeans_list, request_key)
# 判断操作类型
if method_type == 'SET':
m_type = 1
elif method_type == 'DELETE':
m_type = 2
elif method_type == 'GETM':
m_type = 3
elif method_type == 'GET':
m_type = 4
else:
m_type = 0
# 判断操作状态
if method_status == 'SUCC':
m_status = 1
else:
m_status = 0
for item in gobeans_list:
gobeansdb_ip, gobeansdb_port = item
# print(timestamp, microsecond, proxy_ip, m_type, m_status, gobeansdb_ip, gobeansdb_port, request_key)
# 查重 SQL
sql_cnki = '''
select
count(1) as sql_cnki
from gobeansproxy_record
where timestamp_int = %d
and microsecond = "%s"
and method_type = %d
and method_status = %d
and gobeansdb_ip = %d
and gobeansdb_port = %d
''' %(timestamp, microsecond, m_type, m_status, gobeansdb_ip, gobeansdb_port)
# 插入 SQL
sql_insert = '''
insert into
gobeansproxy_record(timestamp_int, microsecond, proxy_ip, method_type, method_status, gobeansdb_ip, gobeansdb_port, request_key)
values(%d, "%s", %d, %d, %d, %d, %d, "%s")
''' %(timestamp, microsecond, proxy_ip, m_type, m_status, gobeansdb_ip, gobeansdb_port, request_key)
self.__mysqlOperations(self.__mysql_conn_dict, sql_cnki, sql_insert)
def __processSize(self, m, n):
"""
判断文件大小及确定删除日志天数
:param m: 日志限制大小,单位:M
:param n: 删除日志天数,大于等于 1
:return: 递归,最终返回一个 float 型的当前日志大小,单位:M
"""
statinfo = stat(self.__in_logfile)
logfile_size = statinfo.st_size
if logfile_size >= (m * 1024 * 1024) and n >= 1:
# 递归删除指定日期(n)以前的日志记录
self.__writeLine(self.__out_logdata, n)
return self.__processSize(m ,n - 1)
else:
return ('%.3f'%(statinfo.st_size/1024/1024))
def __writeLine(self, log_datas, days):
"""
删除指定日期以前的数据
:param log_datas: 所有行的日志数据列表
:param days: 删除日志天数,大于等于 1
:return:
"""
# 获取近几日日期列表(天数由参赛 days 指定)
nearlydate_list = self.__getNearlydate(days)
# 按条件清理历史数据
with open(self.__in_logfile, 'w') as logfile_write:
for line in log_datas:
# line = line.strip()
for nearlyday in nearlydate_list:
line_date = re.match(nearlyday, line)
if not line_date:
continue
else:
logfile_write.write(line)
def process(self):
"""
:return:
"""
# 获取昨天日期
yesterday = self.__getYesterday()
# 解析日志文件
with open(self.__in_logfile, 'r') as logfile:
self.__out_logdata = logfile.readlines()
for line in self.__out_logdata:
line = line.strip()
line_get = re.search(r'GET', line)
line_date = re.match(yesterday, line)
# 判断是否为昨天,并且是否为 SET 记录
if not line_date or line_get:
continue
else:
self.__processLine(line)
# 判断文件大小,限制为指定 M 大小,递归删除指定日期以前的日志记录
self.__processSize(self.__logsize_limit, self.__logsize_days)
"""
if __name__ == "__main__":
mysql_higo_gobeansdb_dict = {'host': 'xx.xx.4.181', 'port': 3701, 'user': 'xxxx_test', 'passwd': 'xxxxtest', 'db': 'xxxx_gobeansdb'}
gobeansproxy = LogAnalysis(mysql_xxxx_gobeansdb_dict, 10, 7, './gobeansdb/log/proxy-access.log')
gobeansproxy.process()
"""
二、Python3 MySQL 数据库连接 - PyMySQL 驱动模块
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
'''=================================================
@Project -> File :GoBeansDB -> mysqlconn.py
@IDE :PyCharm
@Author :Mr. Wufei
@Date :2019/10/23 21:00
@Desc :Python3 MySQL 数据库连接 - PyMySQL 驱动模块
=================================================='''
import pymysql
class MySqlDB(object):
def __init__(self,host = 'localhost', port = 3306, user = 'root', passwd = 'root', db = '', charset = 'utf8'):
# 建立连接
self.conn = pymysql.connect(host = host, port = port, user = user, passwd = passwd, db = db, charset = charset)
# 创建游标,操作设置为字典类型
self.cur = self.conn.cursor(cursor = pymysql.cursors.DictCursor)
def __enter__(self):
# 返回游标
return self.cur
def __exit__(self, exc_type, exc_val, exc_tb):
# 提交数据库并执行
self.conn.commit()
# 关闭游标
self.cur.close()
# 关闭数据库连接
self.conn.close()
"""
if __name__ == '__main__':
with MySqlDB(host = 'xx.xx.4.181', port = 3701, user = 'xxxx_test', passwd = 'xxxxtest', db = 'xxxx_gobeansdb') as db:
sql = '''select
timestamp_int,
microsecond,
proxy_ip,
method_type
method_status,
gobeansdb_ip,
gobeansdb_port,
request_key
from gobeansproxy_record
'''
sql = '''select
concat_ws(".", from_unixtime(timestamp_int), microsecond) as log_time,
inet_ntoa(proxy_ip) as proxy_ip,
if(method_type = 1, 'SET', 'DELETE') as type,
if(method_status = 1, "SUCC", "FAILED") as status,
inet_ntoa(gobeansdb_ip) as gobeansdb_ip,
gobeansdb_port,
request_key
from gobeansproxy_record
'''
db.execute(sql)
for i in db:
print(i)
"""
Python3 MySQL 数据库连接测试结果打印:
.GoBeansDB/gobeansproxy/mysqlconn.py
Process finished with exit code 0 |
三、MySQL 建表语句
mysql> select record_id, timestamp_int, microsecond, proxy_ip, method_type, method_status, gobeansdb_ip, gobeansdb_port, request_key from gobeansproxy_record;
测试数据演示:
mysql> select record_id, timestamp_int, microsecond, proxy_ip, set_status, gobeansdb_ip, gobeansdb_port, request_key from gobeansproxy_record; |
---|
+-----------+---------------+-------------+-----------+-------------+---------------+--------------+----------------+-------------+ |
mysql> select concat_ws(".", from_unixtime(timestamp_int), microsecond) as log_time, inet_ntoa(proxy_ip) as proxy_ip, if(method_type = 1, 'SET', 'DELETE') as type, if(method_status = 1, "SUCC", "FAILED") as status, inet_ntoa(gobeansdb_ip) as gobeansdb_ip, gobeansdb_port, request_key from gobeansproxy_record; |
+----------------------------+------------+--------+--------+--------------+----------------+-------------+ |
四、GoBeansproxy测试日志(为方便测试改变了原 key 值)
2019/xx.xx 09:31:22.432885 V1 xx.xx.3.36:60868 GET FAILED 0 xx.xx.3.36:7982,xx.xx.3.36:7980 928 xxx/_x/d8/ad/871bbca674f4a9042206c26623c3_780_780.cz.jpg
2019/xx.xx 09:40:55.721872 V1 xx.xx.3.36:60895 SET SUCC 8 xx.xx.3.36:7980,xx.xx.3.36:7981 213626 show20
2019/xx.xx 09:40:55.722992 V1 xx.xx.3.36:60895 GET SUCC 8 xx.xx.3.36:7980 808 show20
2019/xx.xx 09:41:39.121972 V1 xx.xx.3.36:60896 GET SUCC 8 xx.xx.3.36:7980 407 show20
2019/xx.xx 10:04:41.128664 V1 xx.xx.3.36:60933 GET FAILED 0 xx.xx.3.36:7981,xx.xx.3.36:7980 834 xxx/_x/da/a9/cea75563ccab60f8cd79e904ab30_790_790.cz.jpg
2019/xx.xx 10:06:39.114136 V1 xx.xx.3.36:60955 GET FAILED 0 xx.xx.3.36:7982,xx.xx.3.36:7980 939 xxx/_x/77/93/af24e3759011e25ffa0de66e4acc_720_1280.cz.jpg
2019/xx.xx 11:09:22.416221 V1 xx.xx.3.36:32811 GET FAILED 0 xx.xx.3.36:7982,xx.xx.3.36:7980 714 /xxx/_x/77/93/af24e3759011e25ffa0de66e4acc_720_1280.cz.jpg
2019/xx.xx 11:29:35.771199 V1 xx.xx.3.36:32856 GET FAILED 0 xx.xx.3.36:7981,xx.xx.3.36:7980 839 xxx/_x/5d/32/c1926b02ec076353c44743f27a78_852_1280.cz.jpg
2019/xx.xx 11:32:56.790596 V1 xx.xx.3.36:32857 GET FAILED 0 xx.xx.3.36:7981,xx.xx.3.36:7980 719 /xxx/_x/5d/32/c1926b02ec076353c44743f27a78_852_1280.cz.jpg
2019/xx.xx 11:52:43.724210 V1 xx.xx.3.36:32880 GET FAILED 0 xx.xx.3.36:7981,xx.xx.3.36:7980 792 xxx/_x/5d/32/c1926b02ec076353c44743f27a78_852_1280.cz.jpg
2019/xx.xx 11:53:48.533971 V1 xx.xx.3.36:32880 GET FAILED 0 xx.xx.3.36:7981,xx.xx.3.36:7980 943 xxx/_x/5d/32/c1926b02ec076353c44743f27a78_852_1280.cz.jpg
2019/xx.xx 11:55:00.942678 V1 xx.xx.3.36:32880 GET FAILED 0 xx.xx.3.36:7981,xx.xx.3.36:7980 924 xxx/_x/5d/32/c1926b02ec076353c44743f27a78_852_1280.cz.jpg
2019/xx.xx 11:58:45.771280 V1 xx.xx.3.36:32904 GET FAILED 0 xx.xx.3.36:7981,xx.xx.3.36:7980 862 xxx/_x/5d/32/c1926b02ec076353c44743f27a78_852_1280.cz.jpg
2019/xx.xx 12:26:10.934321 V1 xx.xx.3.36:32904 GET FAILED 0 xx.xx.3.36:7981,xx.xx.3.36:7980 903 xxx/_x/5d/32/c1926b02ec076353c44743f27a78_852_1280.cz.jpg
2019/xx.xx 12:29:29.081609 V1 xx.xx.3.36:32950 SET SUCC 8 xx.xx.3.36:7980,xx.xx.3.36:7982 213626 wufei20
2019/10/21 09:31:22.432885 V1 xx.xx.3.36:60868 GET FAILED 0 xx.xx.3.36:7982,xx.xx.3.36:7980 928 xxx/_x/d8/ad/871bbca674f4a9042206c26623c3_780_780.cz.jpg
2019/10/21 09:40:55.721872 V1 xx.xx.3.36:60895 SET SUCC 8 xx.xx.3.36:7980,xx.xx.3.36:7981 213626 show21
2019/10/21 09:40:55.722992 V1 xx.xx.3.36:60895 GET SUCC 8 xx.xx.3.36:7980 808 show21
2019/10/21 09:41:39.121972 V1 xx.xx.3.36:60896 GET SUCC 8 xx.xx.3.36:7980 407 show21
2019/10/21 10:04:41.128664 V1 xx.xx.3.36:60933 GET FAILED 0 xx.xx.3.36:7981,xx.xx.3.36:7980 834 xxx/_x/da/a9/cea75563ccab60f8cd79e904ab30_790_790.cz.jpg
2019/10/21 10:06:39.114136 V1 xx.xx.3.36:60955 GET FAILED 0 xx.xx.3.36:7982,xx.xx.3.36:7980 939 xxx/_x/77/93/af24e3759011e25ffa0de66e4acc_720_1280.cz.jpg
2019/10/21 11:09:22.416221 V1 xx.xx.3.36:32811 GET FAILED 0 xx.xx.3.36:7982,xx.xx.3.36:7980 714 /xxx/_x/77/93/af24e3759011e25ffa0de66e4acc_720_1280.cz.jpg
2019/10/21 11:29:35.771199 V1 xx.xx.3.36:32856 GET FAILED 0 xx.xx.3.36:7981,xx.xx.3.36:7980 839 xxx/_x/5d/32/c1926b02ec076353c44743f27a78_852_1280.cz.jpg
2019/10/21 11:32:56.790596 V1 xx.xx.3.36:32857 GET FAILED 0 xx.xx.3.36:7981,xx.xx.3.36:7980 719 /xxx/_x/5d/32/c1926b02ec076353c44743f27a78_852_1280.cz.jpg
2019/10/21 11:52:43.724210 V1 xx.xx.3.36:32880 GET FAILED 0 xx.xx.3.36:7981,xx.xx.3.36:7980 792 xxx/_x/5d/32/c1926b02ec076353c44743f27a78_852_1280.cz.jpg
2019/10/21 11:53:48.533971 V1 xx.xx.3.36:32880 GET FAILED 0 xx.xx.3.36:7981,xx.xx.3.36:7980 943 xxx/_x/5d/32/c1926b02ec076353c44743f27a78_852_1280.cz.jpg
2019/10/21 11:55:00.942678 V1 xx.xx.3.36:32880 GET FAILED 0 xx.xx.3.36:7981,xx.xx.3.36:7980 924 xxx/_x/5d/32/c1926b02ec076353c44743f27a78_852_1280.cz.jpg
2019/10/21 11:58:45.771280 V1 xx.xx.3.36:32904 GET FAILED 0 xx.xx.3.36:7981,xx.xx.3.36:7980 862 xxx/_x/5d/32/c1926b02ec076353c44743f27a78_852_1280.cz.jpg
2019/10/21 12:26:10.934321 V1 xx.xx.3.36:32904 GET FAILED 0 xx.xx.3.36:7981,xx.xx.3.36:7980 903 xxx/_x/5d/32/c1926b02ec076353c44743f27a78_852_1280.cz.jpg
2019/10/21 12:29:29.081609 V1 xx.xx.3.36:32950 SET SUCC 8 xx.xx.3.36:7980,xx.xx.3.36:7982 213626 wufei21
2019/10/22 09:31:22.432885 V1 xx.xx.3.36:60868 GET FAILED 0 xx.xx.3.36:7982,xx.xx.3.36:7980 928 xxx/_x/d8/ad/871bbca674f4a9042206c26623c3_780_780.cz.jpg
2019/10/22 09:40:55.721872 V1 xx.xx.3.36:60895 SET SUCC 8 xx.xx.3.36:7980,xx.xx.3.36:7981 213626 show22
2019/10/22 09:40:55.722992 V1 xx.xx.3.36:60895 GET SUCC 8 xx.xx.3.36:7980 808 show22
2019/10/22 09:41:39.121972 V1 xx.xx.3.36:60896 GET SUCC 8 xx.xx.3.36:7980 407 show22
2019/10/22 10:04:41.128664 V1 xx.xx.3.36:60933 GET FAILED 0 xx.xx.3.36:7981,xx.xx.3.36:7980 834 xxx/_x/da/a9/cea75563ccab60f8cd79e904ab30_790_790.cz.jpg
2019/10/22 10:06:39.114136 V1 xx.xx.3.36:60955 GET FAILED 0 xx.xx.3.36:7982,xx.xx.3.36:7980 939 xxx/_x/77/93/af24e3759011e25ffa0de66e4acc_720_1280.cz.jpg
2019/10/22 11:09:22.416221 V1 xx.xx.3.36:32811 GET FAILED 0 xx.xx.3.36:7982,xx.xx.3.36:7980 714 /xxx/_x/77/93/af24e3759011e25ffa0de66e4acc_720_1280.cz.jpg
2019/10/22 11:29:35.771199 V1 xx.xx.3.36:32856 GET FAILED 0 xx.xx.3.36:7981,xx.xx.3.36:7980 839 xxx/_x/5d/32/c1926b02ec076353c44743f27a78_852_1280.cz.jpg
2019/10/22 11:32:56.790596 V1 xx.xx.3.36:32857 GET FAILED 0 xx.xx.3.36:7981,xx.xx.3.36:7980 719 /xxx/_x/5d/32/c1926b02ec076353c44743f27a78_852_1280.cz.jpg
2019/10/22 11:52:43.724210 V1 xx.xx.3.36:32880 GET FAILED 0 xx.xx.3.36:7981,xx.xx.3.36:7980 792 xxx/_x/5d/32/c1926b02ec076353c44743f27a78_852_1280.cz.jpg
2019/10/22 11:53:48.533971 V1 xx.xx.3.36:32880 GET FAILED 0 xx.xx.3.36:7981,xx.xx.3.36:7980 943 xxx/_x/5d/32/c1926b02ec076353c44743f27a78_852_1280.cz.jpg
2019/10/22 11:55:00.942678 V1 xx.xx.3.36:32880 GET FAILED 0 xx.xx.3.36:7981,xx.xx.3.36:7980 924 xxx/_x/5d/32/c1926b02ec076353c44743f27a78_852_1280.cz.jpg
2019/10/22 11:58:45.771280 V1 xx.xx.3.36:32904 GET FAILED 0 xx.xx.3.36:7981,xx.xx.3.36:7980 862 xxx/_x/5d/32/c1926b02ec076353c44743f27a78_852_1280.cz.jpg
2019/10/22 12:26:10.934321 V1 xx.xx.3.36:32904 GET FAILED 0 xx.xx.3.36:7981,xx.xx.3.36:7980 903 xxx/_x/5d/32/c1926b02ec076353c44743f27a78_852_1280.cz.jpg
2019/10/22 12:29:29.081609 V1 xx.xx.3.36:32950 SET SUCC 8 xx.xx.3.36:7980,xx.xx.3.36:7982 213626 wufei22
2019/10/23 09:31:22.432885 V1 xx.xx.3.36:60868 GET FAILED 0 xx.xx.3.36:7982,xx.xx.3.36:7980 928 xxx/_x/d8/ad/871bbca674f4a9042206c26623c3_780_780.cz.jpg
2019/10/23 09:40:55.721872 V1 xx.xx.3.36:60895 SET SUCC 8 xx.xx.3.36:7980,xx.xx.3.36:7981 213626 show23
2019/10/23 09:40:55.722992 V1 xx.xx.3.36:60895 GET SUCC 8 xx.xx.3.36:7980 808 show23
2019/10/23 09:41:39.121972 V1 xx.xx.3.36:60896 GET SUCC 8 xx.xx.3.36:7980 407 show23
2019/10/23 10:04:41.128664 V1 xx.xx.3.36:60933 GET FAILED 0 xx.xx.3.36:7981,xx.xx.3.36:7980 834 xxx/_x/da/a9/cea75563ccab60f8cd79e904ab30_790_790.cz.jpg
2019/10/23 10:06:39.114136 V1 xx.xx.3.36:60955 GET FAILED 0 xx.xx.3.36:7982,xx.xx.3.36:7980 939 xxx/_x/77/93/af24e3759011e25ffa0de66e4acc_720_1280.cz.jpg
2019/10/23 11:09:22.416221 V1 xx.xx.3.36:32811 GET FAILED 0 xx.xx.3.36:7982,xx.xx.3.36:7980 714 /xxx/_x/77/93/af24e3759011e25ffa0de66e4acc_720_1280.cz.jpg
2019/10/23 11:29:35.771199 V1 xx.xx.3.36:32856 GET FAILED 0 xx.xx.3.36:7981,xx.xx.3.36:7980 839 xxx/_x/5d/32/c1926b02ec076353c44743f27a78_852_1280.cz.jpg
2019/10/23 11:32:56.790596 V1 xx.xx.3.36:32857 GET FAILED 0 xx.xx.3.36:7981,xx.xx.3.36:7980 719 /xxx/_x/5d/32/c1926b02ec076353c44743f27a78_852_1280.cz.jpg
2019/10/23 11:52:43.724210 V1 xx.xx.3.36:32880 GET FAILED 0 xx.xx.3.36:7981,xx.xx.3.36:7980 792 xxx/_x/5d/32/c1926b02ec076353c44743f27a78_852_1280.cz.jpg
2019/10/23 11:53:48.533971 V1 xx.xx.3.36:32880 GET FAILED 0 xx.xx.3.36:7981,xx.xx.3.36:7980 943 xxx/_x/5d/32/c1926b02ec076353c44743f27a78_852_1280.cz.jpg
2019/10/23 11:55:00.942678 V1 xx.xx.3.36:32880 GET FAILED 0 xx.xx.3.36:7981,xx.xx.3.36:7980 924 xxx/_x/5d/32/c1926b02ec076353c44743f27a78_852_1280.cz.jpg
2019/10/23 11:58:45.771280 V1 xx.xx.3.36:32904 GET FAILED 0 xx.xx.3.36:7981,xx.xx.3.36:7980 862 xxx/_x/5d/32/c1926b02ec076353c44743f27a78_852_1280.cz.jpg
2019/10/23 12:26:10.934321 V1 xx.xx.3.36:32904 GET FAILED 0 xx.xx.3.36:7981,xx.xx.3.36:7980 903 xxx/_x/5d/32/c1926b02ec076353c44743f27a78_852_1280.cz.jpg
2019/10/23 12:29:29.081609 V1 xx.xx.3.36:32950 SET SUCC 8 xx.xx.3.36:7980,xx.xx.3.36:7982 213626 wufei23
2019/10/31 09:31:22.432885 V1 xx.xx.3.36:60868 GET FAILED 0 xx.xx.3.36:7982,xx.xx.3.36:7980 928 xxx/_x/d8/ad/871bbca674f4a9042206c26623c3_780_780.cz.jpg
2019/10/31 09:40:55.721872 V1 xx.xx.3.36:60895 SET SUCC 8 xx.xx.3.36:7980,xx.xx.3.36:7981 213626 show31
2019/10/31 09:40:55.722992 V1 xx.xx.3.36:60895 GET SUCC 8 xx.xx.3.36:7980 808 show31
2019/10/31 09:41:39.121972 V1 xx.xx.3.36:60896 GET SUCC 8 xx.xx.3.36:7980 407 show31
2019/10/31 12:29:29.081609 V1 xx.xx.3.36:32950 DELETE SUCC 8 xx.xx.3.36:7980,xx.xx.3.36:7982 213626 wufei31
2019/10/31 10:04:41.128664 V1 xx.xx.3.36:60933 GET FAILED 0 xx.xx.3.36:7981,xx.xx.3.36:7980 834 xxx/_x/da/a9/cea75563ccab60f8cd79e904ab30_790_790.cz.jpg
2019/10/31 10:06:39.114136 V1 xx.xx.3.36:60955 GET FAILED 0 xx.xx.3.36:7982,xx.xx.3.36:7980 939 xxx/_x/77/93/af24e3759011e25ffa0de66e4acc_720_1280.cz.jpg
2019/10/31 11:09:22.416221 V1 xx.xx.3.36:32811 GET FAILED 0 xx.xx.3.36:7982,xx.xx.3.36:7980 714 /xxx/_x/77/93/af24e3759011e25ffa0de66e4acc_720_1280.cz.jpg
2019/10/31 11:29:35.771199 V1 xx.xx.3.36:32856 GET FAILED 0 xx.xx.3.36:7981,xx.xx.3.36:7980 839 xxx/_x/5d/32/c1926b02ec076353c44743f27a78_852_1280.cz.jpg
2019/10/31 11:32:56.790596 V1 xx.xx.3.36:32857 GET FAILED 0 xx.xx.3.36:7981,xx.xx.3.36:7980 719 /xxx/_x/5d/32/c1926b02ec076353c44743f27a78_852_1280.cz.jpg
2019/10/31 11:52:43.724210 V1 xx.xx.3.36:32880 GET FAILED 0 xx.xx.3.36:7981,xx.xx.3.36:7980 792 xxx/_x/5d/32/c1926b02ec076353c44743f27a78_852_1280.cz.jpg
2019/10/31 11:53:48.533971 V1 xx.xx.3.36:32880 GET FAILED 0 xx.xx.3.36:7981,xx.xx.3.36:7980 943 xxx/_x/5d/32/c1926b02ec076353c44743f27a78_852_1280.cz.jpg
2019/10/31 11:55:00.942678 V1 xx.xx.3.36:32880 GET FAILED 0 xx.xx.3.36:7981,xx.xx.3.36:7980 924 xxx/_x/5d/32/c1926b02ec076353c44743f27a78_852_1280.cz.jpg
2019/10/31 11:58:45.771280 V1 xx.xx.3.36:32904 GET FAILED 0 xx.xx.3.36:7981,xx.xx.3.36:7980 862 xxx/_x/5d/32/c1926b02ec076353c44743f27a78_852_1280.cz.jpg
2019/10/31 12:26:10.934321 V1 xx.xx.3.36:32904 GET FAILED 0 xx.xx.3.36:7981,xx.xx.3.36:7980 903 xxx/_x/5d/32/c1926b02ec076353c44743f27a78_852_1280.cz.jpg
2019/10/31 12:29:29.081609 V1 xx.xx.3.36:32950 SET SUCC 8 xx.xx.3.36:7980,xx.xx.3.36:7982 213626 wufei31
2019/10/31 12:29:29.081609 V1 xx.xx.3.36:32950 GETM SUCC 8 xx.xx.3.36:7980,xx.xx.3.36:7982 213626 feifei01 feifei02 feifei03