Claude-skill-registry claude-code-telemetry-enable
Enable and configure Claude Code OTEL telemetry for local or Railway observability stacks. Use when setting up Claude Code to send metrics, logs, and traces to observability backends.
git clone https://github.com/majiayu000/claude-skill-registry
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/claude-code-telemetry-enable" ~/.claude/skills/majiayu000-claude-skill-registry-claude-code-telemetry-enable && rm -rf "$T"
skills/data/claude-code-telemetry-enable/SKILL.mdClaude Code Telemetry Enable
Enable OpenTelemetry telemetry in Claude Code to send metrics, logs, and traces to your observability stack (local LGTM or Railway).
When to Use
- After deploying observability stack (
)observability-stack-setup - Need to enable Claude Code monitoring
- Want to configure telemetry for local or cloud backends
- Need to verify telemetry connectivity
What This Skill Does
Creates Claude Code environment configuration files that enable:
- Metrics: Token usage, costs, session counts, tool performance
- Logs: User prompts (full content), tool results, API requests/errors
- Traces: Session flows, tool execution spans, API call traces
Privacy Note: Configured for FULL LOGGING (no redactions) per your requirements.
Quick Start
For Local Stack
# After running observability-stack-setup # Invoke this skill with: enable-local # Claude Code will now send telemetry to localhost:4317
For Railway Stack
# After deploying to Railway # Invoke this skill with: enable-railway --endpoint https://your-alloy.railway.app:443 # Claude Code will send telemetry to Railway
Operations
enable-local
enable-localConfigure Claude Code for local LGTM stack.
Creates:
~/.config/claude-code/.env.telemetry
Configuration:
CLAUDE_CODE_ENABLE_TELEMETRY=1 OTEL_METRICS_EXPORTER=otlp OTEL_LOGS_EXPORTER=otlp OTEL_EXPORTER_OTLP_PROTOCOL=grpc OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317 # Fast export (for development) OTEL_METRIC_EXPORT_INTERVAL=10000 # 10 seconds OTEL_LOGS_EXPORT_INTERVAL=5000 # 5 seconds # FULL LOGGING (no privacy restrictions) OTEL_LOG_USER_PROMPTS=1 OTEL_METRICS_INCLUDE_SESSION_ID=true OTEL_METRICS_INCLUDE_VERSION=true OTEL_METRICS_INCLUDE_ACCOUNT_UUID=true
enable-railway
enable-railwayConfigure Claude Code for Railway-hosted LGTM stack.
Parameters:
: Railway Alloy OTLP endpoint URL--endpoint
: (Optional) Railway authentication token--token
Example:
enable-railway \ --endpoint https://your-alloy-abc123.railway.app:443 \ --token your-railway-token
Creates:
~/.config/claude-code/.env.telemetry with Railway endpoint
enable-custom
enable-customConfigure for custom OTLP endpoint (Grafana Cloud, DataDog, etc.).
Parameters:
: OTLP endpoint URL--endpoint
:--protocol
orgrpc
(default: grpc)http
: Authentication headers (e.g., "Authorization=Bearer token")--headers
Example:
enable-custom \ --endpoint https://otlp.grafana.net:443 \ --protocol grpc \ --headers "Authorization=Basic base64encodedcreds"
verify
verifyTest telemetry configuration and connectivity.
Checks:
- Configuration file exists
- Required environment variables set
- OTLP endpoint reachable
- Test telemetry successfully sent
- Data visible in backend (Grafana/Loki/Prometheus/Tempo)
Output:
Telemetry Configuration Check: ✅ Config file: ~/.config/claude-code/.env.telemetry ✅ CLAUDE_CODE_ENABLE_TELEMETRY=1 ✅ OTLP endpoint: localhost:4317 ✅ Endpoint reachable ✅ Test span sent successfully ✅ Data visible in Grafana Status: HEALTHY - Telemetry fully operational
disable
disableTurn off telemetry completely.
Actions:
- Renames
to.env.telemetry.env.telemetry.disabled - OR sets
CLAUDE_CODE_ENABLE_TELEMETRY=0
Re-enable: Rename file back or use
enable-local / enable-railway again
status
statusShow current telemetry configuration.
Output:
Telemetry Status: State: ENABLED Endpoint: http://localhost:4317 Protocol: gRPC Privacy: FULL LOGGING (all data captured) Export Intervals: Metrics 10s, Logs 5s Captured Data: - User prompts (full content) - Tool executions (all tools) - API requests (tokens, cost, latency) - Session metadata (IDs, version, account)
Configuration Details
Environment Variables
Essential:
:CLAUDE_CODE_ENABLE_TELEMETRY
to enable,1
to disable0
: OTLP endpoint URLOTEL_EXPORTER_OTLP_ENDPOINT
:OTEL_EXPORTER_OTLP_PROTOCOL
orgrpchttp
Exporters:
:OTEL_METRICS_EXPORTER
(send metrics via OTLP)otlp
:OTEL_LOGS_EXPORTER
(send logs via OTLP)otlp
Export Intervals:
: Milliseconds between metric exports (default: 60000)OTEL_METRIC_EXPORT_INTERVAL
: Milliseconds between log exports (default: 5000)OTEL_LOGS_EXPORT_INTERVAL
Privacy Controls (configured for FULL logging):
:OTEL_LOG_USER_PROMPTS
= log full prompt content,1
= log length only0
:OTEL_METRICS_INCLUDE_SESSION_ID
= include session IDs in metricstrue
:OTEL_METRICS_INCLUDE_VERSION
= include Claude Code versiontrue
:OTEL_METRICS_INCLUDE_ACCOUNT_UUID
= include account identifiertrue
Authentication (for cloud backends):
: Headers for authentication (e.g., "Authorization=Bearer token")OTEL_EXPORTER_OTLP_HEADERS
What Gets Captured
Metrics (counters, gauges, histograms):
- Session frequencyclaude_code.session.count
- Token consumption (input + output)claude_code.token.usage
- API costs in USDclaude_code.cost.usage
- Accept/reject patternsclaude_code.code_edit_tool.decision
- Engagement duration (seconds)claude_code.active_time.total
- PR creation countclaude_code.pull_request.count
- Git commit countclaude_code.commit.count
Log Events (structured JSON):
- User prompt submissions (full content)claude_code.user_prompt
- Tool execution outcomes (tool name, status, duration)claude_code.tool_result
- Claude API calls (model, tokens, cost, latency)claude_code.api_request
- Failed API requests (status codes, retry attempts)claude_code.api_error
- Permission decisions (approved/rejected)claude_code.tool_decision
Traces (distributed tracing):
- Session traces: Complete conversation workflows
- Tool call spans: Read, Write, Edit, Bash, Glob, Grep, Task, etc.
- Agent task spans: Parallel agent execution
- API request spans: Claude API latency breakdown
Retention
All data stored for 365 days (configured in observability stack).
File Locations
Configuration File:
- Linux/WSL:
~/.config/claude-code/.env.telemetry - macOS:
~/.config/claude-code/.env.telemetry - Windows:
%USERPROFILE%\.config\claude-code\.env.telemetry
Managed Settings (organization-enforced, optional):
- Linux:
/etc/claude-code/managed-settings.json - macOS:
/Library/Application Support/ClaudeCode/managed-settings.json - Windows:
C:\ProgramData\ClaudeCode\managed-settings.json
Troubleshooting
Telemetry Not Appearing in Grafana
Check 1: Is telemetry enabled?
cat ~/.config/claude-code/.env.telemetry # Should show CLAUDE_CODE_ENABLE_TELEMETRY=1
Check 2: Is OTLP endpoint reachable?
curl -v http://localhost:4317 # Should connect (may get empty response, that's ok)
Check 3: Is observability stack running?
docker compose -f .observability/docker-compose.yml ps # All 5 services should be "running"
Check 4: Use Claude Code and check immediately
# After using Claude Code, query Loki: curl -s 'http://localhost:3100/loki/api/v1/query?query={job="claude_code"}' | jq . # Should show recent logs
Port Already in Use (4317)
If another service is using port 4317:
Option 1: Stop the conflicting service
sudo lsof -i :4317 sudo kill <PID>
Option 2: Change Alloy port in observability stack Edit
.observability/docker-compose.yml:
ports: - "4318:4317" # Expose on 4318 instead
Then update telemetry config:
OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318
Permission Denied
If configuration file creation fails:
# Create directory manually mkdir -p ~/.config/claude-code chmod 755 ~/.config/claude-code # Try again
Next Steps
After enabling telemetry:
- Use Claude Code: Run tools (Read, Write, Bash, etc.)
- Generate telemetry: Each operation sends data
- View in Grafana: Open http://localhost:3000
- Check dashboards: Navigate to "Claude Code Overview"
- Verify metrics: See token usage, costs, tool calls
References
- Local configuration templatereferences/env-telemetry-local.txt
- Railway configuration templatereferences/env-telemetry-railway.txt
- Custom endpoint templatereferences/env-telemetry-custom.txt
- All environment variables explainedreferences/telemetry-variables.md
- Privacy configuration optionsreferences/privacy-settings.md
Scripts
- Enable for local stackscripts/enable-local.sh
- Enable for Railwayscripts/enable-railway.sh
- Test configuration and connectivityscripts/verify-telemetry.sh
- Turn off telemetryscripts/disable-telemetry.sh