python读取日志,存入mysql的代码教程
1、下载 1万条日志记录,保存为一个文件,读取文件并解析日志,从日志中提取ip, time_local, http_method, url, http_status, body_bytes_sent , http_referer, ua字段,以制表符分割。
在mysql中创建表,将刚才解析后的结果存入mysql表中。
2、在mysql中,使用sql查询出现次数最多的ip,以及该ip的访问次数。 这里写代码片
file_data
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
# coding:utf-8# ip, time_local, http_method, url, http_status, body_bytes_sent , http_referer, uaimport redata_all = {}data_ev = {}print("开始提取。。。")with open("access_parts.log") as f: count = 1 for line in f.readlines(): line = line.strip('\n') line = re.split("\s|-", line) # print(line) data_ev["ip"] = line[0] data_ev["time_local"] = line[5].split('[')[1] data_ev["http_method"] = line[7].split('"')[1] data_ev["url"] = line[8] data_ev["http_status"] = line[9] if line[10] == '-': data_ev["body_bytes_sent"] = 0 else: data_ev["body_bytes_sent"] = line[10] data_ev["http_referer"] = line[11].split('"') data_ev["ua"] = ' '.join(line[12:23]).split('"') if data_ev["http_method"] == 'GET': data_ev["ua"] = data_ev["ua"][3] else: data_ev["ua"] = data_ev["ua"][1] + data_ev["ua"][3] print(data_ev) data_all[count] = data_ev # print("已完成"+count+"行。。。") count += 1 |
database
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
# coding:utf-8from sqlalchemy import create_engine, Table, Column, Integer, String, MetaData, ForeignKeyfrom sqlalchemy.orm import sessionmakerfrom sqlalchemy.ext.declarative import declarative_basefrom file_data import data_allBaseModel = declarative_base()print("开始连接数据库。。。")DB_CONNECT = 'mysql+pymysql://root:123456@localhost:3306/test'engine = create_engine(DB_CONNECT, echo=True)DB_Session = sessionmaker(bind=engine)session = DB_Session()print("连接成功。。。")class Access(BaseModel): print("111") __tablename__ = 'data' id = Column(Integer(), primary_key=True) ip = Column(String(50)) time_local = Column(String(50)) http_method = Column(String(50)) http_status = Column(String(50)) body_bytes_sent = Column(String(50)) http_referer = Column(String(50)) ua = Column(String(500))def init_db(): BaseModel.metadata.create_all(engine)def drop_db(): BaseModel.metadata.drop_all(engine)drop_db()init_db() |
main
|
1
2
3
4
5
6
7
8
9
10
11
12
|
# 数据处理# coding:utf-8from file_data import data_allfrom database import Accessfrom database import sessionfor k,v in data_all.items(): print("开始插入。。。") access_ = Access(ip=v["ip"], time_local=v["time_local"], http_method=v["http_method"], http_status=v["http_status"], body_bytes_sent=v["body_bytes_sent"], http_referer=v["http_referer"], ua=v["ua"]) session.add(access_) session.commit() print("插入成功。。。") |

浙公网安备 33010602011771号