A modern Terminal User Interface (TUI) for monitoring OpenTelemetry traces in real-time. Built with Python and Textual, OtelTUI provides a clean, interactive interface for viewing and analyzing distributed traces.
┌─────────────────────────────────────────────────────────────┐
│ 🔍 OtelTUI - OpenTelemetry Trace Monitor │
├─────────────────────────────────────────────────────────────┤
│ 📊 Real-time trace monitoring │
│ 🌐 gRPC trace collection on port 4317 │
│ 🖱️ Interactive trace details │
│ 🎨 Clean TUI interface with Textual │
│ 🔍 Trace filtering and search │
│ 📋 Multiple view modes (structured/raw JSON) │
└─────────────────────────────────────────────────────────────┘
- 🔄 Real-time trace monitoring - Watch OpenTelemetry traces as they arrive
- 🌐 gRPC trace collection - Receives traces via OpenTelemetry gRPC protocol on port 4317
- 🖱️ Interactive trace details - Click on traces to view detailed span information
- 🎨 Clean TUI interface - Built with Textual for a modern terminal experience
- 🔍 Trace filtering and search - Easily navigate through trace data
- 📋 Multiple view modes - Switch between structured and raw JSON views
- 🌙 Dark mode support - Toggle between light and dark themes
- ⚡ High performance - Efficient trace processing and display
git clone https://github.com/yourusername/oteltui.git
cd oteltui
uv syncFor development with linting and testing tools:
git clone https://github.com/yourusername/oteltui.git
cd oteltui
uv sync --extra dev
uv run pre-commit installgit clone https://github.com/yourusername/oteltui.git
cd oteltui
pip install -e .# Using uv
uv run oteltui
# Or if installed globally
oteltuiThe TUI will start and listen for OpenTelemetry traces on localhost:4317.
Configure your OpenTelemetry instrumented application to send traces to:
- Endpoint:
localhost:4317 - Protocol: gRPC (OpenTelemetry Protocol)
- Transport: HTTP/2 (gRPC)
# Start the TUI in one terminal
uv run oteltui
# In another terminal, send test traces
uv run python client.pygit clone https://github.com/yourusername/oteltui.git
cd oteltui
uv sync --extra dev# Run all pre-commit hooks
uv run pre-commit run --all-files
# Individual tools
uv run ruff format # Format code
uv run ruff check # Lint code
uv run mypy src/ # Type checking
uv run black src/ # Alternative formatteroteltui/
├── 📁 src/oteltui/ # Main source code
├── 📁 tests/ # Test files
├── 📁 docs/ # Documentation
├── 📄 pyproject.toml # Project configuration
├── 📄 README.md # This file
└── 📄 client.py # Test client
We welcome contributions! Please see CONTRIBUTING.md for guidelines.
- 🍴 Fork the repository
- 🌿 Create a feature branch (
git checkout -b feature/amazing-feature) - 💾 Commit your changes (
git commit -m 'Add amazing feature') - 📤 Push to the branch (
git push origin feature/amazing-feature) - 🔄 Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- 🌐 OpenTelemetry - Observability framework
- 🎨 Textual - Python TUI framework
- 🔍 Jaeger - Distributed tracing platform
- 📊 Grafana - Monitoring and observability
- 🐛 Sentry - Error tracking and performance monitoring
If you encounter any issues or have questions:
- 🔍 Check the existing issues
- 🆕 Create a new issue with details about your problem
- 📋 Include your Python version and operating system
- 📝 Provide logs and error messages
- 🔍 Trace search and filtering - Advanced search capabilities
- 📤 Export/import functionality - Export/import traces to/from various formats
- 🌐 Multiple protocol support
- 📊 Performance metrics and statistics - Real-time performance data
- 🙏 Thanks to the OpenTelemetry community
- 🎨 Thanks to Textual for the amazing TUI framework
- 💡 Inspired by Jaeger UI and other tracing tools