惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

小众软件
小众软件
MyScale Blog
MyScale Blog
N
News and Events Feed by Topic
IT之家
IT之家
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
有赞技术团队
有赞技术团队
T
The Blog of Author Tim Ferriss
The Cloudflare Blog
博客园 - 聂微东
Apple Machine Learning Research
Apple Machine Learning Research
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
美团技术团队
V
Visual Studio Blog
M
MIT News - Artificial intelligence
V
V2EX
博客园_首页
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Blog — PlanetScale
Blog — PlanetScale
F
Full Disclosure
H
Help Net Security
MongoDB | Blog
MongoDB | Blog
博客园 - 叶小钗
S
SegmentFault 最新的问题
博客园 - 三生石上(FineUI控件)
D
Docker
Engineering at Meta
Engineering at Meta
博客园 - Franky
aimingoo的专栏
aimingoo的专栏
Jina AI
Jina AI
N
Netflix TechBlog - Medium
宝玉的分享
宝玉的分享
大猫的无限游戏
大猫的无限游戏
人人都是产品经理
人人都是产品经理
云风的 BLOG
云风的 BLOG
博客园 - 司徒正美
I
InfoQ
G
Google Developers Blog
L
LangChain Blog
F
Fortinet All Blogs
博客园 - 【当耐特】
Hugging Face - Blog
Hugging Face - Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
WordPress大学
WordPress大学
A
Arctic Wolf
Martin Fowler
Martin Fowler
G
GRAHAM CLULEY
L
LINUX DO - 热门话题
C
Cisco Blogs
Y
Y Combinator Blog
罗磊的独立博客

mephisto.cc

修复rime-ice无法弹出候选框的问题 开机滚动字体显示优化 个人网站安全防护 树莓派上部署Vaultwarden 个人网站监控 Hugo全站AVIF记 Linux下尝试使用Godot开发小游戏 Arch linux dae 透明代理 Airflow接管galler-dl下载任务 如何使用gallery-dl批量下载图像 Arch核显下如何愉快玩Dota2和CS2 Arch/labwc 环境网络相关设置 Rime添加dota2词库 Arch 重装记录 Supertuxkart iOS版终于发布了 打造自己的流媒体音乐服务 剪切板管理工具clipcat推荐 MangoHud性能监控 微信小程序开发记 Rofi试用 解决Arch下VSCode无法输入中文的问题 独立窗口管理器下无法录屏问题处理 上海市二手房成交数据监控 OpenLDAP监控 Arch linux如何顺畅连接蓝牙设备 使用Git和Ansible管理配置文件 Arch Linux SSL VPN 客户端配置 简单获取celery任务实时结果 Arch linux下iNode客户端的安装和使用方法 券商费率调整记 迷你主机组装记 Labwc更换定制皮肤 树莓派跑分流代理 实用自动代理配置示例 九年老鼠标复活记 Openvpn示例 Mac下如何旋转webp图片 如何隐藏Vscode中Markdown PDF插件的头部内容 解决Linux下网络配置无法变更保存的问题 labwc环境启用wlogout Ubuntu下新官方微信尝鲜 简单检测用户是否开启广告屏蔽 Atuin ZFS下卡顿问题解决 Wine安装64位微信 Fish 和 Atuin使用记 Fastapi简单实现临时下载链接 Fastapi微信公众号开发简要 Hugo根据语种展示不同内容 如何修复Waybar微信图标错误 信封加密简要 Linux环境下维护公众号记录 快速隐藏和呼出终端 Wayland环境自动切换壁纸 SuperTuxKart 试玩 简单抓取雪球股票快讯 为什么你的kill命令不能列出信号表 Wine安装微信保姆教程 Hysteria科学上网简要 Ubuntu 23.10 钉钉无法启动解决方法 网站导航栏防止插入Adsense自动广告 Linux环境按键检测 Hugo文末添加最后修改时间 Wayland环境ksnip无法复制问题解决 我眼中的股票市场 Caddy简单图片防盗链 greetd和regreet使用教程 Wayland环境下截图加后期修改 Wayland 环境下gif录屏 Firefox的一些有趣功能 Ubuntu 切换系统语言 Firefox 标题栏高度调整 网站添加回到顶部功能 Hugo自定义字体 Labwc 便捷配置 Wofi使用教程 窗口管理器labwc使用记 文件共享软件Dufs推荐 Hugo静态站点接入Adsense广告 Fcitx5配置详解 Ubuntu安装chrome的方法总结 一种Xterm.js的全屏方案 Google网址收录api Python示例 手机听离线音乐 Snipe it资产导入 应用启动器yofi使用配置 Snipe it资产管理系统安装使用 Ubuntu开机启动加速 Vue3 vite TypeScript跨域等相关设置 Ubuntu手动升级Libreoffice Ubuntu设置alacritty为默认终端 简体文章批量转换为繁体 使用Inkscape调整svg图片大小 实用命令 使用mitmproxy给手机app抓包 Python中rstrip方法细解 Github同主机多仓库部署deploy key问题处理 Linux安装最新版本Python KeePassXC使用教程 Ubuntu 22.10连接蓝牙耳机报错br-connection-profile-unavailable解决方法 Caddy日志配置轮转和格式化
使用goaccess实时分析Caddy日志
2026-01-24 · via mephisto.cc

