aula-15: implementação completa APM (Tempo + OTel + demo app)
Componentes: - tempo-values.yaml: Grafana Tempo monolithic, 256Mi, 10Gi PVC - otel-collector-values.yaml: recebe OTLP, exporta traces→Tempo, gera span metrics (RED)→Victoria Metrics via spanmetrics connector - demo-app/: Node.js com rotas /fast (1 query), /slow (N+1, 51 queries), /fixed (JOIN), auto-instrumentado com OpenTelemetry - alerts/latency-alerts.yaml: VMRule com Doherty threshold (p95>400ms) - setup.sh: instala Tempo, OTel Collector, configura Grafana datasource, deploy demo app via ConfigMap (sem Docker build necessário) - cleanup.sh: remove apenas recursos da aula-15, preserva aula-12 Zero hardcoded hostnames. Tudo via .env e placeholders.
This commit is contained in:
45
aula-15/demo-app/tracing.js
Normal file
45
aula-15/demo-app/tracing.js
Normal file
@@ -0,0 +1,45 @@
|
||||
'use strict';
|
||||
|
||||
const { NodeSDK } = require('@opentelemetry/sdk-node');
|
||||
const { getNodeAutoInstrumentations } = require('@opentelemetry/auto-instrumentations-node');
|
||||
const { OTLPTraceExporter } = require('@opentelemetry/exporter-trace-otlp-grpc');
|
||||
const { OTLPMetricExporter } = require('@opentelemetry/exporter-metrics-otlp-grpc');
|
||||
const { PeriodicExportingMetricReader } = require('@opentelemetry/sdk-metrics');
|
||||
|
||||
const otlpEndpoint = process.env.OTEL_EXPORTER_OTLP_ENDPOINT || 'http://otel-collector.monitoring:4317';
|
||||
const serviceName = process.env.OTEL_SERVICE_NAME || 'demo-app';
|
||||
|
||||
const traceExporter = new OTLPTraceExporter({
|
||||
url: otlpEndpoint,
|
||||
});
|
||||
|
||||
const metricExporter = new OTLPMetricExporter({
|
||||
url: otlpEndpoint,
|
||||
});
|
||||
|
||||
const metricReader = new PeriodicExportingMetricReader({
|
||||
exporter: metricExporter,
|
||||
exportIntervalMillis: 15000,
|
||||
});
|
||||
|
||||
const sdk = new NodeSDK({
|
||||
serviceName,
|
||||
traceExporter,
|
||||
metricReader,
|
||||
instrumentations: [
|
||||
getNodeAutoInstrumentations({
|
||||
'@opentelemetry/instrumentation-fs': { enabled: false },
|
||||
}),
|
||||
],
|
||||
});
|
||||
|
||||
sdk.start();
|
||||
|
||||
process.on('SIGTERM', () => {
|
||||
sdk.shutdown()
|
||||
.then(() => console.log('OpenTelemetry SDK shut down'))
|
||||
.catch((err) => console.error('Error shutting down OpenTelemetry SDK', err))
|
||||
.finally(() => process.exit(0));
|
||||
});
|
||||
|
||||
console.log(`OpenTelemetry initialized for service "${serviceName}" -> ${otlpEndpoint}`);
|
||||
Reference in New Issue
Block a user