Skip to content

删除 Umami 无用数据

更新于 at 19:01

Table of Contents

Open Table of Contents

前言

虽然我的博客访问量不高,但我仍然使用自部署的 Umami 进行网站流量统计。之前没有使用过相关工具,所以直接使用了 Umami 提供的默认追踪器代码。

然而,这带来了一个问题:我在本地调试博客时,Umami 无法过滤掉本地数据,导致统计数据中包含了大量我自己调试时的数据。特别是昨天我在修改博客的搜索功能(目前已暂时下线)时,由于代码问题,导致 /search/ 页面访问量暴增。

Umami统计到的错误数据

参考官方文档 Tracker configuration 后,我了解到可以通过在追踪器代码中添加 data-domains 属性来解决这一问题,从而避免统计到本地调试的数据。

<script
  defer
  src="https://xxxxxxxxxxxxx"
  data-website-id="xxxxxxxxxxxxxxxxxxxxxx"
  data-domains="k1r.in"
></script>

木已成舟,之前的错误数据已经产生,如何删除这些错误数据呢?可以通过对 Umami 的数据库进行手动删除。

温馨提示:数据无价,请提前备份好文件,先在测试环境测试无误后,再到生产环境中进行操作。

连接到 PostgreSQL 数据库

(1) 切换到 Umami 的 docker compose 文件所在目录

cd ~/docker/compose/umami/

(2) 进入 PostgreSQL 容器

docker compose exec db bash

(3) 连接到 PostgreSQL 数据库

下面两个 umami 分别是你数据库的用户密码,请自行修改。

psql -U umami -d umami

查询相关数据

使用 \dt 查看数据库中的所有表,再一一查看表数据得知统计数据存储在 website_event 表中。

如果不会写 SQL 语句,可以面向 ChatGPT 操作。

比如我这里就需要统计网页路径为 search 和来源域名是 100.100.1.1 的数据数量,你可以打开 Umami Dashboard 查看网站所有时间段的数据量,确认数字是否正确

SELECT COUNT(*) FROM website_event
WHERE referrer_domain = '100.100.1.1';
SELECT COUNT(*) FROM website_event
WHERE url_path LIKE '%search%';

删除错误数据

如果确认了哪些数据需要删除,可以用下面的命令删除。

DELETE FROM website_event
WHERE referrer_domain = '100.100.1.1';
DELETE FROM website_event
WHERE url_path LIKE '%search%';

这里可能会出现和之前查询的数量不匹配,这是因为两者数据有交集。

再次查询以确认删除成功。

SELECT COUNT(*) FROM website_event
WHERE referrer_domain = '100.100.1.1';
SELECT COUNT(*) FROM website_event
WHERE url_path LIKE '%search%';

重启 Umami 容器

(1) 退出 PostgreSQL 和容器

\q
exit

(2) 重启 Umami 容器

docker compose restart

大功告成,打开 Umami Dashboard 查看是否成功删除。