Files
ShieldAI/packages/monitoring/src/datadog.ts
Michael Freno c7df40ac26 feat: integrate Datadog APM + Sentry error tracking with CloudWatch metrics FRE-4806
- 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>
2026-05-10 02:15:11 -04:00

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);
}