add log aggregation with HyperDX

This commit is contained in:
Marcel Arndt
2025-12-12 12:00:22 +01:00
parent 0951282f11
commit 62e663d053
21 changed files with 3463 additions and 220 deletions
File diff suppressed because it is too large Load Diff
+1
View File
@@ -25,6 +25,7 @@
"@apollo/client": "^3.13.8",
"@azure/msal-angular": "^3.0.22",
"@azure/msal-browser": "^3.19.1",
"@hyperdx/browser": "^0.22.0",
"@ng-icons/core": "^31.4.0",
"@ng-icons/lucide": "^31.4.0",
"@ngneat/dialog": "^5.1.1",
@@ -2,17 +2,21 @@ import { Component } from '@angular/core';
import { RouterOutlet } from '@angular/router';
import { AppShellComponent } from './core/components/app-shell/app-shell.component';
import { MsalService } from '@azure/msal-angular';
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
@Component({
selector: 'app-root',
imports: [AppShellComponent, RouterOutlet],
templateUrl: './app.component.html',
styleUrl: './app.component.scss'
selector: 'app-root',
imports: [AppShellComponent, RouterOutlet],
templateUrl: './app.component.html',
styleUrl: './app.component.scss',
})
export class AppComponent {
title = 'dashboard';
constructor(private readonly authService: MsalService) {
this.authService.handleRedirectObservable().subscribe();
this.authService
.handleRedirectObservable()
.pipe(takeUntilDestroyed())
.subscribe();
}
}
@@ -1,66 +0,0 @@
import { registerInstrumentations } from '@opentelemetry/instrumentation';
import {
WebTracerProvider,
ConsoleSpanExporter,
SimpleSpanProcessor,
BatchSpanProcessor,
ParentBasedSampler,
TraceIdRatioBasedSampler,
} from '@opentelemetry/sdk-trace-web';
import { getWebAutoInstrumentations } from '@opentelemetry/auto-instrumentations-web';
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
import { Resource } from '@opentelemetry/resources';
import { B3Propagator } from '@opentelemetry/propagator-b3';
import {
ATTR_SERVICE_NAME,
ATTR_SERVICE_VERSION,
} from '@opentelemetry/semantic-conventions';
import { environment } from '../../../environments/environment';
const resource = Resource.default().merge(
new Resource({
[ATTR_SERVICE_NAME]: environment.production ? 'avicenna.dashboard.prod' : 'avicenna.dashboard',
// [ATTR_SERVICE_NAMESPACE]: 'avicenna',
[ATTR_SERVICE_VERSION]: '1.0',
environment: environment.production ? 'production' : 'staging'
})
);
const provider = new WebTracerProvider({
resource,
sampler: new ParentBasedSampler({
root: new TraceIdRatioBasedSampler(0.1),
}),
spanProcessors: [
new SimpleSpanProcessor(new ConsoleSpanExporter()),
new BatchSpanProcessor(
new OTLPTraceExporter({
url: 'https://collector.genius.ceo/v1/traces',
}),
{
maxQueueSize: 100,
maxExportBatchSize: 10,
scheduledDelayMillis: 500,
}
),
],
});
provider.register({
propagator: new B3Propagator(),
});
registerInstrumentations({
instrumentations: [
getWebAutoInstrumentations({
'@opentelemetry/instrumentation-document-load': {},
'@opentelemetry/instrumentation-user-interaction': {},
'@opentelemetry/instrumentation-fetch': {
propagateTraceHeaderCorsUrls: /.+/,
},
'@opentelemetry/instrumentation-xml-http-request': {
propagateTraceHeaderCorsUrls: /.+/,
},
}),
],
});
@@ -115,11 +115,7 @@ export class DayviewComponent {
this.selectedDate.value ?? new Date(),
days
);
if (isSunday(nextSelectedDate)) {
this.selectedDate.setValue(addDays(nextSelectedDate, days));
} else {
this.selectedDate.setValue(nextSelectedDate);
}
this.selectedDate.setValue(nextSelectedDate);
}
changeSelectedType(event: MatChipListboxChange) {
+10 -1
View File
@@ -2,9 +2,18 @@
import '@angular/common/locales/global/de';
import { bootstrapApplication } from '@angular/platform-browser';
import HyperDX from '@hyperdx/browser';
import { AppComponent } from './app/app.component';
import { appConfig } from './app/app.config';
import './app/core/telemetry/instrument';
HyperDX.init({
url: 'https://otlp.avicenna.hamburg',
apiKey: '71addf09-bcd2-4e83-8158-97458402137b',
service: 'avicenna-dashboard',
tracePropagationTargets: [/api/i, /graphql/i],
consoleCapture: true,
advancedNetworkCapture: true
});
bootstrapApplication(AppComponent, appConfig).catch((err) =>
console.error(err)