0.9.0 • Published 5 years ago

nodetracing v0.9.0

Weekly downloads
3
License
Apache License 2....
Repository
github
Last release
5 years ago

nodetracing

Build Status OpenTracing Badge

中文

Distributed tracking system which is a fully implementation of opentracing standard.

Design goals:

image image image image image image

Project Origin

Nodetracing is written in nodejs, base on opentracing-javascript API

Compare similar projects including:

These above titans are indeed powerful, but also cumbersome and rigid in some way, so an out-of-the-box, lightweight and flexible "swissgear" is more likely met my imagination about an advanced distributed tracking system. now here it is, the name is Nodetrcing.

Design Concept

Nodetracing will be as simple and efficient as possible from the perspective of developer and manager. Progressive is the ultimate goal

Written in nodejs, cross-platform, easy to start, and fully support container cluster deployment, with decoupled frontend and backend, planning to provide API aside from UI

Probe supports multiple language clients, automatic probes are preferred (less code intrusion), at this stage, priority support for automatic probes:

  • nodejs(support:async function,axios,koa,express,grpc original,x-grpc framewrok)
  • java(planing...)

Instructions

1、Implementation Steps

The deployment of a typical distributed tracking system consists of the following two steps:

  • Start collection service standalone/cluster >
  • Install probes for applications that need to be tracked >

Then, along with the running of the application, the tracking information is displayed by the visualized WebUI interface

1.1、Quick Start - Standalone(PORT:3636,36361,36362)

cd server && npm run standalone

open browser http://localhost:3636/nodetracing/web/index.html

1.2、Quick Start - WebUIServer(PORT:3636,36362)

cd server && npm run web

1.3、Quick Start - TracingServer(PORT:36361)

cd server && npm run server

1.4、ENV

#Visualization services can be started by setting up WEB ports
WEB_PORT=3636                 #for start WebUI Server

#Tracking services need to set up RPC ports for receiving Spans and WEB service addresses for reporting Spans REPORT_ADDR=localhost #required RPC_PORT=36361 #option,default 36361

#Tracking service reporting interval REPORT_INTERVAL=5000 #option,default 5000 #Service interface TOKEN key TOKEN_KEY=tDTUusE2PWmKpIyK #option,default 123456

### 2、Docker Swarm Cluster
[DockerHub:nodetracing-image](https://hub.docker.com/r/cheney/nodetracing)
```bash
#docker compose
docker-compose -f "docker-compose.yml" up -d

#docker stack
docker stack deploy --prune -c docker-compose.yml nodetracing

3、Install probe

npm i nodetracing

3.1、Probe initialization (first line of application entry)

const nodetracing = require('nodetracing')
const tracer = new nodetracing.Tracer({
	serviceName: 'S1',      // required,name of service
	rpcAddress: 'localhost',// required,address of tracing service

	rpcPort: '36361',       // option,port of tracing service,default:36361
	auto: true,             // option,is enable automatic tracking,default:false
	stackLog: false,        // option,is record detailed stack information (including code line number location, etc., memory consumption is large),default:false
	maxDuration: 30000      // option,maximum function execution time (garbage collection interval),default:30000
})

After completing the loading of nodetracing, then you can choose the following automatic probe/manual probe depending on your service type...

3.2、Async automatic probe (support for async function)

async function func1(){
	...
}
async function func2(){
	...
}
func1 = nodetracing.aop(func1)
func2 = nodetracing.aop(func2)
...

3.3、Http-request automatic probe (axios)

axios.interceptors.request.use(nodetracing.axiosMiddleware())

3.4、Http-response automatic probe (koa/express)

//koa
app.use(nodetracing.koaMiddleware())
//express
app.use(nodetracing.expressMiddleware())

3.5、Grpc-client automatic probe (original)

const grpc = require('grpc')
const Service = grpc.loadPackageDefinition(...)[packageName][serviceName]
new Service("ip:port", grpc.credentials.createInsecure(), { interceptors: [nodetracing.grpcClientMiddleware()] })

3.6、Grpc-server automatic probe (original)

const grpc = require('grpc')
const interceptors = require('@echo-health/grpc-interceptors')
let server = new grpc.Server()
server = interceptors.serverProxy(this.server)
server.use(nodetracing.grpcClientMiddleware())

3.7、Grpc-client automatic probe(x-grpc framewrok)

const RPCClient = require('x-grpc').RPCClient
const rpcClient = new RPCClient({
    port: 3333,
    protosDir: "/grpc/protos/",
    implsDir: "/grpc/impls/",
    serverAddress: "localhost"
})
rpcClient.use(nodetracing.grpcClientMiddleware())
rpcClient.connect()
let result = await rpcClient.invoke('demo.User.login', { username: 'cheney', password: '123456' } , optionMeta?)

3.8、Grpc-server automatic probe(x-grpc framewrok)

const RPCServer = require('x-grpc').RPCServer
const rpcServer = new RPCServer({
    port: 3333,
    protosDir: "/grpc/protos/",
    implsDir: "/grpc/impls/",
    serverAddress: "localhost"
})
rpcServer.use(nodetracing.grpcServerMiddleware())
rpcServer.listen()

4、Manual probe

// Create Root Span
let parentSpan = tracer.startSpan('sp1')
// Set Tag
parentSpan.setTag('category', 'Root')
// Create Child Span
let childSpan = tracer.startSpan('csp1', { childOf: parentSpan })
// Set Log
childSpan.log({ event: 'waiting' })
// Finish Span
childSpan.finish()
parentSpan.finish()

4.1、HTTP remote manual probe

tracer.inject(parentSpan, nodetracing.FORMAT_HTTP_HEADERS, headers)
let parentSpan = tracer.extract(nodetracing.FORMAT_HTTP_HEADERS, headers)

4.1、GRPC remote manual probe

tracer.inject(parentSpan, nodetracing.FORMAT_GRPC_METADATA, metadata)
let parentSpan = tracer.extract(nodetracing.FORMAT_GRPC_METADATA, metadata)

5、Examples of Probe Use

client/example/app_koa.js client/example/app_express.js client/example/app_grpc.js client/example/app_manual.js client/example/example.js

cd client && npm run start

Support & Help

If nodetracing is helpful to you, I hope to get a Star of yours :)

License

Apache License 2.0

0.9.0

5 years ago

0.8.0

5 years ago

0.7.0

5 years ago

0.6.0

5 years ago

0.5.0

5 years ago

0.4.0

5 years ago

0.3.0

5 years ago

0.2.0

5 years ago

0.1.0

5 years ago