Self-hosted service
monoscope-tech/monoscope avatar
monoscope-tech/monoscope

Monoscope: Observability on S3 with natural language queries

Monoscope lets you ingest and explore your logs, traces and metrics. We store these in S3 compatible buckets. Query in natural language via LLMs.

2,110 stars92 forksHaskellAGPL-3.0

At a glance

What is it?
Monoscope is an open-source observability platform that stores logs, traces, and metrics in S3-compatible buckets and lets you query them in natural language via LLMs. It is written in Haskell, licensed under AGPL-3.0, and targets teams that want long-term telemetry retention without paying for proprietary storage.
Who is it for?
Adopt Monoscope if you already run S3-compatible storage, want multi-year telemetry retention at low cost, and are comfortable with an AGPL-3.0 codebase written in Haskell. Do not adopt it if you need managed auth/SSO, advanced alert channels, or a mature ecosystem with extensive documentation.
Can I use it commercially?
Yes, with strict conditions. AGPL-3.0 is a network copyleft licence: if people use a modified version over a network, for example as a hosted service, you must offer them its source code under the same licence.
Is it still maintained?
Yes. The repository received new commits within the last day.
What is it written in?
Mainly Haskell, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on November 14, 2026, and from our analysis. They are not legal advice.

From daily snapshots

Star history

  • monoscope-tech/monoscope2,110 ★ · +638
Star history
Repository2026-07-302026-11-14
monoscope-tech/monoscope1.5k2.1k

638 Stars in the last 107 days, measured from the daily GitHub snapshot. Compare with other projects

Editorial analysis

Why S3 storage changes the cost model

Monoscope solves a specific cost problem: storing years of logs, traces, and metrics in a dedicated observability vendor is expensive. The README positions S3-compatible buckets as the primary storage backend, meaning you bring your own bucket and pay only for object storage. That is a real architectural difference from typical observability platforms that use their own hot storage tiers. The trade-off is that you manage the bucket lifecycle, retention policies, and access controls yourself. The documentation does not specify how Monoscope handles bucket versioning, lifecycle transitions, or eventual consistency, so those are open questions for a production deployment. For teams already on AWS S3, MinIO, or similar, this could cut storage costs dramatically, but it also shifts operational burden onto you.

Architecture: Haskell backend, OTLP ingestion, and a stable CLI

The primary language is Haskell, which is unusual for an observability tool. The README does not explain the internal architecture beyond stating that telemetry is stored in S3. It mentions OpenTelemetry native support with 750+ integrations, so ingestion likely uses the OTLP protocol. The CLI is a central component: it emits stable JSON envelopes for every command, enabling agentic pipelines. The README shows a three-step workflow: get a service name via `monoscope facets`, search for an error event, then pull surrounding context with `monoscope events context --window 5m --summary`. The output shapes are documented in a table, which is a strong signal of design discipline. However, the README does not describe how the S3 index is built, how queries are translated to object storage scans, or whether there is a local cache. Without that, you cannot estimate query latency or cost per query.

Getting started: docker-compose and a test-data CLI

The quick start is simple: clone the repository, run `docker-compose up`, and visit `http://localhost:8080` with default credentials admin/changeme. That is a low-friction entry, but the README does not mention any environment variables, bucket configuration, or required IAM permissions. You will need to figure out how to point Monoscope at your S3 bucket from the documentation, which is not in this article. Once running, you can send test data: `monoscope auth login` followed by `monoscope send-event -m "Hello from Monoscope"` for a single event, or `monoscope telemetrygen --kind=trace --rate=5 --count=50` for sustained load. The CLI install script is `curl https://monoscope.tech/install.sh | sh`. That is a typical pattern, but the README does not specify the supported OS or whether the CLI is a binary or a Haskell build.

Natural language queries and the LLM dependency

The core selling point is querying telemetry in plain English via LLMs. The README gives an example of a Claude Code skill that translates a request like "investigate the 500 errors in payment-api" into a CLI pipeline. The MCP server exposes a `search_events_nl` tool that converts natural language to KQL. This is a double-edged sword. LLM-based query translation can be convenient, but it introduces nondeterminism and potential cost per query. The README does not state which LLM provider is used, whether it runs locally, or how errors in translation are handled. If you query a misspelled service name or an ambiguous time range, the LLM might produce a wrong KQL query. The CLI's stable JSON envelopes mitigate this by letting you inspect each step, but the natural language layer remains a black box. For teams that require deterministic query semantics, this is a risk.

AI agents and email reports: scheduled anomaly detection

Monoscope includes AI agents that run on a schedule to detect anomalies and send daily or weekly email reports. The README mentions this as a core capability, but it does not describe how agents are configured, what anomaly detection algorithms are used, or how false positives are handled. The cloud version supports Slack and PagerDuty alert channels, while self-hosted only has basic email. That is a significant limitation for on-call workflows. The agentic pipeline in the CLI is more concrete: each command emits a stable JSON envelope, so you can chain discovery, search, and triage without manual parsing. The README shows a Claude Code skill that runs an on-call sweep, which suggests the agents are more about automating investigation than real-time alerting. If you need paging or escalation, self-hosted Monoscope will not cover it out of the box.

