New Relic One CDN Configuration — ตรวจสอบ CDN

New Relic CDN

New Relic One CDN Configuration Browser Monitoring Synthetic Checks APM Infrastructure TTFB Cache Hit Rate Alert Dashboard NRQL Performance Optimization
| Feature | Purpose | Data Source | Frequency | เหมาะกับ |
|---|---|---|---|---|
| Browser Monitoring | Real User Metrics | JavaScript Agent | Every page load | RUM Data |
| Synthetic Monitoring | Proactive Checks | Scripted Browser | 1-15 min interval | Uptime SLA |
| APM | Backend Performance | Language Agent | Every request | Origin Server |
| Infrastructure | Server Metrics | Infra Agent | Every 15s | Origin Infra |
| Logs | CDN Access Logs | Log Forwarder | Real-time | Troubleshooting |
Browser Monitoring Setup
=== New Relic Browser Monitoring ===
Install Browser Agent
Add this script to <head> of every page:
<script type="text/javascript">
;window.NREUM||(NREUM={});NREUM.init={distributed_tracing:{enabled:true},
privacy:{cookies_enabled:true}, ajax:{deny_list:["bam.nr-data.net"]}};
... New Relic Browser Agent code
</script>
NRQL Queries — CDN Performance
-- Page Load Time by CDN Edge
SELECT average(duration) as 'Avg Load Time',
percentile(duration, 95) as 'P95 Load Time',
count(*) as 'Page Views'
FROM PageView
WHERE appName = 'My Website'
FACET city, regionCode
SINCE 1 hour ago
-- TTFB Analysis
SELECT average(backendDuration) as 'Avg TTFB',
percentile(backendDuration, 99) as 'P99 TTFB'
FROM PageView
FACET countryCode
เนื้อหาเกี่ยวข้อง — linux debian คือ — ข้อมูลครบถ้วน 2026
SINCE 24 hours ago
-- Core Web Vitals
SELECT average(largestContentfulPaint) as 'LCP',
average(firstInputDelay) as 'FID',
average(cumulativeLayoutShift) as 'CLS'
FROM PageViewTiming
แนะนำเพิ่มเติม — ระบบเทรดของ iCafeForex
WHERE appName = 'My Website'
SINCE 1 day ago TIMESERIES AUTO
-- CDN Cache Analysis (from custom attributes)
SELECT percentage(count(*), WHERE cdnCacheStatus = 'HIT') as 'Cache Hit Rate',
average(cdnResponseTime) as 'CDN Response Time'
FROM PageView
WHERE cdnCacheStatus IS NOT NULL
FACET cdnEdgeLocation
SINCE 1 hour ago
from dataclasses import dataclass
@dataclass
class CDNMetric:
metric: str
current: str
target: str
status: str
เนื้อหาเกี่ยวข้อง — แนะนำให้อ่าน mTLS Service Mesh Cache Strategy Redis
nrql: str
metrics = [
CDNMetric("Page Load Time", "1.8s", "<2s", "Good", "average(duration) FROM PageView"),
CDNMetric("TTFB (P95)", "320ms", "<500ms", "Good", "percentile(backendDuration, 95)"),
CDNMetric("LCP", "2.1s", "<2.5s", "Good", "average(largestContentfulPaint)"),
CDNMetric("FID", "45ms", "<100ms", "Good", "average(firstInputDelay)"),
CDNMetric("CLS", "0.08", "<0.1", "Good", "average(cumulativeLayoutShift)"),
CDNMetric("Cache Hit Rate", "92%", ">90%", "Good", "percentage WHERE cdnCacheStatus='HIT'"),
CDNMetric("Error Rate", "0.3%", "<1%", "Good", "percentage WHERE httpResponseCode >= 400"),
]
แนะนำเพิ่มเติม — หนังสือเทรดที่ SiamCafeBook
Synthetic Monitoring

=== Synthetic CDN Checks ===
Scripted Browser — Check CDN from multiple locations
Synthetic Script (Node.js)
const assert = require('assert');
Navigate to page
await $browser.get('https://www.example.com');
Check page load time
const timing = await $browser.executeScript(function() {
เนื้อหาเกี่ยวข้อง — ทำความเข้าใจ Kotlin Ktor Database Migration
const perf = window.performance.timing;
return {
ttfb: perf.responseStart - perf.navigationStart,
domReady: perf.domContentLoadedEventEnd - perf.navigationStart,
loadComplete: perf.loadEventEnd - perf.navigationStart,
};
});
console.log('TTFB:', timing.ttfb, 'ms');
console.log('DOM Ready:', timing.domReady, 'ms');
console.log('Load:', timing.loadComplete, 'ms');
assert(timing.ttfb < 500, 'TTFB exceeds 500ms: ' + timing.ttfb);
assert(timing.loadComplete < 3000, 'Load exceeds 3s: ' + timing.loadComplete);
Check CDN headers
const response = await $http.get('https://cdn.example.com/main.js');
const cacheStatus = response.headers['x-cache'] || response.headers['cf-cache-status'];
console.log('Cache Status:', cacheStatus);
Check critical resources
const resources = ['main.css', 'main.js', 'hero.webp'];
for (const res of resources) {
const r = await $http.get(`https://cdn.example.com/`);
assert(r.statusCode === 200, ` returned `);
เนื้อหาเกี่ยวข้อง — hydraulic ram pump คือ —
}
@dataclass
class SyntheticCheck:
name: str
check_type: str
locations: int
frequency: str
threshold: str
alert: str
checks = [
SyntheticCheck("Homepage Load", "Scripted Browser", 10, "5 min", "Load < 3s", "Critical if fail 2x"),
SyntheticCheck("API Health", "API Test", 5, "1 min", "Status 200 < 500ms", "Critical if fail 1x"),
SyntheticCheck("CDN Asset Check", "Simple Browser", 10, "5 min", "Status 200", "Warning if fail 2x"),
SyntheticCheck("SSL Certificate", "API Test", 3, "15 min", "Valid > 30 days", "Warning if < 30d"),
SyntheticCheck("DNS Resolution", "API Test", 10, "5 min", "Resolve < 50ms", "Critical if fail 3x"),
]
เคล็ดลับ
- RUM: ใช้ Browser Monitoring ดู Real User Metrics
- Synthetic: สร้าง Synthetic Check ทุก Critical Path
- NRQL: เรียนรู้ NRQL สร้าง Custom Dashboard
- Alert: ตั้ง Alert เฉพาะที่ต้อง Action ไม่ Alert มากจน Alert Fatigue
- Cache: ดู Cache Hit Rate ถ้าต่ำกว่า 90% ปรับ Cache Rules
New Relic One คืออะไร
Full-stack Observability APM Infrastructure Browser Synthetic Logs Alert Dashboard NRQL Free Tier 100GB/เดือน Platform เดียว





