nginx日志插入数据库中,进行前端分析处理

把前一分钟nginx的日志导入数据库中。

#!/bin/bash
#获取某个时间点的nginx的日志,插入数据库
user=admin
password=12345
nginx_dir=/nginx/logs/access.log
date_time=`date '+%d/%b/%Y:%k:%M' -d '-1 min'`
date_now=`date '+%Y-%m-%d'`

grep "$date_time" $nginx_dir | while read line
do
 #这里有几种写法,但是效率上估计差不多
        eval $(echo "$line" |awk -F'|' '{printf("remote_addr=%s;status=%s;body_bytes_sent=%s;bytes_sent=%s;http_referer=%s;request_time=%s;upstream_addr=%s;upstream_respone_time=%s;upstream_status=%s",$1,$4,$5,$6,$7,$9,$10,$11,$12);}')
        locat_time=`echo $line|awk -F'[|:" "]' '{print $3":"$4":"$5}'`
        #request_method=`echo "$line"|awk -F'|' '{print $3}' |awk -F' ' '{print $1}'`
        request_method=`echo $line|awk -F[\|" "] '{print $4}'`
        #request=`echo "$line"|awk -F'|' '{print $3}' |awk -F' ' '{print $2}'`
        request=`echo $line|awk -F[\|" "] '{print $5}'`
        #http_user_agent=`echo "$line"|awk -F'|' '{print $8}' |awk -F[\(\)]+ '{print $2}'`
        http_user_agent=`echo $line|awk -F[\|\(\)] '{print $9}'`

        /user/bin/mysql -u$user -p$password -e "INSERT INTO nginx_table (remote_addr,date_now,locat_time,request_method,request,status,body_bytes_sent,bytes_sent,http_referer,http_user_agent,request_time,upstream_addr,upstream_respone_time,upstream_status) VALUES ('$remote_addr','$date_now','$locat_time','$request_method','$request','$status','$body_bytes_sent','$bytes_sent','$http_referer','$http_user_agent','$request_time','$upstream_addr','$upstream_respone_time','$upstream_status');"

done
echo "fininsh"
nginx_table 表自己在数据库上新建下,对应着上面的插入数据库的字段。

然后增加一个crontab 1分钟执行一次这个脚本。可以达到将一分钟之间的nginx日志插入数据库中,进行前端分析处理。

你可能感兴趣的:(shell脚本)