Overvåking med Prometheus
Integrer Prometheus for innsamling av måledata, og bygg dashbord for å overvåke ytelsen og helsetilstanden til NestJS-applikasjonen.
Overvåking med Prometheus er en gratis leksjon i NestJS-API-er for virksomhetsbackend på CoddyKit. Dette er leksjon 3 av 3. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i NestJS-API-er for virksomhetsbackend, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i NestJS-API-er for virksomhetsbackend inneholder totalt 3 leksjoner.
Hvorfor overvåke applikasjonen?
Overvåking er avgjørende for å forstå applikasjonens tilstand og ytelse. Det hjelper deg med å oppdage problemer tidlig, feilsøke og sikre en god brukeropplevelse.
- Ytelse: Er API-et raskt nok?
- Tilgjengelighet: Er tjenesten tilgjengelig og svarer den?
- Feil: Oppstår det uventede feil?
- Ressursbruk: Hvor mye CPU, minne eller diskplass brukes?
Uten overvåking arbeider du i blinde!
Møt Prometheus
Prometheus er et overvåkingssystem med åpen kildekode som er utviklet for pålitelighet og skalerbarhet. Det samler inn måledata fra applikasjonene og infrastrukturen din og lagrer dem som tidsseriedata.
Tenk på det som en årvåken observatør som hele tiden samler inn datapunkter om hvordan systemet oppfører seg over tid.
Prometheus-arkitektur
Prometheus fungerer ved å skrape (hente) måledata fra konfigurerte mål. Viktige komponenter:
- Prometheus Server: Kjernekomponenten som skraper, lagrer og spør etter måledata.
- Exporters: Spesialiserte agenter som eksponerer eksisterende måledata fra tredjepartssystemer (for eksempel databaser og operativsystemer) i et Prometheus-kompatibelt format.
- Client Libraries: Integreres direkte i applikasjonskoden for å eksponere egendefinerte måledata (det vi skal bruke i NestJS).
- Grafana: Et populært instrumentpanelverktøy for visualisering av Prometheus-data.
NestJS og `nestjs-prometheus`
For å integrere Prometheus med en NestJS-applikasjon bruker vi biblioteket nestjs-prometheus. Det forenkler eksponeringen av måledata og opprettelsen av egendefinerte måledata.
Biblioteket fungerer som en bro som lar NestJS-applikasjonen generere og eksponere måledata som Prometheus-serveren deretter kan skrape.
Sette opp `nestjs-prometheus`
Installer pakken først:
npm install --save @willsoto/nestjs-prometheus prom-clientImporter deretter PrometheusModule i rotmodulen (for eksempel AppModule) og konfigurer den:
import { Module } from '@nestjs/common';
import { PrometheusModule } from '@willsoto/nestjs-prometheus';
import { AppController } from './app.controller';
@Module({
imports: [
PrometheusModule.register({
path: '/metrics',
collectDefaultMetrics: true
})
],
controllers: [AppController],
providers: [],
})
export class AppModule {}
Eksponere standardmåledata for HTTP
Med collectDefaultMetrics: true eksponerer nestjs-prometheus automatisk grunnleggende måledata om Node.js-prosessen. Hvis du også vil eksponere måledata om HTTP-forespørsler, må du legge til en interceptor.
Oppdater main.ts for å aktivere dette:
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { PrometheusInterceptor } from '@willsoto/nestjs-prometheus';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.useGlobalInterceptors(new PrometheusInterceptor());
await app.listen(3000);
console.log('App is running on port 3000');
// Access metrics at http://localhost:3000/metrics
}
bootstrap();
Egendefinerte måledata: Counter
En Counter er en kumulativ måling som representerer én enkelt monotonisk økende verdi. Den kan bare øke eller tilbakestilles til null ved omstart. Bruk den for ting som totalt antall behandlede forespørsler, registrerte feil eller behandlede elementer.
Slik injiserer og bruker du en egendefinert counter i en tjeneste:
import { Injectable } from '@nestjs/common';
import { InjectMetric } from '@willsoto/nestjs-prometheus';
import { Counter } from 'prom-client';
@Injectable()
export class UserService {
constructor(
@InjectMetric('users_created_total') public usersCreatedCounter: Counter,
) {}
createUser(name: string): string {
// Logic to create a user...
this.usersCreatedCounter.inc(); // Increment the counter
return `User ${name} created`;
}
}
Egendefinerte måledata: Gauge
En Gauge er en måling som representerer én numerisk verdi som vilkårlig kan øke og minke. Bruk den for ting som gjeldende minnebruk, antall samtidige forespørsler eller gjeldende køstørrelse.
La oss følge med på aktive tilkoblinger med en gauge:
import { Injectable } from '@nestjs/common';
import { InjectMetric } from '@willsoto/nestjs-prometheus';
import { Gauge } from 'prom-client';
@Injectable()
export class ConnectionService {
constructor(
@InjectMetric('active_connections_count') public activeConnectionsGauge: Gauge,
) {}
connectUser(): void {
// User connects logic...
this.activeConnectionsGauge.inc(); // Increment active connections
}
disconnectUser(): void {
// User disconnects logic...
this.activeConnectionsGauge.dec(); // Decrement active connections
}
}
Andre måletyper
Prometheus tilbyr også andre måletyper for mer spesifikke bruksområder:
- Histogram: Tar prøver av observasjoner (for eksempel varighet for forespørsler) og teller dem i konfigurerbare intervaller. Nyttig for å forstå fordelinger og persentiler.
- Summary: Ligner på Histogram, men beregner konfigurerbare kvantiler over et glidende tidsvindu. Egner seg godt for latenstid.
For de fleste vanlige scenarier er Counter og Gauge ofte tilstrekkelig.
Visualisering med Grafana
Mens Prometheus samler inn måledata, brukes Grafana vanligvis til å visualisere dem. Grafana kobler seg til Prometheus som en datakilde og lar deg bygge kraftige, tilpassbare instrumentpaneler.
Du kan opprette grafer, diagrammer og varsler basert på måledataene som NestJS-applikasjonen din eksponerer. Slik får du sanntidsinnsikt i ytelsen og tilstanden.
Hurtigsjekk
Du har lært hvordan du setter opp Prometheus-overvåking i NestJS.
Oppsummering: Overvåking med Prometheus
I denne leksjonen lærte du hvor viktig overvåking er, og hvordan Prometheus bidrar til å samle inn tidsseriemåledata fra NestJS-applikasjonen din.
- Vi utforsket Prometheus-arkitekturen og komponentene i den.
- Du så hvordan du integrerer
nestjs-prometheusfor å eksponere standardmåledata og egendefinerte måledata. - Vi skilte mellom måletypene Counter og Gauge.
- Til slutt så vi kort på hvordan Grafana brukes til kraftig visualisering.
Overvåking er en viktig praksis for å vedlikeholde robuste applikasjoner med god ytelse!
Lær deg TypeScript med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 20
- Leksjoner
- 76
Ofte stilte spørsmål
Er leksjonen «Overvåking med Prometheus» gratis?
Ja – hele teksten i «Overvåking med Prometheus» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av NestJS-API-er for virksomhetsbackend-kurset, kan du oppgradere til CoddyKit PRO. Kurset i NestJS-API-er for virksomhetsbackend inneholder totalt 3 leksjoner.
Hva lærer jeg i «Overvåking med Prometheus»?
Integrer Prometheus for innsamling av måledata, og bygg dashbord for å overvåke ytelsen og helsetilstanden til NestJS-applikasjonen. Du øver på NestJS-API-er for virksomhetsbackend med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med NestJS-API-er for virksomhetsbackend?
Ingen tidligere erfaring er nødvendig. NestJS-API-er for virksomhetsbackend på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 3.
Hvor lang tid tar leksjonen «Overvåking med Prometheus»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne NestJS-API-er for virksomhetsbackend-leksjonen?
Ja. Alle NestJS-API-er for virksomhetsbackend-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Begrensning av forespørselsfrekvens og struping
- Logging med Winston/Pino
- Overvåking med Prometheus