DOCS

Product Guide

Everything you need to install, connect and run ClusterEye in production: architecture, the ports to open, the minimum database privileges per engine, and the install commands.

Overview

ClusterEye has three components: the Agent running on monitored hosts, the central API, and the web UI. Data flows one way — the agent dials out, and ClusterEye never opens an inbound connection into your database.

01

The agent collects

Runs on the monitored host, connects to the database with a read-only account and reads host metrics from /proc.

02

Ships over gRPC

Streams to the API over a single outbound TLS connection (443/tcp). The agent opens no listening port.

03

The API processes and stores

Metadata goes to PostgreSQL, time-series metrics to InfluxDB; the anomaly, baseline and correlation engines run here.

04

The UI shows it

Served from the same 443 port: dashboards, alerts, RCA and reports.

Two collection modes

AGENT-BASED

PostgreSQL, MongoDB, MS SQL Server, Oracle, MySQL/MariaDB, ClickHouse. The agent runs on the database host, which is what makes host metrics, log analysis and config drift possible.

AGENTLESS

Azure SQL (Database + Managed Instance), Azure PostgreSQL, AWS RDS for PostgreSQL and SQL Server, Huawei Cloud RDS for PostgreSQL, Redis, Elasticsearch/OpenSearch. The connection is made directly from the ClusterEye API server; nothing is installed on the target — which is the only option for managed services. Host-level metrics are not collected in this mode.

Network & ports

The rules to open in the customer firewall. The agent only ever dials out — you never need to expose an inbound port on a monitored host.

RequiredOptional / situationalLocalhost only — no firewall rule
FROMTOPORTPROTOCOL
Agent hostClusterEye server443/tcpgRPC over HTTP/2 (TLS)
The agent's only outbound connection. nginx terminates TLS and forwards gRPC to the API. Outbound only.
Agent hostClusterEye server80/tcpgRPC h2c (plaintext)
Alternative for internal networks without TLS. Used when the agent is installed without --tls.
Browser (DBA/SRE)ClusterEye server443/tcpHTTPS
Web UI and REST API. The same port carries both UI and gRPC traffic.
Agent hostarchive.clustereye.com443/tcpHTTPS
Only for install and auto-update of the agent. In air-gapped setups copy the binary manually (-b flag).
nginxClusterEye API50051/tcpgRPC
Listens on 127.0.0.1 — never exposed, no firewall rule needed.
nginxClusterEye API8080/tcpHTTP
REST API upstream. Listens on 127.0.0.1.
ClusterEye APIPostgreSQL (metadata)5432/tcpPostgreSQL
Platform metadata database. Local with --postgres=local, or a separate host with external.
ClusterEye APIInfluxDB8086/tcpHTTP
Time-series metrics. Can be disabled entirely with --influxdb=none (metric charts are then unavailable).
AgentPostgreSQL5432/tcpPostgreSQL
Usually localhost — the agent runs on the database host it monitors.
AgentMongoDB27017/tcpMongoDB wire
The mongos port on sharded clusters; mongod directly on replica sets.
AgentMS SQL Server1433/tcpTDS
Dynamic port or SQL Browser (1434/udp) if a named instance is used.
AgentOracle1521/tcpOracle Net
Listener port. Connects to the CDB$ROOT or a PDB service name.
AgentMySQL / MariaDB3306/tcpMySQL
performance_schema must be enabled.
AgentClickHouse9000/tcpNative protocol
The HTTP interface (8123) is not used — the native protocol is required.
ClusterEye APIRedis6379/tcpRESP
Agentless engine: the connection originates from the API server, not from an agent.
ClusterEye APIAzure SQL (Database / MI)1433/tcpTDS over TLS
Agentless engine. Allow the ClusterEye API server's egress IP in the Azure SQL firewall, or use a private endpoint / VNet integration.
ClusterEye APIAzure PostgreSQL Flexible Server5432/tcpPostgreSQL over TLS
Agentless engine. TLS is mandatory (sslmode=require). Requires a firewall rule or private access (VNet).
ClusterEye APIAWS RDS for SQL Server1433/tcpTDS over TLS
Agentless engine. Allow the ClusterEye API server in the RDS security group. Resource metrics need CloudWatch and RDS management API access (443/tcp).
ClusterEye APIAWS RDS for PostgreSQL5432/tcpPostgreSQL over TLS
Agentless engine. Allow the ClusterEye API server in the RDS security group. Host metrics additionally need CloudWatch API access (443/tcp).
ClusterEye APIHuawei Cloud RDS for PostgreSQL5432/tcpPostgreSQL over TLS
Agentless engine. Huawei's CA certificate is uploaded for TLS. Host metrics additionally need Cloud Eye API access (443/tcp).
ClusterEye APIElasticsearch / OpenSearch9200/tcpHTTPS/HTTP
Agentless engine. Oracle DML Audit ingest uses the same cluster.
The short version for firewalls

