> 公司有一台服务器,上面放置了n个网站。大部分都做了CDN,但是随着网站和业务的增加,服务器负载越来越高。我们希望能“按域名统计出服务器访问流量情况”,从而优化业务代码。找了很多分析工具,goaccess是我觉得最好用的,生成的结果也正好是我需要的,于是我写了个shell,按域名批量生成nginx日志报表!
先贴一张分析报表效果图:

#goaccess官网:https://goaccess.io/
## 一、 安装
不同发新版的Linux安装方式有所不同,具体怎么安装,请参考官方文档:https://goaccess.io/download ,本人使用的是CentOS。直接使用yum安装即可:
`yum install goaccess`
## 二、 修改 /etc/goaccess.conf 文件
添加下面的配置(其实就是找到对应的配置,去除前面的‘#’而已,注意不同的安装方式,goaccess.conf 的存储位置可能不一样):
~~~
time-format %T
date-format %d/%b/%Y
log_format %h - %^ [%d:%t %^] "%r" %s %b "%R" "%u"
~~~
## 三、修改nginx配置,在每个server末尾加上写日志的代码(根据需要添加)
所有的server include一个写日志的配置文件,这样以后开启关闭就不用修改很多文件了,当然如果你的server很少,就没有必要了
`include "conf.d/alias/access_log.conf";`
access_log.conf 文件配置如下(用$host命名日志文件,自动更具域名分开存储日志,注意老版本的nginx可能不支持在日志路径上面加变量):
`access_log /www/web/web2/wwwlogs/$host.log;`
## 四、 修改“goaccess.sh”,配置你nginx的日志目录和生成html的存储目录,还有。
~~~
#分析结果访问域名(用于将生成的报表发送到钉钉群,管理人员点击即可查看)
uri='http://39.107.88.67/goaccess';
#分析结果存储目录(放一个空间大点的位置)
report_path="/www/web/goaccess"
#nginx的日志存储目录
log_path="/www/web/web2/wwwlogs"
~~~
注意,如果您要开启钉钉群通知功能,请在你的钉钉群里生成群机器人连接,贴入
## 五、 定时运行批处理程序“goaccess.sh”,脚本文件在本文最后,注意加上可执行权限`chmod +x goaccess.sh`
~~~
#每天6点执行一次
0 6 * * * /etc/nginx/conf.d/goaccess.sh >> /www/log/goaccess.sh.log
~~~
## 六、配置你的nginx,让goaccess生成的html报表可以通过你配置的“分析结果访问域名”访问(最好开启目录访问,同时加个权限验证)。我使用的配置代码如下:
~~~
location /goaccess/ {
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
alias /www/web/goaccess/;
}
~~~
## 七、完善本脚本
日志分析完成偶,最好将日志压缩一下,过期的日志可以删除掉,节省服务器磁盘空间。另外goaccess生成的HTML文件可以通过email直接发送到邮箱。
最后贴上“goaccess.sh”脚本
~~~
#!/bin/sh
#goaccess官网:https://goaccess.io/
#分析结果访问域名(用于将生成的报表发送到钉钉群,管理人员点击即可查看)
uri='http://39.107.88.67/goaccess';
#分析结果存储目录
report_path="/www/web/goaccess"
#nginx的日志存储目录
log_path="/www/web/web2/wwwlogs"
execute()
{
for logfile in $(ls -d ${log_path}/*.log)
do
YmdHMS=$(date +'%Y-%m-%d_%H%M%S')
echo " "
echo " "
#echo "= $(date +'%Y-%m-%d %H:%M:%S') ="
echo ${YmdHMS}
#日志文件全路径
#echo $logfile
#日志文件名(不带路径)
logfile_name=${logfile##*/}
echo ${logfile_name}
#日志文件名不带后缀的
host_name=${logfile_name%.*}
#echo $host_name
#mv 分割日志
bak_logfile=${log_path}/backup_nginx_logs/${host_name}/${YmdHMS}.log
#创建切割日志存储目录
mkdir -p ${log_path}/backup_nginx_logs/${host_name}
#转存
mv ${logfile} ${bak_logfile}
#创建分析结果存储目录
mkdir -p ${report_path}/${host_name}
report_path_html=${report_path}/${host_name}/${YmdHMS}.html
echo "EXECUTE goaccess ${bak_logfile} -o ${report_path_html}"
goaccess ${bak_logfile} -o ${report_path_html}
#注意修改send_dingtalk内部钉钉群机器人地址,如果你需要通知钉钉群的功能,当然你也可以改吧次功能,通过其他方式通知管理人员。
send_dingtalk ${logfile_name}' 分析结果: '${uri}/${host_name}/${YmdHMS}.html
done
}
send_dingtalk(){
json_msg="{'msgtype': 'text','text': {'content': '${1}'}}"
dingtalk_uri='https://oapi.dingtalk.com/robot/send?access_token=60f41499561e6842a7450180b19fd51a01c34e9b9cb7c1f3729084003e0e8127'
curl ${dingtalk_uri} \
-H 'Content-Type: application/json' \
-d "${json_msg}"
}
if [ ! -d "${log_path}/backup_nginx_logs/" ]
then
mkdir -p ${log_path}/backup_nginx_logs/
fi
echo "============== begin ==============="
execute
echo "============== end =============="
~~~
- 关于我
- nginx
- 代理
- 实例1
- 使用Nginx实现反向代理
- nginx反向代理配置
- Nginx缓存原理及配置
- nginx 信号集
- rewrite
- nginx rewrite规则
- nginx rewrite 正则规则详解
- nginx+php-fpm fastcgi防止跨站、跨目录的安全设置
- 写了个shell脚本,实现nginx日志自动切割,并利用goaccess分析成HTML报表,然后通知管理人员查阅
- nginx禁止一些常见的不应该让用户访问的文件
- PHP
- 实现PHP多进程管理
- php代码规范
- Linux
- 常用命令
- scp
- touch
- nohup
- rsync
- ssh命令 远程登录
- chmod
- nginx日志切割脚本
- Linux使用ssh公钥实现免密码登录Linux
- 使用ssh公钥密钥自动登陆linux服务器
- Linux查看程序端口占用情况
- ssh 公钥私钥认证原理
- 路由图
- CentOS7防火墙设置
- linux下用户管理
- Linux 服务器安全技巧
- Linux shell 提取文件名和目录名
- Linux环境下设置命令别名(alias)
- Git
- 搭建Git服务器
- 手把手教你搭建git服务器
- Git 基本操作
- git删除文件夹/文件(不删除本地文件)
- git忽略文件和文件夹以及文件权限
- Git的四个区五种状态
- git init 和 git init --bare 的区别
- git仓库删除所有提交历史记录,成为一个干净的新仓库
- 如何正确使用Git Flow
- HTTP
- 前端跨域解决方案
- HTTP基本概念
- Redis
- Redis 数据类型及应用场景
- JavaScript
- WebSocket探秘
- socket与websocket的区别
- 基于 Swoole 的微信扫码登录
- Web前端开发规范手册
- 简单的学习了一下ES6
- ES6模块的import和export用法
- MySql
- MySql重置root密码的方法
- mysql 5.6.30 开启慢查询日志
- mysql查看锁表情况
- 我的设计稿
- 会计出纳系统
- 上门宝ERP系统
- 社交应用七大需求
- 出纳系统
- 利用SdfMpp搭建中大行软件系统
- B2C库存商品系统
- 软件
- 网上商城
- 思维逻辑
- 系统架构分层图
- 代码检查规范
- 研发计划
- 系统架构
- 我设计的架构架构图
- 电商网站架构案例
- 大型网站架构
- 服务熔断、降级、限流、异步RPC
- 软件版本号规范
- 第三方服务引擎
- kafka
- ElasticSearch
- 阿里云 推荐引擎
- 随记
- 人生最大的投资
- 产品研发团队管理的6个方面
- 我感觉自己根本不是一个创业者,更谈不上企业家,果然还是屌丝这个称呼更适合我。
- 学什么语音都应该养成的编程习惯
- 2018年5月23日 多云转阴 15-24°C 离职信
- 2017年12月25日
- 对“目标”的认知
- 个人简历
- API设计
- 理解OAuth 2.0
- OAuth 2.0四种授权方式小结
- 对 REST 的理解
- RESTful API 设计指南
- RESTful API 设计
- RPC
- 微服务架构方案
- SOA
- 理解RESTful架构
- RESTful API GET,DELETE,PUT和POST的响应状态码
- MongoDB
- MongoDB-无法启动的一个问题