blob: ae047ea55fd829491916e098ea30e34d1635e8d1 [file] [view]
# HertzBeat Community Alpha Preview
This document is for the GitHub community alpha preview branch. It is not a
stable Apache HertzBeat release checklist. Use it to try the new entity-centered
observability and Vite React frontend, report issues, and help harden the project
toward a beta.
## What Is In Scope
- Entity-centered observability read models for metrics, logs, traces, topology,
alerts, owners, runbooks, and handoff context.
- Vite React `web-app` workflows for the operational shell, entity management,
topology, instrumentation, and the three-signal query workspace.
- OTLP trace/log/metric query paths backed by the existing warehouse and
Greptime integrations.
- Local demo topology relation seeding for the small Checkout API -> Payment API
-> Orders DB example when the `local` Spring profile is active.
## Local Source Quickstart
Use Java 25, Node.js 22 and pnpm 10. Build the production frontend before a
source release package; a development server is not release evidence. See the
[installation guide](../home/docs/start/package-deploy.md) for first-run Setup
and the [upgrade guide](../home/docs/start/upgrade.md) before reusing data.
1. Start the backend from `hertzbeat-startup` with Java 25.
Keep the Arrow JVM open option when running locally:
```shell
--add-opens=java.base/java.nio=ALL-UNNAMED
```
The local backend listens on `http://127.0.0.1:1157` by default.
2. Start the Vite React frontend:
```shell
cd web-app
corepack pnpm@10.9.0 install --frozen-lockfile
corepack pnpm@10.9.0 dev
```
The preview frontend listens on `http://127.0.0.1:4200`.
3. Open `http://127.0.0.1:4200`. For a fresh installation, complete Setup using
the installation-local unlock credential and create an administrator. For an
existing installation, use its configured account. Do not assume a built-in
default password. Keep Setup credentials and tokens out of issue reports.
See the [Explore and saved-query guide](../home/docs/help/explore_saved_queries.md)
for three-signal query, recovery, Live, sharing and conflict workflows, and the
[Dashboard guide](../home/docs/help/perses_dashboard.md) for the supported document
subset. These describe alpha capabilities, not full parity with another product.
## Alpha Validation Checklist
Before opening an alpha issue or pull request, run the smallest check that
matches the area you changed.
Backend entity, topology, observability, and Greptime query changes:
```shell
./mvnw -pl hertzbeat-manager,hertzbeat-observability,hertzbeat-warehouse \
-Dtest=EntityDetailObservabilityReadModelServiceTest,EntityTopologyQueryServiceTest,EntityWorkspaceAccessServiceTest,EntityWorkspaceQueryServiceTest,TraceCallTopologyQueryServiceTest,LocalTopologyDemoRelationSeederTest,LogQueryControllerTest,EntityObservabilityGatewayImplTest,EntityTraceQueryServiceImplTest,GreptimeTraceQueryRepositoryTest,GreptimeDbDataStorageTest \
test -DskipITs -Dsurefire.failIfNoSpecifiedTests=false -DfailIfNoTests=false
```
Startup source package proof:
```shell
./mvnw -pl hertzbeat-startup -am -Prelease -DskipTests package
```
Topology, entity, observability, shell, session, and shared UI changes:
```shell
cd web-app
corepack pnpm@10.9.0 test -- \
src/features/entity src/features/topology src/features/instrumentation \
src/features/explore
```
Complete frontend release gate:
```shell
cd web-app
corepack pnpm@10.9.0 verify
```
Visible changes also require a production build, a real backend, and a Browser
check of the affected workflow. Do not use mocked topology or signal data as
release evidence.
## Delivered Operator Workflows
The alpha uses Greptime's query organization, Perses' document model and mature
APM service drilldowns as design references. It does not claim feature parity
with those products, SigNoz, SkyWalking or Datadog.
- **First use:** distinguish Agentless target monitoring from application OTLP
instrumentation. The intake catalog declares each recipe's signal support.
The real reference paths are an Agentless MySQL target and an application
using the official OpenTelemetry Java agent. Other catalog entries are not
automatically covered by this acceptance.
- **Daily entry:** Start links to real monitors, unresolved alerts, registered
services and saved queries. Each query reports its own loading, empty or
failure state; an empty Entity catalog does not establish that no telemetry
exists.
- **Explore:** metrics, logs and traces share service, namespace, environment,
filters and a fixed absolute investigation window when navigating. Trace
newest/duration sorting runs before pagination. Coverage identifies a complete
query window or a bounded fallback; missing or ambiguous roots have unknown
root duration and sort after valid durations. Live data can change between
requests; pagination is not a snapshot isolation guarantee.
Query controls sit above the results, with log/trace filters in a companion
column. A collapsible **Workflow guide** explains each signal’s query and
inspection steps. Metrics keep an inspectable catalog and chart/sample-table
switch; selecting a metric changes the draft until **Query** is applied.
A base metric query names one stored metric; a typed composition can combine
up to four source queries and four bounded arithmetic formulas. Supported
controls include aggregation, grouping, label filters, rate/increase/delta,
fixed time shifts, rollup and nested time aggregation, not arbitrary PromQL.
Aggregation preserves protected service and entity scope. Count means
contributing series, not requests. Histogram bucket queries retain `le`;
bucket values are not latency percentiles. Invalid filter clauses or grouping
labels fail rather than silently widening the query. The trend precedes the
sampled summary; concise legends do not remove complete labels from it.
Apply a draft with **Query**; open a result to inspect its evidence and
use **Back to results** to retain the original time window and filters.
Log severity categories use the OTel numeric bands (for example Error is
17–20 and includes Java `SEVERE`). **Original severity text** remains an
independent exact filter; both conditions combine with AND. Category-filtered
queries can be saved and reopened, but the restricted Dashboard and AI
handoff contracts currently reject that filter rather than omit it.
Historical Logs also offer bounded Patterns, identity-based Transactions and
sampled calculated fields. Their disclosed sample or identity boundary is
part of the result; a sampled calculation is not a full-window aggregate.
Traces offer a typed two-span structural query plus bounded structural
Patterns and a source-backed Request Flow Map. The map does not infer missing
parent spans or services, and a missing correlated log does not establish a
request outcome.
- **Services:** registered service Entities provide source, environment, last
observed Trace time, service-wide RED and observed root operations. Greptime
Flow aggregates SERVER requests into minute buckets; P95 is approximate and
can be unavailable, and sampling completeness is unknown. Ingestion audit
counts are separate from business request RED. Existing registered relations
and monitor-linked alerts are evidence, not complete inferred dependencies.
An operation can lead to matching Traces and then associated Logs while
retaining the investigation context. Direct service Logs do not imply an
operation filter. The detail heading identifies the canonical service and
environment; **Service information** exposes the catalog alias, source,
historical freshness and bounded associations. Identity metadata can remain
visible during refresh while signal values retain loading or failure states.
The **Performance** directory compares observed requests, errors, error rate
and P95 across matching services. Choose a window, optionally narrow by search
or environment, run Query, then sort and open a service to inspect its trends
and root operations. Both return actions preserve the directory view, filters,
order, page and exact investigation window. **Registered** remains a separate
metadata view when request evidence is unavailable.
The server ranks all matching authorized services before pagination, bounded
by 500 candidates and a 24-hour window. A larger scope requires narrower
filters and returns no partial ranking. Missing observations remain unavailable
values, not zero errors or healthy services; a storage failure returns no
ranking. Catalog and telemetry reads do not share a snapshot, so late data can
change order on refresh. This is not a health score, anomaly detector or
complete resource catalog.
Metrics API operation predicates match real metric labels
and can correctly return no matching data.
- **Saved queries:** save applied conditions, reopen, update, save as and delete
installation-shared assets under existing role permissions. Relative or exact
time mode survives restart; reopening starts on the first page. The versioned
query document is authoritative. Convertible legacy records open without an
automatic write; unsupported records remain available for raw export.
- **Dashboards:** create, edit, copy, delete, import/export, adjust layout, save
or cancel and add a panel from Explore. Standard Perses Dashboard JSON is
accepted only within the HertzBeat subset: seven visual plugins, controlled query
plugins, one Grid and service/namespace/environment variables. Metrics can use
TimeSeries, Stat, Gauge or Table; the restricted Logs, Trace table and fixed
Trace waterfall panels remain available. Panels load
and fail independently. Shared runtime time and Explore return context remain
explicit; fixed Trace waterfalls stay pinned when a service variable changes.
Native revisions reject stale updates or deletes with HTTP 409. Cancel does
not persist a draft. See the [Dashboard guide](../home/docs/help/perses_dashboard.md).
- **AI investigation:** bounded read-only tools, durable transcript replay,
refusal, no-data, timeout, Stop/Retry and redaction are exercised with actual
application data and a labeled local protocol provider. This establishes
transport and policy behavior, not external model quality. See the
[AI guide](../home/docs/help/ai_agent.md).
Service identity matching requires meaningful service-name or instance evidence;
namespace/environment alone cannot bind an unrelated service. Unresolved
identity does not prevent direct signal queries. The correction affects new
intake; previously stored identity attributes are not rewritten automatically.
Runtime dimensions such as Trace ID, operation and HTTP route are query context,
not new long-lived Entity identities.
The bounded intake check observes a fixed 120-second window. Previously received
signals are historical evidence, not continuing emitter liveness. Start a fresh
check after stopping an emitter, and inspect exporter authentication errors
separately. See the [instrumentation contract](instrumentation-api.md).
## Installation, Recovery and Acceptance Boundary
The local candidate was built from a frozen source snapshot with a fresh
production frontend and Java 25 startup package. Installed API and Browser
checks used the same archive. The reference environment covered H2, MySQL 8.4
and PostgreSQL 17 management persistence, separate GreptimeDB 1.1.4 telemetry,
restart, native metadata backup/restore, and a stopped single-node Greptime data
copy and restore. Preserve management data, telemetry, configuration and secrets
as separate backup responsibilities. This is not an online or distributed
backup guarantee. Do not copy a running database directory.
The real alert check raised MySQL connection count, observed firing notification
receipts, released the connections and observed recovery receipts. Repeated
firing notifications are possible; the proof does not establish exactly-once
delivery. AI protocol tests use a local controlled provider with explicit test
timeout/retry settings, not new product defaults.
Release evidence must record the source revision and uncommitted snapshot,
lockfiles, toolchain, archive digest, test commands and limits. Keep credentials,
runtime databases, screenshots and local evidence out of public commits. The
[release checklist](alpha-release-checklist.md) separates local acceptance from
publication. Source changes after an accepted archive require a new build and
appropriate revalidation.
## Local Scale Proof Data
Large topology scale proof data is not seeded by default. The local demo seeder
only creates the small demo relation repair during normal `local` profile
startup.
To explicitly seed the local mixed scale proof entity catalog, start the backend
with:
```shell
--hertzbeat.topology.local-scale-proof-seed=true
```
This is intended for local performance investigation only. Do not treat it as
required alpha setup.
## Known Alpha Limitations
- The Vite React frontend is still an alpha preview. Parity claims require
route, action, API read/write, refresh, context-handoff, and Browser evidence.
- Background tabs suspend manager-event connections and reread current state
when shown again; alert notification connections remain active. For many
simultaneously open tabs, use an HTTP/2-capable HTTPS proxy: browser HTTP/1
per-origin connection limits still apply to long-lived alert streams. See the
[browser SSE connection limit](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events).
- Services do not yet provide a complete operation RED inventory, Apdex, a
database/external-call product, causal root-cause analysis or complete inferred
service dependencies. Trace duration distributions are deferred.
- Dashboard import/export is limited to the HertzBeat Perses subset. No
standalone Perses service, arbitrary SQL, external data-source plugins, public
sharing or plugin marketplace is included. Saved-query updates and deletes
use revisions and reject stale writes; resolve conflicts or save a copy.
- Three-signal exploration does not provide Datadog's full query grammar,
function and widget catalogs, prediction/anomaly algorithms, archive search,
Watchdog/Findings, natural-language queries, public or scheduled dashboards,
standalone resource pages, or direct metric-point-to-trace correlation.
Patterns and calculated fields are bounded sampled views; structural Trace
Patterns and Flow Map use a bounded observed-span population.
- Earlier alpha snapshots with a different V200 migration checksum require a
fresh database for this preview. Do not repair the checksum or assume an
automatic in-place upgrade. Historical PostgreSQL saved-query OID strings
are not automatically converted into valid query documents.
- Topology large-graph behavior is optimized for inspection with render
windows, table drilldown, and optional browser smoke. Continue filing cases
where real data feels confusing or slow.
- Runtime verification may depend on local H2 or Greptime data shape. Greptime
scale proof fixtures are local-only and should not be committed as generated
proof artifacts.
- Source package rebuilds are expected to pass for the alpha candidate. If a
local module or dependency warning blocks packaging, include the focused
Maven command and output with the issue report.
## Reporting Issues
When filing alpha feedback, include:
- The route or API endpoint.
- The storage mode, for example H2-only or Greptime-backed traces.
- The browser viewport and whether the in-app refresh was used.
- Expected versus actual node, edge, table, or handoff behavior.
- Any focused test, Maven, Vitest, ESLint, or browser-smoke command that
reproduces the issue.