For most deployments one rule is enough: outbound TCP from every database host to 443/tcp on the ClusterEye server. Database ports (5432, 1433, 1521, 27017, 3306, 9000) are usually loopback because the agent runs on the same machine, so they never reach the firewall. The agentless engines (Azure SQL, Azure PostgreSQL, Redis, Elasticsearch) are the exception: those ports must be reachable from the ClusterEye API server, and the Azure ones additionally need a firewall rule or private endpoint.

Quick start

Pick the one that fits — all three are one-command installs.

FULL STACKEnd-to-end platform on a single host — ideal for dev & POC.

Kind + Helm

Installs Kind, Helm and the complete ClusterEye stack on Ubuntu 24.04.

bash
1curl -sSL https://archive.clustereye.com/clustereye-stack-install.sh | bash
STANDALONEProduction-ready — nginx + TLS + systemd.

Bare-metal Linux

Full platform directly on Linux — no Docker, no Kubernetes.

bash
1curl -fsSL https://archive.clustereye.com/deploy/standalone/install.sh | sudo bash -s -- \
2 --api-version=VERSION --ui-version=VERSION \
3 --domain=YOUR_DOMAIN_OR_IP --postgres=local
AGENTPlatforms: postgres · mongo · oracle · mysql

Agent only (Linux)

Just the agent, talking to an existing ClusterEye server.

bash
1curl -sSL https://archive.clustereye.com/install.sh | sudo bash -s -- \
2 -p postgres --api-url <clustereye-host> --tls

Standalone install

ClusterEye API + UI on bare-metal Linux servers — no Docker, no Kubernetes. Comes with nginx reverse proxy.

Ubuntu 22.04+RHEL 8/9Oracle Linux 8/9
ClusterEye API
Go binary — REST API (:8080) + gRPC (:50051)
ClusterEye UI
Pre-built static frontend assets
nginx
Reverse proxy — TLS + plaintext h2c, HTTP/2, gRPC
PostgreSQL
Local or external database
InfluxDB
Optional time-series metrics
Single-command install (no Docker)
Auto-generated 10-year self-signed TLS certificate
nginx reverse proxy — HTTPS + plaintext h2c side-by-side
HTTP/2 and gRPC support (TLS and plaintext)
Optional local or external PostgreSQL
Optional local or external InfluxDB
Hardened systemd service
Independent API and UI versioning

Install options

All install.sh flags.

REQUIRED
--api-version=<ver>API binary version
--ui-version=<ver>UI assets version
--domain=<host|ip>Server domain or IP
POSTGRESQL
--postgres=local|externalMode (default: local)
--postgres-host=<host>External PG host
--postgres-port=<port>External PG port (default: 5432)
--postgres-user=<user>External PG user (default: postgres)
--postgres-password=<pwd>External PG password
--postgres-dbname=<n>DB name (default: clustereye)
--postgres-sslmode=<mode>SSL mode (default: disable)
INFLUXDB
--influxdb=local|external|noneMode (default: local)
--influxdb-url=<url>External InfluxDB URL
--influxdb-token=<token>External InfluxDB token
--influxdb-org=<org>Org (default: clustereye)
--influxdb-bucket=<bucket>Bucket (default: clustereye)
TLS
--tls=self-signed|providedMode (default: self-signed)
--cert=<path>Cert file (with --tls=provided)
--key=<path>Key file (with --tls=provided)
NETWORK
--port=<n>HTTPS port (default: 443)
--http-port=<n>|nonePlaintext h2c port (default: 80)
--bind-host=<host>Bind address (default: 0.0.0.0)
--extra-hostnames=a,b,cAdditional TLS SANs
OTHER
--no-firewallSkip firewall config
-h, --helpShow help
--versionShow installer version

