Tracing
Enable tracing middleware
Install#
go get github.com/rookie-ninja/rk-boot/v2
go get github.com/rookie-ninja/rk-mux
Options#
options | description | type | default |
---|---|---|---|
mux.middleware.trace.enabled | Enable tracing middleware | boolean | false |
mux.middleware.trace.ignore | Ignore by path | []string | [] |
mux.middleware.trace.exporter.file.enabled | Enable file exporter | boolean | false |
mux.middleware.trace.exporter.file.outputPath | Path of file exporter | string | stdout |
mux.middleware.trace.exporter.jaeger.agent.enabled | Enable jaeger agent exporter | boolean | false |
mux.middleware.trace.exporter.jaeger.agent.host | Hostname of jaeger agent | string | localhost |
mux.middleware.trace.exporter.jaeger.agent.port | Port of jaeger agent | int | 6831 |
mux.middleware.trace.exporter.jaeger.collector.enabled | Enable jaeger collector | boolean | false |
mux.middleware.trace.exporter.jaeger.collector.endpoint | Hostname of jaeger collector | string | http://localhost:16368/api/trace |
mux.middleware.trace.exporter.jaeger.collector.username | Username of jaeger collector | string | "" |
mux.middleware.trace.exporter.jaeger.collector.password | Password of jaeger collector | string | "" |
Quick start#
1.Create boot.yaml#
---
mux:
- name: greeter
port: 8080
enabled: true
middleware:
trace:
enabled: true
exporter:
file:
enabled: true
outputPath: "stdout"
# ignore: [""]
# jaeger:
# agent:
# enabled: false
# host: ""
# port: 0
# collector:
# enabled: true
# endpoint: ""
# username: ""
# password: ""
2.Create main.go#
// Copyright (c) 2021 rookie-ninja
//
// Use of this source code is governed by an Apache-style
// license that can be found in the LICENSE file.
package main
import (
"context"
_ "embed"
"fmt"
"github.com/rookie-ninja/rk-boot/v2"
"github.com/rookie-ninja/rk-mux/boot"
"github.com/rookie-ninja/rk-mux/middleware"
"net/http"
)
// @title RK Swagger for Mux
// @version 1.0
// @description This is a greeter service with rk-boot.
func main() {
// Create a new boot instance.
boot := rkboot.NewBoot()
// Get MuxEntry
muxEntry := rkmux.GetMuxEntry("greeter")
// Use *mux.Router adding handler.
muxEntry.Router.NewRoute().Path("/v1/greeter").HandlerFunc(Greeter)
// Bootstrap
boot.Bootstrap(context.TODO())
boot.WaitForShutdownSig(context.TODO())
}
// Greeter handler
// @Summary Greeter service
// @Id 1
// @version 1.0
// @produce application/json
// @Param name query string true "Input name"
// @Success 200 {object} GreeterResponse
// @Router /v1/greeter [get]
func Greeter(writer http.ResponseWriter, req *http.Request) {
rkmuxmid.WriteJson(writer, http.StatusOK, &GreeterResponse{
Message: fmt.Sprintf("Hello %s!", req.URL.Query().Get("name")),
})
}
type GreeterResponse struct {
Message string
}
3.Validate#
Send request
$ curl -X GET "localhost:8080/v1/greeter?name=rk-dev"
{"Message":"Hello rk-dev!"}
{
"Name": "/v1/greeter",
"SpanContext": {
"TraceID": "507aaae07729a9f7cae7ec25ee7f0ede",
"SpanID": "ea556bd79f2f2732",
"TraceFlags": "01",
"TraceState": "",
"Remote": false
},
"Parent": {
"TraceID": "00000000000000000000000000000000",
"SpanID": "0000000000000000",
"TraceFlags": "00",
"TraceState": "",
"Remote": true
},
"SpanKind": 2,
"StartTime": "2022-04-15T23:28:34.054496+08:00",
"EndTime": "2022-04-15T23:28:34.054594239+08:00",
"Attributes": [
...
{
"Key": "http.status_code",
"Value": {
"Type": "INT64",
"Value": 200
}
}
],
...
"Resource": [
{
"Key": "service.entryName",
"Value": {
"Type": "STRING",
"Value": "greeter"
}
},
{
"Key": "service.entryType",
"Value": {
"Type": "STRING",
"Value": "MuxEntry"
}
},
],
"InstrumentationLibrary": {
"Name": "greeter",
"Version": "semver:1.4.0",
"SchemaURL": ""
}
}
Cheers#
4.Export to file#
There will be delays in seconds
---
mux:
- name: greeter
port: 8080
enabled: true
middleware:
trace:
enabled: true
exporter:
file:
enabled: true
outputPath: "logs/tracing.log"
Cheers#
5.Export to jaeger#
Start jaeger-all-in-one locally
$ docker run -d --name jaeger \ -e COLLECTOR_ZIPKIN_HOST_PORT=:9411 \ -p 5775:5775/udp \ -p 6831:6831/udp \ -p 6832:6832/udp \ -p 5778:5778 \ -p 16686:16686 \ -p 14268:14268 \ -p 14250:14250 \ -p 9411:9411 \ jaegertracing/all-in-one:1.23
---
mux:
- name: greeter
port: 8080
enabled: true
middleware:
trace:
enabled: true
exporter:
jaeger:
agent:
enabled: true
# host: "" # Optional, default: localhost
# port: 0 # Optional, default: 6831
# collector:
# enabled: true # Optional, default: false
# endpoint: "" # Optional, default: http://localhost:14268/api/traces
# username: "" # Optional, default: ""
# password: "" # Optional, default: ""
Jaeger: