Kompendium
Search…
New Relic - monitoruj Core Web Vitals w czasie rzeczywistym
Wykrywaj anomalie i błędy oraz wąskie gardła poprzez ciągły monitoring aplikacji.
W tej instrukcji, pokażemy jak krok po kroku uruchomić monitorowanie Core Web Vitals (Lighthouse) z użyciem New Relic na platformie Cloudlets.Zone.
New Relic ONE to narzędzie do monitorowania wydajności aplikacji dla administratorów i programistów, zorientowane na zapewnianiu głębokiego wglądu w wydajność i niezawodność projektu w czasie rzeczywistym. New Relic zaprojektowano do wskazywania i diagnozowania problemów. Może śledzić przepustowość transakcji internetowych, wykrywać anomalie, analizować powody spowolnienia zapytań lub żądań internetowych i ogólnie zapewnia dużą ilość przydatnych danych do szybkiego i wygodnego rozwiązywania problemów.
Na Cloudlets.Zone przygotowaliśmy dodatek, który umożliwia szybką i łatwą instalację New Relic ONE i rozpoczęcie śledzenia najważniejszych informacji o serwerze aplikacji w ciągu kilku minut. Dodatkowo, dostarczony pakiet zawiera wbudowaną opcję automatycznego sprawdzania dostępnych aktualizacji - w ten sposób możesz być zawsze na bieżąco z najnowszymi funkcjami i możliwościami, jakie zapewnia zespół New Relic.
Tak więc, aby zacząć optymalizację aplikacji web pod kątem Core Web Vitals, będziesz potrzebować:
  • konta na New Relic, z unikalnym identyfikatorem użytkownika (tj. kluczem licencyjnym)
  • uruchomionego środowisko na Cloudlets.Zone z wdrożoną aplikacją, występującą na liście kompatybilności New Relic.
Po spełnieniu tych warunków możesz przejść do poniższej instrukcji i przeprowadzić bezproblemową integrację agenta New Relic APM ze swoimi projektami utrzymywanymi na Cloudlets.Zone.
W ramach jednego konta na New Relic możesz monitorować wiele aplikacji uruchomionych na Cloudlets.Zone

Instalacja New Relic

Dodatek New Relic instalowany jest w warstwie aplikacji i dostępny jest dla wybranych aplikacji dostępnych na naszej platformie. W kolejnych wersjach, ilość aplikacji możliwych do monitorowania poprzez dodatek będzie zwiększana.
  1. 1.
    Rozpoczynamy na dwa sposoby.
A. Wchodzimy na Marketplace i szukamy dodatku New Relic (jest w zakładce "Rozszerzenia").
Następnie wybieramy środowisko, które chcemy zintegrować z New Relic i wpisujemy klucz licencyjny, który kopiujemy z naszego konta New Relic (zobacz punkt 2).
B. Drugi sposób, to aktywowanie dodatku kontekstowo, a więc z poziomu środowiska, które zamierzamy objąć monitoringiem. W tym przypadku wybieramy "Dodatki" na poziomie warstwy aplikacji i klikamy "Instaluj".
i podajemy klucz licencyjny New Relic (opis w kroku 2). W tym miejscu można jeszcze zmienić nazwę aplikacji "Application name", która będzie identyfikatorem środowiska w panelu New Relic.
2. Klucz licencyjny znaleźć można w "API keys" po zalogowaniu do serwisu New Relic.
Wybrać należy opcję "Copy key" przy "INGEST LICENSE".
3. Teraz wracamy do Panelu Usługi Cloudlets.Zone, by wkleić klucz licencyjny i zatwierdzić instalację dodatku New Relic. Zakończenie instalacji zostanie potwierdzone poniższym komunikatem, który przesłany zostanie również na skrzynkę e-mail.
4. Następnie należy przeładować kontener, na którym został zainstalowany dodatek New Relic. W tym celu, wybieramy "restartuj węzły" w menu aplikacji, gdzie zainstalowany został New Relic.
Zwróć uwagę, że jeśli Twój projekt jest uruchamiany w pojedynczym kontenerze, "restart węzła" spowoduje kilkusekundowy przestój Twojej aplikacji. Wybierz właściwy moment (np. okno serwisowe) na tą operację, jeżeli dotyczy środowiska produkcyjnego.
W przypadku, gdy serwer aplikacji jest skalowany w poziomie, czas przestoju zostanie zminimalizowany, ponieważ wszystkie instancje serwera będą uruchamiane sekwencyjnie. Możesz w ogóle pozbyć się tej niedogodności, ustawiając opóźnienie wykonania tej operacji na każdym kolejnym węźle w warstwie. W ten sposób, podczas gdy jeden węzeł przechodzi konserwację, pozostałe pozostaną aktywne.
Teraz już New Relic zbiera dane dotyczące Twojej aplikacji. Możesz od razu po zalogowaniu się na swoim koncie New Relic przeglądać zebrane dane dotyczące metryk wydajności aplikacji, monitorować najważniejsze parametry w czasie rzeczywistym za pomocą niestandardowych pulpitów nawigacyjnych raportów, otrzymywać automatyczne powiadomienia o krytycznych problemach i wiele więcej — pełna lista udostępnionych funkcji znajduje się tutaj.