前几天我用 nginxpulse 做日志分析的时候,发现了一些问题,比如手机或者平板访问 UI 会错乱,"访问明细"页几乎没法看,于是想着部署个 goaccess 试试看。

要在 Caddy 下实现多域名实时访问,网上还没什么比较好的示例,下面记录我的踩坑过程。

1. 安装 GoAccess

强烈建议源码安装,因为各 Linux 发行版仓库带的版本低于 GoAccess 的当前版本,会导致部分功能受限。

比如我遇到的情况是:Debian 上的版本过低,导致 Geo Location 面板上就没有 World MapAzimuthal/Globe 选项,效果和官方 demo 比,可以说是天差地别,前者会显示一幅标准 2D 世界地图, 后者会显示一个 3D 世界地图。

此外,源码安装,也最好直接从官网下载源码包:

1$ wget https://tar.goaccess.io/goaccess-1.9.4.tar.gz
2$ tar -xzvf goaccess-1.9.4.tar.gz
3$ cd goaccess-1.9.4/
4$ ./configure --enable-utf8 --enable-geoip=mmdb --with-openssl
5$ make
6# make install

从 github 下载包,会遇到没有 configure 程序的问题,别问我怎么知道,踩过坑。

如果编译报错,大概率是缺了 Ncursesw 相关依赖,按提示搜索,安装发行版对应的包就好。官方 https://goaccess.io/download 页有介绍。

2. 配置解析 Caddy 日志文件

所谓日志分析,就是解析日志,然后重新聚合展示。

直接看我的配置(过滤了注释行、空行和 static-file|no 开头的行,方便查看关键信息):

 1root@tokyo:~# egrep -v "^#|^$|^static|^no" /etc/goaccess/goaccess.conf
 2date-format %s
 3log-format {ts:"%x.%^",request:{remote_ip:"%h",proto:"%H",method:"%m",host:"%v",uri:"%U",headers:{"User-Agent":["%u","%^"]},tls:{cipher_suite:"%k",proto:"%K"}},duration:"%T",size:"%b",status:"%s",resp_headers:{"Content-Type":["%M;%^"]}}
 4log-format CADDY
 5config-dialog false
 6hl-header true
 7json-pretty-print false
 8tz Asia/Shanghai
 9with-mouse false
10addr 127.0.0.1
11daemonize true
12real-time-html true
13ws-url wss://goaccess.xxx.com:443/ws
14log-file /var/log/caddy/xxx.com.cc.log
15agent-list false
16with-output-resolver false
17http-method yes
18http-protocol yes
19output /data/goaccess/xxx.com.html
20444-as-404 false
214xx-to-unique-count false
22all-static-files false
23double-decode false
24ignore-crawlers false
25crawlers-only false
26unknowns-as-crawlers false
27real-os true
28geoip-database /usr/share/GeoIP/GeoLite2-City.mmdb
29geoip-database /usr/share/GeoIP/GeoLite2-ASN.mmdb

