個人網站監控
我的個人網站已經運行好幾年了,由於沒什麼收益、訪問量也不多,一直沒接入監控,長期處於放養狀態。
由於同主域名下,有微信小程序的後端 api,每次我想看看有哪些人使用了我的小程序,該死的“We 分析”小程序想看明白是真的很費勁,其中“即時數據”爲專業版專屬,按量收費的。
這很騰訊,表示理解尊重,本來用戶數據就慘淡,¥30/y 的認證費都收不回來,更不可能付費開通開即時數據。
不想被小馬哥 Pony Ma 吸血的話,只能自給自足豐衣足食。話說陝北南泥灣那個地方我去遊玩過,條件真的很艱苦!
優勢在人不在我,需求如下:
- 每天多少個人在用
- 訪問延時如何
- 狀態碼分佈,有沒有 4xx、5xx 錯誤
- 哪些地區的人在訪問
弄清楚這些基本狀況就差不多了,能及時發現問題,並做針對性優化。
個人網站跑在 Caddy 上面,所以監控 Caddy 本身和日誌就 ok 了。其它 webserver 如 Nginx 等原理差不多,類似工具也有的。
1. Caddy 監控
Caddy 是可以配置直接給 Prometheus 吐 metircs 數據的,modules/metrics/metrics.go 和 modules/caddyhttp/metrics.go
源碼文件中有相關實現邏輯。
開啓監控
在 Caddyfile 中開啓監控:
1{
2 metrics {
3 per_host
4 }
5}
per_host 表示開啓按 Host 區分,即相關指標有個 host 標籤,用來區分不同域名的流量,有個多個域名的話建議開啓。
另外還建議分獨立域名來查看監控信息,少暴露 2019 端口,監控數據直接通過域名查看。
1monitor.xxx.com {
2 metrics
3 #@blocked not remote_ip input_your_public_ip
4 #respond @blocked "Forbidden: Access denied👻" 403
5
6 basic_auth {
7 your_username your_hash_password # 加密後的密碼(通過 caddy hash-password 生成)
8 }
9}
basic_auth 能一定程度上保證安全,用戶和密碼部分 Prometheus 會用到,有固定 ip 也可以加上 ip 白名單(看註釋部分),你覺得怎麼安全放心就怎麼做。
Caddy 監控指標分 4 個大類:
- Runtime metrics (運行時指標,指標名以
go_*和process_*開頭,監控 caddy 進程本身) - Admin API metrics (監控 admin api, 指標名以
caddy_admin_*開頭) - HTTP Middleware metrics (關鍵部分,HTTP 相關,比如請求延時、TTFB、errors、請求和返回的 body 大小等,指標名以
caddy_http_*開頭) - Reverse proxy metrics (後端代理的監控,比如我有個 Rust 寫的 api 給微信小程序用的,Caddy 能簡單監控該後端服務是否存活,目前就一個指標
caddy_reverse_proxy_upstreams_healthy)
其實搜索 Prometheus 中的收集的指標,還有 caddy_config_last_reload_successful 和 caddy_config_last_reload_success_timestamp_seconds 兩個,看源碼是屬於 globalMetrics,官方文檔裏面沒有寫,看字面意思就很好理解,不解釋。
2. Prometheus 配置
Prometheus 跑在家裏的樹莓派上面,物盡其用,功耗很低。讀者看自己情況部署,方便訪問同時保證安全就好。
直接看配置
1global:
2 scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
3 evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
4 external_labels:
5 monitor: "example"
6
7# Alertmanager configuration
8alerting:
9 alertmanagers:
10 - static_configs:
11 - targets: ["localhost:9093"]
12
13rule_files:
14 # - "first_rules.yml"
15 # - "second_rules.yml"
16
17scrape_configs:
18 - job_name: caddy
19 scrape_interval: 10s
20 scrape_timeout: 8s
21 scheme: https
22 basic_auth:
23 username: "your_usernmae"
24 password: "your_password"
25 static_configs:
26 - targets: ["monitor.xxx.com"]
3. Grafana 監控面板
監控面板分域名的話,可以選擇 id:24146,沒分域名選 id:22870
還不滿意,可以自己在上面的基礎上修改或者自己創建一個,前提是要稍微瞭解 Grafana 邏輯和 Prometheus 查詢語言。
我在 22870 的基礎上添加了域名信息,域名添加了特殊過濾,只關注特定的幾個域名。過濾域名需要在 Grafana 配置正則表達式,不會的讓 AI 幫你寫,時代變了😅。
有需要的中文讀者,也可以通過微信公衆號留言索取。
截圖示例如下:

