nginx日志收集储存到mysql


有个需求就是收集日志并分析就搞了个这个首先必须要python3以及 pymysql库
我这边是centos7就用yum安装python3 以及 pymysql库

yum install python3
pip3 install pymysql

然后就是数据库了

这个数据表需要复制了存为sql导入创建好的数据库里面

-- phpMyAdmin SQL Dump
-- version 5.0.4
-- https://www.phpmyadmin.net/
--
-- 主机: localhost
-- 生成日期: 2021-03-27 11:53:10
-- 服务器版本: 5.7.33-log
-- PHP 版本: 7.1.33

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;

--
-- 数据库: `nginxlog`
--

-- --------------------------------------------------------

--
-- 表的结构 `nginxlog`
--

CREATE TABLE `nginxlog` (
  `id` int(10) NOT NULL,
  `ip` varchar(128) NOT NULL DEFAULT '',
  `time` datetime DEFAULT NULL,
  `methods` varchar(10) NOT NULL DEFAULT '',
  `source` varchar(400) DEFAULT NULL,
  `protocol` varchar(10) NOT NULL DEFAULT '',
  `status` varchar(10) NOT NULL DEFAULT '',
  `user_agent` varchar(128) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- 转储表的索引
--

--
-- 表的索引 `nginxlog`
--
ALTER TABLE `nginxlog`
  ADD PRIMARY KEY (`id`);

--
-- 在导出的表使用AUTO_INCREMENT
--

--
-- 使用表AUTO_INCREMENT `nginxlog`
--
ALTER TABLE `nginxlog`
  MODIFY `id` int(10) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=211;
COMMIT;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

python源码

#/usr/bin/env python
#-*-coding:UTF-8 -*-
from  datetime  import  datetime

stat_days = []
import   pymysql
#print(datetime.now().strftime("%Y-%m-%d %H:%M:%S")) #2018-05-25 22:23:44
#print(datetime.now().strftime("%d/%b-%Y %H:%M:%S")) #25/May-2018 22:23:44格式
#print(datetime.strptime('17/Jun/2017:12:11:16',"%d/%b/%Y:%H:%M:%S")) #格式转换
connect=pymysql.connect(
   host='127.0.0.1',
   port=3306,
   user='root',
   password='61a14abbb5fac222',
   database='nginxlog',
   charset="utf8"

)
cur = connect.cursor()
sql= "insert into nginxlog(ip,time,methods,source,protocol,status,user_agent) values(%s,%s,%s,%s,%s,%s,%s)"
def ng(line):
      _nodes = line.split()
      IP= _nodes[0]
      Time= _nodes[3][1:-1].replace(":"," ",1) #将时间转换为17/Jun/2017 12:43:4格式
      Time = datetime.strptime(Time,"%d/%b/%Y %H:%M:%S")#将时间格式化为2017-06-17 12:43:04
      Methods = _nodes[5][1:]
      Source = _nodes[6]
      Protocol = _nodes[7][:-1]
      Status = _nodes[8]
      user_agent = _nodes[11][1:]+_nodes[12][1:]+_nodes[13]+_nodes[14]+_nodes[15]+_nodes[16]
      print(IP,Time,Methods,Source,Protocol,Status,user_agent)
      cur.execute(sql,(IP,Time,Methods,Source,Protocol,Status,user_agent))
      connect.commit()

with open("/www/wwwroot/lingling/chifan.cb.log","r")  as  ngfile:
   for line in ngfile:
        try:
            ng(line)
        except:
            print("出现错误")
   connect.close()

执行的话就是

python3 源码文件的名称

步骤 --->创建数据库---->将数据表复制另存为sql---->导入sql---->复制python3的源码另存为nginx_log.py ----->修改数据库链接地址为自己的------>运行就好了向我这里就是 python3 nginx_log.py

声明:小小博客|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - nginx日志收集储存到mysql


Carpe Diem and Do what I like