Adapted from Distributed Systems with Node.js:
bit.ly/34SHToF
console.log()
of the clouddebug
in prodwinston
is a popular npm package for loggingimport winston from 'winston';
export default winston.createLogger({
level: 'info',
format: winston.format.json(),
defaultMeta: { env: process.env.NODE_ENV,
app: 'profile-service' },
transports: [
new winston.transports.File({
filename: '/var/log/nodeapp.log'
}),
new winston.transports.Console()
]
});
import Logger from '../logger.mjs';
server.addHook('onRequest', async (req) => {
const request_id = crypto.randomUUID();
req.logger = Logger.child({ request_id });
const { url, method } = req.context.config;
req.logger.info('on_request', { url, method });
});
try {
await database.save(record);
} catch (err) {
req.logger.error('db_persist_error', {
error: err.message,
stack: err.stack,
id: record.id
});
return reply.code(500).send('unable to save');
}
message:"handled request" AND status_code>=500
import StatsD from 'statsd-client';
const statsd = new StatsD({ prefix: 'myapp.' });
server.addHook('onResponse', async (req, reply) => {
statsd.timing('request.time',
reply.getResponseTime());
statsd.increment('request.status.' +
reply.raw.statusCode);
statsd.increment('request.method.' +
req.context.config.method);
});
aliasByNode(myapp.request.status.*, 4)
import Zipkin from 'zipkin-lite';
import fastify from 'fastify';
import fetch from 'node-fetch';
const zipkin = new Zipkin({
zipkinHost: 'localhost:9411',
serviceName: 'shallow-api',
servicePort: 80,
serviceIp: '1.2.3.4',
});
const server = fastify();
server.addHook('onRequest', zipkin.onRequest());
server.addHook('onResponse', zipkin.onResponse());
server.get('/widgets/:id', async (req, reply) => {
console.log('REQUEST ID:', req.zipkin.trace);
req.zipkin.setName('get_widget');
// ...
const zreq = req.zipkin.prepare();
const url = 'http://example.org/foo/42';
const result = await fetch(url, {
headers: zreq.headers });
zreq.complete('GET', url);
// ...
return result.text();
});
Zipkin looks like a hierarchy
Datadog APM looks like a perf timeline