Introduction à l'observabilité feat. OpenTelemetry

Patrice Hannotin

😎 developpeur fullstack 

🛹 freelance

🍸 co-organisateur du meetup

Disclaimer

Houston, ça répond plus

Des MS partout 😵‍💫

Observabilité

On interroge son système

Application

Système/backend observabilité

signaux

observabilité - 3 piliers 🏛️

Logs

Metrics

Traces

observabilité - 3 piliers

Logs

const logger = require('pino')()

const user = {
    id: 1,
    firstName: 'Fabien',
    lastName: 'Veillance'
}

logger.info({ user }, 'found user')

observabilité - 3 piliers

Metrics

- données numériques

- peu couteuses à stocker

- longue rétention

observabilité - 3 piliers

Traces

observabilité - 3 piliers

Traces

Instrumentation

Tracing Lib

Logging Lib

Metrics Lib

Application

3 briques

Spécification

SDK d'instrumention

- 1 par language

Collecteur

- un binaire

- collecte / transforme / exporte

- push / pull

- protocole OTLP

- semantic attributes

Le collecteur

VS.

Comment faire ???

npm install @opentelemetry/sdk-node \
  @opentelemetry/api \
  @opentelemetry/auto-instrumentations-node

Comment faire ???

/*instrumentation.ts*/
import { NodeSDK } from '@opentelemetry/sdk-node'
import { 
  getNodeAutoInstrumentations
} from '@opentelemetry/auto-instrumentations-node'

const sdk = new NodeSDK({
  instrumentations: [getNodeAutoInstrumentations()],
})

sdk.start()

Comment faire ?

OTEL_SERVICE_NAME=coffee-service npx ts-node --require ./instrumentation.ts app.ts

Et l'instrumentation manuelle ?

tracer.startActiveSpan('CartValidation', async (span) => {
    try {
      span.addEvent('Cart validation')
      span.setAttribute('total', '30')
      
      // ...
      
      span.setStatus({ code: SpanStatusCode.OK })
    } catch (error) {
      span.setStatus({ code: SpanStatusCode.ERROR, message: error.message })
      span.recordException(error)
      throw error
    } finally {
      span.end()
    }
  })

Etat des lieux

Au origines

En 2019

Et c'est du sérieux ?

Et c'est du sérieux ?

Un contretemps 😱

Merci 🍸

(le repo)