Upgrade

In-place upgrade of API binary or UI assets. Config, secrets, TLS and databases are preserved.

bash
1curl -fsSL https://archive.clustereye.com/deploy/standalone/upgrade.sh | sudo bash -s -- \
2 --api-version=NEW --ui-version=NEW
--api-version=<ver>Upgrade API binary to this version
--ui-version=<ver>Upgrade UI assets to this version
-h, --helpShow help

Uninstall

Without flags: removes systemd service, binary, nginx config and journald drop-in. Configs, secrets, TLS and databases are preserved.

bash
1sudo ./uninstall.sh --purge --purge-db --purge-influxdb --yes-i-mean-it
(no flags)Remove only binary, systemd, nginx, journald
--purgeAlso remove /etc/clustereye, /var/lib/clustereye, /var/log/clustereye, web assets, user/group
--purge-dbAlso remove local PostgreSQL packages and data
--purge-influxdbAlso remove local InfluxDB packages and data
--yes-i-mean-itSkip confirmation prompt

ClusterEye Agent

Agent for PostgreSQL, MongoDB, Oracle, MySQL/MariaDB, MS SQL Server and ClickHouse. It runs on the monitored database host and opens only an outbound gRPC connection.

Linux one-liner:
bash
1curl -sSL https://archive.clustereye.com/install.sh | sudo bash -s -- -p postgres
-p, --platformRequired — postgres, mongo, oracle or mysql
--api-urlClusterEye API server address (host or host:port)
--registration-tokenOne-time registration token generated in the UI
-d, --install-dirInstall directory (default: /opt/clustereye)
-b, --local-binaryCopy a local binary instead of downloading a release (air-gapped)
--tlsUse TLS for the gRPC connection (default: off)
-k, --insecureSkip TLS certificate verification (for self-signed certs, with --tls)

Windows

For Windows x64:

clustereye-agent.exe
ClusterEye Agent for Windows
↓ Download
clustereyesetup.exe
Setup wizard for Windows
↓ Download
agent.yml.example
Example configuration file
↓ Download

Minimum privileges per engine

The smallest privilege set the customer must grant the ClusterEye monitoring account. The baseline is read-only and safe to grant everywhere; the optional rows are needed only if you want the matching action feature.

PostgreSQL

Agent-basedDefault port: 5432
BASELINE — READ-ONLY
sql
1CREATE ROLE clustereye LOGIN PASSWORD '<strong-password>';
2
3-- pg_monitor = pg_read_all_settings + pg_read_all_stats + pg_stat_scan_tables
4GRANT pg_monitor TO clustereye;
5
6-- repeat for every monitored database
7GRANT CONNECT ON DATABASE <db> TO clustereye;
8
9-- pg_hba.conf: allow clustereye from the agent host (scram-sha-256)
PREREQUISITES & NOTES
shared_preload_libraries = 'pg_stat_statements' (restart required) — for query intelligence
CREATE EXTENSION pg_stat_statements; — top queries / query analysis
CREATE EXTENSION pgstattuple; + GRANT EXECUTE ON FUNCTION pgstattuple(regclass), pgstatindex(text) — bloat analysis
Optional: CREATE EXTENSION hypopg; — hypothetical validation of index advice
The agent OS user must read postgresql.conf, pg_hba.conf and the log directory (add it to the postgres group)
OPTIONAL — FEATURE-GATED
FEATUREREQUIRED GRANT
Kill / cancel sessionGRANT pg_signal_backend TO clustereye;
Tuning Advisor apply (ALTER SYSTEM + reload)SUPERUSER — or PG 15+: GRANT ALTER SYSTEM ON PARAMETER <knob> TO clustereye; GRANT EXECUTE ON FUNCTION pg_reload_conf() TO clustereye;
Missing-index apply / rollback, REINDEXOwnership of the target tables (or CREATE on schema). Advice + HypoPG validation work without it.
Failover / promote / rebuildOS: sudo -u postgres pg_ctl (NOPASSWD), pg_rewind/pg_basebackup; replication user needs REPLICATION + EXECUTE on pg_ls_dir, pg_stat_file, pg_read_binary_file

