A Kibana plugin to show a graphical service map created from execution traces in Zipkin format. The traces have to contain certain tags and attributes to get displayed correctly in the map (see Trace Format).
Prerequisites: Elasticsearch and Kibana 7.10.0
./bin/kibana-plugin install https://github.com/noah-kogler/trace_network_map/blob/main/build/traceNetworkMap-7.10.0.zip?raw=true
- See the kibana contributing guide for instructions setting up your development environment!
- Download the code of this plugin and put it into the kibana/plugins-directory.
- Start your kibana development environment with
nvm use; yarn start --oss - Navigate your browser to /app/traceNetworkMap
Note: You can a URL parameter /app/traceNetworkMap?enableTimeFilter=false to disable Kibana's time filtering mechanism. This may be helpful for development.
yarn kbn bootstrap- Execute this to install node_modules and setup the dependencies in your plugin and in Kibana
yarn plugin-helpers build- Execute this to create a distributable version of this plugin that can be installed in Kibana
The service map supports different types of traces. Each trace-type has a corresponding node-data-class in public/node/data. These classes defined which information from the traces is displayed in the service map nodes and also contains some nodes to aggregate and group traces for a better overview. To extend the traces a specific node-data-class needs to be created and registered in public/node/data.ts.
The Laminas Tracing Module provides tools to create traces in the right format.
Traces are recognized by their localEndpoint or their remoteEndpoint. Additional tags must
be set to provide the service map with the required information.
The following traces are supported:
localEndpoint
web-frontend
tags
pageShould contain the URL path of the page the fetch call was triggered from.http.status_codeThe HTTP status code of the request.
Traces coming from the web frontend must be in the format provided by the zipkin-js fetch instrumentation.
localEndpoint
api
tags
http.pathNeeded to identify the API-URL.
remoteEndpoint
redis
tags
hashAn additional hash code describing the cache item.result.existsFor "has" operations. Should be "1" if a cache object exists and "0" otherwise.result.successFor "get", "set",... operations. Should be "1" if a cache object exists and "0" otherwise.
The name of the trace should be the name of the operation on the redis cache.
remoteEndpoint
mysql
tags
tableThe tables a database statement operates on. Could be a list in case of joins.result.countThe number of returned/modified rows in the statement.
The name of the trace should be the database operation: E.g. "select", "update" or "insert".
remoteEndpoint
s3
tags
nameThe name of the s3 operation. E.g. CopyObject, ListObjects.keyThe key of the object manipulated/queried in s3.result.existsNeeded if the operation checks the existence of an object. Should be "1" or "0".result.countThe number of objects manipulated/queried.
The name of the trace should be method name of the method called on S3 (e.g. executeAsync).