Effect CommunityEC
Effect Community5mo ago
2 replies
Osfe

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 OtlpLogger + HttpClient instead of NodeSdk?

- I log an error using Effect.logError.
- The logged error only shows on console.
- I'm using docker grafana/otel-lgtm.

Otel.ts
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.ts
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(),
)
Was this page helpful?