Tools
Galileo Observability
Native Galileo observability plugin for OpenClaw
Install
npm install
npm
README
# openclaw-galileo-observability
[OpenClaw](https://github.com/openclaw/openclaw) の agent 実行を
[Galileo](https://docs.galileo.ai/sdk-api/overview) へ直接送る Observability Plugin です。
OpenClaw の typed lifecycle hook を OpenTelemetry GenAI span に変換し、Galileo 公式 TypeScript SDK の span enrichment と公式 OTLP protobuf exporter を組み合わせて export します。
一回の user turn を一つの trace とし、LLM と tool を root Agent span の child として記録します。
```text
invoke_agent OpenClaw Agent
├── chat {model}
├── execute_tool {tool_name}
└── chat {model}
```
主な性質:
- OpenClaw の結果を変更しない fail-open observer
- `runId`、`callId`、`toolCallId` による並行相関
- Galileo 公式認証、routing、OTLP exporter
- OpenClaw session の HMAC 仮名化
- 同じ会話の複数 turn をまとめる Galileo native Session
- prompt、response、tool payload を既定で取得しない privacy 設定
- secret、reasoning、巨大 payload の送信前 redaction
- private `TracerProvider` と trace 単位の head sampling
- bounded state、TTL cleanup、bounded shutdown
Galileo SDK 2.2.0 の exporter は OpenTelemetry 0.221 の非同期 header factory と互換性問題があるため、SDK の `GalileoSpanProcessor` は属性 enrichment に使い、送信は同じ endpoint/header を設定した公開 `OTLPTraceExporter` へ bridge しています。
private field の参照や SDK への monkey patch は行いません。
## 対応範囲
- OpenClaw `>=2026.7.1`
- Galileo TypeScript SDK `>=2.2.0 <3`
- Node.js は OpenClaw 本体の対応 version に準拠
OpenTelemetry GenAI Semantic Conventions と OpenClaw Plugin hooks は更新が続いています。
dependency 更新時は unit test と wire-level E2E を再実行してください。
## Install
開発 checkout から:
```bash
npm install
npm run check
npm pack
openclaw plugins install npm-pack:/absolute/path/to/openclaw-galileo-observability-0.1.0.tgz --force
```
有効化後は Gateway を再起動し、live runtime を確認します。
```bash
openclaw gateway restart
openclaw plugins inspect openclaw-galileo-observability --runtime --json
```
plain `plugins list` / `plugins inspect` は cold config の確認であり、現在の Gateway が同じ Plugin を import 済みである証明にはなりません。
## Configuration
### Galileo
OpenClaw process の環境に次を設定します。
```dotenv
GALILEO_API_KEY=...
GALILEO_PROJECT=openclaw
GALILEO_LOG_STREAM=production
# custom deployment の場合
# GALILEO_CONSOLE_URL=https://console.example.com
# GALILEO_API_URL=https://api.example.com
# productionではAPI key rotationとconversation IDを分離するため推奨
# OPENCLAW_GALILEO_PSEUDONYM_SECRET=...
```
API key、routing、endpoint、pseudonym secret は OpenClaw Plugin config へ保存せず、環境変数または process の secret injection で供給してください。
### OpenClaw
外部 Plugin が会話 hook を受け取るため、`allowConversationAccess` を明示します。
content を Galileo へ送るかどうかは、これとは別の `captureContent` で制御します。
```json5
{
plugins: {
entries: {
"openclaw-galileo-observability": {
enabled: true,
hooks: {
allowConversationAccess: true,
},
config: {
enabled: true,
captureContent: false,
captureConversationHistory: false,
hashUserIds: true,
sampleRate: 1.0,
nativeSessionsEnabled: true,
environment: "production",
},
},
},
},
}
```
`plugins.allow` を使っている場合は `openclaw-galileo-observability` も allow list に追加してください。
### Behavior environment overrides
| Plugin config | 環境変数 | 既定値 |
| ---------------------------- | ----------------------------------------------- | ---------------: |
| `enabled` | `OPENCLAW_GALILEO_ENABLED` | `true` |
| `captureContent` | `OPENCLAW_GALILEO_CAPTURE_CONTENT` | `false` |
| `captureConversationHistory` | `OPENCLAW_GALILEO_CAPTURE_CONVERSATION_HISTORY` | `false` |
| `hashUserIds` | `OPENCLAW_GALILEO_HASH_USER_IDS` | `true` |
| `sampleRate` | `OPENCLAW_GALILEO_SAMPLE_RATE` | `1.0` |
| `maxContentChars` | `OPENCLAW_GALILEO_MAX_CONTENT_CHARS` | `12000` |
| `maxCollectionItems` | `OPENCLAW_GALILEO_MAX_COLLECTION_ITEMS` | `100` |
| `maxActiveRuns` | `OPENCLAW_GALILEO_MAX_ACTIVE_RUNS` | `512` |
| `turnTtlMs` | `OPENCLAW_GALILEO_TURN_TTL_MS` | `900000` |
| `flushTimeoutMs` | `OPENCLAW_GALILEO_FLUSH_TIMEOUT_MS` | `10000` |
| `nativeSessionsEnabled` | `OPENCLAW_GALILEO_NATIVE_SESSIONS_ENABLED` | `true` |
| `nativeSessionTimeoutMs` | `OPENCLAW_GALILEO_NATIVE_SESSION_TIMEOUT_MS` | `5000` |
| `serviceName` | `OPENCLAW_GALILEO_SERVICE_NAME` | `openclaw-agent` |
| `environment` | `OPENCLAW_GALILEO_ENVIRONMENT` | `development` |
空の環境変数は未指定として扱います。
不正値または必須 Galileo credential の不足時は observability だけが disabled になり、OpenClaw 本体は動作を続けます。
## Privacy
実 content は既定で送信しません。
capture を明示的に有効化しても、次は常に redaction されます。
- Authorization、Cookie、API key、password、token、secret
- JWT、cloud access key、private key
- reasoning、analysis、thinking、signature
- base64 data URI
- 上限を超える collection と文字列
raw OpenClaw session ID は送信しません。
`openclaw:<HMAC-SHA256>` を `gen_ai.conversation.id` と Galileo native Session の external ID に使います。
## Reliability boundary
Direct Plugin が保証するのは process 内での local acceptance と best-effort flush までです。
`forceFlush()` は Galileo での永続化を証明する ack ではありません。
次が必要な場合は、永続 queue/WAL を持つ OpenTelemetry Collector profile を検討してください。
- process crash 後の復元
- at-least-once delivery
- `Retry-After` を含む独自 retry policy
- OTLP partial success の厳密な計測
- tail sampling
## Development
```bash
npm install
npm run format:check
npm run lint
npm run typecheck
npm run test
npm run test:e2e
npm run build
npm run pack:check
```
## Documents
- [技術調査](docs/RESEARCH.md)
- [要件定義](docs/REQUIREMENTS.md)
- [技術設計](docs/DESIGN.md)
## License
Apache-2.0
tools
Comments
Sign in to leave a comment