- Add CloudWatch metrics emitter (api_latency, api_requests, api_errors) - Add request monitoring middleware for API (latency, error rate, throughput) - Register error-handling, logging, and monitoring middleware in server.ts - Add Datadog log forwarding via HTTP intake API - Add application-level CloudWatch alarms for P99 latency, error rate, throughput - Inject Datadog/Sentry env vars and secrets into ECS task definitions - Add DD_API_KEY and SENTRY_DSN to ECS secrets - Create CloudWatch log groups for datadog and sentry services - Update .env.example with AWS_REGION and monitoring variables - Add @aws-sdk/client-cloudwatch dependency to monitoring package Co-Authored-By: Paperclip <noreply@paperclip.ing>
50 lines
1.2 KiB
TypeScript
50 lines
1.2 KiB
TypeScript
import { getMonitoringConfig } from './config';
|
|
|
|
let initialized = false;
|
|
|
|
export function initDatadog() {
|
|
if (initialized) return;
|
|
|
|
const config = getMonitoringConfig();
|
|
|
|
if (config.DD_TRACE_ENABLED !== 'true') {
|
|
console.log('[Datadog] APM tracing disabled');
|
|
return;
|
|
}
|
|
|
|
try {
|
|
const tracer = require('dd-trace').init({
|
|
service: config.DD_SERVICE,
|
|
env: config.DD_ENV,
|
|
version: config.DD_VERSION,
|
|
sampleRate: config.DD_TRACE_SAMPLE_RATE,
|
|
logInjection: config.DD_LOGS_INJECTION === 'true',
|
|
agentHost: config.DD_AGENT_HOST,
|
|
agentPort: config.DD_AGENT_PORT,
|
|
plugins: true,
|
|
debug: config.DD_ENV === 'development',
|
|
});
|
|
|
|
initialized = true;
|
|
console.log(`[Datadog] APM initialized for service "${config.DD_SERVICE}" in "${config.DD_ENV}"`);
|
|
return tracer;
|
|
} catch (err) {
|
|
console.warn('[Datadog] APM initialization skipped:', (err as Error).message);
|
|
}
|
|
}
|
|
|
|
export function getDatadogTracer() {
|
|
try {
|
|
return require('dd-trace').tracer;
|
|
} catch {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
export function createDatadogSpan(name: string, options?: Record<string, unknown>) {
|
|
const tracer = getDatadogTracer();
|
|
if (!tracer) return;
|
|
|
|
return tracer.startChild(name, options);
|
|
}
|