This commit is contained in:
2025-11-06 16:25:33 +01:00
commit a6876f9f0b
15 changed files with 1611 additions and 0 deletions
+146
View File
@@ -0,0 +1,146 @@
# Go OTel Debugger
This is a debug OpenTelemetry receiver that accepts traces, metrics, and logs via OTLP HTTP protocol and broadcasts them over WebSocket connections for real-time visualization.
## Features
- Receives OTLP traces, metrics, and logs over HTTP
- Broadcasts received telemetry data over WebSocket connections
- Supports both JSON and Protocol Buffer formats
- Real-time debugging and visualization
## Getting Started
### Prerequisites
- Go 1.21+
- Docker (optional)
### Running Locally
1. Clone the repository:
```sh
git clone https://git.tornberg.me/go-otel.git
cd go-otel
```
2. Run the server:
```sh
go run ./cmd/server
```
The server will be running on port 8080.
### Running with Docker
1. Build the Docker image:
```sh
docker build -t go-otel .
```
2. Run the Docker container:
```sh
docker run -p 8080:8080 go-otel
```
## API
### OTLP HTTP Endpoints
- **POST /v1/traces**: Receive OTLP traces
- **POST /v1/metrics**: Receive OTLP metrics
- **POST /v1/logs**: Receive OTLP logs
Supported Content-Types:
- `application/json`
- `application/x-protobuf`
### OTLP gRPC Endpoints
- **gRPC service**: `otlptracegrpc.TraceService.Export`
- **gRPC service**: `otlptracegrpc.MetricsService.Export`
- **gRPC service**: `otlptracegrpc.LogsService.Export`
gRPC server runs on port 4317 (standard OTLP gRPC port).
### WebSocket
- **GET /ws**: Connect to receive real-time telemetry data
## Usage
Send OTLP data to the appropriate endpoints. The data will be broadcast to all connected WebSocket clients for visualization.
Open `http://localhost:8080` in your browser to access the web-based visualizer.
### HTTP Examples
Example with curl (JSON):
```sh
curl -X POST http://localhost:8080/v1/traces \
-H "Content-Type: application/json" \
-d @trace-data.json
```
### gRPC Examples
Use OTLP gRPC clients or libraries to send data to `localhost:4317`.
### WebSocket
Connect to WebSocket to receive the data:
```javascript
const ws = new WebSocket('ws://localhost:8080/ws');
ws.onmessage = (event) => {
console.log('Received:', JSON.parse(event.data));
};
```
## Web Interface
The web interface provides real-time visualization of:
- Traces
- Metrics
- Logs
Features:
- Live data streaming via WebSocket
- Separate sections for each telemetry type
- Message counters
- Clear buttons for each section
- Connection status indicator
## Testing
A test client is included to verify that the receiver works correctly.
### Run the Test
1. Start the receiver:
```sh
go run ./cmd/server
```
2. In another terminal, run the test client:
```sh
cd test-client && go run .
```
Or use the provided test script:
```sh
./test.sh
```
The test client will send sample traces via both HTTP and gRPC protocols.
### Manual Testing
#### HTTP Testing
```sh
curl -X POST http://localhost:8080/v1/traces \
-H "Content-Type: application/json" \
-d '{"resourceSpans":[{"resource":{"attributes":[{"key":"service.name","value":{"stringValue":"test-service"}}]},"scopeSpans":[{"scope":{"name":"test-scope"},"spans":[{"traceId":"0102030405060708090a0b0c0d0e0f10","spanId":"0102030405060708","name":"test-span","startTimeUnixNano":"1640995200000000000","endTimeUnixNano":"1640995260000000000","attributes":[{"key":"test.key","value":{"stringValue":"test-value"}}]}]}]}]}'
```
#### Web Interface
Open `http://localhost:8080` in your browser to see the real-time visualization.