Trace Diagnostic Events¶
Floecat emits compact diagnostic events on existing spans so Jaeger stays readable. These events are not durable metrics and should not be used for alerting. They answer "what did this request do?" inside a single sampled trace.
Use this convention:
- Keep one generic RPC event,
floecat.rpc.summary, for cross-cutting request, repository, and storage facts. - Keep domain events, such as
floecat.get_user_objects.summary, for operation-specific phase timings and result counters. - Prefer summary fields over extra spans for cheap in-process phases. Enable detailed store spans only when the generic summary says the bottleneck is inside repository/store work.
Profiles and knobs¶
| Profile / property | Default | Purpose |
|---|---|---|
telemetry.diagnostics.enabled |
true |
Emits compact diagnostic events on current trace spans. |
telemetry.store-spans.enabled |
false |
Emits detailed repository/store child spans. Keep off unless drilling into store internals. |
%dev.telemetry.strict / %test.telemetry.strict |
true |
Fails fast on telemetry contract violations in local/test runs. |
telemetry.strict |
false |
Production default: invalid optional telemetry is dropped/counts, not fatal. |
telemetry-otlp profile |
off | Enables OTLP export to the local collector on localhost:4317. |
telemetry-debug profile |
off | Enables telemetry.store-spans.enabled=true; use alongside telemetry-otlp for store-call traces. |
telemetry-prof profile |
off | Enables profiling endpoints and policy-triggered capture support. |
Typical local trace session:
QUARKUS_PROFILE=telemetry-otlp mvn -pl service quarkus:dev
For repository/store drill-down:
QUARKUS_PROFILE=telemetry-otlp,telemetry-debug mvn -pl service quarkus:dev
Generic RPC summary¶
Event: floecat.rpc.summary
Emitted by the gRPC server interceptor for every RPC. This is the generic place for transport status and cross-cutting repository/store activity. Domain code should not duplicate these fields in its own summary event.
| Field | Meaning |
|---|---|
status |
gRPC status code name, for example OK or INVALID_ARGUMENT. |
success |
true when the RPC closed with Status.OK. |
cancelled |
true when the server listener observed cancellation. |
completed |
true when the request completed normally, or the RPC closed OK. |
request_messages |
Number of request messages observed by the server listener. |
response_messages |
Number of response messages sent by the server call. |
duration_ms |
Wall-clock RPC duration measured by the interceptor. |
store_operations |
Number of repository/store observations recorded during this RPC. |
store_errors |
Number of recorded repository/store observations that closed with error. |
store_ms |
Sum of recorded repository/store observation durations. |
repo_gets |
Count of repository operations classified as point reads. |
repo_lists |
Count of repository operations classified as list/prefix scans. |
repo_counts |
Count of repository count operations. |
repo_writes |
Count of repository create/update/delete/put operations. |
fallbacks |
Count of generic fallback paths taken during the RPC. |
repo_<resource>_<operation>_count |
Per-repository operation count, for example repo_table_get_by_key_count. |
repo_<resource>_<operation>_ms |
Total time for that repository operation family. |
current_snapshot_source |
pointer when the dedicated current-snapshot pointer resolved the snapshot; fallback when the code had to scan latest-by-time. Fallback is read-only: it diagnoses missing/stale pointer state but does not repair state during query reads. |
snapshot_pin_source |
Where the scan snapshot came from. Today query_context means it was already pinned during planning/begin-query. |
storage_authority_source |
Source for storage authority selection. Today load means the resolver listed authorities from the repository. Future values may include cache or direct. |
table_load_ms |
Time spent loading table metadata during scan initialization. |
snapshot_load_ms |
Time spent loading snapshot metadata during scan initialization. |
scan_init_ms |
End-to-end scan initialization time inside Floecat, including table/snapshot load and TableInfo build. |
storage_authority_ms |
Time spent loading storage authorities for server-side file IO properties. |
How to read it:
- If
repo_lists > 0on a warm point lookup, the request is still doing scan-shaped repository work. - If
current_snapshot_source=fallback, the table did not use the O(1) current-snapshot pointer path. Repair should happen through metadata ingestion/reconcile paths, not as a side effect of the read. - If
storage_authority_source=loadandstorage_authority_msis material, storage authority lookup is a candidate for caching or direct lookup. - If
store_msis small butduration_msis large, look at the domain summary or caller-side spans.
Domain summaries¶
floecat.get_user_objects.summary¶
Emitted by GetUserObjects. This is the main planner metadata lookup summary for user relations.
| Field | Meaning |
|---|---|
query_id / correlation_id |
Query and request correlation identifiers. |
candidates |
Number of table-reference candidates requested. |
chunks |
Number of resolution chunks emitted. |
found / not_found |
Candidate resolution result counts. |
total_ms |
End-to-end service time for the operation body. |
resolve_ms |
Total candidate resolution phase. |
normalize_ms |
Input/reference normalization time. |
select_relation_ms |
Time choosing the selected relation/input for each candidate. |
default_catalog_ms |
Time spent resolving default catalog state. |
name_resolve_ms |
Time spent resolving names to graph nodes. |
node_resolve_ms |
Time spent resolving graph nodes to relation metadata. |
base_inject_ms |
Time spent injecting base-table information for view-related outputs. |
pin_collect_ms |
Time spent collecting snapshot pins. |
pin_commit_ms |
Time spent committing snapshot pins to query context. |
pin_ms |
Total pinning time as a convenience field. |
relation_build_ms |
Time building returned relation metadata. |
decoration_ms |
Total decoration time. |
stats_lookup_ms |
Time spent loading stats/decorator inputs. |
decorate_relation_ms / decorate_view_ms |
Relation/view decoration time. |
decorate_columns_ms |
Total column decoration time. |
decorate_column_invoke_ms |
Time invoking column decorators. |
decorate_complete_ms |
Final decoration completion/assembly time. |
hint_persist_ms |
Time persisting engine hints/decorator outputs. |
scheduling_ms |
Time not attributed to measured sub-phases, usually scheduling or queueing around the work. |
decorator_warm_hits |
Number of decoration results served from warm decorator state. |
default_catalog_lookups |
Number of default-catalog lookups. |
name_cache_hits / name_cache_misses |
Request-local name-resolution cache behavior. |
node_cache_hits / node_cache_misses |
Request-local node-resolution cache behavior. |
name_cache_entries / node_cache_entries / relation_cache_entries |
Final request-local cache sizes. |
outcome |
completed, failed, or cancellation-specific outcome where applicable. |
floecat.flight.summary¶
Emitted by the Arrow Flight system-table stream worker.
| Field | Meaning |
|---|---|
query_id / correlation_id |
Query and request correlation identifiers. |
system_table |
System table being streamed. |
outcome |
completed, cancelled, or failed. |
cancelled |
Whether stream cancellation was observed. |
rows |
Rows serialized into Arrow batches. |
batches |
Arrow record batches produced. |
empty_stream |
true when the stream completed without a data batch. |
total_ms |
End-to-end worker stream time. |
allocator_ms |
Time creating the Arrow allocator. |
build_plan_ms |
Time building the scanner/serialization plan. |
serialize_ms |
Time serializing rows into Arrow batches. |
sink_copy_ms |
Time copying completed vectors/batches into the Flight sink path. |
sink_put_next_ms |
Time spent in Flight putNext. |
sink_complete_ms |
Time spent completing the Flight stream. |
cleanup_ms |
Cleanup time after streaming. |
scheduling_ms |
Residual time outside measured sub-phases. |
floecat.system_scan.summary¶
Emitted by ScanSystemTable.
| Field | Meaning |
|---|---|
query_id / correlation_id |
Query and request correlation identifiers. |
table_id |
Requested system-table resource ID. |
format |
Response format selected by the request, such as Arrow vs row chunks. |
schema_columns |
Number of columns in the scanner schema. |
required_columns |
Number of projected columns requested. |
predicates |
Number of predicates passed to the scanner. |
arrow_requested |
Whether the Arrow path was requested. |
arrow_plan_ms |
Time planning Arrow output. Present on Arrow path. |
arrow_sink_ms |
Time sinking Arrow output. Present on Arrow path. |
row_scan_ms |
Time scanning/filtering/projecting row output. Present on row path. |
rows_emitted |
Row chunks emitted on row path. |
error |
Exception class name on failure. |
outcome |
completed, cancelled, or failed. |
total_ms |
End-to-end service time for the system scan. |
floecat.get_system_objects.summary¶
Emitted by GetSystemObjects.
| Field | Meaning |
|---|---|
engine_kind / engine_version |
Engine identity from the request context. |
registry_bytes |
Serialized registry payload size. |
response_bytes |
Serialized response size. |
error |
Exception class name on failure. |
outcome |
completed or failed. |
total_ms |
End-to-end service time. |
Query input and describe summaries¶
Events:
floecat.query_input_metadata.summaryfloecat.describe_inputs.summary
These summarize input resolution, schema assembly, expansion metadata, obligations, and snapshot pins.
| Field | Meaning |
|---|---|
query_id / correlation_id |
Query and request correlation identifiers, when available. |
inputs |
Number of requested inputs. |
resolved_inputs |
Number of inputs resolved to relation metadata. |
snapshot_pins |
Number of snapshot pins produced. |
schemas |
Number of schemas returned by DescribeInputs. |
expansion_bytes |
Serialized expansion-map size. |
obligations |
Governance obligations produced. |
obligation_bytes |
Serialized governance obligation payload size. |
error |
Exception class name on failure. |
outcome |
completed or failed. |
total_ms |
End-to-end service time. |
Planner stats summaries¶
Events:
floecat.planner_target_stats.summaryfloecat.planner_constraints.summary
These summarize planner stats/constraint bundle RPCs.
| Field | Meaning |
|---|---|
query_id / correlation_id |
Query and request correlation identifiers. |
include_constraints |
Whether constraints were requested with target stats. |
requested_tables_raw |
Table entries in the raw request. |
requested_tables |
Normalized requested table count. |
requested_targets |
Requested stats target count. |
returned_targets / returned_tables |
Returned stats/constraint counts. |
not_found_targets / not_found_tables |
Missing target/table counts. |
error_targets / error_tables |
Per-target/table errors returned. |
max_results_per_chunk |
Server chunking limit. |
chunks |
Response chunks emitted on streaming paths. |
messages |
Response messages emitted on streaming paths. |
stream_ms |
Time spent streaming after setup. |
error |
Exception class name on failure. |
outcome |
completed, cancelled, or failed. |
total_ms |
End-to-end service time. |
floecat.metagraph.name_resolver.summary¶
Emitted by name-resolution helpers around metagraph lookups.
| Field | Meaning |
|---|---|
correlation_id / account_id |
Request/account identifiers. |
found |
Whether a point lookup found a result. |
result_count |
Number of results for list-style lookups. |
error |
Exception class name on failure. |
outcome |
completed or failed. |
total_ms |
End-to-end resolver call time. |
Design notes¶
- Summary event fields are intentionally low-cardinality. Do not add table names, namespace names, SQL strings, object URIs, or user-provided text.
- IDs such as
query_id,correlation_id, andtable_idare acceptable because they are trace diagnostics, not metric tags. - If a field is generic across RPCs, add it to
floecat.rpc.summaryvia the shared aggregator. - If a field only makes sense inside one operation, add it to that operation's domain summary.
- If a phase performs network or storage I/O and frequently dominates latency, prefer a real span or the debug store-span path. For cheap CPU-only phases, prefer a timing field on the summary.