mirror of
https://github.com/zoriya/drizzle-otel.git
synced 2025-12-06 00:46:09 +00:00
86 lines
4.0 KiB
Markdown
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.
|
|
|
|

|
|
|
|
## 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
|