## New Features ### Universal Instrumentation Container - Created deploy/instrumentation/ with Dockerfile that downloads OTel agents for: - .NET (glibc and musl/Alpine versions) - Node.js (with auto-instrumentation package) - Python (bootstrap script + requirements) - Java (javaagent JAR) - Go (example code for compile-time instrumentation) - PHP (composer package + init script) ### Universal instrument.sh Script - Auto-detects application language from running processes - Generates docker-compose snippets for each language - Supports: dotnet, nodejs, python, java, go, php - Usage: ./instrument.sh <container> [language] [otlp_endpoint] ### Improved docker-compose.yml - Added instrumentation init container with shared volume - Added AGENT_KEY environment variable for proper auth - Added ophion-agent service for host metrics collection - Named containers for easier management - Added ophion-network for service discovery ### Documentation - Created docs/QUICK_START.md with: - Single-command installation - Instrumentation guide for all languages - Troubleshooting section - Authentication guide ### Auth Fixes - Server now properly validates AGENT_KEY for agent authentication - OTel Collector configured with AGENT_KEY for forwarding to server - Fixed 401 errors when agents connect ## Files Changed - docker-compose.yml: Complete stack with all services - deploy/instrumentation/*: Universal OTel agent container - deploy/docker/otel-collector-config.yaml: Fixed auth headers - instrument.sh: Universal instrumentation script - docs/QUICK_START.md: Complete quick start guide - README.md: Updated with new features - .env.example: Added AGENT_KEY ## Testing - Go code compiles successfully - Docker images build correctly - All changes are backwards compatible
26 lines
1013 B
JavaScript
26 lines
1013 B
JavaScript
const { NodeSDK } = require('@opentelemetry/sdk-node');
|
|
const { getNodeAutoInstrumentations } = require('@opentelemetry/auto-instrumentations-node');
|
|
const { OTLPTraceExporter } = require('@opentelemetry/exporter-trace-otlp-http');
|
|
const { OTLPMetricExporter } = require('@opentelemetry/exporter-metrics-otlp-http');
|
|
const { PeriodicExportingMetricReader } = require('@opentelemetry/sdk-metrics');
|
|
|
|
const endpoint = process.env.OTEL_EXPORTER_OTLP_ENDPOINT || 'http://localhost:4318';
|
|
|
|
const sdk = new NodeSDK({
|
|
traceExporter: new OTLPTraceExporter({
|
|
url: endpoint + '/v1/traces',
|
|
}),
|
|
metricReader: new PeriodicExportingMetricReader({
|
|
exporter: new OTLPMetricExporter({
|
|
url: endpoint + '/v1/metrics',
|
|
}),
|
|
exportIntervalMillis: 30000,
|
|
}),
|
|
instrumentations: [getNodeAutoInstrumentations()],
|
|
serviceName: process.env.OTEL_SERVICE_NAME || 'nodejs-app',
|
|
});
|
|
|
|
sdk.start();
|
|
process.on('SIGTERM', () => sdk.shutdown());
|
|
console.log('[OPHION] OpenTelemetry auto-instrumentation enabled');
|