I am using Kibana/ElasticSearch/APM 7.11.1.
And I am not working on http server, so I am using nodejs agent to create the custom transactions
. I have two services, producer
and consumer
.
The trace sequence is:
- producer startTransaction
trace006
. - producer startSpan
request222
. - producer send traceparent to consumder
- consumer startTransaction
request224
withchildOf
traceparent from producer. - consumer startTransaction
request334
withchildOf
traceparent from producer.
And the timeline displayed correctly,
, the relationship ofproducer
and consumer
can be displayed in the timeline graph.
But the service map didn't show the connections between the producer
and the consumer
services. Only two standalone service nodes.
Is there any other settings or special code I need to do?
I found another issue here Service Map not linking services - #4 by GregKalapos,
and I think the problem is the same.
I am writing some simulation nodejs app to generate transaction/span data. So is there any doc or code sample to set span.destination
correctly?
Here is my code:
- NodeJS app1 acts as
producer
service.
const agent =
require('elastic-apm-node').start({'producer', serverUrl: 'http://localhost:8200'});
const startTime = Date.now();
const tran = createTransaction(producer, 'trace006', startTime);
const traceparent = producer.currentTraceparent;
const req1 =
tran.startSpan('request222', 'custom', {startTime: startTime + 10});
req1.setDestinationContext(
{service: {name: 'consumer', resource: 'db', type: req1.type}});
// use ipc communication channel to send the traceparent to another nodejs process.
sendTraceParentWithIPCToConsumer();
req1.end();
tran.end();
- NodeJS app2 acts as
consumer
service.
const agent =
require('elastic-apm-node').start({'consumer', serverUrl: 'http://localhost:8200'});
ipc.on('message', traceparent => {
const startTime = Date.now();
const req2 =
agent.startTransaction('request224', {startTime, childOf: traceParent});
req2.end(startTime + 100);
const req3 =
agent.startTransaction('request334', {startTime, childOf: traceParent});
req3.end(startTime + 200);
});
So I am trying to use req1.setDestinationContext( {service: {name: 'consumer', resource: 'db', type: req1.type}});
to set destionation, but not working...
I tried to set the span.type
to external
, now the link is displayed, but not producer -> consumer
, it is producer -> db
, where the db
is the resource
of the destination context.
Thank you.