利用 goaccess 分析 nginx 日志

用户头像
Megatron7
关注
发布于: 2020 年 05 月 06 日
利用goaccess分析nginx日志

日常运维中服务器积累了大量的nginx访问日志,可以利用goaccess分析数据。



找出一些有价值的线索。



  • 1.使用设备占比(针对优化,可以很硬气的说我们不需要优化IE6,因为没有目标用户

  • 2.找出人群分布,优化机器向所在地部署。加速访问

  • 3.访问频率高的文件、接口,是否需要拆分

  • 4.筛选爬虫特征(过滤掉



结合现有的业务进行分析。。。



goaccess提供了终端显示、HTML、csv等访问数据的方式。

这里依次讲解使用细则。(安装步骤省略,请自行百度)



首先放出一张网络结构图。



生成HTML



这里的实现思路是把分布在多台机器上的日志汇总到一起,来进行分析。

这里涉及到:logrotate、nginx access_log配置、scp、rsyslog(放弃,依赖性比较强)、goaccess常规命令



#!/bin/bash
# 数据已脱敏
LOCKNAME="/tmp/my.lock"
if ( set -o noclobber; echo "$$" > "$LOCKNAME") 2> /dev/null;
then
trap 'rm -f "$LOCKNAME"; exit $?' INT TERM EXIT
DATETIME=date +"%Y%m%d"
PINDEX=0
echo -e "\033[32m1.开始拉取各平台日志\033[0m";
for i in "10.0.0.1" "10.0.0.2" "10.0.0.3"
do
((PINDEX++))
scp work@$i:/nginxaccess.log-${DATETIME}.gz nginxaccess-${DATETIME}-$PINDEX.gz
done
cd goaccess
echo -e "\033[32m2.开始处理日志\033[0m";
zcat nginxaccess-${DATETIME}-.gz goaccess-1.3/goaccess -p goaccess.conf -o ./nginxaccess${DATETIME}.html -
source ./nginxrequestlog.sh
echo -e "\033[32m3.开始同步html\033[0m";
scp nginxaccess${DATETIME}.html work@10.0.0.8:/goaccess
rm -rf nginxaccess-${DATETIME}
rm -f $LOCKNAME
trap - INT TERM EXIT
else
echo "Failed to acquire lockfile: $LOCKNAME."
echo "Held by $(cat $LOCKNAME)"
exit 1
fi



这样在10.0.0.8机器挂上nginx就能访问了。



终端显示

终端显示的话就比较简单了



/usr/bin/goaccess -f access.log





利用webshell也可以把内容打到web浏览器上,方便查看



csv格式的运用

我们把csv格式的数据导出后,存进db。这样方便对每日的数据进行归总,查询流量趋势。

当然也可以自行设计报表,方便统计。



实现上和HTML的处理差不多,把最终得到的CSV格式的数据通过脚本打到web应用。

进行持久化,当然纯shell也是可以直接操作DB的。



# shell中直接通过命令行导入csv
load data infile '需要导入的文件全名' into table 将要导入的数据库表名 fields terminated by '列的分隔符' optionally enclosed by '"' escaped by '"' lines terminated by '回车换行符';



# 采用shell发送http的形式是考虑到db接入层一致的问题
#!/bin/bash
DATETIME=date +"%Y%m%d"
DEBUG=0
if [[ $DEBUG == 1 ]];then
echo 'test env'
HOST='http://127.0.0.1/webserver'
nginxrequestlog='nginxaccesstest.csv'
else
echo 'prod env'
# 这里最好使用内网域名,以免机器迁移访问失效
HOST='http://10.0.0.7/webserver'
nginxrequestlog='nginxaccess"$DATETIME".csv'
fi
function httppost(){
curl -X POST \
$HOST \
-H 'Content-Type: application/json' \
-d "$*"
}
if [ -f $nginxrequestlog ]; then
str=''
for line in cat $nginxrequestlog|grep requests|grep -vE "(staticrequests|general)"|awk -F '","' '{OFS=",";print $1,$2,$3,$4,$5}'
do
# 数据处理
done
str=${str%?}
str="[$str]"
httppost $str
else
echo 'nginxrequest_log not exists'
fi






关注公号,领取学习资料



发布于: 2020 年 05 月 06 日 阅读数: 39
用户头像

Megatron7

关注

预见更多的人,听更多的故事 2018.01.05 加入

分享编程中的趣事,欢迎关注我的公号:vm-321

评论

发布
暂无评论
利用goaccess分析nginx日志