Files
drizzle-otel/packages/otel-e2b/README.md
Alex Holovach 6ffabd9e65 add image
2025-11-03 23:28:25 -06:00

86 lines
4.0 KiB
Markdown

# @kubiks/otel-e2b
OpenTelemetry instrumentation for [E2B Sandboxes](https://e2b.dev).
Capture spans for sandbox lifecycle, code execution, file operations, and command execution to monitor and debug your E2B sandbox operations.
![E2B Trace Visualization](https://github.com/kubiks-inc/otel/blob/main/images/otel-e2b-trace.png)
## Installation
```bash
npm install @kubiks/otel-e2b
# or
pnpm add @kubiks/otel-e2b
```
## Quick Start
```ts
import { Sandbox } from "@e2b/code-interpreter";
import { instrumentSandbox } from "@kubiks/otel-e2b";
const sandbox = await Sandbox.create();
instrumentSandbox(sandbox);
// All operations are now traced
await sandbox.runCode('print("Hello from E2B")');
await sandbox.files.write("/app/data.txt", "some data");
await sandbox.commands.run("ls -la");
await sandbox.kill();
```
`instrumentSandbox` wraps the sandbox you already use — no configuration changes needed. Every operation creates a client span with useful attributes.
You can also use `instrumentSandboxClass(Sandbox)` to automatically instrument all sandboxes created after setup.
## What Gets Traced
This instrumentation automatically traces all E2B sandbox operations including `Sandbox.create()`, `sandbox.kill()`, `sandbox.runCode()` (code execution), `sandbox.commands.run()` (shell commands), and all file operations (`files.read()`, `files.write()`, `files.list()`, `files.remove()`, `files.makeDir()`).
## Span Attributes
Each span includes relevant attributes for debugging and monitoring:
| Attribute | Description | Example |
| -------------------------- | ------------------------------------- | ---------------------------- |
| `e2b.operation` | Operation type | `sandbox.create`, `code.run` |
| `e2b.sandbox.id` | Unique sandbox identifier | `sb_abc123def456` |
| `e2b.sandbox.template` | Template used for creation | `custom-template` |
| `e2b.code.language` | Programming language | `python`, `javascript` |
| `e2b.code.has_error` | Whether execution had errors | `true`, `false` |
| `e2b.code.execution_count` | Execution count from result | `1`, `2`, `3` |
| `e2b.command.exit_code` | Process exit code | `0`, `1`, `127` |
| `e2b.command.stdout_lines` | Number of stdout lines (when enabled) | `5` |
| `e2b.command.stderr_lines` | Number of stderr lines (when enabled) | `2` |
| `e2b.command.background` | Whether command ran in background | `true`, `false` |
| `e2b.file.operation` | File operation type | `read`, `write`, `list` |
| `e2b.file.path` | File or directory path | `/app/data.txt` |
| `e2b.file.size_bytes` | File size in bytes | `1024` |
| `e2b.file.format` | Read format (for read ops) | `text`, `bytes` |
| `e2b.file.count` | Number of files (list/write multiple) | `10` |
## Configuration Options
The instrumentation accepts optional configuration to control what metadata to capture:
- `tracerName` - Custom tracer name (default: `"@kubiks/otel-e2b"`)
- `captureFilePaths` - Capture file paths, not content (default: `true`)
- `captureFileSize` - Capture file sizes (default: `true`)
- `captureCodeLanguage` - Capture code execution language (default: `true`)
- `captureCommandOutput` - Capture command output line counts, not content (default: `false`)
Example:
```ts
instrumentSandbox(sandbox, {
captureFilePaths: true,
captureCommandOutput: true,
});
```
The instrumentation never captures sensitive data like code content, command arguments, file contents, or environment variables — only safe metadata like paths, sizes, exit codes, and language types.
## License
MIT