From 55156782cf32a13bebe47aee4571b1603e8464f0 Mon Sep 17 00:00:00 2001 From: Lukasz Ostrowski Date: Thu, 3 Aug 2023 10:27:48 +0200 Subject: [PATCH] trying to connect pino but failed --- apps/search/package.json | 3 + apps/search/src/lib/logger.ts | 16 ++--- apps/search/src/otel.ts | 16 ++++- apps/search/src/pages/api/configuration.ts | 9 ++- pnpm-lock.yaml | 82 +++++++++++++++------- 5 files changed, 84 insertions(+), 42 deletions(-) diff --git a/apps/search/package.json b/apps/search/package.json index e73ea96..2f63c98 100644 --- a/apps/search/package.json +++ b/apps/search/package.json @@ -21,6 +21,8 @@ "@hookform/resolvers": "^3.1.0", "@opentelemetry/api": "^1.4.1", "@opentelemetry/exporter-trace-otlp-http": "^0.41.1", + "@opentelemetry/instrumentation": "^0.41.1", + "@opentelemetry/instrumentation-pino": "^0.34.0", "@opentelemetry/resources": "^1.15.1", "@opentelemetry/sdk-node": "^0.41.1", "@opentelemetry/sdk-trace-node": "^1.15.1", @@ -44,6 +46,7 @@ "next": "13.3.0", "next-urql": "4.0.0", "pino": "^8.14.1", + "pino-opentelemetry-transport": "^0.1.0", "pino-pretty": "^10.0.0", "prisma": "^4.15.0", "react": "18.2.0", diff --git a/apps/search/src/lib/logger.ts b/apps/search/src/lib/logger.ts index a0356cb..e95e15f 100644 --- a/apps/search/src/lib/logger.ts +++ b/apps/search/src/lib/logger.ts @@ -1,13 +1,9 @@ -import { createLogger as _createLogger } from "@saleor/apps-shared"; +import pino from "pino"; -/** - * Extend factory to add more settings specific for the app - */ -export const logger = _createLogger( - {}, - { - redact: ["token", "secretKey"], - } -); +const otelTransport = pino.transport({ + target: "pino-opentelemetry-transport", +}); + +export const logger = pino(otelTransport); export const createLogger = logger.child.bind(logger); diff --git a/apps/search/src/otel.ts b/apps/search/src/otel.ts index fa2fa39..c5fd740 100644 --- a/apps/search/src/otel.ts +++ b/apps/search/src/otel.ts @@ -1,15 +1,25 @@ -import { NodeSDK } from "@opentelemetry/sdk-node"; +import { trace } from "@opentelemetry/api"; import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-http"; import { Resource } from "@opentelemetry/resources"; -import { SemanticResourceAttributes } from "@opentelemetry/semantic-conventions"; +import { NodeSDK } from "@opentelemetry/sdk-node"; import { SimpleSpanProcessor } from "@opentelemetry/sdk-trace-node"; -import { trace } from "@opentelemetry/api"; +import { SemanticResourceAttributes } from "@opentelemetry/semantic-conventions"; +const { PinoInstrumentation } = require("@opentelemetry/instrumentation-pino"); const sdk = new NodeSDK({ resource: new Resource({ [SemanticResourceAttributes.SERVICE_NAME]: "saleor.app.search", }), spanProcessor: new SimpleSpanProcessor(new OTLPTraceExporter()), + instrumentations: [ + new PinoInstrumentation({ + // Optional hook to insert additional context to log object. + logHook: (span, record, level) => { + record["resource.service.name"] = "saleor.app.search"; + }, + }), + // other instrumentations + ], }); sdk.start(); diff --git a/apps/search/src/pages/api/configuration.ts b/apps/search/src/pages/api/configuration.ts index 632d783..c8b1ac8 100644 --- a/apps/search/src/pages/api/configuration.ts +++ b/apps/search/src/pages/api/configuration.ts @@ -4,7 +4,7 @@ import { createClient } from "../../lib/graphql"; import { saleorApp } from "../../../saleor-app"; import { createProtectedHandler, ProtectedHandlerContext } from "@saleor/app-sdk/handlers/next"; -import { createLogger } from "../../lib/logger"; +import { createLogger, logger as otelLogger } from "../../lib/logger"; import { AppConfigurationFields, AppConfigurationSchema } from "../../domain/configuration"; import { AlgoliaSearchProvider } from "../../lib/algolia/algoliaSearchProvider"; import { WebhookActivityTogglerService } from "../../domain/WebhookActivityToggler.service"; @@ -28,11 +28,9 @@ export const handler = async ( const client = createClient(saleorApiUrl, async () => Promise.resolve({ token: token })); - console.log(req.method); - // todo extract endpoints, add trpc if (req.method === "GET") { - logger.debug("Returning configuration"); + logger.info("Returning configuration"); const configuration = await algoliaConfigurationRepository.getConfiguration(saleorApiUrl); @@ -47,12 +45,13 @@ export const handler = async ( } else if (req.method === "POST") { tracer.startActiveSpan("update-configuration", async (span) => { console.log("test log console"); + otelLogger.warn("test warn"); span.addEvent("update-configuration POST", { foo: "BAR", }); - logger.debug("Updating the configuration - log logger pino"); + logger.info("Updating the configuration - log logger pino"); const { appId, secretKey, indexNamePrefix } = JSON.parse(req.body) as AppConfigurationFields; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d232e6d..ad49f2e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1176,6 +1176,12 @@ importers: '@opentelemetry/exporter-trace-otlp-http': specifier: ^0.41.1 version: 0.41.1(@opentelemetry/api@1.4.1) + '@opentelemetry/instrumentation': + specifier: ^0.41.1 + version: 0.41.1(@opentelemetry/api@1.4.1) + '@opentelemetry/instrumentation-pino': + specifier: ^0.34.0 + version: 0.34.0(@opentelemetry/api@1.4.1) '@opentelemetry/resources': specifier: ^1.15.1 version: 1.15.1(@opentelemetry/api@1.4.1) @@ -1245,6 +1251,9 @@ importers: pino: specifier: ^8.14.1 version: 8.14.1 + pino-opentelemetry-transport: + specifier: ^0.1.0 + version: 0.1.0(@opentelemetry/api@1.4.1) pino-pretty: specifier: ^10.0.0 version: 10.0.0 @@ -7131,6 +7140,22 @@ packages: jaeger-client: 3.19.0 dev: false + /@opentelemetry/exporter-logs-otlp-grpc@0.41.1(@opentelemetry/api-logs@0.41.1)(@opentelemetry/api@1.4.1): + resolution: {integrity: sha512-Axbafs6f59EOI+BpcRUWhyWQ7x1mPOZDMN/x89RY8b7xPODAoBFjMXiTHapIb0VQ7oMLvIwf2Ala5Afrp09djw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + dependencies: + '@grpc/grpc-js': 1.9.0 + '@opentelemetry/api': 1.4.1 + '@opentelemetry/core': 1.15.1(@opentelemetry/api@1.4.1) + '@opentelemetry/otlp-grpc-exporter-base': 0.41.1(@opentelemetry/api@1.4.1) + '@opentelemetry/otlp-transformer': 0.41.1(@opentelemetry/api@1.4.1) + '@opentelemetry/sdk-logs': 0.41.1(@opentelemetry/api-logs@0.41.1)(@opentelemetry/api@1.4.1) + transitivePeerDependencies: + - '@opentelemetry/api-logs' + dev: false + /@opentelemetry/exporter-trace-otlp-grpc@0.41.1(@opentelemetry/api@1.4.1): resolution: {integrity: sha512-Hdd1X/7UnJYqgofd2FS09Sh30NaZvoLrRSj1q+y6InzgYfUweRHpBUbcygAclRNkmKB+ydfsFJUXiOkK47bOYQ==} engines: {node: '>=14'} @@ -7188,6 +7213,19 @@ packages: '@opentelemetry/semantic-conventions': 1.15.1 dev: false + /@opentelemetry/instrumentation-pino@0.34.0(@opentelemetry/api@1.4.1): + resolution: {integrity: sha512-UtoVJG1gVit5Bksy0ccwtmJm9a39WDW4tMEAh0Spk31burJuEKKT09CslSQ3zmkoHj91iLWi5O5A94dIUVIXsg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.4.1 + '@opentelemetry/instrumentation': 0.41.1(@opentelemetry/api@1.4.1) + tslib: 2.6.0 + transitivePeerDependencies: + - supports-color + dev: false + /@opentelemetry/instrumentation@0.41.1(@opentelemetry/api@1.4.1): resolution: {integrity: sha512-IsOidIIgI7Sg2NhWGYRZRifiv9kLyrxT89hBK1YVPDetuBEBUgFzD5VXdwqwfOKL3kgT4KiERMmLJ8gqig0o1A==} engines: {node: '>=14'} @@ -12915,7 +12953,7 @@ packages: js-string-escape: 1.0.1 lodash: 4.17.21 md5-hex: 3.0.1 - semver: 7.5.1 + semver: 7.5.3 well-known-symbols: 2.0.0 /concurrently@8.1.0: @@ -13589,7 +13627,7 @@ packages: prop-types: 15.8.1 react: 18.2.0 react-is: 17.0.2 - tslib: 2.5.3 + tslib: 2.6.0 /downshift@7.6.0(react@18.2.0): resolution: {integrity: sha512-VSoTVynTAsabou/hbZ6HJHUVhtBiVOjQoBsCPcQq5eAROIGP+9XKMp9asAKQ3cEcUP4oe0fFdD2pziUjhFY33Q==} @@ -13969,8 +14007,8 @@ packages: resolution: {integrity: sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==} dependencies: debug: 3.2.7 - is-core-module: 2.11.0 - resolve: 1.22.1 + is-core-module: 2.12.1 + resolve: 1.22.2 transitivePeerDependencies: - supports-color dev: true @@ -13988,7 +14026,7 @@ packages: eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.51.0)(eslint-import-resolver-typescript@3.5.3)(eslint@8.42.0) get-tsconfig: 4.4.0 globby: 13.1.3 - is-core-module: 2.11.0 + is-core-module: 2.12.1 is-glob: 4.0.3 synckit: 0.8.5 transitivePeerDependencies: @@ -14045,11 +14083,11 @@ packages: eslint-import-resolver-node: 0.3.7 eslint-module-utils: 2.7.4(@typescript-eslint/parser@5.51.0)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.3)(eslint@8.42.0) has: 1.0.3 - is-core-module: 2.11.0 + is-core-module: 2.12.1 is-glob: 4.0.3 minimatch: 3.1.2 object.values: 1.1.6 - resolve: 1.22.1 + resolve: 1.22.2 semver: 6.3.0 tsconfig-paths: 3.14.1 transitivePeerDependencies: @@ -15745,12 +15783,6 @@ packages: dependencies: ci-info: 3.7.1 - /is-core-module@2.11.0: - resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==} - dependencies: - has: 1.0.3 - dev: true - /is-core-module@2.12.1: resolution: {integrity: sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==} dependencies: @@ -18781,6 +18813,17 @@ packages: split2: 4.1.0 dev: false + /pino-opentelemetry-transport@0.1.0(@opentelemetry/api@1.4.1): + resolution: {integrity: sha512-MCPVdKPSXIaS/kY7NzGNK3zObuEDLR+sB+uy4TTAhdQ7iYcPhLy+pGF2gh82slkEUtBBCtd5Sl+39wyo8KOHag==} + dependencies: + '@opentelemetry/api-logs': 0.41.1 + '@opentelemetry/exporter-logs-otlp-grpc': 0.41.1(@opentelemetry/api-logs@0.41.1)(@opentelemetry/api@1.4.1) + '@opentelemetry/sdk-logs': 0.41.1(@opentelemetry/api-logs@0.41.1)(@opentelemetry/api@1.4.1) + pino-abstract-transport: 1.0.0 + transitivePeerDependencies: + - '@opentelemetry/api' + dev: false + /pino-pretty@10.0.0: resolution: {integrity: sha512-zKFjYXBzLaLTEAN1ayKpHXtL5UeRQC7R3lvhKe7fWs7hIVEjKGG/qIXwQt9HmeUp71ogUd/YcW+LmMwRp4KT6Q==} hasBin: true @@ -19293,7 +19336,7 @@ packages: estree-to-babel: 3.2.1 neo-async: 2.6.2 node-dir: 0.1.17 - resolve: 1.22.1 + resolve: 1.22.2 strip-indent: 3.0.0 transitivePeerDependencies: - supports-color @@ -20113,15 +20156,6 @@ packages: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} - /resolve@1.22.1: - resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} - hasBin: true - dependencies: - is-core-module: 2.12.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - dev: true - /resolve@1.22.2: resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==} hasBin: true @@ -20134,7 +20168,7 @@ packages: resolution: {integrity: sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==} hasBin: true dependencies: - is-core-module: 2.11.0 + is-core-module: 2.12.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 dev: true