Commit Graph
2831 Commits
Author SHA1 Message Date
Sai NikhilandYashodhan Joshi a8b22a2da2 fix: show usage chart on license page (#10692)
Signed-off-by: Yashodhan Joshi <yjdoc2@gmail.com>
Co-authored-by: Yashodhan Joshi <yjdoc2@gmail.com>
2026-03-05 08:05:26 +05:30
Huaijin bcf0019bd2 chore: update new model and pricing (#10745) 2026-03-04 23:11:47 +08:00
Hengfei Yang 289d806598 feat: add support for dynamic tracing resource attributes (#10731) 2026-03-04 20:29:18 +08:00
418ccaa01e fix: llm evaluations (#10612)
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-03-04 17:55:01 +05:30
Harsh MahajanandHarsh Mahajan ef369e595d chore: upgrading packaages (only non-core packages) (#10726)
Co-authored-by: Harsh Mahajan <undefined@users.noreply.github.com>
2026-03-04 05:45:36 +05:30
Hengfei Yang d961b34f00 refactor: standardize sort order handling in trace queries (#10725) 2026-03-03 12:11:50 +08:00
Hengfei Yang de338650bb chore: enhance search inspector API (#10720) 2026-03-03 09:35:38 +08:00
ByteBaker 877ffa3926 feat: add notification support for incidents (#10715) 2026-03-02 19:46:48 +08:00
Huaijin 9944f02031 chore: upgrade datafusion to 52.2.0 and vortex to 0.60.0 (#10706) 2026-03-02 16:06:21 +08:00
Subhra264 90a279134b feat: introduce rbac for logs patterns, logs insights and cache refresh (#10662) 2026-03-01 16:20:10 +08:00
Hengfei Yang 74c2d914e3 fix: router with base_uri (#10703)
fixed #10524
2026-03-01 13:38:59 +08:00
Bhargavandhengfeiyang 1eacfd6121 fix: added datatype icon on logs page field list (#10697)
Co-authored-by: hengfeiyang <hengfei.yang@gmail.com>
2026-02-28 16:19:55 +05:30
udev 320003be9f fix: change visibility for data retention usage (#10691) 2026-02-27 23:19:09 +05:30
Hengfei Yang d8f219d85e feat: add keyword field to values_stream API (#10690) 2026-02-27 20:57:48 +08:00
ByteBaker 710657a756 chore(incidents): UX improvements and alert grouping fix (#10688) 2026-02-27 20:36:58 +08:00
Omkar Kesarkhane fe7d9f12a9 fix: Traces list UI improvements (#10670) 2026-02-27 19:32:34 +08:00
Bhargav 72b90a93e3 fix: Feat nlp mode (#10638) 2026-02-27 18:26:36 +08:00
Hengfei Yang 699d7b8c37 fix: avoid conflict error when locker bucket exists with different max_age (#10687) 2026-02-27 17:59:45 +08:00
Hengfei Yang 208ffdb11b fix: account for existing cache size when computing ZO_DISK_CACHE_MAX_SIZE default (#10679) 2026-02-27 16:46:35 +08:00
Huaijin b170136e4b fix: profiling file path (#10681) 2026-02-27 15:02:35 +08:00
Hengfei Yang a513d51eb4 feat: support order by duration for traces (#10676) 2026-02-27 15:02:00 +08:00
Subhra264 74ad511e83 fix: alert manager should use max worker num as mpsc capacity (#10590) (#10655) 2026-02-26 22:35:08 +08:00
Hengfei Yang 75eeff04d9 feat: add BasicAuth security scheme to OpenAPI router (#10673) 2026-02-26 22:34:37 +08:00
Hengfei Yang 6dcbb343aa perf: update NATS configuration for history and locking (#10671) 2026-02-26 19:48:32 +08:00
ByteBaker 57d8f58a41 feat(service-graph): prev-slot baseline latency for edge coloring
Backend:
- Add `baseline_p50/p95/p99_latency_ns: Option<u64>` to `ServiceEdge`; omitted when None
- `get_current_topology` queries the previous time slot (same duration, one slot older)
  serially after the current-window query, aggregates per-edge weighted-average latency,
  and attaches the result as baseline fields on each edge
- `aggregate_baselines` computes `SUM(pXX * requests) / SUM(requests)` per client→server pair
- `EdgeTrendResponse` drops `p50_avg/p95_avg/p99_avg`; history endpoint now returns raw data points only
- Update `build_topology` signature and all call sites (incidents.rs) to accept baselines map
- Reduce duplicate topology API calls on page load by adding a loading guard

Frontend:
- Populate `edgeBaselines` from topology response `baseline_p95_latency_ns` instead of from history endpoint
- Edge color in graph and tree modes uses baseline ratio (>2× = light red, >1.5× = orange, within = green),
  falling back to absolute p95 thresholds when no baseline is available
- Edge color is now latency-only; error rate coloring is for nodes only
2026-02-26 17:07:34 +05:30
ByteBaker 75a56bf496 feat: service graph edge latency trend & interaction overhaul
Backend:
- New enterprise-only endpoint: GET /{org_id}/traces/service_graph/edge/history
- Returns time-series P50/P95/P99 latency with request-count-weighted baselines
- OSS returns 403; empty result returned gracefully if stream doesn't exist

Frontend — Interaction Model:
- Click-to-panel replaced with hover tooltip for edge interactions
- Tooltip shows compact stats (request count, error rate, latencies) on hover
- "Show trend" button fetches and renders a live P50/P95/P99 sparkline inline
- Tooltip stays open when moused-over; results cached per edge key
- Edge panel component retained, now includes its own latency trend chart section

Frontend — Edge Coloring:
- Edges now colored relative to 24h weighted-average P95 baseline when available
- Falls back to absolute threshold coloring when no baseline data exists

Frontend — Chart Rendering:
- Switched to SVG render mode for sharper output
- devicePixelRatio passed to chart init to fix blurry Retina display rendering
- View type switch no longer recreates chart (no chartKey increment); prevents replay of expand animation
- Tooltip handlers re-registered after every view switch for both tree and graph modes

Tests:
- Updated to reflect removed edge panel flow
- chartKey stability on view switch now asserted (was: increment expected)
2026-02-26 17:07:34 +05:30
Hengfei Yang 12020ed9a1 fix: enable local mode for enrichment table requests (#10666) 2026-02-26 14:22:27 +08:00
0ee7535da7 feat: dashboard time range available at panel level (#10288)
Design at:
https://github.com/openobserve/designs/blob/main/dashboards/panel-level-time-range/design.md

### **PR Type**
Enhancement, Documentation


___

### **Description**
- Add defaults for panel-level time settings in front-end

- Extend backend PanelConfig with time range fields

- Provide a comprehensive implementation guide document


___



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>useDashboardPanel.ts</strong><dd><code>Add default
panel time settings fields</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/composables/useDashboardPanel.ts

<ul><li>Added <code>allow_panel_time</code> default (false)<br> <li>
Introduced <code>panel_time_mode</code> default ("individual")<br> <li>
Initialized <code>panel_time_range</code> to null</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10288/files#diff-fbba1700750053b9eaf38ddd30dab84531bc44131c795ebb713811e4930cd7cb">+3/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>mod.rs</strong><dd><code>Extend PanelConfig with time
fields</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

src/config/src/meta/dashboards/v8/mod.rs

<ul><li>Added <code>allow_panel_time: Option<bool></code> to
PanelConfig<br> <li> Added <code>panel_time_mode: Option<String></code>
field<br> <li> Added <code>panel_time_range:
Option<DateTimeOptions></code> field</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10288/files#diff-cbf3fe971525ba58892400391dfd7dac7e43d6049d6b4f5a9840ad104ebc5e08">+12/-0</a>&nbsp;
&nbsp; </td>

</tr>
</table></td></tr><tr><td><strong>Documentation</strong></td><td><table>
<tr>
  <td>
    <details>

<summary><strong>PANEL_TIME_RANGE_IMPLEMENTATION.md</strong><dd><code>Add
panel time range implementation guide</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/dashboards/PANEL_TIME_RANGE_IMPLEMENTATION.md

<ul><li>Added detailed implementation guide (v3.0)<br> <li> Outlined
requirements, UI, URL sync, testing<br> <li> Documented data flow, edge
cases, and timeline</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10288/files#diff-39b68cc51ce3089b41061b75e18c45448659cab57702dd39b01a9aad63598345">+2718/-0</a></td>

</tr>
</table></td></tr></tr></tbody></table>

</details>

___

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: ktx-akshay <akshay.patil@kiara.tech>
2026-02-26 00:58:02 +05:30
ktx-vaidehiandYashodhan Joshi ae6d73e815 feat: dashboard stream and field support from variables (#10454)
Design at:
https://github.com/openobserve/designs/blob/main/dashboards/variables-stream-field-support/design.md
### **PR Type**
Enhancement, Tests


___

### **Description**
- Add stream/field variable dependency parsing

- Deduplicate and validate dependency graph edges

- Resolve stream/field variables at runtime

- Update variable UI with autocomplete


___

### Diagram Walkthrough


```mermaid
flowchart LR
  ui["AddSettingVariable.vue (configure stream/field)"]
  runtime["VariablesValueSelector.vue (resolve & query)"]
  deps["variablesDependencyUtils.ts (dependency graphs)"]
  tests["variablesDependencyUtils.spec.ts (new coverage)"]

  ui -- "allows $var in stream/field" --> runtime
  ui -- "cycle detection messaging" --> deps
  runtime -- "uses resolved stream/field" --> deps
  tests -- "asserts stream/field deps & cycles" --> deps
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Tests</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>variablesDependencyUtils.spec.ts</strong><dd><code>Add
tests for stream/field dependencies</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/utils/dashboard/variables/variablesDependencyUtils.spec.ts

<ul><li>Add cases for <code>query_data.stream</code> dependencies<br>
<li> Add cases for <code>query_data.field</code> dependencies<br> <li>
Validate deduping and embedded variables<br> <li> Add cycle detection
scenarios via stream/field</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10454/files#diff-1a8fd83eb7a8b0c906e668e7e4120a40f7b9853d5bfb485a7c569ff980e4a780">+313/-0</a>&nbsp;
</td>

</tr>
</table></td></tr><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>variablesDependencyUtils.ts</strong><dd><code>Expand
dependency detection to stream/field</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>

web/src/utils/dashboard/variables/variablesDependencyUtils.ts

<ul><li>Collect deps from stream, field, filters<br> <li> Use
<code>Set</code> to prevent duplicate parents<br> <li> Extend
<code>query_data</code> typing with
<code>stream</code>/<code>field</code><br> <li> Update scoped graph with
deduped edges</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10454/files#diff-58a77094b6971705fb63bde853a79e17b4e2e85240694c4017aada1d01cf1fb4">+78/-31</a>&nbsp;
</td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>VariablesValueSelector.vue</strong><dd><code>Resolve
stream/field variables before querying</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/dashboards/VariablesValueSelector.vue

<ul><li>Add <code>resolveVariableValue()</code> for <code>$var</code>
substitution<br> <li> Resolve
<code>stream_name</code>/<code>fields</code> in request payload<br> <li>
Match response hits using resolved field name<br> <li> Add debug/error
console logging for resolution</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10454/files#diff-5c6e3bcb87cb64f25bf8157a541604b7a4904c1282acf662cab5d76a5be6bd56">+55/-3</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>AddSettingVariable.vue</strong><dd><code>Allow
variable-based stream and field selection</code>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/dashboards/settings/AddSettingVariable.vue

<ul><li>Replace stream/field <code>q-select</code> with
<code>CommonAutoComplete</code><br> <li> Merge variable options into
stream/field option lists<br> <li> Skip schema fetch when stream
contains <code>$</code><br> <li> Improve cycle error message and
styling</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10454/files#diff-e622f54c1f7629ee67d29ed2fc87008d07eb9246767a05435cc42c3c17ce459a">+208/-52</a></td>

</tr>
</table></td></tr></tr></tbody></table>

</details>

___

---------

Signed-off-by: Yashodhan Joshi <yjdoc2@gmail.com>
Co-authored-by: Yashodhan Joshi <yjdoc2@gmail.com>
2026-02-25 23:49:40 +05:30
Hengfei Yang fb0ca4c0f3 fix: sync PostgreSQL sequences after bulk migration with explicit IDs (#10656) 2026-02-25 23:46:19 +08:00
Hengfei Yang ec1896d456 fix: remove stream file retention ENVs, always use hourly (#10654) 2026-02-25 21:09:07 +08:00
Huaijin 9136398d3a fix: do not move file when db not able to write (#10651) 2026-02-25 21:08:47 +08:00
Hengfei Yang 8ddc489a0f refactor: update schema inference functions to include stream name (#10629) 2026-02-25 17:11:43 +08:00
Huaijin fd347c8e63 fix: export tracing to _meta org when ZO_SEARCH_INSPECTOR_ENABLED enable (#10650) 2026-02-25 16:06:01 +08:00
ByteBaker f196ac62e9 fix: clippy & fmt 2026-02-25 13:34:08 +05:30
ByteBaker 50117dc279 fix(incidents): race conditions, input validation, and TitleChanged event
- Wrap append() and record_alert() in DB transactions to fix
  read-modify-write race conditions on concurrent alert correlation
- Add length/blank validation on comment endpoint (max 10,000 chars)
- Guard update_severity from emitting SeverityOverride on no-op changes
- Add TitleChanged event type with from/to/user_id fields, wire into
  update_title, render in activity timeline
2026-02-25 13:34:08 +05:30
ByteBaker fa402819a9 feat(incidents): add event timeline system with Activity tab
Incident Events:
- New `incident_events` table (JSONB array per incident, PK on `(org_id, incident_id)`)
- `IncidentEvent` struct with 12 typed variants: `Created`, `Alert`, `SeverityUpgrade`,
  `SeverityOverride`, `Acknowledged`, `Resolved`, `Reopened`, `DimensionsUpgraded`,
  `AssignmentChanged`, `Comment`, `AIAnalysisBegin`, `AIAnalysisComplete`
- Constructors on `IncidentEvent` (e.g. `::alert()`, `::resolved()`, `::comment()`)
- `increment_alert(&mut self)` for compaction: same alert only compacts if it's the
  last event in the array, preserving interleaving (A x5, B x3, A x2)
- Severity fields use `IncidentSeverity` enum, not strings

Backend:
- Migration: `m20260214_000001_create_incident_events_table`
- DB ops: `init`, `get`, `append`, `record_alert` (with compaction), `delete`
- Emit events at all mutation points: incident creation, alert correlation,
  dimensions upgrade, status change, severity change, auto-resolve
- `user_id` passed from HTTP auth headers through to all events
- `auto_resolve_stale()` now returns resolved IDs for event emission
- API: `GET /v2/{org_id}/alerts/incidents/{id}/events`
- API: `POST /v2/{org_id}/alerts/incidents/{id}/events/comment`

Frontend:
- `IncidentTimeline.vue`: vertical timeline with icon/color per event type,
  alert compaction display, comment input, refresh button
- Activity tab added to `IncidentDetailDrawer.vue`
- `incidents.ts`: `getEvents()` and `postComment()` API methods
2026-02-25 13:34:08 +05:30
ByteBaker fa082eee82 fix(incidents): remove trace_id as correlation method
trace_id was the highest-priority correlator, creating a separate
incident per unique trace ID. A failing service with many traces
caused incident explosion instead of one unified incident.

Backend:
- Remove trace_id param from correlate_alert_to_incident()
- Remove TraceBased variant from CorrelationReason enum
- Remove TRACE: prefix from KeyType::classify()
- Remove trace_id extraction from scheduler handler
- Clean up 2 manual trigger call sites in alert.rs

Frontend:
- Remove trace_based from correlation reason types and UI
- Remove extractTraceId utility and its tests
- Remove trace-based translations from en.json

Correlation now uses only Service Discovery keys and semantic
dimension hashing. trace_id storage can be added separately.
2026-02-25 13:34:08 +05:30
Maxime Grenu 5503c0171d fix(search): replace unwrap() panics with safe error handling in VRL apply-over-hits path (#10573) 2026-02-25 09:02:23 +08:00
Douman d97a7b74cd fix: Make sure http router is wrapped into base uri (#10592) 2026-02-24 20:58:21 +08:00
Mitesh Sahu ab31ad95a8 fix: resolve multi-bucket storage permission error (#10552) 2026-02-24 15:36:00 +08:00
Huaijin 7cfb54c8de fix: add option to control batch size (#10520) 2026-02-24 13:38:37 +08:00
Zhao.wei 8d21db39aa fix: treat large numbers as strings (#10627) 2026-02-24 12:35:26 +08:00
Subhra264 1b679d5b28 fix: don't save saved view records with empty text as the value (#10495) 2026-02-23 11:52:25 +08:00
Subhra264 19226edd7f fix: super cluster ofga sync issue (#10460) 2026-02-23 11:51:54 +08:00
udev dff6494b47 fix: ai config (#10589) 2026-02-23 11:36:10 +08:00
Ashish KolheandClaude Opus 4.6 ca5c3bcde5 fix: vortex feature flag (#10609)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-22 19:30:48 +05:30
Loakesh IndiranandClaude Sonnet 4.6 16664bf507 fix: correct hit truncation limit in partitioned streaming search (#10605)
When a query with LIMIT spans multiple partitions, the truncation at the
limit boundary used `req_size` (the total limit, e.g. 230) as the
truncation target instead of the remaining slots for the current
partition (`req_size - hits_already_returned`).

For example with limit=230:
- Partition 0: 43 hits returned → accumulated = 43
- Partition 1: 198 hits returned by DB, but only 187 slots remain (230 -
43). `truncate(230)` was a no-op since 198 < 230, so all 198 hits passed
through → total = 241 (exceeds limit by 11)

Fix: compute `allowed = req_size - (curr_res_size - total_hits)` which
is the number of remaining slots before this partition's hits are added,
then truncate to that value.

Fixes Issues:
- https://github.com/openobserve/openobserve/issues/10486
- https://github.com/openobserve/openobserve/issues/10602

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-21 22:20:08 +05:30
Ashish Kolhe 7647247399 fix: traces api to use streaming (#10593) 2026-02-21 09:18:22 +05:30
bd6b654038 fix: add stringSeparated output format for remote pipeline (main) (#10555)
cherry pick https://github.com/openobserve/openobserve/pull/10540 from
v40 to main

---------

Signed-off-by: Yashodhan Joshi <yjdoc2@gmail.com>
Co-authored-by: Yashodhan Joshi <yjdoc2@gmail.com>
Co-authored-by: Bhargav <BJP232004@GMAIL.COM>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-02-19 15:20:56 +05:30