Claude Code · via Relay Server
Deploy an internal relay server that forwards telemetry to Milestone. Choose the deployment model that fits your infrastructure.
- Kubernetes (Helm)
- VM Setup
Server Setup (Kubernetes)
Install the upstream OpenTelemetry Collector chart on your Kubernetes cluster. The chart is community-maintained; Milestone provides the per-tenant values.yaml and a kubectl-applyable Secret manifest.
Step 1: Add the upstream OTel Helm repo
helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts && helm repo update
Step 2: Download configuration
Download values.yaml and secret.yaml from the Integration page in the Milestone app.
Step 3: Create namespace & apply the Secret
kubectl create namespace monitoring --dry-run=client -o yaml | kubectl apply -f -
kubectl apply -f secret.yaml -n monitoring
Step 4: Install the chart
helm install milestone-relay open-telemetry/opentelemetry-collector --version 0.156.2 -n monitoring --create-namespace -f values.yaml
Developer Setup
Save to ~/.claude/settings.json on each developer machine — replace <your-collector-endpoint> with the address you exposed the collector on (internal LB, NodePort, Ingress, etc.). The service is deployed as ClusterIP — expose it however fits your network.
{
"env": {
"CLAUDE_CODE_ENABLE_TELEMETRY": "1",
"OTEL_METRICS_EXPORTER": "otlp",
"OTEL_LOGS_EXPORTER": "otlp",
"OTEL_EXPORTER_OTLP_PROTOCOL": "http/protobuf",
"OTEL_EXPORTER_OTLP_ENDPOINT": "http://<your-collector-endpoint>:4318",
"OTEL_EXPORTER_OTLP_HEADERS": ""
}
}
Set User Identity
Add to your shell profile (~/.zshrc or ~/.bashrc):
export OTEL_RESOURCE_ATTRIBUTES="user.login=$(whoami),user.email=$(whoami)@<your-company-domain>.com"
Then reload: source ~/.zshrc
Restart Claude Code
Close and reopen Claude Code for settings to take effect.
Server Setup (VM)
Run the OpenTelemetry Collector as a Docker container on a shared Linux host. The tarball ships with a docker-compose setup pre-wired to forward to Milestone — fill in the endpoint + secret in .env.
Step 1: Download the tarball
Download otel-client-claude-code.tar.gz from the Integration page in the Milestone app.
Step 2: Extract on the Linux host
tar -xvzf otel-client-claude-code.tar.gz && cd client
Step 3: Configure credentials
Set OTEL_SERVER_ENDPOINT to https://telemetry.mstone.ai and OTEL_SHARED_SECRET in .env. Optional: pin OTEL_VERSION / OTEL_IMAGE to choose a specific upstream collector release.
cp env.example .env && nano .env
Step 4: Start the collector
docker compose up -d
Developer Setup
Save to ~/.claude/settings.json on each developer machine — replace your-linux-server-ip with the hostname or IP of the collector host:
{
"env": {
"CLAUDE_CODE_ENABLE_TELEMETRY": "1",
"OTEL_METRICS_EXPORTER": "otlp",
"OTEL_LOGS_EXPORTER": "otlp",
"OTEL_EXPORTER_OTLP_PROTOCOL": "http/protobuf",
"OTEL_EXPORTER_OTLP_ENDPOINT": "http://your-linux-server-ip:4318",
"OTEL_EXPORTER_OTLP_HEADERS": ""
}
}
Set User Identity
Add to your shell profile (~/.zshrc or ~/.bashrc):
export OTEL_RESOURCE_ATTRIBUTES="user.login=$(whoami),user.email=$(whoami)@<your-company-domain>.com"
Then reload: source ~/.zshrc
Restart Claude Code
Close and reopen Claude Code for settings to take effect.