監控網站正常執行時間
心跳記錄成功和失敗的檢查。這使得中斷變得可見,但也揭示了監控作業本身何時停止傳送資料。
定期檢查將停機時間和意外的沉默轉變為可查詢的事件。
使用 Telemetry SDK 為每次網站檢查傳送心跳,然後查詢失敗的檢查和資料傳送中斷的時段。
先決條件
- Telemetry 的有效 API 金鑰
- 對JavaScript和Node.js有基本瞭解
1.安裝Telemetry SDK
首先,您需要在專案中安裝 Telemetry SDK。如果您還沒有這樣做,請執行以下命令:
npm install telemetry-sh axios
2、初始化Telemetry
使用 Node.js 18 或更新版本。執行指令碼前,在伺服器環境中設定 TELEMETRY_API_KEY;不要將金鑰放入瀏覽器程式碼。
import telemetry from "telemetry-sh";
import axios from "axios";
const apiKey = process.env.TELEMETRY_API_KEY;
if (!apiKey) throw new Error("Set TELEMETRY_API_KEY in server-side configuration");
telemetry.init(apiKey);
3. 建立心跳檢查
要監控正常執行時間,您可以設定心跳功能,定期向 Telemetry 服務傳送 ping。心跳將記錄您網站的狀態,使您可以監控其可用性。
這是心跳函式的基本範例:
const sendHeartbeat = async (url) => {
const startedAt = performance.now();
let heartbeat;
try {
const response = await axios.get(url, {
timeout: 10_000,
validateStatus: () => true,
});
const isOnline = response.status >= 200 && response.status < 400;
heartbeat = {
url,
timestamp: new Date().toISOString(),
status_code: response.status,
status: isOnline ? "check_passed" : "http_error",
is_online: isOnline,
latency_ms: performance.now() - startedAt,
};
} catch {
heartbeat = {
url,
timestamp: new Date().toISOString(),
status_code: 0,
status: "probe_error",
is_online: false,
error_type: "request_failed",
latency_ms: performance.now() - startedAt,
};
}
try {
await telemetry.log("website_uptime", heartbeat);
} catch {
try { console.warn("Heartbeat export failed"); } catch {}
}
return heartbeat;
};
這是從單台主機進行的基本檢查,並非正式環境可用性保證。只使用不含憑證或權杖的公開 URL。HTTP 2xx/3xx 符合此範例的檢查條件;逾時或傳輸失敗表示探測失敗,不能證明網站對所有人都無法使用。Axios 的十秒逾時不是嚴格的總時間上限。
事件匯出會另外等待,匯出失敗不會改變 HTTP 結果。此處 SDK 沒有可設定的傳送逾時:匯出阻塞可能延遲後續檢查。正式環境應使用應用程式自行管理的有界佇列或 HTTP 用戶端隔離匯出,並獨立監控檢查器。
4. 安排心跳
立即開始一次檢查,並在目前的檢查與匯出完成後安排下一次執行:
const urlToMonitor = "https://example.com"; // Replace with a public URL.
const interval = 5 * 60 * 1000;
async function runHeartbeat() {
try {
await sendHeartbeat(urlToMonitor);
} catch {
try { console.warn("Heartbeat check failed"); } catch {}
} finally {
setTimeout(runHeartbeat, interval);
}
}
void runHeartbeat();
此排程器立即啟動,等待一次檢查與匯出完成,再等待五分鐘後開始下一次執行。它避免檢查重疊,但時間會漂移;它不是固定五分鐘週期或持久化排程器。
5. 查詢正常執行時間
查詢已記錄探測中通過 HTTP 檢查的比例:
const results = await telemetry.query(`
SELECT
url,
COUNT(*) AS total_pings,
SUM(CASE WHEN is_online THEN 1 ELSE 0 END) AS online_pings,
(SUM(CASE WHEN is_online THEN 1 ELSE 0 END) * 100.0 / COUNT(*)) AS observed_check_success_percentage
FROM
website_uptime
WHERE
timestamp_utc >= now() - INTERVAL '30 days'
GROUP BY
url
`);
console.log(results);
查詢計算已觀測探測中通過檢查的比例。缺失的排程檢查不在分母中,因此它不是按實際經過時間計算的正常執行率或 SLA。使用預期檢查登記表和獨立監控器,區分覆蓋缺失與已觀測失敗。
6. 探索 Telemetry 的正常執行時間
Telemetry 的 UI 允許您以互動方式視覺化和探索正常執行時間資料。存取 Telemetry儀表板 並使用您的憑據登入,以根據您的正常執行時間監控資料建立儀表板、圖表等。
後續步驟
正常執行時間百分比無法檢測停止執行的監視器。新增 缺少心跳食譜 並在最新檢查早於預期計劃加上一小段寬限期時發出警示。