gcloud-trace
Custom Google Cloud StackDriver tracing client w/out monkey patching
Installation
npm i --save gcloud-trace
Usage
Configure google trace options:
https://github.com/GoogleCloudPlatform/cloud-trace-nodejs
https://github.com/GoogleCloudPlatform/cloud-trace-nodejs/blob/a1650a414c153f68f904909f3bba1d9ae73270da/config.js
const trace = require('gcloud-trace')
trace.init(opts)
Glossary
Each bar line in the chart below is a SpanData
.
The first bar is the RootSpanData
. SpanData
's have name
s and have labels
(reference properties).
Custom trace RootSpanData
const trace = require('gcloud-trace')
trace.init(opts)
const spanName = 'root trace span'
const spanData = trace.createRootSpanData(spanName, {
traceId: 'continuingFromAnotherService',
parentSpanId: 'continuingFromAnotherService',
traceHeader: 'traceId/parentSpanId;o=1',
skipFrames: 1,
spanKind: 'RPC_SERVER'
})
Custom trace RootSpanData for a request
const spanData = trace.createReqRootSpanData(req, res, {
skipFrames: 1,
spanKind: 'RPC_SERVER'
})
SpanData methods
spanData.addLabels('foo', 'bar')
spanData.addLabels({
foo: 'bar'
})
spanData.close()
Create a child SpanData
const spanName = 'childSpanName'
spanData.createChildSpanData(spanName)
Maintain trace across services
client.js
const trace = require('gcloud-trace')
trace.start()
const traceHeader = spanData.toHeader()
const headers = {}
headers[trace.HEADER_NAME] = traceHeader
http.request({
hostname: 'foo.foo',
port: 80,
path: '/bar',
headers: headers
}).end()
server.js
const trace = require('gcloud-trace')
trace.start()
http.createServer(function (req, res) {
const rootSpan = trace.createReqRootSpanData(req, res)
const timeoutSpan = rootSpan.createChildSpanData('timeout')
setTimeout(function () {
timeoutSpan.end()
res.writeHead(200)
rootSpan.end()
res.end()
}, 100)
}).listen(80)
Maintain trace non-http across services
client.js
const traceHeader = spanData.toHeader()
rpc({
operation: 'foo',
traceHeader: traceHeader,
payload: { bar: 'qux' }
}, cb)
server.js
const trace =
rpcServer(function (data) {
const payload = data.payload
const rootSpan = createRootSpan(data.operation, {
traceHeader: data.traceHeader
})
})
License
MIT