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)
Introduction à l'observabilité
By Patrice H.
Introduction à l'observabilité
- 63