关键点配置:

  • date-format %s Caddy 需要
  • log-format 开头的两个配置,一个做 CADDY JSON Structured 解析的;log-format CADDY 告诉 GoAccess 当前的日志类型为 Caddy
  • tz Asia/Shanghai 时区设置,看个人喜好了
  • addr 127.0.0.1 关键,安全相关配置,建议本地监听,通过代理转发出去
  • real-time-html true 开启网页实时刷新,GoAccess 会通过 websocket 刷新数据
  • ws-url wss://goaccess.xxx.com:443/ws 真实 websocket 响应接口,很关键。这个地方配置错误的话,可通过浏览器调试窗口排查
  • log-file /var/log/caddy/xxx.com.cc.log 需要分析的目标日志文件
  • output /data/goaccess/xxx.com.html 生成的 html 文件,浏览器最终查看访问的是这个
  • geoip-database /usr/share/GeoIP/GeoLite2-City.mmdb IP 地址精确到城市,需要额外 IP 地址库
  • geoip-database /usr/share/GeoIP/GeoLite2-ASN.mmdb 好像是网络运营商信息,比如 AT&T Services, Inc.Chinanet

监听端口也可按需修改,默认是:port 7890

GeoLite2 相关数据库文件去这里下载:https://github.com/P3TERX/GeoLite.mmdb

systemd 文件配置:

 1root@tokyo:~# systemctl cat goaccess.service
 2# /etc/systemd/system/goaccess.service
 3[Unit]
 4Description=GoAccess Real-Time Log Analyzer
 5After=network.target caddy.service
 6
 7[Service]
 8User=root
 9ExecStart=/usr/local/bin/goaccess -p /etc/goaccess/goaccess.conf
10Type=forking
11Restart=on-failure
12RestartSec=5
13StartLimitBurst=5
14StartLimitInterval=30s
15
16[Install]
17WantedBy=multi-user.target

注意其中的 Type=forking,不然没法正常启动。或者你不配置 daemonize true,那这一行也可以去掉,主进程会在启动时 fork 出一个子进程,然后父进程退出,而子进程继续在后台运行时才需要 Type=forking

3. 配置 Caddy 访问输出页

请看配置

 1logs.xxx.com {
 2	encode zstd br gzip
 3	root * /data/goaccess
 4	file_server
 5	basic_auth {
 6		your_username your_hash_password  # caddy hash-password
 7	}
 8	reverse_proxy /ws localhost:7890
 9	reverse_proxy /ws_another localhost:7891 # 多个域名日志分析,如果想分实例解析
10}

这样浏览器就能通过 https://logs.xxx.com/xxx.com.html 访问实时刷新的日志。

如果遇到实时刷新错误,F12 打开浏览器调窗口,搜索 ws,看是否报错,response 中数据是否正常刷新,按报错提示处理。

截图示例操作如下:

goaccess-websocket-check

4. 多域名日志配置

如果你有多个域名,分别写日志到不同路径,比如 foo.xxx.com.log、bar.xxx.com.log,还想多页面独立查看。

可以考虑分 2 个 goaccess 实例处理的。监听端口分开下,Caddy 代理像上面所示的那样,分别代理到不同端口。

还可以让 AI 帮你写个 index.html, 实现路由到不同页面的逻辑,再把 index.html 放到 root * /data/goaccess 指示的 root 目录中,我就是这么做的,很方便的。

5. 最终效果图

截图示例:

goaccess-shotcut-demo

可以看出 ASN 和 Geo Location 都正确显示了,老实说,首次配置的话,还是要花点时间摸索的。

用手机或者电脑访问下被解析日志站点,数据就能实时刷新。

不想部署,只想看看效果的,也可以直接去 goaccess 官网看其提供的 live demo 页。

不管是 nginxpulse 还是 goaccess 目前都不能直接查看原始日志,毕竟轻量工具,不能和企业级的大型日志系统 OpenObserve、ELK 等相比,适用场景不一样,成本也千差万别。