diff --git a/README.md b/README.md index fd72ab4..1ca410d 100644 --- a/README.md +++ b/README.md @@ -822,6 +822,23 @@ node prober/node/index.js - [ ] 面板:更多形态(如时间线视图、地图视图)、明暗主题手动切换、可用率区间可配置(7/30/90 天) - [ ] 状态页 JSON API 的 CORS 开放与缓存策略细化 +## 本地运行 + +**零依赖,不需要 `npm install`**: + +```bash +git clone https://github.com/tamakyi/shiroko-monitor.git +cd shiroko-monitor +node prober/node/index.js +``` + +打开 (管理端在 `/admin`)。要求 Node.js ≥ 18。 + +改 `public/monitors.json` 里的 `monitors` 即可添加自己的目标,**文件会被自动热重载,不用重启**。 + +- 完整说明(三种运行模式 / 配置分层 / 开机自启 / 常见问题)→ **[docs/DEPLOY-LOCAL.md](docs/DEPLOY-LOCAL.md)** +- 面板部署到 GitHub Pages → **[docs/DEPLOY-PAGES.md](docs/DEPLOY-PAGES.md)** + ## 开发 ```bash diff --git a/docs/DEPLOY-LOCAL.md b/docs/DEPLOY-LOCAL.md new file mode 100644 index 0000000..435ccc0 --- /dev/null +++ b/docs/DEPLOY-LOCAL.md @@ -0,0 +1,282 @@ +# 本地运行指南 + +全部跑在自己机器上:探针、面板、管理端都在 `http://localhost:8787`。 + +**零依赖** —— 不需要 `npm install`,只用 Node 自带模块。 + +--- + +## 最短路径(三条命令) + +```bash +git clone https://github.com/tamakyi/shiroko-monitor.git +cd shiroko-monitor +node prober/node/index.js +``` + +打开 就能看到面板(内置了 8 个示例目标,第一次启动后约一分钟内有数据)。 + +要求:**Node.js ≥ 18**(`node -v` 查看)。 + +--- + +## 启动后有什么 + +| 地址 | 用途 | +| --- | --- | +| | 公开面板(只读) | +| | 管理端(需先绑定 2FA) | +| | 状态快照(JSON) | + +启动日志会告诉你当前的探测范围与数据源,例如: + +``` +shiroko-monitor v0.12.3 +面板: http://localhost:8787/ +管理后台: http://localhost:8787/admin (仅本机可访问;需远程访问请设 settings.admin.allowRemote=true) +展示口径: both 探测范围: all —— 全部(自建 8 个) +``` + +--- + +## 三种运行模式 + +### 1. 常驻(默认) + +```bash +node prober/node/index.js +``` + +按各目标自己的 `interval` 持续探测,Ctrl+C 停止。**适合长期使用。** + +### 2. 跑一轮就退(CI 用) + +```bash +node prober/node/index.js --once +``` + +探测一轮、写出 `public/status.json` 后退出。 + +### 3. 演示数据(不想真探测) + +```bash +node prober/node/index.js --once --demo +``` + +生成一份假的状态快照,用于静态部署的首版占位。 + +### 常用参数 + +| 参数 | 作用 | +| --- | --- | +| `--config=` | 指定公开配置(默认 `public/monitors.json`) | +| `--local-config=` | 指定私有配置(默认 `local.monitors.json`) | +| `--out=` | 指定快照输出(默认 `public/status.json`) | +| `--data-dir=` | 指定私有数据目录(默认 `./data`,存通知去抖状态与事件) | +| `--test-notify` | 给所有已启用渠道发一条测试消息 | +| `PORT=9000 node prober/node/index.js` | 换端口(`PORT` 是环境变量,不是参数) | + +--- + +## 配置自己的监控目标 + +编辑 `public/monitors.json` 的 `monitors` 数组: + +```jsonc +{ + "id": "my-site", // 唯一标识,改了会丢失该目标的历史 + "name": "我的站点",// 显示名 + "group": "生产环境",// 分组(面板按它分页签) + "type": "http",// http | tcp | banner + "url": "https://example.com", + "expectStatus": [200], // 哪些状态码算正常 + "interval": 60,// 探测间隔(秒) + "timeout": 10 // 超时(秒) +} +``` + +TCP 与 banner 类型: + +```jsonc +{ "id": "db-5432", "name": "数据库", "type": "tcp", "host": "10.0.0.5", "port": 5432, "interval": 60 } +{ "id": "ssh", "name": "SSH", "type": "banner", "host": "10.0.0.6", "port": 22, + "expectBanner": "^SSH-2.0", "timeout": 10 }// 匹配标识串正则 +``` + +改完**自动热重载**(监听文件变化,约 200ms 生效),不用重启。 + +--- + +## 配置怎么分层 + +| 文件 | 是否入库 | 放什么 | +| --- | --- | --- | +| `public/monitors.json` | ✅ | 目标定义、非敏感设置(会随 GitHub Pages 公开) | +| `local.monitors.json` | ❌(`.gitignore`) | 真实地址、`apiKey`、私有覆盖 | + +`local.monitors.json` **可选**,不存在也能跑。要用时自建: + +```jsonc +{ + "_comment": "按 id 覆盖 public/monitors.json 的同名条目,或覆盖 settings", + "settings": { + "uptimeRobot": { "enabled": true, "apiKey": "ur1769665-...", "pollIntervalSec": 300 }, + "probeScope": "all" + }, + "monitors": [ + { "id": "example-com", "url": "https://real-host.internal" } // 只写要覆盖的字段 + ] +} +``` + +> ⚠️ **API Key 绝不要写进 `public/monitors.json`** —— 它会随 Pages 部署公开。 + +--- + +## 接UptimeRobot + +项目支持把UptimeRobot 上已有的监控结果接进来(作为「异地探测视角」与自建探测并列展示)。**只读**,用 `ur` 开头的只读 Key 即可。 + +```jsonc +// local.monitors.json +{ + "settings": { + "uptimeRobot": { + "enabled": true, + "apiKey": "ur1769665-xxxxxxxx", + "pollIntervalSec": 300 + }, + "probeScope": "uptimerobot" // 只同步 UR,不探测本地配置的目标 + } +} +``` + +也可以直接用环境变量:`UPTIMEROBOT_API_KEY=ur... node prober/node/index.js` + +--- + +## 启用管理端(可选) + +管理端能改配置、加维护窗口、发通知自检。**必须先绑定 2FA。** + +```bash +# Windows PowerShell +$env:SHIROKO_ADMIN_SETUP_KEY='换成一串足够长的随机口令' +node prober/node/index.js + +# macOS / Linux +export SHIROKO_ADMIN_SETUP_KEY='换成一串足够长的随机口令' +node prober/node/index.js +``` + +打开 ,四步绑定: + +1. 输入 `SHIROKO_ADMIN_SETUP_KEY` → 生成密钥 +2. 用验证器 App 扫码(或手动输入密钥 / 复制 `otpauth://` 链接) +3. 输入 App 显示的 6 位码 → 完成绑定 +4. **保存 10 枚恢复码**(只显示这一次) + +之后每次进入管理界面都要输 6 位动态码或一枚恢复码。 + +> 不设 `SHIROKO_ADMIN_SETUP_KEY` 时绑定入口直接关闭,管理端处于「完全不可用」状态 —— 这是安全的默认值。 + +--- + +## 通知(可选) + +支持邮件(SMTP)与 [MeoW](https://www.chuckfang.com/MeoW/api_doc.html) 推送,写在 `local.monitors.json`: + +```jsonc +{ + "settings": { + "notify": { + "enabled": true, + "failureThreshold": 2,// 连续失败几次才告警 + "recoveryNotify": true, // 恢复时也通知 + "quietHours": "23:00-08:00",// 静默时段(不打扰) + "channels": { + "email": { + "enabled": true, + "host": "smtp.example.com", + "port": 465, + "secure": true, // 465 隐式 TLS;587 用 STARTTLS + "user": "ops@example.com", + "pass": "授权码", + "from": "ops@example.com", + "to": ["ops@example.com"] + }, + "meow": { "enabled": false, "nickname": "你的MeoW昵称" } + } + } + } +} +``` + +配好后自检一下: + +```bash +node prober/node/index.js --test-notify +``` + +--- + +## 开机自启(可选) + +**macOS / Linux(systemd)** + +```ini +# /etc/systemd/system/shiroko-monitor.service +[Unit] +Description=shiroko-monitor +After=network-online.target + +[Service] +WorkingDirectory=/opt/shiroko-monitor +ExecStart=/usr/bin/node prober/node/index.js +Restart=always +RestartSec=5 +Environment=SHIROKO_ADMIN_SETUP_KEY=你的口令 +Environment=SHIROKO_DATA_DIR=/var/lib/shiroko + +[Install] +WantedBy=multi-user.target +``` + +```bash +sudo systemctl enable --now shiroko-monitor +sudo journalctl -u shiroko-monitor -f +``` + +**Windows(NSSM)** + +```powershell +nssm install ShirokoMonitor "C:\Program Files\nodejs\node.exe" "C:\shiroko-monitor\prober\node\index.js" +nssm set ShirokoMonitor AppDirectory C:\shiroko-monitor +nssm set ShirokoMonitor AppEnvironmentExtra SHIROKO_ADMIN_SETUP_KEY=你的口令 +nssm start ShirokoMonitor +``` + +--- + +## 常见问题 + +**面板一直显示「等待检测」** +第一次启动后需要等第一轮探测完成(按各目标的 `interval`,最长可能几分钟)。看日志确认探测范围。 + +**面板是空的** +检查日志里的「探测范围」。若显示「仅 UptimeRobot(0 个)」说明你把 `dataFilter` 设成了 `uptimerobot` 但没配 API Key —— 把它改成 `both`,或配置 `uptimeRobot.apiKey`。 + +**想改端口** +`PORT=9000 node prober/node/index.js`(环境变量,不是命令行参数)。 + +**端口被占用** +`PORT=9000 node prober/node/index.js` 换一个。 + +**改了配置没生效** +文件监听有 200ms 防抖,稍等即可;若是 `local.monitors.json`,确认 JSON 格式正确(尾逗号会导致解析失败,此时日志会打印 `[config] 重载失败`)。 + +**数据存在哪** +`public/status.json`(快照,会入库)与 `data/`(通知去抖状态、事件时间线、2FA 档案,不入库)。换机器时前者可以不带。 + +**内存占用** +常驻约 60–80 MB RSS。目标多、心率历史长时会略增。 \ No newline at end of file diff --git a/docs/DEPLOY-PAGES.md b/docs/DEPLOY-PAGES.md index a58aa82..48994a6 100644 --- a/docs/DEPLOY-PAGES.md +++ b/docs/DEPLOY-PAGES.md @@ -34,11 +34,31 @@ git clone <你的仓库> cd shiroko-monitor -# 私有配置(不入库):真实地址、API Key 等放这里 -cp local.monitors.json.example local.monitors.json # 或按下面提示自建 +# 私有配置(可选):真实地址、API Key 等敏感信息放这里,不入库 node prober/node/index.js ``` +
+想用私有配置文件? + +`local.monitors.json` 是可选的,不存在也能跑(会直接用 `public/monitors.json`)。 +需要拆分敏感信息时自建即可,结构如下: + +```jsonc +// local.monitors.json(已在 .gitignore 中) +{ + "_comment": "按 id 覆盖 public/monitors.json 的同名条目,或覆盖 settings", + "settings": { + "uptimeRobot": { "enabled": true, "apiKey": "ur...", "pollIntervalSec": 300 }, + "probeScope": "all" + }, + "monitors": [ + { "id": "example-com", "url": "https://real-internal-host.example" } + ] +} +``` +
+ 启动后确认: ``` diff --git a/package.json b/package.json index ad02f99..dd125f0 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "shiroko-monitor", - "version": "0.1.0", - "description": "轻量级服务监控面板:纯静态前端 + Node/边缘探针,支持 HTTP 与 TCP 探测", + "version": "0.12.3", + "description": "轻量级服务监控面板:纯静态前端 + Node/边缘探针,支持 HTTP/TCP 探测、UptimeRobot 数据源与 2FA 管理端", "type": "module", "scripts": { "start": "node prober/node/index.js", diff --git a/public/monitors.json b/public/monitors.json index e9d34fc..8473c0b 100644 --- a/public/monitors.json +++ b/public/monitors.json @@ -6,7 +6,7 @@ "theme": "shiroko", "artwork": "assets/shiroko-figure.webp", "decoOpacity": 0.78, - "dataFilter": "uptimerobot", + "dataFilter": "both", "refreshInterval": 300, "dataSource": "auto", "adminUrl": "", diff --git a/public/status.json b/public/status.json index b54cc0e..62b1537 100644 --- a/public/status.json +++ b/public/status.json @@ -1,22 +1,22 @@ { "prober": "shiroko-monitor-node/0.12.2", "demo": false, - "generatedAt": "2026-10-14T08:47:43.133Z", - "dataUpdatedAt": "2026-10-14T08:47:14.355Z", - "updateIntervalSec": 300, - "dataFilter": "uptimerobot", + "generatedAt": "2026-10-14T09:01:44.780Z", + "dataUpdatedAt": "2026-10-14T09:01:34.289Z", + "updateIntervalSec": 60, + "dataFilter": "both", "probeScope": "all", "stats": { - "total": 6, - "up": 5, - "down": 1, + "total": 14, + "up": 10, + "down": 4, "pending": 0, - "avgLatency": 1036, - "avgUptime90": 83.3, + "avgLatency": 1046, + "avgUptime90": 63.9, "memory": { - "rssMB": 84.1, - "heapUsedMB": 14.3, - "heapTotalMB": 15.7 + "rssMB": 73.3, + "heapUsedMB": 13, + "heapTotalMB": 14.2 } }, "sources": { @@ -24,10 +24,10 @@ "enabled": true, "ok": true, "error": null, - "lastSyncAt": "2026-10-14T08:43:33.439Z", + "lastSyncAt": "2026-10-14T08:59:05.177Z", "count": 6, "syncing": false, - "lastSyncMs": 1791967412139 + "lastSyncMs": 1791968343771 } }, "notify": { @@ -50,204 +50,1033 @@ "type": "down", "detail": "UptimeRobot:403 Forbidden", "maintenance": false + }, + { + "t": "2026-10-14T01:52:04.581Z", + "id": "example-com", + "name": "Example 站点", + "type": "up", + "detail": "已恢复", + "maintenance": false + }, + { + "t": "2026-10-14T01:51:03.855Z", + "id": "example-com", + "name": "Example 站点", + "type": "down", + "detail": "ETIMEDOUT", + "maintenance": false + }, + { + "t": "2026-10-14T01:35:55.133Z", + "id": "example-com", + "name": "Example 站点", + "type": "up", + "detail": "已恢复", + "maintenance": false + }, + { + "t": "2026-10-14T01:34:55.625Z", + "id": "example-com", + "name": "Example 站点", + "type": "down", + "detail": "ETIMEDOUT", + "maintenance": false + }, + { + "t": "2026-10-14T01:24:49.605Z", + "id": "example-com", + "name": "Example 站点", + "type": "up", + "detail": "已恢复", + "maintenance": false + }, + { + "t": "2026-10-14T01:23:50.168Z", + "id": "example-com", + "name": "Example 站点", + "type": "down", + "detail": "ETIMEDOUT", + "maintenance": false + }, + { + "t": "2026-10-14T00:19:17.842Z", + "id": "example-com", + "name": "Example 站点", + "type": "up", + "detail": "已恢复", + "maintenance": false + }, + { + "t": "2026-10-14T00:18:18.341Z", + "id": "example-com", + "name": "Example 站点", + "type": "down", + "detail": "ETIMEDOUT", + "maintenance": false + }, + { + "t": "2026-10-13T23:21:49.904Z", + "id": "example-com", + "name": "Example 站点", + "type": "up", + "detail": "已恢复", + "maintenance": false + }, + { + "t": "2026-10-13T23:20:50.360Z", + "id": "example-com", + "name": "Example 站点", + "type": "down", + "detail": "ETIMEDOUT", + "maintenance": false + }, + { + "t": "2026-10-13T22:43:29.917Z", + "id": "cloudflare-site", + "name": "Cloudflare 官网", + "type": "up", + "detail": "已恢复", + "maintenance": false + }, + { + "t": "2026-10-13T22:42:30.376Z", + "id": "cloudflare-site", + "name": "Cloudflare 官网", + "type": "down", + "detail": "UND_ERR_HEADERS_OVERFLOW", + "maintenance": false + }, + { + "t": "2026-10-13T20:45:32.593Z", + "id": "cloudflare-site", + "name": "Cloudflare 官网", + "type": "up", + "detail": "已恢复", + "maintenance": false + }, + { + "t": "2026-10-13T20:44:33.185Z", + "id": "cloudflare-site", + "name": "Cloudflare 官网", + "type": "down", + "detail": "UND_ERR_HEADERS_OVERFLOW", + "maintenance": false + }, + { + "t": "2026-10-13T20:32:28.339Z", + "id": "cloudflare-site", + "name": "Cloudflare 官网", + "type": "up", + "detail": "已恢复", + "maintenance": false + }, + { + "t": "2026-10-13T20:31:27.781Z", + "id": "cloudflare-site", + "name": "Cloudflare 官网", + "type": "down", + "detail": "ETIMEDOUT", + "maintenance": false + }, + { + "t": "2026-10-13T20:27:24.883Z", + "id": "cloudflare-site", + "name": "Cloudflare 官网", + "type": "up", + "detail": "已恢复", + "maintenance": false + }, + { + "t": "2026-10-13T20:25:24.931Z", + "id": "cloudflare-site", + "name": "Cloudflare 官网", + "type": "down", + "detail": "UND_ERR_HEADERS_OVERFLOW", + "maintenance": false + }, + { + "t": "2026-10-13T20:21:21.972Z", + "id": "cloudflare-site", + "name": "Cloudflare 官网", + "type": "up", + "detail": "已恢复", + "maintenance": false } ], "monitors": { - "ur-792059439": { + "example-com": { "status": "up", - "latency": 337, - "code": null, - "detail": "UptimeRobot:运行正常", - "lastCheck": "2026-10-14T08:42:00.000Z", + "latency": 675, + "code": 200, + "detail": "HTTP 200", + "lastCheck": "2026-10-14T09:01:24.931Z", "history": [ { - "t": "2026-10-13T09:20:00.000Z", + "t": "2026-10-14T08:49:07.628Z", "ok": true, - "ms": 302 + "ms": 2202 }, { - "t": "2026-10-13T10:00:00.000Z", + "t": "2026-10-14T08:50:06.655Z", "ok": true, - "ms": 437 + "ms": 723 }, { - "t": "2026-10-13T10:40:00.000Z", + "t": "2026-10-14T08:51:07.649Z", "ok": true, - "ms": 246 + "ms": 1160 }, { - "t": "2026-10-13T11:20:00.000Z", + "t": "2026-10-14T08:52:08.231Z", "ok": true, - "ms": 395 + "ms": 1149 }, { - "t": "2026-10-13T12:00:00.000Z", + "t": "2026-10-14T08:53:08.390Z", "ok": true, - "ms": 311 + "ms": 692 }, { - "t": "2026-10-13T12:40:00.000Z", + "t": "2026-10-14T08:54:09.477Z", "ok": true, - "ms": 415 + "ms": 1240 }, { - "t": "2026-10-13T13:20:00.000Z", + "t": "2026-10-14T08:55:09.329Z", "ok": true, - "ms": 278 + "ms": 677 }, { - "t": "2026-10-13T14:00:00.000Z", + "t": "2026-10-14T08:55:21.697Z", "ok": true, - "ms": 356 + "ms": 973 }, { - "t": "2026-10-13T14:40:00.000Z", + "t": "2026-10-14T08:56:21.891Z", "ok": true, - "ms": 165 + "ms": 684 }, { - "t": "2026-10-13T15:20:00.000Z", + "t": "2026-10-14T08:57:22.967Z", "ok": true, - "ms": 301 + "ms": 1227 }, { - "t": "2026-10-13T16:00:00.000Z", + "t": "2026-10-14T08:58:23.604Z", "ok": true, - "ms": 411 + "ms": 1177 }, { - "t": "2026-10-13T16:40:00.000Z", + "t": "2026-10-14T08:59:24.157Z", "ok": true, - "ms": 245 + "ms": 1232 }, { - "t": "2026-10-13T17:20:00.000Z", + "t": "2026-10-14T09:00:25.063Z", "ok": true, - "ms": 273 + "ms": 1314 }, { - "t": "2026-10-13T18:00:00.000Z", + "t": "2026-10-14T09:01:24.931Z", "ok": true, - "ms": 386 - }, - { - "t": "2026-10-13T18:40:00.000Z", - "ok": true, - "ms": 243 - }, - { - "t": "2026-10-13T19:20:00.000Z", - "ok": true, - "ms": 535 - }, - { - "t": "2026-10-13T20:00:00.000Z", - "ok": true, - "ms": 369 - }, - { - "t": "2026-10-13T20:40:00.000Z", - "ok": true, - "ms": 405 - }, - { - "t": "2026-10-13T21:20:00.000Z", - "ok": true, - "ms": 274 - }, - { - "t": "2026-10-13T22:00:00.000Z", - "ok": true, - "ms": 350 - }, - { - "t": "2026-10-13T22:40:00.000Z", - "ok": true, - "ms": 196 - }, - { - "t": "2026-10-13T23:20:00.000Z", - "ok": true, - "ms": 306 - }, - { - "t": "2026-10-14T00:00:00.000Z", - "ok": true, - "ms": 386 - }, - { - "t": "2026-10-14T00:40:00.000Z", - "ok": true, - "ms": 180 - }, - { - "t": "2026-10-14T01:20:00.000Z", - "ok": true, - "ms": 392 - }, - { - "t": "2026-10-14T02:05:00.000Z", - "ok": true, - "ms": 244 - }, - { - "t": "2026-10-14T02:45:00.000Z", - "ok": true, - "ms": 208 - }, - { - "t": "2026-10-14T03:25:00.000Z", - "ok": true, - "ms": 269 - }, - { - "t": "2026-10-14T04:05:00.000Z", - "ok": true, - "ms": 281 - }, - { - "t": "2026-10-14T04:45:00.000Z", - "ok": true, - "ms": 205 - }, - { - "t": "2026-10-14T05:25:00.000Z", - "ok": true, - "ms": 338 - }, - { - "t": "2026-10-14T06:05:00.000Z", - "ok": true, - "ms": 348 - }, - { - "t": "2026-10-14T06:45:00.000Z", - "ok": true, - "ms": 309 - }, - { - "t": "2026-10-14T07:25:00.000Z", - "ok": true, - "ms": 437 - }, - { - "t": "2026-10-14T08:06:00.000Z", - "ok": true, - "ms": 546 - }, - { - "t": "2026-10-14T08:42:00.000Z", - "ok": true, - "ms": 337 + "ms": 675 } ], "daily": { "2026-10-14": { - "total": 7, - "up": 7, - "latSum": 2445, - "latCount": 7, - "latMax": 394 + "total": 14, + "up": 14, + "latSum": 15125, + "latCount": 14, + "latMax": 2202 + } + }, + "tls": { + "daysLeft": 72, + "validTo": "2026-12-25T22:56:35.000Z", + "issuer": "SSL Corporation", + "checkedAt": "2026-10-14T08:49:07.609Z", + "error": null + }, + "lat": { + "avg": 1080, + "max": 2202, + "days": [ + { + "key": "2026-10-14", + "avg": 1080 + } + ] + } + }, + "baidu": { + "status": "up", + "latency": 89, + "code": 200, + "detail": "HTTP 200", + "lastCheck": "2026-10-14T09:01:24.351Z", + "history": [ + { + "t": "2026-10-14T08:49:06.041Z", + "ok": true, + "ms": 612 + }, + { + "t": "2026-10-14T08:50:06.555Z", + "ok": true, + "ms": 619 + }, + { + "t": "2026-10-14T08:51:06.568Z", + "ok": true, + "ms": 78 + }, + { + "t": "2026-10-14T08:52:07.162Z", + "ok": true, + "ms": 79 + }, + { + "t": "2026-10-14T08:53:08.337Z", + "ok": true, + "ms": 635 + }, + { + "t": "2026-10-14T08:54:08.858Z", + "ok": true, + "ms": 619 + }, + { + "t": "2026-10-14T08:55:09.251Z", + "ok": true, + "ms": 598 + }, + { + "t": "2026-10-14T08:55:20.812Z", + "ok": true, + "ms": 85 + }, + { + "t": "2026-10-14T08:56:21.914Z", + "ok": true, + "ms": 705 + }, + { + "t": "2026-10-14T08:57:21.827Z", + "ok": true, + "ms": 84 + }, + { + "t": "2026-10-14T08:58:23.030Z", + "ok": true, + "ms": 600 + }, + { + "t": "2026-10-14T08:59:23.525Z", + "ok": true, + "ms": 597 + }, + { + "t": "2026-10-14T09:00:23.924Z", + "ok": true, + "ms": 165 + }, + { + "t": "2026-10-14T09:01:24.351Z", + "ok": true, + "ms": 89 + } + ], + "daily": { + "2026-10-14": { + "total": 14, + "up": 14, + "latSum": 5565, + "latCount": 14, + "latMax": 705 + } + }, + "tls": { + "daysLeft": 101, + "validTo": "2027-01-24T02:32:55.000Z", + "issuer": "GlobalSign nv-sa", + "checkedAt": "2026-10-14T08:49:07.678Z", + "error": null + }, + "lat": { + "avg": 398, + "max": 705, + "days": [ + { + "key": "2026-10-14", + "avg": 398 + } + ] + } + }, + "cloudflare-site": { + "status": "up", + "latency": 1466, + "code": 200, + "detail": "HTTP 200", + "lastCheck": "2026-10-14T09:01:25.732Z", + "history": [ + { + "t": "2026-10-14T08:49:07.143Z", + "ok": true, + "ms": 1710 + }, + { + "t": "2026-10-14T08:50:07.601Z", + "ok": true, + "ms": 1661 + }, + { + "t": "2026-10-14T08:51:07.364Z", + "ok": true, + "ms": 872 + }, + { + "t": "2026-10-14T08:52:07.832Z", + "ok": true, + "ms": 747 + }, + { + "t": "2026-10-14T08:53:08.950Z", + "ok": true, + "ms": 1247 + }, + { + "t": "2026-10-14T08:54:10.271Z", + "ok": true, + "ms": 2030 + }, + { + "t": "2026-10-14T08:55:09.926Z", + "ok": true, + "ms": 1270 + }, + { + "t": "2026-10-14T08:55:21.047Z", + "ok": true, + "ms": 318 + }, + { + "t": "2026-10-14T08:56:21.884Z", + "ok": true, + "ms": 673 + }, + { + "t": "2026-10-14T08:57:22.613Z", + "ok": true, + "ms": 867 + }, + { + "t": "2026-10-14T08:58:24.272Z", + "ok": true, + "ms": 1839 + }, + { + "t": "2026-10-14T08:59:24.829Z", + "ok": true, + "ms": 1899 + }, + { + "t": "2026-10-14T09:00:25.081Z", + "ok": true, + "ms": 1320 + }, + { + "t": "2026-10-14T09:01:25.732Z", + "ok": true, + "ms": 1466 + } + ], + "daily": { + "2026-10-14": { + "total": 14, + "up": 14, + "latSum": 17919, + "latCount": 14, + "latMax": 2030 + } + }, + "tls": { + "daysLeft": 88, + "validTo": "2027-01-10T21:43:36.000Z", + "issuer": "Google Trust Services", + "checkedAt": "2026-10-14T08:49:08.311Z", + "error": null + }, + "lat": { + "avg": 1280, + "max": 2030, + "days": [ + { + "key": "2026-10-14", + "avg": 1280 + } + ] + } + }, + "github-api": { + "status": "up", + "latency": 1279, + "code": 200, + "detail": "HTTP 200", + "lastCheck": "2026-10-14T09:00:23.014Z", + "history": [ + { + "t": "2026-10-14T08:49:07.306Z", + "ok": true, + "ms": 1869 + }, + { + "t": "2026-10-14T08:54:07.070Z", + "ok": true, + "ms": 842 + }, + { + "t": "2026-10-14T08:55:22.049Z", + "ok": true, + "ms": 1319 + }, + { + "t": "2026-10-14T09:00:23.014Z", + "ok": true, + "ms": 1279 + } + ], + "daily": { + "2026-10-14": { + "total": 4, + "up": 4, + "latSum": 5309, + "latCount": 4, + "latMax": 1869 + } + }, + "tls": { + "daysLeft": 44, + "validTo": "2026-11-27T23:59:59.000Z", + "issuer": "Sectigo Limited", + "checkedAt": "2026-10-14T08:49:09.257Z", + "error": null + }, + "lat": { + "avg": 1327, + "max": 1869, + "days": [ + { + "key": "2026-10-14", + "avg": 1327 + } + ] + } + }, + "httpbin-500": { + "status": "up", + "latency": 1723, + "code": 500, + "detail": "HTTP 500", + "lastCheck": "2026-10-14T09:01:22.960Z", + "history": [ + { + "t": "2026-10-14T08:49:08.114Z", + "ok": true, + "ms": 2671 + }, + { + "t": "2026-10-14T08:51:06.931Z", + "ok": true, + "ms": 1457 + }, + { + "t": "2026-10-14T08:53:07.948Z", + "ok": true, + "ms": 2263 + }, + { + "t": "2026-10-14T08:55:08.735Z", + "ok": true, + "ms": 2099 + }, + { + "t": "2026-10-14T08:55:21.989Z", + "ok": true, + "ms": 1257 + }, + { + "t": "2026-10-14T08:57:22.071Z", + "ok": true, + "ms": 1334 + }, + { + "t": "2026-10-14T08:59:22.408Z", + "ok": true, + "ms": 1507 + }, + { + "t": "2026-10-14T09:01:22.960Z", + "ok": true, + "ms": 1723 + } + ], + "daily": { + "2026-10-14": { + "total": 8, + "up": 8, + "latSum": 14311, + "latCount": 8, + "latMax": 2671 + } + }, + "tls": { + "daysLeft": 80, + "validTo": "2027-01-02T23:59:59.000Z", + "issuer": "Amazon", + "checkedAt": "2026-10-14T08:49:10.811Z", + "error": null + }, + "lat": { + "avg": 1789, + "max": 2671, + "days": [ + { + "key": "2026-10-14", + "avg": 1789 + } + ] + } + }, + "badssl-expired": { + "status": "down", + "latency": 5163, + "code": 0, + "detail": "ECONNRESET", + "lastCheck": "2026-10-14T09:01:26.404Z", + "history": [ + { + "t": "2026-10-14T08:49:08.317Z", + "ok": false, + "ms": 2868 + }, + { + "t": "2026-10-14T08:51:07.053Z", + "ok": false, + "ms": 1574 + }, + { + "t": "2026-10-14T08:53:07.433Z", + "ok": false, + "ms": 1745 + }, + { + "t": "2026-10-14T08:55:09.301Z", + "ok": false, + "ms": 2663 + }, + { + "t": "2026-10-14T08:55:22.888Z", + "ok": false, + "ms": 2154 + }, + { + "t": "2026-10-14T08:57:22.262Z", + "ok": false, + "ms": 1522 + }, + { + "t": "2026-10-14T08:59:24.324Z", + "ok": false, + "ms": 3420 + }, + { + "t": "2026-10-14T09:01:26.404Z", + "ok": false, + "ms": 5163 + } + ], + "daily": { + "2026-10-14": { + "total": 8, + "up": 0 + } + }, + "tls": { + "daysLeft": -4203, + "validTo": "2015-04-12T23:59:59.000Z", + "issuer": "COMODO CA Limited", + "checkedAt": "2026-10-14T08:49:12.607Z", + "error": null + } + }, + "cloudflare-dns-tcp": { + "status": "down", + "latency": 10015, + "code": null, + "detail": "TCP 连接超时", + "lastCheck": "2026-10-14T09:01:34.288Z", + "history": [ + { + "t": "2026-10-14T08:49:15.457Z", + "ok": false, + "ms": 10005 + }, + { + "t": "2026-10-14T08:50:15.952Z", + "ok": false, + "ms": 10009 + }, + { + "t": "2026-10-14T08:51:16.497Z", + "ok": false, + "ms": 10002 + }, + { + "t": "2026-10-14T08:52:17.103Z", + "ok": false, + "ms": 10016 + }, + { + "t": "2026-10-14T08:53:17.708Z", + "ok": false, + "ms": 10002 + }, + { + "t": "2026-10-14T08:54:18.272Z", + "ok": false, + "ms": 10028 + }, + { + "t": "2026-10-14T08:55:18.671Z", + "ok": false, + "ms": 10007 + }, + { + "t": "2026-10-14T08:55:30.738Z", + "ok": false, + "ms": 10002 + }, + { + "t": "2026-10-14T08:56:31.217Z", + "ok": false, + "ms": 10004 + }, + { + "t": "2026-10-14T08:57:31.795Z", + "ok": false, + "ms": 10046 + }, + { + "t": "2026-10-14T08:58:32.448Z", + "ok": false, + "ms": 10012 + }, + { + "t": "2026-10-14T08:59:32.937Z", + "ok": false, + "ms": 10004 + }, + { + "t": "2026-10-14T09:00:33.771Z", + "ok": false, + "ms": 10005 + }, + { + "t": "2026-10-14T09:01:34.288Z", + "ok": false, + "ms": 10015 + } + ], + "daily": { + "2026-10-14": { + "total": 14, + "up": 0 + } + } + }, + "google-dns-tcp": { + "status": "down", + "latency": 10015, + "code": null, + "detail": "TCP 连接超时", + "lastCheck": "2026-10-14T09:01:34.289Z", + "history": [ + { + "t": "2026-10-14T08:49:15.458Z", + "ok": false, + "ms": 10005 + }, + { + "t": "2026-10-14T08:50:15.952Z", + "ok": false, + "ms": 10009 + }, + { + "t": "2026-10-14T08:51:16.497Z", + "ok": false, + "ms": 10003 + }, + { + "t": "2026-10-14T08:52:17.104Z", + "ok": false, + "ms": 10016 + }, + { + "t": "2026-10-14T08:53:17.708Z", + "ok": false, + "ms": 10001 + }, + { + "t": "2026-10-14T08:54:18.272Z", + "ok": false, + "ms": 10028 + }, + { + "t": "2026-10-14T08:55:18.671Z", + "ok": false, + "ms": 10006 + }, + { + "t": "2026-10-14T08:55:30.738Z", + "ok": false, + "ms": 10002 + }, + { + "t": "2026-10-14T08:56:31.217Z", + "ok": false, + "ms": 10004 + }, + { + "t": "2026-10-14T08:57:31.797Z", + "ok": false, + "ms": 10048 + }, + { + "t": "2026-10-14T08:58:32.449Z", + "ok": false, + "ms": 10012 + }, + { + "t": "2026-10-14T08:59:32.938Z", + "ok": false, + "ms": 10003 + }, + { + "t": "2026-10-14T09:00:33.771Z", + "ok": false, + "ms": 10005 + }, + { + "t": "2026-10-14T09:01:34.289Z", + "ok": false, + "ms": 10015 + } + ], + "daily": { + "2026-10-14": { + "total": 14, + "up": 0 + } + } + }, + "ur-792059439": { + "status": "up", + "latency": 335, + "code": null, + "detail": "UptimeRobot:运行正常", + "lastCheck": "2026-10-14T08:57:00.000Z", + "history": [ + { + "t": "2026-10-13T09:40:00.000Z", + "ok": true, + "ms": 296 + }, + { + "t": "2026-10-13T10:20:00.000Z", + "ok": true, + "ms": 183 + }, + { + "t": "2026-10-13T11:00:00.000Z", + "ok": true, + "ms": 413 + }, + { + "t": "2026-10-13T11:40:00.000Z", + "ok": true, + "ms": 232 + }, + { + "t": "2026-10-13T12:20:00.000Z", + "ok": true, + "ms": 295 + }, + { + "t": "2026-10-13T13:00:00.000Z", + "ok": true, + "ms": 258 + }, + { + "t": "2026-10-13T13:40:00.000Z", + "ok": true, + "ms": 277 + }, + { + "t": "2026-10-13T14:20:00.000Z", + "ok": true, + "ms": 563 + }, + { + "t": "2026-10-13T15:00:00.000Z", + "ok": true, + "ms": 248 + }, + { + "t": "2026-10-13T15:45:00.000Z", + "ok": true, + "ms": 253 + }, + { + "t": "2026-10-13T16:25:00.000Z", + "ok": true, + "ms": 487 + }, + { + "t": "2026-10-13T17:05:00.000Z", + "ok": true, + "ms": 257 + }, + { + "t": "2026-10-13T17:45:00.000Z", + "ok": true, + "ms": 314 + }, + { + "t": "2026-10-13T18:25:00.000Z", + "ok": true, + "ms": 344 + }, + { + "t": "2026-10-13T19:05:00.000Z", + "ok": true, + "ms": 478 + }, + { + "t": "2026-10-13T19:45:00.000Z", + "ok": true, + "ms": 409 + }, + { + "t": "2026-10-13T20:25:00.000Z", + "ok": true, + "ms": 369 + }, + { + "t": "2026-10-13T21:05:00.000Z", + "ok": true, + "ms": 241 + }, + { + "t": "2026-10-13T21:45:00.000Z", + "ok": true, + "ms": 298 + }, + { + "t": "2026-10-13T22:25:00.000Z", + "ok": true, + "ms": 182 + }, + { + "t": "2026-10-13T23:05:00.000Z", + "ok": true, + "ms": 265 + }, + { + "t": "2026-10-13T23:45:00.000Z", + "ok": true, + "ms": 242 + }, + { + "t": "2026-10-14T00:25:00.000Z", + "ok": true, + "ms": 333 + }, + { + "t": "2026-10-14T01:05:00.000Z", + "ok": true, + "ms": 336 + }, + { + "t": "2026-10-14T01:45:00.000Z", + "ok": true, + "ms": 180 + }, + { + "t": "2026-10-14T02:25:00.000Z", + "ok": true, + "ms": 326 + }, + { + "t": "2026-10-14T03:05:00.000Z", + "ok": true, + "ms": 205 + }, + { + "t": "2026-10-14T03:45:00.000Z", + "ok": true, + "ms": 278 + }, + { + "t": "2026-10-14T04:25:00.000Z", + "ok": true, + "ms": 176 + }, + { + "t": "2026-10-14T05:05:00.000Z", + "ok": true, + "ms": 266 + }, + { + "t": "2026-10-14T05:45:00.000Z", + "ok": true, + "ms": 414 + }, + { + "t": "2026-10-14T06:25:00.000Z", + "ok": true, + "ms": 249 + }, + { + "t": "2026-10-14T07:05:00.000Z", + "ok": true, + "ms": 444 + }, + { + "t": "2026-10-14T07:41:00.000Z", + "ok": true, + "ms": 652 + }, + { + "t": "2026-10-14T08:21:00.000Z", + "ok": true, + "ms": 362 + }, + { + "t": "2026-10-14T08:57:00.000Z", + "ok": true, + "ms": 335 + } + ], + "daily": { + "2026-10-14": { + "total": 3, + "up": 3, + "latSum": 1029, + "latCount": 3, + "latMax": 369 } }, "meta": { @@ -272,206 +1101,206 @@ "90": 0 }, "lat": { - "avg": 349, - "max": 394, + "avg": 343, + "max": 369, "days": [ { "key": "2026-10-14", - "avg": 349 + "avg": 343 } ] } }, "ur-795497022": { "status": "up", - "latency": 696, + "latency": 806, "code": null, "detail": "UptimeRobot:运行正常", - "lastCheck": "2026-10-14T08:38:00.000Z", + "lastCheck": "2026-10-14T08:54:00.000Z", "history": [ { - "t": "2026-10-13T09:35:00.000Z", + "t": "2026-10-13T10:00:00.000Z", "ok": true, - "ms": 663 + "ms": 791 }, { - "t": "2026-10-13T10:15:00.000Z", + "t": "2026-10-13T10:40:00.000Z", "ok": true, - "ms": 837 + "ms": 678 }, { - "t": "2026-10-13T10:55:00.000Z", - "ok": true, - "ms": 723 - }, - { - "t": "2026-10-13T11:35:00.000Z", - "ok": true, - "ms": 688 - }, - { - "t": "2026-10-13T12:15:00.000Z", - "ok": true, - "ms": 824 - }, - { - "t": "2026-10-13T12:55:00.000Z", - "ok": true, - "ms": 799 - }, - { - "t": "2026-10-13T13:35:00.000Z", - "ok": true, - "ms": 943 - }, - { - "t": "2026-10-13T14:20:00.000Z", - "ok": true, - "ms": 808 - }, - { - "t": "2026-10-13T15:00:00.000Z", - "ok": true, - "ms": 842 - }, - { - "t": "2026-10-13T15:40:00.000Z", - "ok": true, - "ms": 918 - }, - { - "t": "2026-10-13T16:20:00.000Z", - "ok": true, - "ms": 646 - }, - { - "t": "2026-10-13T17:00:00.000Z", - "ok": true, - "ms": 722 - }, - { - "t": "2026-10-13T17:40:00.000Z", - "ok": true, - "ms": 749 - }, - { - "t": "2026-10-13T18:20:00.000Z", - "ok": true, - "ms": 750 - }, - { - "t": "2026-10-13T19:00:00.000Z", - "ok": true, - "ms": 920 - }, - { - "t": "2026-10-13T19:40:00.000Z", - "ok": true, - "ms": 715 - }, - { - "t": "2026-10-13T20:20:00.000Z", - "ok": true, - "ms": 835 - }, - { - "t": "2026-10-13T21:00:00.000Z", - "ok": true, - "ms": 1038 - }, - { - "t": "2026-10-13T21:40:00.000Z", - "ok": true, - "ms": 1235 - }, - { - "t": "2026-10-13T22:20:00.000Z", - "ok": true, - "ms": 731 - }, - { - "t": "2026-10-13T23:00:00.000Z", - "ok": true, - "ms": 685 - }, - { - "t": "2026-10-13T23:40:00.000Z", - "ok": true, - "ms": 597 - }, - { - "t": "2026-10-14T00:20:00.000Z", - "ok": true, - "ms": 676 - }, - { - "t": "2026-10-14T01:00:00.000Z", - "ok": true, - "ms": 755 - }, - { - "t": "2026-10-14T01:40:00.000Z", - "ok": true, - "ms": 658 - }, - { - "t": "2026-10-14T02:20:00.000Z", + "t": "2026-10-13T11:20:00.000Z", "ok": true, "ms": 740 }, { - "t": "2026-10-14T03:00:00.000Z", + "t": "2026-10-13T12:00:00.000Z", "ok": true, - "ms": 718 + "ms": 828 }, { - "t": "2026-10-14T03:40:00.000Z", + "t": "2026-10-13T12:40:00.000Z", "ok": true, - "ms": 593 + "ms": 722 }, { - "t": "2026-10-14T04:20:00.000Z", + "t": "2026-10-13T13:20:00.000Z", "ok": true, - "ms": 627 + "ms": 849 }, { - "t": "2026-10-14T05:00:00.000Z", + "t": "2026-10-13T14:00:00.000Z", "ok": true, - "ms": 674 + "ms": 1071 }, { - "t": "2026-10-14T05:40:00.000Z", + "t": "2026-10-13T14:40:00.000Z", "ok": true, - "ms": 700 + "ms": 863 }, { - "t": "2026-10-14T06:20:00.000Z", + "t": "2026-10-13T15:20:00.000Z", "ok": true, - "ms": 707 + "ms": 893 }, { - "t": "2026-10-14T07:33:00.000Z", + "t": "2026-10-13T16:00:00.000Z", "ok": true, - "ms": 985 + "ms": 742 }, { - "t": "2026-10-14T08:05:00.000Z", + "t": "2026-10-13T16:40:00.000Z", "ok": true, - "ms": 712 + "ms": 769 }, { - "t": "2026-10-14T08:38:00.000Z", + "t": "2026-10-13T17:20:00.000Z", + "ok": true, + "ms": 769 + }, + { + "t": "2026-10-13T18:00:00.000Z", + "ok": true, + "ms": 738 + }, + { + "t": "2026-10-13T18:40:00.000Z", + "ok": true, + "ms": 888 + }, + { + "t": "2026-10-13T19:20:00.000Z", + "ok": true, + "ms": 810 + }, + { + "t": "2026-10-13T20:00:00.000Z", + "ok": true, + "ms": 754 + }, + { + "t": "2026-10-13T20:40:00.000Z", + "ok": true, + "ms": 1721 + }, + { + "t": "2026-10-13T21:20:00.000Z", + "ok": true, + "ms": 749 + }, + { + "t": "2026-10-13T22:00:00.000Z", + "ok": true, + "ms": 1288 + }, + { + "t": "2026-10-13T22:40:00.000Z", + "ok": true, + "ms": 694 + }, + { + "t": "2026-10-13T23:20:00.000Z", + "ok": true, + "ms": 728 + }, + { + "t": "2026-10-14T00:00:00.000Z", + "ok": true, + "ms": 611 + }, + { + "t": "2026-10-14T00:40:00.000Z", + "ok": true, + "ms": 752 + }, + { + "t": "2026-10-14T01:20:00.000Z", + "ok": true, + "ms": 734 + }, + { + "t": "2026-10-14T02:00:00.000Z", + "ok": true, + "ms": 635 + }, + { + "t": "2026-10-14T02:40:00.000Z", + "ok": true, + "ms": 781 + }, + { + "t": "2026-10-14T03:20:00.000Z", + "ok": true, + "ms": 710 + }, + { + "t": "2026-10-14T04:00:00.000Z", + "ok": true, + "ms": 645 + }, + { + "t": "2026-10-14T04:40:00.000Z", + "ok": true, + "ms": 668 + }, + { + "t": "2026-10-14T05:20:00.000Z", + "ok": true, + "ms": 683 + }, + { + "t": "2026-10-14T06:00:00.000Z", + "ok": true, + "ms": 701 + }, + { + "t": "2026-10-14T06:40:00.000Z", + "ok": true, + "ms": 727 + }, + { + "t": "2026-10-14T07:20:00.000Z", "ok": true, "ms": 696 + }, + { + "t": "2026-10-14T08:21:00.000Z", + "ok": true, + "ms": 757 + }, + { + "t": "2026-10-14T08:54:00.000Z", + "ok": true, + "ms": 806 } ], "daily": { "2026-10-14": { - "total": 7, - "up": 7, - "latSum": 4953, - "latCount": 7, - "latMax": 721 + "total": 3, + "up": 3, + "latSum": 2324, + "latCount": 3, + "latMax": 806 } }, "meta": { @@ -496,206 +1325,211 @@ "90": 5432 }, "lat": { - "avg": 708, - "max": 721, + "avg": 775, + "max": 806, "days": [ { "key": "2026-10-14", - "avg": 708 + "avg": 775 } ] } }, "ur-795556828": { "status": "up", - "latency": 398, + "latency": 357, "code": null, "detail": "UptimeRobot:运行正常", - "lastCheck": "2026-10-14T08:42:00.000Z", + "lastCheck": "2026-10-14T08:57:00.000Z", "history": [ { - "t": "2026-10-13T09:55:00.000Z", + "t": "2026-10-13T09:35:00.000Z", "ok": true, - "ms": 455 + "ms": 212 }, { - "t": "2026-10-13T10:35:00.000Z", + "t": "2026-10-13T10:15:00.000Z", "ok": true, - "ms": 372 + "ms": 415 }, { - "t": "2026-10-13T11:15:00.000Z", + "t": "2026-10-13T10:55:00.000Z", "ok": true, - "ms": 240 + "ms": 221 }, { - "t": "2026-10-13T11:55:00.000Z", + "t": "2026-10-13T11:35:00.000Z", "ok": true, - "ms": 261 + "ms": 392 }, { - "t": "2026-10-13T12:35:00.000Z", + "t": "2026-10-13T12:15:00.000Z", "ok": true, - "ms": 335 + "ms": 291 }, { - "t": "2026-10-13T13:15:00.000Z", + "t": "2026-10-13T12:55:00.000Z", "ok": true, - "ms": 413 + "ms": 380 }, { - "t": "2026-10-13T13:55:00.000Z", + "t": "2026-10-13T13:35:00.000Z", "ok": true, - "ms": 283 + "ms": 303 }, { - "t": "2026-10-13T14:35:00.000Z", + "t": "2026-10-13T14:15:00.000Z", "ok": true, - "ms": 309 + "ms": 322 }, { - "t": "2026-10-13T15:20:00.000Z", + "t": "2026-10-13T14:55:00.000Z", "ok": true, - "ms": 451 + "ms": 476 }, { - "t": "2026-10-13T16:00:00.000Z", + "t": "2026-10-13T15:35:00.000Z", "ok": true, - "ms": 248 + "ms": 320 }, { - "t": "2026-10-13T16:40:00.000Z", + "t": "2026-10-13T16:15:00.000Z", "ok": true, - "ms": 378 + "ms": 318 }, { - "t": "2026-10-13T17:20:00.000Z", + "t": "2026-10-13T16:55:00.000Z", + "ok": true, + "ms": 414 + }, + { + "t": "2026-10-13T17:35:00.000Z", + "ok": true, + "ms": 384 + }, + { + "t": "2026-10-13T18:15:00.000Z", + "ok": true, + "ms": 424 + }, + { + "t": "2026-10-13T18:55:00.000Z", + "ok": true, + "ms": 260 + }, + { + "t": "2026-10-13T19:35:00.000Z", "ok": true, "ms": 293 }, { - "t": "2026-10-13T18:00:00.000Z", + "t": "2026-10-13T20:15:00.000Z", "ok": true, - "ms": 495 + "ms": 273 }, { - "t": "2026-10-13T18:40:00.000Z", + "t": "2026-10-13T20:55:00.000Z", "ok": true, - "ms": 391 + "ms": 471 }, { - "t": "2026-10-13T19:20:00.000Z", - "ok": true, - "ms": 338 - }, - { - "t": "2026-10-13T20:00:00.000Z", - "ok": true, - "ms": 363 - }, - { - "t": "2026-10-13T20:40:00.000Z", - "ok": true, - "ms": 499 - }, - { - "t": "2026-10-13T21:20:00.000Z", - "ok": true, - "ms": 372 - }, - { - "t": "2026-10-13T22:00:00.000Z", - "ok": true, - "ms": 194 - }, - { - "t": "2026-10-13T22:40:00.000Z", - "ok": true, - "ms": 225 - }, - { - "t": "2026-10-13T23:20:00.000Z", - "ok": true, - "ms": 237 - }, - { - "t": "2026-10-14T00:00:00.000Z", - "ok": true, - "ms": 215 - }, - { - "t": "2026-10-14T00:40:00.000Z", - "ok": true, - "ms": 298 - }, - { - "t": "2026-10-14T01:20:00.000Z", - "ok": true, - "ms": 450 - }, - { - "t": "2026-10-14T02:00:00.000Z", - "ok": true, - "ms": 319 - }, - { - "t": "2026-10-14T02:40:00.000Z", - "ok": true, - "ms": 398 - }, - { - "t": "2026-10-14T03:20:00.000Z", + "t": "2026-10-13T21:35:00.000Z", "ok": true, "ms": 347 }, { - "t": "2026-10-14T04:00:00.000Z", + "t": "2026-10-13T22:15:00.000Z", "ok": true, - "ms": 407 + "ms": 238 }, { - "t": "2026-10-14T04:40:00.000Z", + "t": "2026-10-13T22:55:00.000Z", "ok": true, - "ms": 344 + "ms": 233 }, { - "t": "2026-10-14T05:20:00.000Z", + "t": "2026-10-13T23:35:00.000Z", "ok": true, - "ms": 337 + "ms": 240 }, { - "t": "2026-10-14T06:00:00.000Z", + "t": "2026-10-14T00:15:00.000Z", "ok": true, - "ms": 365 + "ms": 312 }, { - "t": "2026-10-14T06:40:00.000Z", + "t": "2026-10-14T00:55:00.000Z", "ok": true, - "ms": 252 + "ms": 341 }, { - "t": "2026-10-14T07:20:00.000Z", + "t": "2026-10-14T01:40:00.000Z", "ok": true, - "ms": 421 + "ms": 382 }, { - "t": "2026-10-14T08:06:00.000Z", + "t": "2026-10-14T02:20:00.000Z", "ok": true, - "ms": 387 + "ms": 129 }, { - "t": "2026-10-14T08:42:00.000Z", + "t": "2026-10-14T03:00:00.000Z", "ok": true, - "ms": 398 + "ms": 595 + }, + { + "t": "2026-10-14T03:40:00.000Z", + "ok": true, + "ms": 465 + }, + { + "t": "2026-10-14T04:20:00.000Z", + "ok": true, + "ms": 332 + }, + { + "t": "2026-10-14T05:00:00.000Z", + "ok": true, + "ms": 269 + }, + { + "t": "2026-10-14T05:40:00.000Z", + "ok": true, + "ms": 549 + }, + { + "t": "2026-10-14T06:20:00.000Z", + "ok": true, + "ms": 177 + }, + { + "t": "2026-10-14T07:00:00.000Z", + "ok": true, + "ms": 394 + }, + { + "t": "2026-10-14T07:36:00.000Z", + "ok": true, + "ms": 182 + }, + { + "t": "2026-10-14T08:16:00.000Z", + "ok": true, + "ms": 369 + }, + { + "t": "2026-10-14T08:57:00.000Z", + "ok": true, + "ms": 357 } ], "daily": { "2026-10-14": { - "total": 7, - "up": 7, - "latSum": 2618, - "latCount": 7, - "latMax": 421 + "total": 3, + "up": 3, + "latSum": 1079, + "latCount": 3, + "latMax": 384 } }, "meta": { @@ -720,22 +1554,22 @@ "90": 0 }, "lat": { - "avg": 374, - "max": 421, + "avg": 360, + "max": 384, "days": [ { "key": "2026-10-14", - "avg": 374 + "avg": 360 } ] } }, "ur-792059414": { "status": "up", - "latency": 3208, + "latency": 3205, "code": null, "detail": "UptimeRobot:运行正常", - "lastCheck": "2026-10-14T08:40:00.000Z", + "lastCheck": "2026-10-14T08:57:00.000Z", "history": [ { "t": "2026-10-13T09:55:00.000Z", @@ -873,43 +1707,43 @@ "ms": 1955 }, { - "t": "2026-10-14T05:20:00.000Z", + "t": "2026-10-14T05:25:00.000Z", "ok": true, - "ms": 3605 + "ms": 3612 }, { - "t": "2026-10-14T06:00:00.000Z", + "t": "2026-10-14T06:10:00.000Z", "ok": true, - "ms": 2050 + "ms": 1928 }, { - "t": "2026-10-14T06:40:00.000Z", + "t": "2026-10-14T06:55:00.000Z", "ok": true, - "ms": 1494 + "ms": 1423 }, { - "t": "2026-10-14T07:20:00.000Z", + "t": "2026-10-14T07:38:00.000Z", "ok": true, - "ms": 2086 + "ms": 2110 }, { - "t": "2026-10-14T08:00:00.000Z", + "t": "2026-10-14T08:17:00.000Z", "ok": true, - "ms": 1610 + "ms": 2428 }, { - "t": "2026-10-14T08:40:00.000Z", + "t": "2026-10-14T08:57:00.000Z", "ok": true, - "ms": 3208 + "ms": 3205 } ], "daily": { "2026-10-14": { - "total": 7, - "up": 7, - "latSum": 20805, - "latCount": 7, - "latMax": 3208 + "total": 3, + "up": 3, + "latSum": 8282, + "latCount": 3, + "latMax": 3205 } }, "meta": { @@ -934,206 +1768,211 @@ "90": 7593 }, "lat": { - "avg": 2972, - "max": 3208, + "avg": 2761, + "max": 3205, "days": [ { "key": "2026-10-14", - "avg": 2972 + "avg": 2761 } ] } }, "ur-798788113": { "status": "up", - "latency": 541, + "latency": 375, "code": null, "detail": "UptimeRobot:运行正常", - "lastCheck": "2026-10-14T08:43:00.000Z", + "lastCheck": "2026-10-14T08:58:00.000Z", "history": [ { - "t": "2026-10-13T09:55:00.000Z", + "t": "2026-10-13T09:35:00.000Z", "ok": true, - "ms": 602 + "ms": 605 }, { - "t": "2026-10-13T10:35:00.000Z", - "ok": true, - "ms": 519 - }, - { - "t": "2026-10-13T11:15:00.000Z", - "ok": true, - "ms": 325 - }, - { - "t": "2026-10-13T11:55:00.000Z", - "ok": true, - "ms": 933 - }, - { - "t": "2026-10-13T12:35:00.000Z", - "ok": true, - "ms": 424 - }, - { - "t": "2026-10-13T13:15:00.000Z", - "ok": true, - "ms": 460 - }, - { - "t": "2026-10-13T13:55:00.000Z", - "ok": true, - "ms": 496 - }, - { - "t": "2026-10-13T14:35:00.000Z", - "ok": true, - "ms": 438 - }, - { - "t": "2026-10-13T15:15:00.000Z", - "ok": true, - "ms": 459 - }, - { - "t": "2026-10-13T15:55:00.000Z", - "ok": true, - "ms": 349 - }, - { - "t": "2026-10-13T16:35:00.000Z", - "ok": true, - "ms": 367 - }, - { - "t": "2026-10-13T17:15:00.000Z", - "ok": true, - "ms": 504 - }, - { - "t": "2026-10-13T17:55:00.000Z", - "ok": true, - "ms": 286 - }, - { - "t": "2026-10-13T18:35:00.000Z", - "ok": true, - "ms": 389 - }, - { - "t": "2026-10-13T19:15:00.000Z", - "ok": true, - "ms": 1491 - }, - { - "t": "2026-10-13T19:55:00.000Z", + "t": "2026-10-13T10:15:00.000Z", "ok": true, "ms": 456 }, { - "t": "2026-10-13T20:35:00.000Z", + "t": "2026-10-13T10:55:00.000Z", "ok": true, - "ms": 433 + "ms": 420 }, { - "t": "2026-10-13T21:15:00.000Z", + "t": "2026-10-13T11:35:00.000Z", "ok": true, - "ms": 426 + "ms": 878 }, { - "t": "2026-10-13T21:55:00.000Z", + "t": "2026-10-13T12:15:00.000Z", "ok": true, - "ms": 249 + "ms": 530 }, { - "t": "2026-10-13T22:35:00.000Z", + "t": "2026-10-13T12:55:00.000Z", "ok": true, - "ms": 359 + "ms": 517 }, { - "t": "2026-10-13T23:15:00.000Z", + "t": "2026-10-13T13:35:00.000Z", "ok": true, - "ms": 311 + "ms": 491 }, { - "t": "2026-10-13T23:55:00.000Z", + "t": "2026-10-13T14:20:00.000Z", "ok": true, - "ms": 222 + "ms": 429 }, { - "t": "2026-10-14T00:35:00.000Z", + "t": "2026-10-13T15:00:00.000Z", "ok": true, - "ms": 332 + "ms": 447 }, { - "t": "2026-10-14T01:15:00.000Z", + "t": "2026-10-13T15:40:00.000Z", "ok": true, - "ms": 328 + "ms": 404 }, { - "t": "2026-10-14T01:55:00.000Z", + "t": "2026-10-13T16:20:00.000Z", "ok": true, - "ms": 300 + "ms": 312 }, { - "t": "2026-10-14T02:35:00.000Z", + "t": "2026-10-13T17:00:00.000Z", "ok": true, - "ms": 405 + "ms": 400 }, { - "t": "2026-10-14T03:15:00.000Z", + "t": "2026-10-13T17:40:00.000Z", "ok": true, - "ms": 258 + "ms": 431 }, { - "t": "2026-10-14T03:55:00.000Z", + "t": "2026-10-13T18:20:00.000Z", "ok": true, - "ms": 274 + "ms": 632 }, { - "t": "2026-10-14T04:35:00.000Z", + "t": "2026-10-13T19:00:00.000Z", + "ok": true, + "ms": 372 + }, + { + "t": "2026-10-13T19:45:00.000Z", + "ok": true, + "ms": 411 + }, + { + "t": "2026-10-13T20:25:00.000Z", + "ok": true, + "ms": 465 + }, + { + "t": "2026-10-13T21:05:00.000Z", + "ok": true, + "ms": 392 + }, + { + "t": "2026-10-13T21:45:00.000Z", + "ok": true, + "ms": 284 + }, + { + "t": "2026-10-13T22:25:00.000Z", + "ok": true, + "ms": 329 + }, + { + "t": "2026-10-13T23:05:00.000Z", + "ok": true, + "ms": 360 + }, + { + "t": "2026-10-13T23:45:00.000Z", + "ok": true, + "ms": 221 + }, + { + "t": "2026-10-14T00:25:00.000Z", "ok": true, "ms": 265 }, { - "t": "2026-10-14T05:15:00.000Z", + "t": "2026-10-14T01:05:00.000Z", "ok": true, - "ms": 373 + "ms": 287 }, { - "t": "2026-10-14T06:00:00.000Z", + "t": "2026-10-14T01:45:00.000Z", "ok": true, - "ms": 675 + "ms": 328 }, { - "t": "2026-10-14T06:40:00.000Z", + "t": "2026-10-14T02:25:00.000Z", "ok": true, - "ms": 525 + "ms": 376 }, { - "t": "2026-10-14T07:20:00.000Z", + "t": "2026-10-14T03:05:00.000Z", "ok": true, - "ms": 435 + "ms": 253 }, { - "t": "2026-10-14T08:07:00.000Z", + "t": "2026-10-14T03:45:00.000Z", "ok": true, - "ms": 444 + "ms": 293 }, { - "t": "2026-10-14T08:43:00.000Z", + "t": "2026-10-14T04:25:00.000Z", "ok": true, - "ms": 541 + "ms": 319 + }, + { + "t": "2026-10-14T05:05:00.000Z", + "ok": true, + "ms": 329 + }, + { + "t": "2026-10-14T05:45:00.000Z", + "ok": true, + "ms": 634 + }, + { + "t": "2026-10-14T06:25:00.000Z", + "ok": true, + "ms": 526 + }, + { + "t": "2026-10-14T07:05:00.000Z", + "ok": true, + "ms": 436 + }, + { + "t": "2026-10-14T07:42:00.000Z", + "ok": true, + "ms": 395 + }, + { + "t": "2026-10-14T08:22:00.000Z", + "ok": true, + "ms": 443 + }, + { + "t": "2026-10-14T08:58:00.000Z", + "ok": true, + "ms": 375 } ], "daily": { "2026-10-14": { - "total": 7, - "up": 7, - "latSum": 3014, - "latCount": 7, - "latMax": 541 + "total": 3, + "up": 3, + "latSum": 1245, + "latCount": 3, + "latMax": 450 } }, "meta": { @@ -1158,23 +1997,28 @@ "90": 0 }, "lat": { - "avg": 431, - "max": 541, + "avg": 415, + "max": 450, "days": [ { "key": "2026-10-14", - "avg": 431 + "avg": 415 } ] } }, "ur-796219015": { "status": "down", - "latency": 185, + "latency": 191, "code": 403, "detail": "UptimeRobot:403 Forbidden", "lastCheck": "2026-05-07T07:54:09.000Z", "history": [ + { + "t": "2026-10-14T08:58:00.000Z", + "ok": true, + "ms": 191 + }, { "t": "2026-05-07T07:54:09.000Z", "ok": false, @@ -1183,7 +2027,7 @@ ], "daily": { "2026-10-14": { - "total": 7, + "total": 3, "up": 0 } }, @@ -1211,3 +2055,4 @@ } } } + \ No newline at end of file