Logs not showing in Grafana with OTLP setup using NodeSdk and OTLPLogExporter
#ask
Why the span/trace is recorded and showed in grafana, but the logs doesn't? Should i use
- I log an error using
- The logged error only shows on console.
- I'm using docker
Why the span/trace is recorded and showed in grafana, but the logs doesn't? Should i use
OtlpLoggerOtlpLogger + HttpClientHttpClient instead of NodeSdkNodeSdk? - I log an error using
Effect.logErrorEffect.logError.- The logged error only shows on console.
- I'm using docker
grafana/otel-lgtmgrafana/otel-lgtm.Otel.tsOtel.tsimport { NodeSdk } from "@effect/opentelemetry"
import { OTLPLogExporter } from "@opentelemetry/exporter-logs-otlp-http"
import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-http"
import { BatchLogRecordProcessor } from "@opentelemetry/sdk-logs"
import { BatchSpanProcessor } from "@opentelemetry/sdk-trace-base"
import { Effect, Layer } from "effect"
import * as OtelConfig from "@/OtelConfig"
export const NodeSdkLive = Effect.gen(function* () {
const config = yield* OtelConfig.Config
yield* Effect.log(`${config.httpUrl}/v1/logs`)
const logExporter = new OTLPLogExporter({
url: `${config.httpUrl}/v1/logs`,
})
const traceExporter = new OTLPTraceExporter({
url: `${config.httpUrl}/v1/traces`,
})
return NodeSdk.layer(() => ({
resource: { serviceName: "my-app" },
spanProcessor: new BatchSpanProcessor(traceExporter),
loggerProviderConfig: {
processors: [new BatchLogRecordProcessor(logExporter)],
},
}))
}).pipe(Effect.provide(OtelConfig.ConfigLive), Layer.unwrapEffect)import { NodeSdk } from "@effect/opentelemetry"
import { OTLPLogExporter } from "@opentelemetry/exporter-logs-otlp-http"
import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-http"
import { BatchLogRecordProcessor } from "@opentelemetry/sdk-logs"
import { BatchSpanProcessor } from "@opentelemetry/sdk-trace-base"
import { Effect, Layer } from "effect"
import * as OtelConfig from "@/OtelConfig"
export const NodeSdkLive = Effect.gen(function* () {
const config = yield* OtelConfig.Config
yield* Effect.log(`${config.httpUrl}/v1/logs`)
const logExporter = new OTLPLogExporter({
url: `${config.httpUrl}/v1/logs`,
})
const traceExporter = new OTLPTraceExporter({
url: `${config.httpUrl}/v1/traces`,
})
return NodeSdk.layer(() => ({
resource: { serviceName: "my-app" },
spanProcessor: new BatchSpanProcessor(traceExporter),
loggerProviderConfig: {
processors: [new BatchLogRecordProcessor(logExporter)],
},
}))
}).pipe(Effect.provide(OtelConfig.ConfigLive), Layer.unwrapEffect)Program.tsProgram.tsimport { NodeRuntime } from "@effect/platform-node"
import { Effect, Layer } from "effect"
import * as Drizzle from "@/Drizzle"
import * as Http from "@/Http"
import * as Otel from "@/Otel"
Layer.launch(Http.ServerLive).pipe(
Effect.provide(
Layer.mergeAll(
Drizzle.ClientLive,
Otel.NodeSdkLive,
),
),
NodeRuntime.runMain(),
)import { NodeRuntime } from "@effect/platform-node"
import { Effect, Layer } from "effect"
import * as Drizzle from "@/Drizzle"
import * as Http from "@/Http"
import * as Otel from "@/Otel"
Layer.launch(Http.ServerLive).pipe(
Effect.provide(
Layer.mergeAll(
Drizzle.ClientLive,
Otel.NodeSdkLive,
),
),
NodeRuntime.runMain(),
)