Konfiguracja Lighthouse na New Relic

Przechodzimy teraz do drugiej części instrukcji, która pomoże w monitorowaniu w czasie rzeczywistym Core Web Vitals, a więc trzech wskaźników, które mają wpływ na rzeczywiste doświadczenia użytkowników odwiedzających nasz sklep, stronę lub aplikację web.
  1. 1.
    Zaczynamy od pobrania skryptu Syntetics dla New Relic. Skopiuj poniższy kod podmieniając adres z wiersza piątego http://www.google.com na adres Twojej aplikacji. Link do źródła skryptu jest tutaj.
1
/** API SETUP - remove this section to run in New Relic Synthetics **/
2
// if ($http == null) { var $http = require('request'); }
3
/** API SETUP - remove this section to run in New Relic Synthetics **/
4
5
var settings = {'url': 'https://www.google.com', 'category': 'performance', 'strategy': 'desktop'};
6
7
var options = {
8
method: 'GET',
9
url: 'https://www.googleapis.com/pagespeedonline/v5/runPagespeed?key=' + $secure.PAGESPEED_INSIGHTS_API_KEY,
10
headers: null,
11
qs: settings,
12
json: true
13
};
14
15
$http(options, function (error, response, body) {
16
if (!error && response.statusCode == 200) {
17
if (response.statusCode == 200) {
18
var lighthouseMetrics = body.lighthouseResult.audits.metrics.details.items[0];
19
$util.insights.set('url', settings.url);
20
$util.insights.set('deviceType', settings.strategy);
21
$util.insights.set('performanceScore', body.lighthouseResult.categories.performance.score);
22
23
for (var attributeName in lighthouseMetrics) {
24
if ( lighthouseMetrics.hasOwnProperty(attributeName) ) {
25
if (!attributeName.includes('Ts')) {
26
console.log(attributeName + ": " + lighthouseMetrics[attributeName]);
27
$util.insights.set(attributeName, lighthouseMetrics[attributeName]);
28
}
29
}
30
}
31
32
} else {
33
console.log('Non-200 HTTP response: ' + response.statusCode);
34
}
35
} else {
36
console.log('rsp code: ' + response.statusCode);
37
console.log(error);
38
}
39
});
Copied!
2. Teraz wchodzimy do Syntetics w panelu New Relic i wybieramy opcję "Create monitor".
3. Następnie wybieramy "Endpoint availablity" i nazywamy monitor oraz określamy częstotliwość pobierania danych.
4. Teraz wybieramy lokalizacje, z których będzie testowana nasza aplikacja web, np. z kilku miejsc z Europy.
5. Usuwamy domyślny skrypt i wklejamy wcześniej przygotowany skrypt z punktu 1. Pamiętaj by podmienić domenę. Na koniec zapisujemy nasz nowy monitor.
6. Aby skrypt zadziałał niezbędny jest klucz API, który pobieramy z Google PageSpeed Insights z sekcji Dokumentacja tworząc nowy projekt. Wymagane logowanie w Google (w razie czego, konto można szybko założyć).
7. Klucz API należy dodać do monitora Syntetics w New Relic. W tym celu wracamy do panelu usługi New Relic - okno startowe (kliknij logo). Wybieramy "Syntetics / Secure credentials" i wciskamy przycisk "Create secure credential".
Nazwę klucza należy wprowadzić taką samą jak w skrypcie z punktu 1 (linia 9). Zapisujemy.
8. Nadszedł czas na prezentację danych. Potrzebny będzie specjalnie przygotowany dashboard Core Web Vitals dla New Relic. W tym celu skopiuj poniższy skrypt JSON'a lub pobierz go bezpośrednio z Githuba. Zwróć uwagę, że do oryginalnego skryptu dopisaliśmy wiersz 4 z uprawnieniami ("permissions": "PUBLIC_READ_WRITE",).
1
{
2
"name": "Lighthouse Metrics",
3
"description": null,
4
"permissions": "PUBLIC_READ_WRITE",
5
"pages": [
6
{
7
"name": "Lighthouse Metrics",
8
"description": null,
9
"widgets": [
10
{
11
"visualization": {
12
"id": "viz.billboard"
13
},
14
"layout": {
15
"column": 1,
16
"row": 1,
17
"height": 3,
18
"width": 4
19
},
20
"title": "Lighthouse Metrics",
21
"rawConfiguration": {
22
"nrqlQueries": [
23
{
24
"accountId": 0,
25
"query": "FROM SyntheticCheck SELECT average(custom.firstContentfulPaint) as 'FCP', average(custom.largestContentfulPaint) as 'LCP', average(custom.interactive) as 'TTI', average(custom.totalBlockingTime) as 'TBT', average(custom.cumulativeLayoutShift) as 'CLS', average(custom.speedIndex) as 'Speed Index'"
26
}
27
]
28
}
29
},
30
{
31
"visualization": {
32
"id": "viz.line"
33
},
34
"layout": {
35
"column": 5,
36
"row": 1,
37
"height": 3,
38
"width": 8
39
},
40
"title": "Lighthouse Metrics - trending",
41
"rawConfiguration": {
42
"legend": {
43
"enabled": true
44
},
45
"nrqlQueries": [
46
{
47
"accountId": 0,
48
"query": "FROM SyntheticCheck SELECT average(custom.firstContentfulPaint) as 'FCP', average(custom.largestContentfulPaint) as 'LCP', average(custom.interactive) as 'TTI', average(custom.totalBlockingTime) as 'TBT', average(custom.cumulativeLayoutShift) as 'CLS', average(custom.speedIndex) as 'Speed Index' TIMESERIES AUTO"
49
}
50
],
51
"yAxisLeft": {
52
"zero": true
53
}
54
}
55
},
56
{
57
"visualization": {
58
"id": "viz.bar"
59
},
60
"layout": {
61
"column": 1,
62
"row": 4,
63
"height": 3,
64
"width": 4
65
},
66
"title": "First Contentful Paint",
67
"rawConfiguration": {
68
"facet": {
69
"showOtherSeries": false
70
},
71
"nrqlQueries": [
72
{
73
"accountId": 0,
74
"query": "FROM SyntheticCheck SELECT average(custom.firstContentfulPaint) FACET custom.url "
75
}
76
]
77
}
78
},
79
{
80
"visualization": {
81
"id": "viz.line"
82
},
83
"layout": {
84
"column": 5,
85
"row": 4,
86
"height": 3,
87
"width": 8
88
},
89
"title": "First Contentful Paint",
90
"rawConfiguration": {
91
"legend": {
92
"enabled": true
93
},
94
"nrqlQueries": [
95
{
96
"accountId": 0,
97
"query": "FROM SyntheticCheck SELECT average(custom.firstContentfulPaint) FACET custom.url TIMESERIES AUTO"
98
}
99
],
100
"yAxisLeft": {
101
"zero": true
102
}
103
}
104
},
105
{
106
"visualization": {
107
"id": "viz.bar"
108
},
109
"layout": {
110
"column": 1,
111
"row": 7,
112
"height": 3,
113
"width": 4
114
},
115
"title": "Largest Contentful Paint",
116
"rawConfiguration": {
117
"facet": {
118
"showOtherSeries": false
119
},
120
"nrqlQueries": [
121
{
122
"accountId": 0,
123
"query": "FROM SyntheticCheck SELECT average(custom.largestContentfulPaint) FACET custom.url "
124
}
125
]
126
}
127
},
128
{
129
"visualization": {
130
"id": "viz.line"
131
},
132
"layout": {
133
"column": 5,
134
"row": 7,
135
"height": 3,
136
"width": 8
137
},
138
"title": "Largest Contentful Paint",
139
"rawConfiguration": {
140
"legend": {
141
"enabled": true
142
},
143
"nrqlQueries": [
144
{
145
"accountId": 0,
146
"query": "FROM SyntheticCheck SELECT average(custom.largestContentfulPaint) FACET custom.url TIMESERIES AUTO "
147
}
148
],
149
"yAxisLeft": {
150
"zero": true
151
}
152
}
153
},
154
{
155
"visualization": {
156
"id": "viz.bar"
157
},
158
"layout": {
159
"column": 1,
160
"row": 10,
161
"height": 3,
162
"width": 4
163
},
164
"title": "TTI",
165
"rawConfiguration": {
166
"dataFormatters": [
167
{
168
"name": "TTI",
169
"type": "decimal"
170
}
171
],
172
"facet": {
173
"showOtherSeries": false
174
},
175
"nrqlQueries": [
176
{
177
"accountId": 0,
178
"query": "FROM SyntheticCheck SELECT average(custom.interactive) as 'TTI' FACET custom.url "
179
}
180
]
181
}
182
},
183
{
184
"visualization": {
185
"id": "viz.line"
186
},
187
"layout": {
188
"column": 5,
189
"row": 10,
190
"height": 3,
191
"width": 8
192
},
193
"title": "TTI - trending",
194
"rawConfiguration": {
195
"legend": {
196
"enabled": true
197
},
198
"nrqlQueries": [
199
{
200
"accountId": 0,
201
"query": "FROM SyntheticCheck SELECT average(custom.interactive) FACET custom.url TIMESERIES AUTO "
202
}
203
],
204
"yAxisLeft": {
205
"zero": true
206
}
207
}
208
},
209
{
210
"visualization": {
211
"id": "viz.bar"
212
},
213
"layout": {
214
"column": 1,
215
"row": 13,
216
"height": 3,
217
"width": 4
218
},
219
"title": "Total Blocking Time (TBT)",
220
"rawConfiguration": {
221
"facet": {
222
"showOtherSeries": false
223
},
224
"nrqlQueries": [
225
{
226
"accountId": 0,
227
"query": "FROM SyntheticCheck SELECT average(custom.totalBlockingTime) FACET custom.url "
228
}
229
]
230
}
231
},
232
{
233
"visualization": {
234
"id": "viz.line"
235
},
236
"layout": {
237
"column": 5,
238
"row": 13,
239
"height": 3,
240
"width": 8
241
},
242
"title": "Total Blocking Time (TBT) - trending",
243
"rawConfiguration": {
244
"legend": {
245
"enabled": true
246
},
247
"nrqlQueries": [
248
{
249
"accountId": 0,
250
"query": "FROM SyntheticCheck SELECT average(custom.totalBlockingTime) FACET custom.url TIMESERIES AUTO "
251
}
252
],
253
"yAxisLeft": {
254
"zero": true
255
}
256
}
257
},
258
{
259
"visualization": {
260
"id": "viz.bar"
261
},
262
"layout": {
263
"column": 1,
264
"row": 16,
265
"height": 3,
266
"width": 4
267
},
268
"title": "Cumulative Layout Shift (CLS)",
269
"rawConfiguration": {
270
"facet": {
271
"showOtherSeries": false
272
},
273
"nrqlQueries": [
274
{
275
"accountId": 0,
276
"query": "FROM SyntheticCheck SELECT average(custom.cumulativeLayoutShift) FACET custom.url "
277
}
278
]
279
}
280
},
281
{
282
"visualization": {
283
"id": "viz.line"
284
},
285
"layout": {
286
"column": 5,
287
"row": 16,
288
"height": 3,
289
"width": 8
290
},
291
"title": "Cumulative Layout Shift (CLS)",
292
"rawConfiguration": {
293
"legend": {
294
"enabled": true
295
},
296
"nrqlQueries": [
297
{
298
"accountId": 0,
299
"query": "FROM SyntheticCheck SELECT average(custom.cumulativeLayoutShift) FACET custom.url TIMESERIES AUTO "
300
}
301
],
302
"yAxisLeft": {
303
"zero": true
304
}
305
}
306
},
307
{
308
"visualization": {
309
"id": "viz.bar"
310
},
311
"layout": {
312
"column": 1,
313
"row": 19,
314
"height": 3,
315
"width": 4
316
},
317
"title": "Speed Index",
318
"rawConfiguration": {
319
"facet": {
320
"showOtherSeries": false
321
},
322
"nrqlQueries": [
323
{
324
"accountId": 0,
325
"query": "FROM SyntheticCheck SELECT average(custom.speedIndex) FACET custom.url"
326
}
327
]
328
}
329
},
330
{
331
"visualization": {
332
"id": "viz.line"
333
},
334
"layout": {
335
"column": 5,
336
"row": 19,
337
"height": 3,
338
"width": 8
339
},
340
"title": "Speed Index - trending",
341
"rawConfiguration": {
342
"legend": {
343
"enabled": true
344
},
345
"nrqlQueries": [
346
{
347
"accountId": 0,
348
"query": "FROM SyntheticCheck SELECT average(custom.speedIndex) FACET custom.url TIMESERIES AUTO "
349
}
350
],
351
"yAxisLeft": {
352
"zero": true
353
}
354
}
355
}
356
]
357
}
358
]
359
}
Copied!
9. W skrypcie trzeba podmienić zerową wartość dla identyfikatora konta New Relic ("accountId": 0,). Zamiast zera, wpisujemy nasz numer konta New Relic, który znaleźć można w ustawieniach konta.
Zmianę identyfikatora konta w skrypcie warto zrobić w edytorze kodu, gdyż ID występuje w skrypcie wiele razy.
10. Gdy już skrypt mamy gotowy, należy zaimportować go do sekcji dashboard w panelu głównym New Relic.
Wklejamy go po prostu w oknie kodu i zatwierdzamy przyciskiem "Import dashboard".
Zrobione. Po kilku minutach powinny być już dostępne dane do zaprezentowania. Za każdym razem, gdy zechcesz skorzystać ze stworzonego dashboardu, znajdziesz go w Panelu główny w zakładce dashboard.
Last modified 1mo ago