Django学习随手记(七)

8 篇文章 0 订阅
5 篇文章 0 订阅
本文记录了使用Django分析Nginx访问日志的需求,介绍了如何在CentOS 6.5上安装Python 2.6及requests库,并提供了按每分钟读取日志的脚本,以减轻服务器压力。此外,提到了使用百度Echarts进行数据可视化,分享了Echarts2的官方示例源码资源。
摘要由CSDN通过智能技术生成

近日有一个需求,分析nginx的访问日志并做一些统计,以下脚本是写来按每分钟读取nginx的日志并发送到server端。
操作系统用的是CentOS6.5,默认python版本2.6,不带requests库。
requests的安装方法:
wget –no-check-certificate https://github.com/pypa/pip/archive/1.5.5.tar.gz
tar zvxf 1.5.5.tar.gz
cd pip-1.5.5/
python setup.py install
pip install requests
以下为日志采集的脚本,有很多可优化的地方,后期修正。

#!/usr/bin/python
# -*- coding: utf-8 -*-

import time
import commands
import sqlite3
import requests
import urllib2


#param[0]:113.122.233.73  访客IP地址
#param[1]:[11/Apr/2016:15:11:08  访问时间
#param[2]:POST  请求方式
#param[3]:/getUrl  请求的接口
def log_analyse(token):
    url = 'http://127.0.0.1/jnginx/rec/access/log/?'
    time_str = time.time()
    time_str_tmp = time.localtime(time_str)
    time_str = time.strftime("%d/%b/%Y:%H:%M:%S", time_str_tmp)
    date_pre = time.strftime("%d/%b/%Y:%H:", time_str_tmp)
    minute = time.strftime("%M", time_str_tmp)
    minute = int(minute)
    if minute == 0:
        minute_start = 59
    else:
        minute_start = minute - 1
    cmd = 'cat access.log |grep "{0}{1}:[00-59]"'.format(date_pre, minute_start)
    status, res = commands.getstatusoutput(cmd)
    if res:
        log_detail_tmp = res.split('\n')
        for log_detail in log_detail_tmp:
            cmd_echo = "echo %s | awk '{print $1;print $3;print $5;print $6;}'" % log_detail
            status_echo, res_echo = commands.getstatusoutput(cmd_echo)
            param = res_echo.split('\n')
            province = check_ip({'ip': param[0]})
            access_time = param[1].replace('[', '')
            api = param[3]
            access_url = url+'token={0}&ip={1}&province={2}&access_time={3}&api={4}'.format(token,param[0],province,access_time,api,0)
            urllib2.urlopen(access_url)
            # print access_url
    else:
        print cmd
    return


def check_ip(ip):
    url = 'http://ip.taobao.com/service/getIpInfo.php'
    try:
        r = requests.get(url, params=ip, timeout=3)
    except requests.RequestException as e:
        print e
    else:
        json_data = r.json()
        if json_data[u'code'] == 0:
            return json_data[u'data'][u'region'].encode('utf-8')
            # print '所在国家: ' + json_data[u'data'][u'country'].encode('utf-8')
            # print '所在地区: ' +json_data[u'data'][u'area'].encode('utf-8')
            # print '所在省份: ' +json_data[u'data'][u'region'].encode('utf-8')
            # print '所在城市: ' +json_data[u'data'][u'city'].encode('utf-8')
            # print '所属运营商:' +json_data[u'data'][u'isp'].encode('utf-8')
        else:
            # print '查询失败,请稍后再试!'
            return ''
    return


token = 'token'
log_analyse(token)

相比于一段时间回传一次数据,每分钟回传一次数据可以相对的均摊服务器的压力,否则每次要处理一大堆日志有可能会使服务器处理业务的速度相对变慢甚至宕机。
用百度echarts画出来的图还是比较炫酷的,但是有时候echarts官网很不稳定,打开比较费事,这里有echarts2的所有官方示例的源码echarts2官方示例源码,方便以后查找。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值