Query structured data
Run a synchronous ad-hoc query against a configured data source and return a stable query_result.v1 result whose natural shape is frames, records, or samples. This public API requires monit-edge v0.65.0 or later.
Restrictions
Usage
- Treat monit-edge v0.65.0 as the minimum supported Edge version for this public API. WebAPI retains migration adapters for older Edge versions: query.v2 results may still preserve frames, records, or samples, while legacy rows can expose only the information they retained. These adapters do not change the support floor; older protocols lack query.v3 cancellation and error-lifecycle semantics, and data already lost by legacy rows cannot be recovered.
- The public response format is always
query_result.v1and is independent of the internal Edge query protocol. Dispatch onresult.kind(frames,records, orsamples); do not infer the result shape fromds_typeor the Edge version. - A
framesresult may contain multiple table or time-series frames. Field values are columnar and all fields in one frame have the same length. - A
recordsresult may contain nested JSON and null records. Integer literals outside JavaScript’s safe integer range are returned as decimal strings. - A
samplesresult contains label sets and instant values. A value may be a number or one of the stringsNaN,+Inf, and-Inf. - The final success response is limited to 8 MiB and query results are limited to 1,000 rows. Narrow the time range, reduce fields, or aggregate at the source when a request exceeds a limit.
- Query failures use non-2xx HTTP status codes and the standard error envelope. Do not transparently fall back to the deprecated
/monit/query/rowsendpoint. - Query execution may take up to 35 seconds across WebAPI forwarding and Edge execution. Configure client timeouts to at least 40 seconds and propagate cancellation when the caller abandons a query.
Authorizations
App key issued from the Flashduty console under Account → APP Keys. Required on every public API call. Keep it secret — it grants the same access as the owning account.
Body
Request for the stable structured query endpoint. It uses the same query fields as the deprecated rows endpoint.
Data source type; must match a configured data source under the tenant. Examples: prometheus, loki, victorialogs, sls, elasticsearch, mysql, postgres, oracle, clickhouse.
Data source name; must match a configured data source under the tenant.
Query expression. Syntax depends on ds_type and is interpreted by the corresponding monit-edge client (PromQL for Prometheus, LogQL for Loki, SQL for SQL sources, etc.).
Optional consistency check. Must equal the authenticated account when supplied; mismatched values are rejected. Business execution always uses the authenticated account.
Look-back offset in seconds applied to point-in-time queries (Prometheus, Loki stats, VictoriaLogs stats). Ignored for raw / detail queries.
Polymorphic key/value extension parameters forwarded verbatim to monit-edge. All values must be strings, and keys are always namespaced by source (e.g. sls.project, loki.type). Validation depends on ds_type: SLS requires sls.project + sls.logstore. Elasticsearch accepts es.type of sql, or omitted — any other value is rejected. Loki and VictoriaLogs accept <source>.type of stats, raw, or omitted; raw additionally requires a time range, either <source>.start + <source>.end or <source>.timespan.value + <source>.timespan.unit (unit one of s, m, h, d). Prometheus and the remaining SQL sources ignore args entirely.
Response
Success
Success response envelope. On every 2xx response, request_id identifies the call (also mirrored in the Flashcat-Request-Id header) and data holds the endpoint-specific payload. Failure responses use a different shape — see ErrorResponse.