Monoscope lets you ingest and explore your logs, traces and metrics. We store these in S3 compatible buckets. Query in natural language via LLMs.
1,753
stars
5,635
commits
Haskell
primary language
Sep 10, 2026
updated
Ingest and explore logs, traces, and metrics stored in your S3 buckets. Query with natural language. Create AI agents that detect anomalies and send daily/weekly reports to your inbox.
Website • Playground • Discord • Twitter • Documentation
Monoscope is an open-source observability platform that stores your telemetry data in S3-compatible storage. Self-host it or use our cloud offering.
Core capabilities:
In both options, you bring your own S3 buckets—your data stays yours.
| Cloud | Self-hosted | |
|---|---|---|
| Storage | Your S3 buckets | Your S3 buckets |
| Compute | Managed by us | You manage |
| Auth & SSO | Built-in | DIY |
| Alert channels | Slack, PagerDuty, etc. | Basic email |
| Pricing | Usage-based | Free (AGPL-3.0) |
→ Start free on Cloud or continue below to self-host.
git clone https://github.com/monoscope-tech/monoscope.git
cd monoscope
docker-compose up
Visit http://localhost:8080 (default: admin/changeme)
Populate your dashboard with test telemetry:
monoscope auth login
# Single event — see your message appear in the dashboard
monoscope send-event -m "Hello from Monoscope"
# Sustained load — stress-test the pipeline
monoscope telemetrygen --kind=trace --rate=5 --count=50
Manage your Monoscope project from the terminal — search logs, query metrics, manage monitors and dashboards, triage issues, and more.
curl https://monoscope.tech/install.sh | sh
monoscope auth login
See the CLI reference for the full command list.
Every CLI command emits a stable JSON envelope, so you can chain discovery → search → triage without manual munging. This is the same pipeline a Claude Code skill runs end-to-end:
# 1. What services exist? (Precomputed; no aggregation query needed.)
SVC=$(monoscope facets resource.service.name --top 1 \
| jq -r '.["resource.service.name"][0].value')
# 2. Grab one error event from that service — id only, ready to chain.
ID=$(monoscope logs search 'severity.text=="error"' \
--service "$SVC" --first --id-only)
# 3. Pull the surrounding 5 minutes of traffic, with a per-trace summary
# showing which other services were affected.
monoscope events context --window 5m --summary \
--at "$(monoscope events get "$ID" | jq -r .timestamp)" \
| jq '.traces | sort_by(-.error_count) | .[0:3]'
# 4. Acknowledge the open issue once you have a hypothesis.
monoscope issues list --service "$SVC" --status open \
| jq -r '.data[].id' | head -3 \
| xargs -I {} monoscope issues ack {}
Each step's output shape is documented and stable:
| Command | Envelope |
|---|---|
facets [FIELD] | {<field_path>: [{value, count}, ...]} |
events search (and logs/traces) | {events: [...], count, has_more, cursor} |
events context --summary | {events, count, traces: [{trace_id, services, span_count, error_count}]} |
issues list, monitors list, ... | {data: [...], pagination: {has_more, total, cursor, page, per_page}} |
auth status (agent mode) | {authenticated, method, api_url, project} |
Set MONOSCOPE_AGENT_MODE=1 (or run with --agent) to force JSON output and
disable interactive prompts — auto-detected when CI or CLAUDE_CODE is set.
Let Claude investigate incidents, triage alerts, and write KQL queries using the monoscope CLI — install the skills plugin:
# Claude Code
claude plugin marketplace add monoscope-tech/skills
claude plugin install monoscope-skills@monoscope-skills
# or via npx (Cursor, Cline, Copilot, and other agents)
npx skills add monoscope-tech/skills
Restart Claude Code after installation. Skills activate automatically when relevant — e.g. "investigate the 500 errors in payment-api" or "do an on-call sweep".
See github.com/monoscope-tech/skills for the full skill list and documentation.
Monoscope exposes itself as a Model Context Protocol server at /api/v1/mcp, so any MCP-aware client (Claude Desktop, Cursor, Cline, custom agents) can search events, manage monitors and dashboards, triage issues, and run composite workflows like search_events_nl (natural-language → KQL) and analyze_issue (LLM-assisted root-cause).
{
"mcpServers": {
"monoscope": {
"url": "https://api.monoscope.tech/api/v1/mcp",
"headers": { "Authorization": "Bearer YOUR_API_KEY" }
}
}
}
Every public REST endpoint is auto-registered as a verb-first tool (list_monitors, search_events, mute_monitor, …). See the MCP reference for the full protocol, tool catalog, and examples.
pip install opentelemetry-distro opentelemetry-exporter-otlp
opentelemetry-bootstrap -a install
OTEL_SERVICE_NAME="my-app" \
OTEL_EXPORTER_OTLP_ENDPOINT="http://localhost:4317" \
opentelemetry-instrument python myapp.py
npm install --save @opentelemetry/auto-instrumentations-node
OTEL_SERVICE_NAME="my-app" \
OTEL_EXPORTER_OTLP_ENDPOINT="http://localhost:4317" \
node --require @opentelemetry/auto-instrumentations-node/register app.js
curl -L https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/latest/download/opentelemetry-javaagent.jar -o otel-agent.jar
OTEL_SERVICE_NAME="my-app" \
OTEL_EXPORTER_OTLP_ENDPOINT="http://localhost:4317" \
java -javaagent:otel-agent.jar -jar myapp.jar
# Install OpenTelemetry Operator
kubectl apply -f https://github.com/open-telemetry/opentelemetry-operator/releases/latest/download/opentelemetry-operator.yaml
# Configure auto-instrumentation
kubectl apply -f - <<EOF
apiVersion: opentelemetry.io/v1alpha1
kind: Instrumentation
metadata:
name: my-instrumentation
spec:
exporter:
endpoint: http://monoscope:4317
propagators:
- tracecontext
- baggage
EOF
# Annotate your deployments for auto-instrumentation
kubectl patch deployment my-app -p \
'{"spec":{"template":{"metadata":{"annotations":{"instrumentation.opentelemetry.io/inject-java":"my-instrumentation"}}}}}'
Query your telemetry data in plain English:
Create AI agents that monitor your systems on a schedule:
graph LR
A[Your Apps] -->|Logs/Metrics/Traces| B[Ingestion API]
B --> C[TimeFusion Engine]
C --> D[(S3 Storage)]
D --> E[Query Engine]
E --> F[Dashboards]
D --> G[AI Agent Scheduler]
G -->|LLM Analysis| H[Anomaly Detection]
H --> I[Email Reports]
H --> J[Alert Channels]
Monoscope is organized into four primary components:
app/ — Haskell server binary (WAI/Yesod web application)cli/ — Command-line interface for managing projects, querying data, and automating workflowsweb-components/ — Custom UI elements (Web Components) for dashboards and log explorationsrc/ — Core Haskell library exporting shared types, utilities, and business logicMonoscope is built on TimeFusion, our open-source time-series database for observability workloads.
| 🗄️ S3-native | Data lives in your S3 buckets—no vendor lock-in |
| 🐘 PostgreSQL compatible | Use any Postgres client or driver |
| ⚡ 500K+ events/sec | Columnar storage with Apache Arrow |
| 💵 Pay only for S3 | No expensive proprietary storage fees |
| Feature | Monoscope | Datadog | Elastic | Prometheus |
|---|---|---|---|---|
| S3/Object Storage | ✅ Native | ❌ | ✅ | ✅ |
| Natural Language Query | ✅ | ❌ | ❌ | ❌ |
| AI Agents & Reports | ✅ Built-in | ❌ Add-on | ❌ | ❌ |
| Open Source | ✅ AGPL-3.0 | ❌ | ✅ | ✅ |
| Self-hostable | ✅ | ❌ | ✅ | ✅ |
Logs and trace spans displayed together in context for complete observability.
See detailed trace information alongside logs for debugging complex distributed systems.
Real-time metrics and performance monitoring with AI-powered insights.
"Monoscope notifies us about any slight change on the system. Features that would cost us a lot more elsewhere." — Samuel Joseph, Woodcore
See our public roadmap for details and to vote on features.
💬 Discord • 🐛 Issues • 🐦 Twitter
AGPL-3.0. See LICENSE for details.
For commercial licensing options, contact us at hello@monoscope.tech.
Haskell
81.7%
TypeScript
12.4%
PLpgSQL
2.0%
CSS
1.4%
Monoscope lets you ingest and explore your logs, traces and metrics. We store these in S3 compatible buckets. Query in natural language via LLMs.
1,753
stars
5,635
commits
Haskell
primary language
Sep 10, 2026
updated
Ingest and explore logs, traces, and metrics stored in your S3 buckets. Query with natural language. Create AI agents that detect anomalies and send daily/weekly reports to your inbox.
Website • Playground • Discord • Twitter • Documentation
Monoscope is an open-source observability platform that stores your telemetry data in S3-compatible storage. Self-host it or use our cloud offering.
Core capabilities:
In both options, you bring your own S3 buckets—your data stays yours.
| Cloud | Self-hosted | |
|---|---|---|
| Storage | Your S3 buckets | Your S3 buckets |
| Compute | Managed by us | You manage |
| Auth & SSO | Built-in | DIY |
| Alert channels | Slack, PagerDuty, etc. | Basic email |
| Pricing | Usage-based | Free (AGPL-3.0) |
→ Start free on Cloud or continue below to self-host.
git clone https://github.com/monoscope-tech/monoscope.git
cd monoscope
docker-compose up
Visit http://localhost:8080 (default: admin/changeme)
Populate your dashboard with test telemetry:
monoscope auth login
# Single event — see your message appear in the dashboard
monoscope send-event -m "Hello from Monoscope"
# Sustained load — stress-test the pipeline
monoscope telemetrygen --kind=trace --rate=5 --count=50
Manage your Monoscope project from the terminal — search logs, query metrics, manage monitors and dashboards, triage issues, and more.
curl https://monoscope.tech/install.sh | sh
monoscope auth login
See the CLI reference for the full command list.
Every CLI command emits a stable JSON envelope, so you can chain discovery → search → triage without manual munging. This is the same pipeline a Claude Code skill runs end-to-end:
# 1. What services exist? (Precomputed; no aggregation query needed.)
SVC=$(monoscope facets resource.service.name --top 1 \
| jq -r '.["resource.service.name"][0].value')
# 2. Grab one error event from that service — id only, ready to chain.
ID=$(monoscope logs search 'severity.text=="error"' \
--service "$SVC" --first --id-only)
# 3. Pull the surrounding 5 minutes of traffic, with a per-trace summary
# showing which other services were affected.
monoscope events context --window 5m --summary \
--at "$(monoscope events get "$ID" | jq -r .timestamp)" \
| jq '.traces | sort_by(-.error_count) | .[0:3]'
# 4. Acknowledge the open issue once you have a hypothesis.
monoscope issues list --service "$SVC" --status open \
| jq -r '.data[].id' | head -3 \
| xargs -I {} monoscope issues ack {}
Each step's output shape is documented and stable:
| Command | Envelope |
|---|---|
facets [FIELD] | {<field_path>: [{value, count}, ...]} |
events search (and logs/traces) | {events: [...], count, has_more, cursor} |
events context --summary | {events, count, traces: [{trace_id, services, span_count, error_count}]} |
issues list, monitors list, ... | {data: [...], pagination: {has_more, total, cursor, page, per_page}} |
auth status (agent mode) | {authenticated, method, api_url, project} |
Set MONOSCOPE_AGENT_MODE=1 (or run with --agent) to force JSON output and
disable interactive prompts — auto-detected when CI or CLAUDE_CODE is set.
Let Claude investigate incidents, triage alerts, and write KQL queries using the monoscope CLI — install the skills plugin:
# Claude Code
claude plugin marketplace add monoscope-tech/skills
claude plugin install monoscope-skills@monoscope-skills
# or via npx (Cursor, Cline, Copilot, and other agents)
npx skills add monoscope-tech/skills
Restart Claude Code after installation. Skills activate automatically when relevant — e.g. "investigate the 500 errors in payment-api" or "do an on-call sweep".
See github.com/monoscope-tech/skills for the full skill list and documentation.
Monoscope exposes itself as a Model Context Protocol server at /api/v1/mcp, so any MCP-aware client (Claude Desktop, Cursor, Cline, custom agents) can search events, manage monitors and dashboards, triage issues, and run composite workflows like search_events_nl (natural-language → KQL) and analyze_issue (LLM-assisted root-cause).
{
"mcpServers": {
"monoscope": {
"url": "https://api.monoscope.tech/api/v1/mcp",
"headers": { "Authorization": "Bearer YOUR_API_KEY" }
}
}
}
Every public REST endpoint is auto-registered as a verb-first tool (list_monitors, search_events, mute_monitor, …). See the MCP reference for the full protocol, tool catalog, and examples.
pip install opentelemetry-distro opentelemetry-exporter-otlp
opentelemetry-bootstrap -a install
OTEL_SERVICE_NAME="my-app" \
OTEL_EXPORTER_OTLP_ENDPOINT="http://localhost:4317" \
opentelemetry-instrument python myapp.py
npm install --save @opentelemetry/auto-instrumentations-node
OTEL_SERVICE_NAME="my-app" \
OTEL_EXPORTER_OTLP_ENDPOINT="http://localhost:4317" \
node --require @opentelemetry/auto-instrumentations-node/register app.js
curl -L https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/latest/download/opentelemetry-javaagent.jar -o otel-agent.jar
OTEL_SERVICE_NAME="my-app" \
OTEL_EXPORTER_OTLP_ENDPOINT="http://localhost:4317" \
java -javaagent:otel-agent.jar -jar myapp.jar
# Install OpenTelemetry Operator
kubectl apply -f https://github.com/open-telemetry/opentelemetry-operator/releases/latest/download/opentelemetry-operator.yaml
# Configure auto-instrumentation
kubectl apply -f - <<EOF
apiVersion: opentelemetry.io/v1alpha1
kind: Instrumentation
metadata:
name: my-instrumentation
spec:
exporter:
endpoint: http://monoscope:4317
propagators:
- tracecontext
- baggage
EOF
# Annotate your deployments for auto-instrumentation
kubectl patch deployment my-app -p \
'{"spec":{"template":{"metadata":{"annotations":{"instrumentation.opentelemetry.io/inject-java":"my-instrumentation"}}}}}'
Query your telemetry data in plain English:
Create AI agents that monitor your systems on a schedule:
graph LR
A[Your Apps] -->|Logs/Metrics/Traces| B[Ingestion API]
B --> C[TimeFusion Engine]
C --> D[(S3 Storage)]
D --> E[Query Engine]
E --> F[Dashboards]
D --> G[AI Agent Scheduler]
G -->|LLM Analysis| H[Anomaly Detection]
H --> I[Email Reports]
H --> J[Alert Channels]
Monoscope is organized into four primary components:
app/ — Haskell server binary (WAI/Yesod web application)cli/ — Command-line interface for managing projects, querying data, and automating workflowsweb-components/ — Custom UI elements (Web Components) for dashboards and log explorationsrc/ — Core Haskell library exporting shared types, utilities, and business logicMonoscope is built on TimeFusion, our open-source time-series database for observability workloads.
| 🗄️ S3-native | Data lives in your S3 buckets—no vendor lock-in |
| 🐘 PostgreSQL compatible | Use any Postgres client or driver |
| ⚡ 500K+ events/sec | Columnar storage with Apache Arrow |
| 💵 Pay only for S3 | No expensive proprietary storage fees |
| Feature | Monoscope | Datadog | Elastic | Prometheus |
|---|---|---|---|---|
| S3/Object Storage | ✅ Native | ❌ | ✅ | ✅ |
| Natural Language Query | ✅ | ❌ | ❌ | ❌ |
| AI Agents & Reports | ✅ Built-in | ❌ Add-on | ❌ | ❌ |
| Open Source | ✅ AGPL-3.0 | ❌ | ✅ | ✅ |
| Self-hostable | ✅ | ❌ | ✅ | ✅ |
Logs and trace spans displayed together in context for complete observability.
See detailed trace information alongside logs for debugging complex distributed systems.
Real-time metrics and performance monitoring with AI-powered insights.
"Monoscope notifies us about any slight change on the system. Features that would cost us a lot more elsewhere." — Samuel Joseph, Woodcore
See our public roadmap for details and to vote on features.
💬 Discord • 🐛 Issues • 🐦 Twitter
AGPL-3.0. See LICENSE for details.
For commercial licensing options, contact us at hello@monoscope.tech.
Haskell
81.7%
TypeScript
12.4%
PLpgSQL
2.0%
CSS
1.4%