The baseline is fully read-only. A missing grant only disables that collector with a warning — the agent still starts.

What happens if a grant is missing?

No collector ever takes the agent down over a missing privilege. That collector logs a warning, the capability is marked unavailable, and everything else keeps running. Action features (kill, plan forcing, tuning apply) fall back to recommend-only.

AI Alarm Investigator

An evidence-grounded layer that investigates why an alarm or a correlated incident happened. An operator starts it; ClusterEye gathers the evidence from what it has already stored; the model interprets that evidence and cites an evidence id for every claim. The model never reaches your database.

01

An operator starts it

One click from the alarm or incident drawer. There is no automatic triggering — no investigation ever runs unless you ask for it.

02

ClusterEye gathers evidence

Only data ClusterEye already stores: alarm history, metric series, event and change records, query statistics. No new database connection is opened.

03

The model plans and reads

The model says which evidence it needs, the server runs the permitted read-only tools and hands back the result. The model cannot write SQL and cannot step outside the tool list.

04

The answer cites its evidence

Competing hypotheses, the supporting and contradicting evidence ids for each, what is missing, and recommended next steps. When the evidence is not enough, the engine says so.

What it reads

  • Alarm and incident records: when it started, how often it recurred, which alarms accompanied it, how it was resolved before.
  • Metric series and their learned normals (seasonal baseline): CPU, memory, connections, wait time, storage.
  • Engine evidence: blocking episodes, deadlock records, backup age, replication state, query statistics.
  • The event stream: configuration changes, deployments, failovers, agent health.

What it never does

  • It does not connect to your database. No live query is run during an investigation — this is a fixed limit, not a setting.
  • Nothing the model writes is executed. It may only call registered read-only tools; it cannot produce, run or apply SQL.
  • It does not trigger itself. There is no scheduled or alarm-triggered automatic investigation.
  • Raw query text never leaves the server, and your data rows never reach the model.
  • The model's reasoning steps are not stored — only the plan, the tools it called and the final result.

What reaches the model, and what does not

Sent

  • Alarm/incident metadata: type, severity, node, database name, timestamps, occurrence count.
  • Metric summaries: mean, peak, last value, sample count and the deviation from the learned expectation.
  • Query fingerprints: verb + first table + length, with literals replaced by '?' (e.g. "SELECT … dbo.Orders … (redacted, 162 chars)").
  • Event titles and configuration-change summaries.

Not sent

  • Data rows from your tables — no tool reads rows.
  • Raw SQL text, bind values, literals.
  • Passwords, tokens and connection strings: every message passes a redaction layer before it reaches the model.
  • The model's hidden chain of thought (never stored, never displayed).

Where it runs, what it needs

LOCAL / AIR-GAPPED

Any OpenAI-compatible endpoint works — vLLM, Ollama or similar on your own hardware. No internet access is required and the evidence never leaves your network. Verified end to end against a local gpt-oss-120b class model.

CLOUD (OPTIONAL)

A cloud provider can be configured instead. Provider, endpoint and model are read live from Settings — changing them needs no restart.

LICENCE & ROLE

Requires the 'ai' feature on an Enterprise licence and a per-user AI quota. Admin and DBA roles start an investigation; anyone who can see the alarm can read the result and leave feedback.

AUDIT TRAIL

Every tool call is written to the audit log with its arguments, duration and result size. Each investigation is stored with who started it and can be reviewed later against the same evidence.

