😎 developpeur fullstack
🛹 freelance
🍸 co-organisateur du meetup
On interroge son système
Application
Système/backend observabilité
signaux
Logs
Metrics
Traces
Logs
const logger = require('pino')()
const user = {
id: 1,
firstName: 'Fabien',
lastName: 'Veillance'
}
logger.info({ user }, 'found user')
Metrics
- données numériques
- peu couteuses à stocker
- longue rétention
Traces
Traces
Tracing Lib
Logging Lib
Metrics Lib
Application
Spécification
SDK d'instrumention
- 1 par language
Collecteur
- un binaire
- collecte / transforme / exporte
- push / pull
- protocole OTLP
- semantic attributes
npm install @opentelemetry/sdk-node \
@opentelemetry/api \
@opentelemetry/auto-instrumentations-node
/*instrumentation.ts*/
import { NodeSDK } from '@opentelemetry/sdk-node'
import {
getNodeAutoInstrumentations
} from '@opentelemetry/auto-instrumentations-node'
const sdk = new NodeSDK({
instrumentations: [getNodeAutoInstrumentations()],
})
sdk.start()
OTEL_SERVICE_NAME=coffee-service npx ts-node --require ./instrumentation.ts app.ts
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()
}
})
(le repo)