网站统计系统

简单的替代品 GoAccess

GoAccess只能简单分析最近的数据

GoAccess 默认版本并不支持 utf-8,编译安装:

cd ~/download
wget https://github.com/maxmind/geoip-api-c/releases/download/v1.6.12/GeoIP-1.6.12.tar.gz
tar -xzvf GeoIP-1.6.12.tar.gz
cd GeoIP-1.6.12
./configure
make 
make install
echo "/usr/local/lib" >> /etc/ld.so.conf


cd ~/download
wget https://tar.goaccess.io/goaccess-1.3.tar.gz
tar -xzvf goaccess-1.3.tar.gz
cd goaccess-1.3/
apt-get install libncursesw5-dev
./configure   --enable-geoip=mmdb    --enable-utf8 --enable-geoip=legacy
make
make install

vi /etc/default/locale, 设置 locale

 LANG="zh_CN.UTF-8"
 LANGUAGE="zh_CN:zh"

重启 vps, vi /etc/goaccess/goaccess.conf

log-format COMBINED
geoip-database /usr/share/GeoIP/GeoLiteCity.dat
max-items 3660000
with-output-resolver true

GeoLiteCity.dat, 参考 https://github.com/mbcc2006/GeoLiteCity-data

cd  /usr/share/GeoIP/
wget https://github.com/mbcc2006/GeoLiteCity-data/raw/master/GeoLiteCity.dat

输出 csv 文件:

goaccess  -p /etc/goaccess/goaccess.conf  /var/log/nginx/access.log -q -a --no-global-config  -o csv>/hugo_yinhe/static/goaccess.csv
goaccess  -p /etc/goaccess/goaccess.conf  /var/log/nginx/access.log -q -a --no-global-config -o csv>/hugo_yinhe/public/goaccess.csv
goaccess  -p /etc/goaccess/goaccess.conf  /var/log/nginx/access.log -q -a -o /hugo_yinhe/public/goaccess.html 
goaccess  -p /etc/goaccess/goaccess.conf  /var/log/nginx/access.log -q -a -o csv>/tmp/goaccess.json

假设 nginx 用 combined 格式记录日志, 并需要记录下来而不是屏蔽访问成功的日志, /etc/nginx/nginx.conf:

        #access_log /var/log/nginx/access.log;
        #map $status $loggable {
        #         ~^[23] 0;
        #         default 1;
        #}

        #access_log /var/log/nginx/access.log combined buffer=512k flush=1m if=$loggable;
        access_log /var/log/nginx/access.log combined;

参考:

GoAccess 效率很高, 但分析能力有限.

直接用分析 nginx log 的方式

写一个python脚本 nginx_log.py, 循环处理 nginx 访问日志, 存入 MySQL数据库, 并提供如下统计信息:

  • pv 总数, 独立 ip 总数
  • 各url 的pv数
  • country + city 的 pv 分类数

这样就可以:

  • 为页面提供简单的计数器
  • 使用地图展现访问量

vi /etc/supervisor/conf.d/nginxlog.conf

[program:nginxlog]
command=/usr/bin/python3  nginx_log.py ;被监控的进程路径
numprocs=1                    ; 启动一个进程
directory=/hugo_yinhe/     ;执行前切换路径
autostart=true                ; 随着supervisord的启动而启动
autorestart=true              ; 自动重启
startretries=100                 ; 启动失败时的最多重试次数
exitcodes=0                     ; 正常退出代码
stopsignal=KILL               ; 用来杀死进程的信号
stopwaitsecs=10               ; 发送SIGKILL前的等待时间
stderr_logfile=/var/log/nginxlog_stderr.log  ; 指定日志文件
stdout_logfile=/var/log/nginxlog_stdout.log
#把stderr重定向到stdout,默认 false
redirect_stderr=true          ; 重定向stderr到stdout
stdout_logfile_maxbytes = 50MB ;stdout日志文件大小,默认 50MB
stdout_logfile_backups = 10 ; stdout日志文件备份数

supervisorctl reload

supervisorctl start nginx_log

goaccess 作为补充数据呈现。

matomo

