OTLP Protocol Details

Deep dive into Gonzo's OpenTelemetry Protocol (OTLP) implementation for receiving and processing logs.

Overview

Gonzo implements a complete OTLP logs receiver supporting both gRPC and HTTP transports. This allows Gonzo to receive logs directly from OpenTelemetry SDKs, collectors, and other OTLP-compatible sources.

OTLP Specification

Gonzo follows the OpenTelemetry Protocol Specificationarrow-up-right for logs:

  • Version: OTLP 1.0.0+

  • Transports: gRPC and HTTP

  • Encoding: Protocol Buffers (gRPC), JSON (HTTP)

  • Endpoints:

    • gRPC: localhost:4317

    • HTTP: http://localhost:4318/v1/logs

Architecture

┌─────────────────────────────────────────┐
│         OTLP Client (Sender)            │
│    (App, Collector, SDK, etc)           │
└──────────────┬──────────────────────────┘

               ├──────────┐
               │          │
           gRPC:4317   HTTP:4318
               │          │
    ┌──────────▼────┐  ┌──▼──────────┐
    │  gRPC Server  │  │ HTTP Server │
    │               │  │             │
    └──────┬────────┘  └─┬───────────┘
           │             │
           └─────┬───────┘

        ┌────────▼─────────┐
        │  OTLP Processor  │
        │  - Decode proto  │
        │  - Extract logs  │
        │  - Map fields    │
        └────────┬─────────┘

        ┌────────▼─────────┐
        │  Log Converter   │
        │  - Resource attr │
        │  - Log record    │
        │  - Timestamps    │
        └────────┬─────────┘

        ┌────────▼─────────┐
        │   Analyzer       │
        │   Engine         │
        └──────────────────┘

Transport Details

gRPC Transport

Endpoint: localhost:4317

Protocol: HTTP/2 with Protocol Buffers

Service Definition:

Features:

  • Bidirectional streaming support

  • Built-in compression (gzip)

  • Connection multiplexing

  • Automatic reconnection

Starting gRPC Receiver:

HTTP Transport

Endpoint: http://localhost:4318/v1/logs

Protocol: HTTP/1.1 or HTTP/2

Method: POST

Content-Type: application/json or application/x-protobuf

Features:

  • Standard HTTP clients work

  • JSON encoding (more debuggable)

  • No special libraries required

  • Works through HTTP proxies

Starting HTTP Receiver:

OTLP Log Data Model

Structure Hierarchy

Resource Attributes

Resource attributes describe the source of logs:

How Gonzo Uses Resource Attributes:

  • Merged with log record attributes

  • Displayed in Attributes panel

  • Available for filtering

  • Shown in log details

Log Record

Individual log entry:

Gonzo Mapping:

Severity Levels

OTLP defines numerical severity levels:

Number
Name
Gonzo Display

1-4

TRACE

⚪ White

5-8

DEBUG

🔵 Blue

9-12

INFO

🟢 Green

13-16

WARN

🟡 Yellow

17-20

ERROR

🔴 Red

21-24

FATAL

🔴 Red

Gonzo reads both severityNumber and severityText fields.

Body Types

The log body can be various types:

String (most common):

Structured:

Gonzo handles all OTLP value types and displays them appropriately.

Configuration Examples

OpenTelemetry Collector

Configure collector to send to Gonzo:

Start collector and Gonzo:

Application SDK Integration

Python Example:

Go Example:

Node.js Example:

HTTP API Reference

POST /v1/logs

Request Format (JSON):

Response (Success):

Response (Partial Failure):

Status Codes:

  • 200 OK - All logs accepted

  • 206 Partial Content - Some logs rejected (see partialSuccess)

  • 400 Bad Request - Invalid request format

  • 500 Internal Server Error - Server error

Testing HTTP Endpoint

gRPC API Reference

Service: opentelemetry.proto.collector.logs.v1.LogsService

Method: Export

Request: ExportLogsServiceRequest

Response: ExportLogsServiceResponse

Protocol Buffers Definition:

Testing gRPC Endpoint

Performance & Optimization

Batching

Gonzo processes logs in batches for efficiency:

Incoming Batches:

  • OTLP senders should batch logs (recommended 100-1000 per batch)

  • Reduces network overhead

  • Improves throughput

Internal Processing:

  • Logs processed individually after receipt

  • Real-time display without buffering delay

Concurrency

gRPC Handler:

  • Concurrent request handling

  • One goroutine per connection

  • Thread-safe log ingestion

HTTP Handler:

  • Standard HTTP server concurrency

  • Multiple simultaneous POST requests supported

Memory Management

Bounded Buffers:

  • OTLP messages are streamed, not accumulated

  • Converted logs go to main log buffer (configurable size)

  • No unlimited memory growth

Large Messages:

  • Default max receive message size: 4MB (configurable)

  • Larger messages can be split by sender

Security Considerations

TLS/SSL

Production Recommendation: Always use TLS in production.

Current Implementation:

  • gRPC: Insecure mode (no TLS)

  • HTTP: Plain HTTP

For Production Use:

  • Run Gonzo behind TLS-terminating proxy (nginx, envoy)

  • Use OTLP collector with TLS, forward to Gonzo locally

Example with nginx:

Authentication

Current Implementation: No built-in authentication

Recommendations:

  • Use in trusted networks only

  • Deploy behind authenticated proxy

  • Use firewall rules to restrict access

  • Consider VPN for remote access

Network Isolation

Best Practice: Don't expose OTLP ports to public internet

Troubleshooting OTLP Issues

Connection Refused

Symptom: Sender can't connect to Gonzo

Checks:

Logs Not Appearing

Symptom: Connection works but no logs in Gonzo

Diagnosis:

  1. Check request format matches OTLP spec

  2. Verify severityText or severityNumber is set

  3. Check body field is present

  4. Look for error responses from Gonzo

Test with minimal payload:

Message Size Exceeded

Symptom: "message size exceeded" errors

Solution:

  • Reduce batch size in sender

  • Split large log messages

  • Currently no config option (fixed at 4MB)

Performance Issues

Symptom: Slow log processing or high CPU

Solutions:

Compatibility

OTLP Version Support

  • Specification Version: 1.0.0+

  • Protocol Version: v1

  • Backward Compatibility: Follows semantic versioning

OpenTelemetry SDK Compatibility

Tested with:

  • ✅ OpenTelemetry Collector v0.90+

  • ✅ Python SDK v1.20+

  • ✅ Go SDK v1.20+

  • ✅ Node.js SDK v0.45+

  • ✅ Java SDK v1.32+

  • ✅ .NET SDK v1.6+

Transport Support Matrix

Transport
Encoding
Status

gRPC

Protobuf

✅ Supported

HTTP

JSON

✅ Supported

HTTP

Protobuf

✅ Supported

WebSocket

-

❌ Not supported

Future Enhancements

Planned Features:

  • TLS support (direct, without proxy)

  • Authentication (API keys, mTLS)

  • Compression (gzip, zstd)

  • Configurable message size limits

  • Metrics export (self-monitoring)

  • Multiple OTLP receivers (different ports for different sources)

Resources

Specifications

OpenTelemetry Documentation

  • Architecture Overview

  • Common Issues - OTLP

  • Configuration Reference

circle-check

Last updated