美文网首页
Nginx的日志分割及pv统计展示

Nginx的日志分割及pv统计展示

作者: 穿靴子跳迪斯kou的猫 | 来源:发表于2018-10-31 18:21 被阅读0次

      运维统计分析,通过分割nginx日志(按小时/天/星期/月),pv统计访问量以便于分析热门操作场景。具体实施按以下几点执行:

1.获取nginx配置nginx.conf文件所在的目录;
      如/etc/nginx/nginx.conf
2.nginx.conf指定pid文件的存放位置;
      pid /wls/nginx/nginx.pid;
3.nginx.conf指定日志文件的格式;
      log_format access $remote_addr - $remote_user [$time_local] "$request"' '$status $body_bytes_sent "$http_referer"' '"$http_user_agent" $http_x_forwarded_for;
其中,access表示日志类型的别名
4.nginx.conf指定日志文件存放的位置,并指定日志格式;
      access_log /etc/nginx/logs/access.log access;
5.执行nginx -t检测nginx.conf的配置是否异常;
      若提示pid的路径无操作权限,核对终端提示的路径与nginx.conf中配置是否一致。若不一致,请以终端返回的地址为准;
      2018/09/24 09:53:55 [emerg] 55408#0: open() "/run/nginx.pid" failed (13: Permission denied)
如终端提示的pid文件地址为"/run/nginx.pid",将配置的地址pid /wls/nginx/nginx.pid改为pid /run/nginx.pid;
6.指定nginx的配置文件路径
      nginx -c /etc/nginx/nginx.conf
若终端提示端口占用,先查看端口是否为nginx端口,若是先终止进程,再次执行 nginx -c命令
7.重启nginx;
      sudo nginx -s reload
8.定期将日志分割备份;

指明日志存放路径
LOG_HOME="/etc/nginx/logs/"

获取日期变量,保存为前一天的日志
day=$(date -d '-1day' +%Y%m%d)

备份日志文件,以日期分割
echo 'paic1234' | sudo -S mv $LOG_HOME/access.log $LOG_HOME/access.log-$day
# 重读日志
echo 'paic1234' | sudo -S kill -USR1 `cat /run/nginx.pid`

9.分析分割后的日志

pvs = `awk '{print $7}' $NGINX_LOG_PATH | grep $keywords | grep "\.html" | wc -l`
echo pvs = $pvs

IP = `awk '{print $1 " " $7}' $NGINX_LOG_PATH | grep $keywords | grep "\.html" | awk '{print $1}'|sort | uniq -c |wc -l`
echo IP = $IP

page_url = `awk '{print $7}' $NGINX_LOG_PATH | grep $keywords  | grep "\.html" |sort | uniq -c |sort -n -k 1 -r |head -n 10`
echo page_url = $page_url
...
result=`python $PYTHON_SCRIPT $DATE $pvs $IP $page_url `
echo $result

其中,$NGINX_LOG_PATH为nginx日志文件地址,$PYTHON_SCRIPT为第10步中的python文件,作用是将关键字相关的pv次数,ip以及请求路径上报至数据库中。
10.将分析结果写入文件或者数据库

#以日期粒度更新统计数据
import MySQLdb
from sys import argv
import json
if __name__ == '__main__':
    file, date, pvs,ip,page_url = argv
    if date == "":
        exit(0)
    # 连接数据库
    db = MySQLdb.connect(host="xx", port=3306, user="test",passwd="test",db="test",charset="utf8")
    # cursor()操作游标
    cursor = db.cursor()
    cursor.execute("SELECT * from tb_test where date='"+date+")
    data = cursor.fetchone()
    if data:
        sql = "UPDATE sql"
    else:
        sql = "INSERT INTO sql"
    try:
        cursor.execute(sql)
        db.commit()
    except:
        db.rollback()
    db.close()

11.将分析统计展示出来
获取数据库中保存的数据,以图标的方式展示:

image.png

相关文章

  • Nginx的日志分割及pv统计展示

    运维统计分析,通过分割nginx日志(按小时/天/星期/月),pv统计访问量以便于分析热门操作场景。具体实施按以下...

  • python统计pv/uv

    代码实现 参考资料 从Nginx的access日志统计PV、UV和热点资源

  • NGINX日志切割

    NGINX日志切割 @(nginx笔记)[nginx] 非常简单的分割NGINX的日志文件,方便查阅。流程1.将当...

  • logrotate命令

    说明 logrotate命令是一个日志分割命令 用法 这里以 nginx日志为例 开启日志功能 配置日志分割规则 ...

  • nginx日志分析

    1,日志定义 在nginx.conf中定义的日志格式如下: 日志文件如下: 2,日志分割 nginx没有命令直接将...

  • SparkStreaming项目实战,实时计算pv和uv(硬肝)

    最近有个需求,实时统计pv,uv,结果按照date,hour,pv,uv来展示,按天统计,第二天重新统计,当然了实...

  • 日志分割

    nginx日志放在 /var/log/nginx 下配置/etc/logrotate.d/nginx 测试分割/u...

  • 了解如何配置Nginx日志!

    了解如何配置Nginx日志! 前言 Nginx日志对于统计、系统服务排错很有用。 Nginx日志主要分为两种:ac...

  • ELK收集nginx的json格式日志

    为了便于利用 ELK日志平台收集展示 Nginx 的日志,可以将 Nginx 的日志改成 json 的格式 1.修...

  • Nginx运行日志自动切割

    所谓自动分割Nginx日志文件,就是指Rotate Nginx log files,即让Nginx每天(或每个星期...

网友评论

      本文标题:Nginx的日志分割及pv统计展示

      本文链接:https://www.haomeiwen.com/subject/zrpkoftx.html