依赖 Web 框架(要求 2.7+) 日志(基于 TCP 协议) 参考:log4js-logstash-tcp
1 2 "log4js" : "^3.0.5" , "log4js-logstash-tcp" : "^2.0.0"
Zipkin 参考:zipkin-instrumentation-koa
1 2 "zipkin-instrumentation-koa" : "^0.22.0" , "zipkin-transport-http" : "^0.22.0"
代码(Zipkin 部分) 1 2 3 4 5 6 7 8 9 10 11 12 const { Tracer , BatchRecorder , ExplicitContext } = require ('zipkin' );const { koaMiddleware } = require ('zipkin-instrumentation-koa' );const ctxImpl = new ExplicitContext ();const recorder = new BatchRecorder ({ logger : new HttpLogger ({ endpoint : 'http://192.168.56.100:9411/api/v1/spans' }) }); const tracer = new Tracer ({ recorder, ctxImpl, localServiceName : 'sapi_carmodel' });const app = new Koa ();app.use (koaMiddleware ({ tracer }))
代码(Log 部分) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 var log4js = require ('log4js' );log4js.configure ({ "appenders" : [ { "category" : "tests" , "type" : "log4js-logstash-tcp" , "host" : "localhost" , "port" : 5050 , "fields" : { "instance" : "MyAwsInstance" , "source" : "myApp" , "environment" : "development" } }, { "category" : "tests" , "type" : "console" } ], "levels" : { "tests" : "DEBUG" } });
logstash.conf 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 input { tcp { host => "0.0.0.0" codec => json_lines port => 5050 type => "debug" } } filter { if [type] == "debug" { json { source => "message" remove_field => ["message" ] } } } output { elasticsearch { hosts => ["es:9200" ] action => "index" codec => json index => "sopei-%{type}-%{+YYYY.MM.dd}" template_name => "sopei" } }
测试代码(上游服务发送请求) 1 2 3 4 5 6 7 8 router.get ('/tests' , async (ctx) => { const result = await ctx.rest .get (下游接口); var log = log4js.getLogger ('tests' ); log.debug (result); return ctx.send ('success' , result) });
PS: 这里目前得到的 message 格式不太对,待改
补充 docker-compose 中的 Zipkin 部分 关于 Zipkin,官方提供了三种存储模式:docker-compose 示例 和 zipkin-storage
1 2 3 4 5 6 7 8 9 10 11 zipkin: image: openzipkin/zipkin:2.22.1 container_name: zipkin links: - elasticsearch:es environment: - STORAGE_TYPE=elasticsearch - ES_HOSTS=es:9200 ports: - 9411 :9411