MCP server and agent integration

Monoscope exposes a Model Context Protocol server at `/api/v1/mcp`, which any MCP-aware client can use. The README provides a JSON config snippet for Claude Desktop or Cursor, using a bearer token. Every public REST endpoint is auto-registered as a verb-first tool like `list_monitors` or `search_events`. That is a clean way to expose the platform to AI agents without building custom integrations. However, the README does not list which endpoints exist or how authentication is scoped. The MCP server is a different surface from the CLI: it is HTTP-based, while the CLI is a local binary. Both produce structured output, but the MCP server likely has different rate limits and error handling. For teams building custom agents, this is a useful integration point, but you should verify the tool catalog in `docs/mcp.md` before relying on it.

Limitations and when Monoscope is the wrong tool

The most obvious limitation is the self-hosted alerting: only basic email, no Slack or PagerDuty. If your incident response depends on paging, this is a dealbreaker. Second, the README does not mention any data retention or lifecycle management for S3 buckets. You are responsible for that, and if you do not set up lifecycle rules, your storage costs will grow. Third, the project is written in Haskell, which is a niche language. That could make it harder to find contributors or debug issues. Fourth, the natural language query feature relies on LLMs, which means you need an external API key or a local model, neither of which is documented in this article. Finally, the AGPL-3.0 license is a real constraint: if you modify the code and offer it as a service, you must release your changes. That is not a problem for internal use, but it matters for vendors.

Alternatives and where Monoscope stands

The closest alternative is Grafana with Loki, Tempo, and Mimir, which also support object storage (S3, GCS, Azure Blob) for logs, traces, and metrics. Grafana has a mature query language (LogQL, PromQL, TraceQL) and a huge ecosystem, but it does not have built-in natural language queries or AI agents. Another alternative is SigNoz, which is OpenTelemetry-native and offers a self-hosted option, but it uses ClickHouse for storage, not S3 directly. The difference in approach is fundamental: Monoscope puts S3 as the primary storage and relies on LLMs for query translation, while Grafana and SigNoz use dedicated query engines with their own indexes. That means Monoscope may be cheaper for cold storage but likely slower for ad-hoc queries that scan large ranges. If you need deterministic, high-performance queries, a dedicated engine is safer. If you want to minimize storage costs and are willing to trade query speed and determinism, Monoscope is a distinct option.

Maintenance, license, and upgrade path

The project is actively maintained: the latest release is v0.6.25 from August 2026, with previous releases in June and July of the same year. That suggests a regular release cadence, but the README does not include a changelog or migration notes. Upgrading a Haskell service may require rebuilding from source if you self-host, since there are no prebuilt binaries mentioned. The AGPL-3.0 license is copyleft, so any modifications you distribute as a network service must be open-sourced. That is a legal consideration, not advice. The CLI and MCP server are documented with stable JSON envelopes, which should reduce breakage when upgrading, but the LLM integration may change as providers update their APIs. Before adopting, check the `docs/` directory for upgrade instructions and breaking changes, as the README does not cover them.

Editorial conclusion

Adopt Monoscope if you already run S3-compatible storage, want multi-year telemetry retention at low cost, and are comfortable with an AGPL-3.0 codebase written in Haskell. Do not adopt it if you need managed auth/SSO, advanced alert channels, or a mature ecosystem with extensive documentation. Before committing, verify the self-hosted deployment path with docker-compose, test the natural language query accuracy on your own data, and confirm the CLI and MCP tooling cover your incident workflows. The project is actively released (v0.6.25 as of August 2026), but its reliance on LLMs and a young codebase means you should validate the query pipeline against your specific telemetry shapes first.

Frequently asked questions

What is Monoscope and where does it keep telemetry?

It is an open-source observability platform that ingests and queries logs, traces and metrics stored in S3-compatible buckets you provide, in both the hosted and the self-hosted option. It also runs a TimescaleDB instance for its own application state.

How do I run Monoscope locally, and what are the default credentials?

Clone the repository, change into the directory and run docker-compose up, then open http://localhost:8080. The readme gives the default login as admin with the password changeme, and the compose file enables basic auth with those same values.

What license is Monoscope released under?

AGPL-3.0. The comparison table between the hosted and self-hosted options lists the self-hosted price as free precisely because of that license.

Does Monoscope have a CLI and an MCP server?

Both. The CLI is installed by piping a remote script into a shell and every command emits a stable JSON envelope, with agent mode forced by MONOSCOPE_AGENT_MODE=1 or a flag. The MCP endpoint sits at /api/v1/mcp with a bearer API key, and every public REST endpoint is exposed as a verb-first tool.

What should I change before exposing a self-hosted Monoscope?

The basic auth password and the database password, which default to changeme and postgres. Most of all the API key encryption secret, which appears in both the compose file and the example environment file as the same fixed string, so stored API keys are not actually encrypted against anyone who reads the repository.

Official sources

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/monoscope-tech-monoscope.svg)](https://hysenlabs.com/projects/monoscope-tech-monoscope)

Star history chart for your README

markdown
[![Star history](https://hysenlabs.com/chart/monoscope-tech-monoscope.svg)](https://hysenlabs.com/projects/monoscope-tech-monoscope)

Was this useful?