Limits — on purpose

  • Evidence that is not stored is reported as unavailable rather than guessed: SQL Agent job history, MSSQL plan XML and PostgreSQL execution plans fall into this category.
  • Engine depth: SQL Server, PostgreSQL and Oracle have engine-specific tools. Other engines are investigated with the generic tool set.
  • Confidence caps are deterministic: a hypothesis resting on a single signal, on history alone, or on contradicted evidence cannot be rated highly — whatever the model claimed.
  • The engine may answer 'no clear root cause' or 'insufficient evidence'; that is an expected outcome, not a failure.

The model has no access to your database

An investigation runs purely on data ClusterEye collected earlier. The live database call budget is zero and cannot be raised by configuration — which is why starting an investigation adds no load to your production database.

AI Alarm Investigator — frequently asked questions

Does the AI investigation connect to my database?

No. An investigation runs purely on data ClusterEye has already collected and stored: alarm history, metric series, event records, query statistics. The live database call budget is zero and cannot be raised by configuration, so starting an investigation adds no load to your production database.

Does my data leave the environment? Does it work air-gapped?

The model can run on your own infrastructure: any OpenAI-compatible endpoint (for example vLLM on your own hardware) is enough and no internet access is required. In that setup the evidence never leaves your network. A cloud provider can be configured instead; even then what reaches the model is limited to alarm metadata, metric summaries and query fingerprints — your data rows and raw SQL text are never sent.

What exactly is sent to the model?

Alarm and incident metadata, metric summaries (mean, peak, deviation from the learned expectation), event and configuration-change titles, and query fingerprints. Query text is reduced to verb + first table + length with the literals removed before it is sent. Passwords, tokens and connection strings are masked in every message. No tool reads rows from your tables.

Can the AI act on its own?

No. The model may only call registered, read-only tools; it cannot produce, run or apply SQL and it cannot change anything. Recommended actions are text, and the risky ones are explicitly flagged as requiring DBA approval. Investigations do not start by themselves either — there is no scheduled or alarm-triggered automatic run.

Who can start an investigation?

Admin and DBA roles can start one; it requires the 'ai' feature on an Enterprise licence and a per-user AI quota. Anyone who can see the alarm can read the result and leave 'useful / not useful' feedback. Every tool call and every investigation is written to the audit log together with who started it.

What if the AI names the wrong root cause?

The output is not a single answer but competing hypotheses, each with the evidence ids that support and contradict it and a list of what is missing. Confidence is bounded by deterministic rules — a hypothesis resting on a single signal, on history alone, or on contradicted evidence cannot be rated highly, whatever the model claimed. The engine is allowed to answer 'no clear root cause' or 'insufficient evidence', and it reports evidence it does not have as unavailable rather than guessing.

Verify & troubleshoot

What to check in the first five minutes after an install.

Is the agent service up?

If the service runs but the node never shows up in the UI, it is almost always networking or database credentials.

bash
1systemctl status clustereye-agent
2journalctl -u clustereye-agent -f --no-pager

Can it reach the API?

Run this from the agent host. No answer means the 443/tcp rule; if you use a self-signed certificate install the agent with -k.

bash
1curl -sS -o /dev/null -w '%{http_code}\n' https://<clustereye-host>/api/v1/health

Is the database account sufficient?

This succeeds once the baseline grants are in place. Use the equivalent for your engine (Oracle: V$SESSION, MSSQL: sys.dm_exec_sessions).

bash
1psql -h <host> -U clustereye -c 'SELECT count(*) FROM pg_stat_activity;'

Query intelligence empty?

If metrics flow but the query list stays empty, the missing piece is almost certainly an engine prerequisite: pg_stat_statements, Query Store, performance_schema or log_queries.

bash
1SELECT * FROM pg_extension WHERE extname = 'pg_stat_statements';

Releases

Linux x86_64 agent binaries. Verify with SHA256.

VERSIONDATEARCHDOWNLOAD
v2.0.34LATESTJun 23, 2026x86_64
v2.0.33Jun 11, 2026x86_64
v2.0.32Jun 11, 2026x86_64
v2.0.28Jun 1, 2026x86_64

ARM64 support is available since v2616101459 (Sep 16, 2025). Windows x64 binaries are also downloadable.