Matomo 的前身是 Piwik,是一套基于 PHP+MySQL(mariadb) 技术构建的开源网站访问统计系统,类似 Google Analytics,代码开源,可以自己部署服务, 支持多网站。

ubuntu 下安装 Matomo

安装 matomo实际上相当于建立一个子网站,通过该网站对其他网站提供访问统计服务。

参考: https://matomo.org/docs/installation/

假定安装到 /matomo 目录:

cd ~
wget https://builds.matomo.org/matomo.zip
unzip matomo.zip
mkdir  /matomo
cp -r matomo /
chown -R www-data:www-data /matomo

安装配置数据库 mariadb:

apt-get install php7.4-mysql  mariadb-server
mysql_secure_installation

配置php: vi /etc/php/7.4/fpm/php.ini

extension=pdo_mysql

重启php: service php7.4-fpm restart

创建数据库matomo

配置并重启nginx

chrome浏览器打开新的无痕窗口,访问: https://matomo.yinhe.co/ 安装Matomo,数据库服务器:localhost,并获取网站的类似如下跟踪代码:

<!-- Matomo yinhe.co 的跟踪代码:-->
<script type="text/javascript">
  var _paq = window._paq = window._paq || [];
  /* tracker methods like "setCustomDimension" should be called before "trackPageView" */
  _paq.push(['trackPageView']);
  _paq.push(['enableLinkTracking']);
  (function() {
    var u="//matomo.yinhe.co/";
    _paq.push(['setTrackerUrl', u+'matomo.php']);
    _paq.push(['setSiteId', '1']);
    var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
    g.type='text/javascript'; g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
  })();
</script>
<!-- End Matomo Code -->

将该代码部署到网站页面的 </body> 前。

Matomo

1.地理位置

  • https://db-ip.com/ 下载 DBIP City Lite数据库,注意下载mmdb格式而不是csv格式,解压重命名为 DBIP-City.mmdb,复制到 /matomo/misc目录下
  • Mamoto后台选择该数据库

2.匿名用户查看统计信息

系统,用户管理,anonymous用户:开放查看权限,这样用户访问类似 https://matomo.yinhe.co 部署Matomo服务的URL就可以看到网站的统计数据了。

修改匿名用户的界面语言为中文的方法:

编辑文件 config/config.ini.php,在 [General] 下增加如下的行:

default_language = zh-cn

3.强制SSL连接

修改在您服务器上Matomo目录下的 config/config.ini.php 文件,为General块增加 force_ssl = 1 语句以从PHP角度阻止不安全的HTTP协议访问。

实际上也可以通过nginx配置http到https的跳转,只是Matomo不会检测到。

4.配置mariadb的 max_allowed_packet >=64

vi /etc/mysql/mariadb.conf.d/50-server.cnf, 在 [mysqld] 下修改max_allowed_packet的值

max_allowed_packet =128M

重启MariaDB: service mysqld restart

matomo会影响网站访问性能, 并不推荐.

matomo 如果放hugo的public目录, hugo 生成静态网站时可能会清空目标目录.

参考: https://matomo.org/docs/installation/

cd ~/download
wget https://builds.matomo.org/matomo.zip
unzip matomo.zip
mkdir /matomo
cd matomo
cp -r * /matomo
chown -R www-data:www-data /matomo

创建数据库 matomo

配置nginx,注意需要为 matomo单独配置 php:

        location ^~/matomo/ {
                alias    /matomo/;
                index  index.php;
                location ~ \.php$ {
                        include snippets/fastcgi-php.conf;
                        fastcgi_param SCRIPT_FILENAME $request_filename;
                        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
                 }

        }

访问https://yinhe.co/matomo/ 安装配置

获取跟踪代码JavaScript Tracking Code, 添加到 footer.html

开通匿名用户查看权限

在hugo的 config.yaml 添加 matomo菜单

地理位置:默认已经安装

修改匿名用户的界面语言为中文:

编辑文件 config/config.ini.php,在 [General] 下增加如下的行:default_language = zh-cn

© Licensed under CC BY-NC-SA 4.0

领袖和跟风者的区别就在于创新!——史蒂夫.乔布斯

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!