效果還是非常不錯的,該有的都有了,狀態碼、延時分佈等清清楚楚。只是樹莓派的配置不怎麼好,我只存 15 天信息,選取 24h 小時信息會稍微卡一下,老型號性能差,個人網站監控絕對夠用。
Grafana 我部署在自己的 mini 主機上面,在家有空偶爾看幾下。
至於說告警通知,目前不想接入,工作告警已經夠讓人操心的了,網上有一大堆相關文章。
4. 日誌監控
細心的讀者可能早就有疑問了,上面沒法知道哪些地區的人訪問了什麼網頁啊?沒錯,日誌監控來解決。
日誌監控工具有好多,比如 輕量級的 GoAccess,中級的 openobserve,重量級 ELK 等,我選 nginxpulse,精神小夥開發的,作者很勤奮、更新很快,滿足個人網站需求。
請看配置,做了脫敏處理,你應該能懂的,不懂看 https://github.com/likaia/nginxpulse 的文檔部分。
1root@tokyo:~# systemctl cat nginxpulse.service
2# /etc/systemd/system/nginxpulse.service
3[Unit]
4Description=Nginxpulus Service
5After=network.target
6
7[Service]
8Type=simple
9User=root
10WorkingDirectory=/opt/caddylog
11ExecStart=/opt/caddylog/nginxpulse
12Restart=always
13RestartSec=5
14
15[Install]
16WantedBy=multi-user.target
17
18root@tokyo:~# cat /opt/caddylog/
19configs/ nginxpulse var/
20root@tokyo:~# cat /opt/caddylog/configs/nginxpulse_config.json
21{
22 "websites": [
23 {
24 "name": "yyy",
25 "logType": "caddy",
26 "logPath": "/var/log/caddy/yyy.log",
27 "domains": ["yyy.com"]
28 },
29 {
30 "name": "xxx",
31 "logType": "caddy",
32 "logPath": "/var/log/caddy/xxx.com.log",
33 "domains": ["xxx.com"]
34 }
35 ],
36 "system": {
37 "logDestination": "file",
38 "taskInterval": "1m",
39 "logRetentionDays": 30,
40 "demoMode": false,
41 "accessKeys": ["yourkey"],
42 "language": "zh-CN"
43 },
44 "server": {
45 "Port": "localhost:8088"
46 },
47 "pvFilter": {
48 "statusCodeInclude": [
49 200
50 ],
51 "excludePatterns": [
52 "favicon.ico$",
53 "robots.txt$",
54 "sitemap.xml$",
55 "^/health$",
56 "^/_(?:nuxt|next)/",
57 "rss.xml$",
58 "feed.xml$",
59 "atom.xml$"
60 ],
61 "excludeIPs": ["127.0.0.1", "::1", "10.10.0.1", "192.168.30.21"]
62 }
63}
採用單體部署方式,在電腦編譯好 nginxpulse 二進制文件,傳到服務器簡單配置下就能運行了,還是很不錯的。
效果可以看作者的示例網站: https://nginx-pulse.kaisir.cn/
5. 總結
通過 websever 層和日誌層的監控,基本能覆蓋輕量個人網站的需求,什麼鏈路監控就不扯了,企業級別的業務才用考慮。
實用又簡便,既能滿足上面所列需求,也能發現問題,做出針對性優化。
比如通過日誌監控,發現真的有危地馬拉用戶訪問了我的網站,觸發一個 404 錯誤,世界真奇妙,光速修復之。

原因是該文章的在翻譯爲西班牙語的時候,圖片鏈接地址被翻譯錯位了,wofi-menu 翻成了 menu-wofi,儘管站內西班牙語頁面,目前有且僅有 3 個, 但真的有讀者。
之前我不太相信 Google Analytics 的數據,網站用戶分佈圖各種詭異離奇,現在我信了,那篇文章 Google 搜索排名前 10,真的有用🤷♂️。
這輩子恐怕沒什麼機會去危地馬拉,能服務陌生 Linux 用戶,甚是欣慰。
要知道手敲一篇文章,整個流程下來大約消耗 2 個小時,沒有任何報酬,在中國 Google Adsense 搞不到錢💰,純粹的單向服務,用愛發電。
其實,還能發現各種網絡攻擊日誌,後續再寫文章介紹。

版權申明:
- 未標註來源的內容皆為原創,未經授權請勿轉載(因轉載後排版往往錯亂、內容不可控、無法持續更新等);
- 非營利為目的,演繹本博客任何內容,請以'原文出處'或者'參考鏈接'等方式給出本站相關網頁地址(方便讀者)。
相關文章:
- Hysteria科學上網簡要
- Caddy簡單圖片防盜鏈
- Caddy日誌配置輪轉和格式化
- Hugo全站AVIF記
- Linux下嘗試使用Godot開發小遊戲
- Arch linux dae 透明代理
- Airflow接管galler-dl下載任務
- 如何使用gallery-dl批量下載圖像
- Arch核顯下如何愉快玩Dota2和CS2
- Arch/labwc 環境網絡相關設置