- Updated: March 21, 2026
- 6 min read
Step‑by‑Step Observability for the OpenClaw Full‑Stack Template: Metrics, Logging, and Tracing
Step‑by‑Step Observability for the OpenClaw Full‑Stack Template: Metrics, Logging, and Tracing
Answer: To achieve full observability of the OpenClaw full‑stack template on UBOS, you need to configure Prometheus for metrics, Loki for log aggregation, and Jaeger for distributed tracing, then deploy the stack using UBOS’s workflow automation studio and verify each component with simple curl and UI checks.
1. Introduction
Observability is the cornerstone of reliable SaaS delivery. For developers and DevOps engineers working with the OpenClaw full‑stack template, a well‑structured observability pipeline—comprising metrics, logging, and tracing—helps you detect performance regressions, debug failures, and maintain SLAs.
UBOS provides a unified platform that simplifies the provisioning of Prometheus, Loki, and Jaeger as Docker services, while the UBOS partner program offers pre‑built integrations and support.
2. Overview of Observability
Observability can be broken down into three MECE (Mutually Exclusive, Collectively Exhaustive) pillars:
- Metrics: Numeric time‑series data (CPU, latency, request rates).
- Logging: Immutable, timestamped records of events.
- Tracing: End‑to‑end request flow across services.
When these pillars are combined, you gain a 360° view of your application’s health, enabling rapid root‑cause analysis.
3. Setting up Metrics
3.1 Prometheus Configuration
UBOS ships a ready‑to‑use UBOS platform overview that includes a docker-compose.yml snippet for Prometheus. Add the following service to your docker-compose.yml located in the observability folder:
services:
prometheus:
image: prom/prometheus:latest
container_name: prometheus
volumes:
- ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
ports:
- "9090:9090"
restart: unless-stopped
Next, create prometheus/prometheus.yml with a scrape job for the OpenClaw API:
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: 'openclaw'
static_configs:
- targets: ['openclaw-api:8000']
3.2 Instrumenting the OpenClaw Code
OpenClaw is a Node.js/Express application. Install the Prometheus client library:
npm install prom-client
Then add a middleware to expose metrics:
const client = require('prom-client');
const collectDefaultMetrics = client.collectDefaultMetrics;
collectDefaultMetrics();
app.get('/metrics', async (req, res) => {
res.set('Content-Type', client.register.contentType);
res.end(await client.register.metrics());
});
After redeploying, verify metrics are reachable:
curl http://localhost:9090/metrics | head -n 10
4. Implementing Logging
4.1 Loki Setup
Loki is a log aggregation system that integrates seamlessly with Grafana. Add Loki to the same docker-compose.yml:
loki:
image: grafana/loki:2.9.1
container_name: loki
ports:
- "3100:3100"
command: -config.file=/etc/loki/local-config.yaml
volumes:
- ./loki:/etc/loki
restart: unless-stopped
Configure a promtail agent to ship logs from the OpenClaw containers:
promtail:
image: grafana/promtail:2.9.1
container_name: promtail
volumes:
- /var/log:/var/log
- ./promtail/config.yml:/etc/promtail/config.yml
command: -config.file=/etc/promtail/config.yml
restart: unless-stopped
Sample promtail/config.yml targeting Docker logs:
server:
http_listen_port: 9080
positions:
filename: /tmp/positions.yaml
clients:
- url: http://loki:3100/loki/api/v1/push
scrape_configs:
- job_name: system
static_configs:
- targets:
- localhost
labels:
job: varlogs
__path__: /var/lib/docker/containers/*/*.log
4.2 Example Logs in OpenClaw
Replace console.log with a structured logger such as winston:
npm install winston
const winston = require('winston');
const logger = winston.createLogger({
level: 'info',
format: winston.format.json(),
transports: [new winston.transports.Console()]
});
app.use((req, res, next) => {
logger.info({method: req.method, url: req.url, ip: req.ip});
next();
});
When you run docker logs openclaw-api, the JSON lines are automatically collected by Promtail and visible in Grafana’s Loki data source.
5. Enabling Tracing
5.1 Jaeger Integration
Jaeger provides distributed tracing for micro‑service architectures. Add Jaeger to the compose file:
jaeger:
image: jaegertracing/all-in-one:1.53
container_name: jaeger
ports:
- "16686:16686" # UI
- "6831:6831/udp" # UDP for agents
restart: unless-stopped
Instrument the OpenClaw backend with opentelemetry:
npm install @opentelemetry/api @opentelemetry/sdk-node @opentelemetry/exporter-jaeger
const { NodeTracerProvider } = require('@opentelemetry/sdk-node');
const { JaegerExporter } = require('@opentelemetry/exporter-jaeger');
const { registerInstrumentations } = require('@opentelemetry/instrumentation');
const provider = new NodeTracerProvider();
const exporter = new JaegerExporter({
endpoint: 'http://jaeger:14268/api/traces',
});
provider.addSpanProcessor(new SimpleSpanProcessor(exporter));
provider.register();
registerInstrumentations({
tracerProvider: provider,
instrumentations: [
// Auto‑instrument Express, HTTP, etc.
require('@opentelemetry/instrumentation-express'),
require('@opentelemetry/instrumentation-http')
],
});
Now each request to the API creates a trace visible at http://localhost:16686.
5.2 Sample Trace Code
To add custom spans around a business operation:
const { trace } = require('@opentelemetry/api');
app.post('/process', async (req, res) => {
const tracer = trace.getTracer('openclaw');
const span = tracer.startSpan('process-order');
try {
// Simulated work
await doHeavyComputation(req.body);
span.setAttribute('order.id', req.body.id);
res.json({status: 'ok'});
} finally {
span.end();
}
});
6. Deploying the Full‑Stack Template
UBOS’s Workflow automation studio lets you spin up the entire stack with a single click. Follow these steps:
- Log in to the UBOS homepage and navigate to “Templates”.
- Select “OpenClaw Full‑Stack Template” and click “Deploy”.
- In the deployment wizard, enable the “Observability Suite” toggle. This automatically adds Prometheus, Loki, and Jaeger services to the generated
docker‑compose.yml. - Review the generated
docker‑compose.ymland click “Start”. UBOS will provision the containers on your chosen cloud provider. - After deployment, open the UBOS dashboard and locate the “Observability” tile. Click to view Grafana dashboards pre‑wired to Prometheus, Loki, and Jaeger.
For teams that need a quick start, the UBOS templates for quick start include a pre‑configured Grafana dashboard named “OpenClaw Overview”.
7. Testing and Validation
Validate each observability pillar with the following checklist:
| Component | Validation Command | Expected Result |
|---|---|---|
| Prometheus Metrics | curl http://localhost:9090/api/v1/query?query=up | JSON with status":"success" and openclaw target up |
| Loki Logs | curl http://localhost:3100/loki/api/v1/query_range?query={job="varlogs"}&limit=5 | Recent JSON log entries from OpenClaw containers |
| Jaeger Traces | open http://localhost:16686 | UI shows recent spans for /process endpoint |
Run a synthetic load test with hey or k6 to generate traffic, then re‑run the checks to ensure data flows continuously.
8. Conclusion and Next Steps
By following this step‑by‑step guide, you now have a production‑grade observability stack for the OpenClaw full‑stack template on UBOS. The combination of Prometheus, Loki, and Jaeger gives you:
- Real‑time performance metrics for capacity planning.
- Centralized, searchable logs for rapid debugging.
- End‑to‑end request traces that expose latency bottlenecks.
Next, consider extending the observability pipeline:
- Integrate AI marketing agents to auto‑generate alert messages.
- Leverage the Enterprise AI platform by UBOS for predictive anomaly detection.
- Explore the Web app editor on UBOS to add custom dashboards for business stakeholders.
For a deeper dive into OpenClaw’s architecture, see the official OpenClaw GitHub repository. Happy monitoring!
© 2026 UBOS – All rights reserved.