Instrumentation Control
Kitex supports flexible enabling of basic and fine-grained Instrumentation.
Stats Level:
- LevelDisabled, disable all events
- LevelBase, enable basic events
- LevelDetailed, enable basic events and detailed events.
Stats Level
Default Stats Level:
- No tracer is available, LevelDisabled by default
- At least one tracer is available, LevelDetailed by default
Client tracing stats level control:
import "github.com/cloudwego/kitex/client"
import "github.com/cloudwego/kitex/pkg/stats"
...
baseStats := client.WithStatsLevel(stats.LevelBase)
client, err := echo.NewClient("echo", baseStats)
if err != nil {
log.Fatal(err)
}
Server tracing stats level control:
import "github.com/cloudwego/kitex/server"
import "github.com/cloudwego/kitex/pkg/stats"
...
baseStats := server.WithStatsLevel(stats.LevelBase)
svr, err := echo.NewServer(baseStats)
if err := svr.Run(); err != nil {
log.Println("server stopped with error:", err)
} else {
log.Println("server stopped")
}
Stats introduction
Basic Stats Event:
- RPCStart,(client/server)RPC call start
- RPCFinish,(client)RPC call finish
Detailed Stats Event(client):
- ClientConnStart, connection establishment start
- ClientConnFinish,connection establishment finish
- WriteStart, request send (serialization including) start
- WriteFinish, request send (serialization including) finish
- ReadStart, response receive (deserialization including) start
- WaitReadStart, response stream read start (
Fast Codeconly) - WaitReadFinish, response stream read finish (
Fast Codeconly) - ReadFinish, response receive (deserialization including) finish
Detailed Stats Event(server):
- ReadStart, request receive (deserialization including) start
- WaitReadStart, request stream read start (
Fast Codeconly) - WaitReadFinish, request stream read finish (
Fast Codeconly) - ReadFinish, request receive (deserialization including) start
- ServerHandleStart, handler process start
- ServerHandleFinish, handler process finish
- WriteStart, response send (serialization including) start
- WriteFinish, response send (serialization including) start
Timeline:
client stats events timeline:
%%{init: {'theme': 'base', 'flowchart': {'nodeSpacing': 10, 'rankSpacing': 20}}}%%
flowchart TD
A[Start Invocation] --> B[RPCStart]
B --> C[Middlewares]
C --> D[ClientConnStart]
D --> E[ClientConnFinish]
E --> F[WriteStart]
F --> G[Marshal Request]
G --> H[WriteFinish]
H --> I[Wait for Response]
I --> J[ReadStart]
J --> K[WaitReadStart]
K --> L[WaitReadFinish]
L --> M[Unmarshal Response]
M --> N[ReadFinish]
N --> O[Middlewares]
O --> P[RPCFinish]
classDef event fill:#fff,stroke:#ff0000,stroke-width:2px,color:#000
classDef process fill:#fff,stroke:#000000,stroke-width:2px,color:#000
class B,D,E,F,H,J,K,L,N,P event
class A,C,G,I,M,O process
server stats events timeline:
%%{init: {'theme': 'base', 'flowchart': {'nodeSpacing': 10, 'rankSpacing': 20}}}%%
flowchart TD
A[Invocation Started] --> B[RPCStart]
B --> C[ReadStart]
C --> D[WaitReadStart]
D --> E[WaitReadFinish]
E --> F[Unmarshal Request]
F --> G[ReadFinish]
G --> H[Middlewares]
H --> I[ServerHandleStart]
I --> J[Handler Process]
J --> K[ServerHandleFinish]
K --> L[Middlewares]
L --> M[WriteStart]
M --> N[Marshal Response]
N --> O[WriteFinish]
O --> P[RPCFinish]
classDef event fill:#fff,stroke:#ff0000,stroke-width:2px,color:#000
classDef process fill:#fff,stroke:#000000,stroke-width:2px,color:#000
class B,C,D,E,G,I,K,M,O,P event
class A,F,H,J,L,N process
Last modified
December 22, 2025
: fix(kitex): observability trace event diagram (#1483) (4304b50d66)