Skip to content

通过fluentd采集nginx日志,生成用户访问报表

Notifications You must be signed in to change notification settings

bernytt/nginx_access_record

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

nginx_access_record

通过fluentd采集nginx日志,生成用户访问记录报表

介绍

  • fluentd采集nginx日志, 存入mongDB中
  • Django处理mongDB中数据, 利用EChart展示用户访问记录报表

需求分析

用户访问记录报表包含如下信息:

  • 根据访问ip生成全国热力图
    • 解析ip插入新集合ip: ip、城市名、经度、纬度、数量
  • 根据path生成热门文章列表
    • 解析path插入新集合url_path: name, frequency
  • 根据agent生成浏览器、OS等信息饼图
    • 解析agent插入新集合 browser: name, frequency
    • 解析agent插入新集合 os: name, frequency
  • 生成每天访问量曲线
    • 每次访问插入新集合 day_visit: datetime, frequency
  • 生成总的访问数量

详情

nginx日志地址

/usr/local/var/log/nginx/access.log

nginx日志格式

127.0.0.1 - - [20/Nov/2015:16:11:26 +0800] "GET /blog/index.php?r=articleFront/view&id=34 HTTP/1.1" 200 9435 "http://localhost:8008/blog/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:42.0) Gecko/20100101 Firefox/42.0"

mongoDB数据库信息

  • 地址: 127.0.0.1:12345
  • 数据库名: access_record
  • 集合名
    • nginx_access_record: 访问记录
    • ip: ip、城市编号、城市名、经度、纬度、访问数量
    • os: name、访问数量
    • browser:name、访问数量
    • url_path:name、访问数量
    • day_visit:data、访问数量

mongoDB数据格式

{
    "_id":"564ec99e83fceca951000006",
    "host":"127.0.0.1",
    "user":"-",
    "method":"GET",
    "path":"/",
    "code":"200",
    "size":"90422",
    "referer":"-",
    "agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/601.2.7 (KHTML, like Gecko) Version/9.0.1 Safari/601.2.7",
    "time":"2015-11-20T07:19:52Z"
}

实现

理想情况是做成流式计算, 实时处理每条nginx日志, 然后对数据库进行增量更新.
架构分为三层:

  • Fluentd处理每条nginx access日志, 并更新到相应的数据库集合中
  • Django直接拿各集合的数据, 处理完之后传递给前端
  • 前端依赖EChart进行展现

About

通过fluentd采集nginx日志,生成用户访问报表

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 48.1%
  • Ruby 32.4%
  • HTML 19.5%