利用goaccess分析nginx日志

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

找出一些有价值的线索。

  • 1.使用设备占比(针对优化,可以很硬气的说我们不需要优化IE6,因为没有目标用户
  • 2.找出人群分布,优化机器向所在地部署。加速访问
  • 3.访问频率高的文件、接口,是否需要拆分
  • 4.筛选爬虫特征(过滤掉

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

goaccess提供了终端显示、HTML、csv等访问数据的方式。
这里依次讲解使用细则。(安装步骤省略,请自行百度)

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

生成HTML

这里的实现思路是把分布在多台机器上的日志汇总到一起,来进行分析。
这里涉及到:logrotate、nginx access_log配置、scp、rsyslog(放弃,依赖性比较强)、goaccess常规命令

#!/bin/bash
# 数据已脱敏
LOCK_NAME="/tmp/my.lock"
if ( set -o noclobber; echo "$$" > "$LOCK_NAME") 2> /dev/null;
then
trap 'rm -f "$LOCK_NAME"; exit $?' INT TERM EXIT

DATE_TIME=`date +"%Y%m%d"`
P_INDEX=0
echo -e "\033[32m1.开始拉取各平台日志\033[0m";
for i in "10.0.0.1" "10.0.0.2" "10.0.0.3"
do
  ((P_INDEX++))
  scp work@$i:/nginx_access.log-${DATE_TIME}.gz nginx_access-${DATE_TIME}-$P_INDEX.gz
done

cd goaccess
echo -e "\033[32m2.开始处理日志\033[0m";

zcat nginx_access-${DATE_TIME}-*.gz goaccess-1.3/goaccess -p goaccess.conf -o ./nginx_access_${DATE_TIME}.html -

source ./nginx_request_log.sh
echo -e "\033[32m3.开始同步html\033[0m";
scp nginx_access_${DATE_TIME}.html work@10.0.0.8:/goaccess
rm -rf nginx_access-${DATE_TIME}*

rm -f $LOCK_NAME
trap - INT TERM EXIT
else
echo "Failed to acquire lockfile: $LOCK_NAME."
echo "Held by $(cat $LOCK_NAME)"
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

DATE_TIME=`date +"%Y%m%d"`
DEBUG=0

if [[ $DEBUG == 1 ]];then
    echo 'test env'
    HOST='http://127.0.0.1/webserver'
    nginx_request_log='nginx_access_test.csv'
else
    echo 'prod env'
    # 这里最好使用内网域名,以免机器迁移访问失效
    HOST='http://10.0.0.7/webserver'
    nginx_request_log='nginx_access_"$DATE_TIME".csv'
fi


function http_post(){
    curl -X POST \
    $HOST \
    -H 'Content-Type: application/json' \
    -d "$*"
}

if [ -f $nginx_request_log ]; then
    str=''
    for line in `cat $nginx_request_log|grep requests|grep -vE "(static_requests|general)"|awk -F '","' '{OFS=",";print $1,$2,$3,$4,$5}'`
    do
        # 数据处理
    done
    str=${str%?}
    str="[$str]"
    http_post $str
else
    echo 'nginx_request_log not exists'
fi

关注公号,领取学习资料

关注公号,领取学习资料
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
GoAccess是一款基于日志分析的开源工具,可以帮助用户实时监控和分析服务器日志,以便更好地了解服务器的状态和性能。下面是GoAccess分析nginx日志的详细步骤: 1. 安装GoAccessLinux系统中,可以通过包管理器安装GoAccess,例如: ``` sudo apt-get install goaccess ``` 2. 收集nginx日志nginx的配置文件中,可以设置日志的格式和路径。例如: ``` log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; ``` 这里采用的是默认的nginx日志格式,日志文件路径为`/var/log/nginx/access.log`。 3. 分析nginx日志 使用GoAccess分析nginx日志非常简单,只需要在终端输入以下命令: ``` goaccess /var/log/nginx/access.log ``` 然后就会显示一个实时的控制台窗口,展示nginx日志的各种统计信息,例如: - 请求的响应时间 - 客户端地理位置 - 请求的URL和HTTP方法 - 访问来源和搜索关键字 - 响应状态码和响应大小 还可以使用GoAccess的各种选项来自定义分析结果的格式和内容,例如: - `--date-format`:指定日期格式 - `--log-format`:指定日志格式 - `--output`:将结果输出到文件中 例如,要将结果输出到HTML文件中,可以使用以下命令: ``` goaccess /var/log/nginx/access.log -o report.html --log-format=COMBINED ``` 这将把分析结果保存到`report.html`文件中,并使用默认的`COMBINED`日志格式。 总之,GoAccess是一款非常强大和易于使用的日志分析工具,可以帮助我们更好地了解服务器的状态和性能,从而进行优化和改进。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值