Ashish Kolhe
ec0dc67d5a
fix: for prometheus metadata api ( #10934 )
2026-03-17 15:25:35 +05:30
Subhra264
3760b55cf9
fix: multi-window dashboard should support vrl functions ( #10860 )
...
Currently dashboard with Multi-window set up does not really run the
result array vrl functions. This pr adds support for vrl function when
`/_search_multi_stream` is used. When `per_query_response` is true, and
the vrl function is result array vrl function, the function is applied
on the whole combined response (including both the time windows). The
input of the result array vrl function becomes a 2d array where each
child array represent a time window.
Otherwise, if `per_query_response` is false, or the vrl function is not
result array vrl function, then the function is applied individually on
every result of every time-window queries.
2026-03-16 13:04:28 +05:30
udev and Harsh Mahajan
32fdd60b2d
fix: assistant issues ( #10893 )
...
- **require confirmation to update_stream_settings**
- **fix: adding query param into doc**
- ** fix: partial text rendering and traces search**
---------
Co-authored-by: Harsh Mahajan <007harshmahajan@gmail.com >
2026-03-13 17:25:50 +05:30
Hengfei Yang
9e7336897e
fix: extract auth for ratelimit ( #10887 )
2026-03-13 15:21:31 +08:00
Sai Nikhil
d2861433fa
fix: search inspector UI ( #10749 )
2026-03-13 09:57:29 +08:00
udev
a1ba8b1b71
feat: Ai metering for cloud ( #10824 )
2026-03-13 00:57:31 +05:30
Hengfei Yang
76c4f5c423
fix: trace stream api ( #10880 )
2026-03-12 22:38:43 +08:00
Subhra264
31d1ad6a23
fix: Add Alert history datepicker and consider max query range set for triggers stream in the organizations ( #10796 )
2026-03-12 10:28:16 +08:00
Loakesh Indiran
b82271f70b
feat: add anomaly detection ( #10538 )
2026-03-11 10:25:46 +08:00
udev
876c6b2686
fix: tool calls for get schema and navigation button ( #10801 )
2026-03-10 13:23:43 +08:00
ByteBaker
5274c7368b
feat(incidents): RCA reanalysis — delta analysis, in-flight tracking, usage tracking ( #10788 )
2026-03-09 18:40:46 +08:00
e9c39a4295
feat: cross linking support for dashboards and logs page ( #10652 )
...
Design at:
https://github.com/openobserve/designs/tree/main/cross-linking
---------
Co-authored-by: loaki07 <rustyloaki@gmail.com >
Co-authored-by: Loakesh Indiran <66478092+Loaki07@users.noreply.github.com >
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-03-05 16:17:31 +05:30
Sai Nikhil and Yashodhan 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
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
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
Subhra264
90a279134b
feat: introduce rbac for logs patterns, logs insights and cache refresh ( #10662 )
2026-03-01 16:20:10 +08:00
Hengfei Yang
d8f219d85e
feat: add keyword field to values_stream API ( #10690 )
2026-02-27 20:57:48 +08:00
Omkar Kesarkhane
fe7d9f12a9
fix: Traces list UI improvements ( #10670 )
2026-02-27 19:32:34 +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
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
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
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
udev
dff6494b47
fix: ai config ( #10589 )
2026-02-23 11:36:10 +08:00
Ashish Kolhe
7647247399
fix: traces api to use streaming ( #10593 )
2026-02-21 09:18:22 +05:30
udev
f59382dea1
feat: navigation for o2 assistant ( #10564 )
...
- **improve dashbaord tool prompt**
- **fix: pipeline create handler to return a pipeline ID and name**
- **feat: navigation event handler, button rendering**
2026-02-18 21:46:21 +05:30
Subhra264
13d193b4aa
fix: alert destination test button should call destination test api ( #10529 )
...
Currently, on the UI when the test destination button is clicked for a
prebuilt email destination, it does not do anything at all. Instead, it
should call the test destination api. Also, this destination api does
not handle email destination testing, this pr fixes this as well.
2026-02-17 18:33:38 +05:30
Ashish Kolhe
e9785af1f0
fix: ai chat telemetry ( #10546 )
2026-02-17 17:37:59 +05:30
dd8d3ffa14
fix: add alert revamp ( #10470 )
...
### **PR Type**
Enhancement, Bug fix, Tests
___
### **Description**
- Add HAVING tree to `result_schema` responses
- Add extractor logic and extensive tests
- Revamp alert preview charts for SQL/PromQL
- Show schema-driven threshold labels and context
- Allow env override for preview time range
___
### Diagram Walkthrough
```mermaid
flowchart LR
uiSettings["AlertSettings.vue threshold UI"] -->|"calls"| apiSchema["/result_schema API"]
apiSchema -->|"returns group_by + having"| dfExtractor["DataFusion plan visitor"]
dfExtractor -->|"builds"| havingTree["HavingNode logical tree"]
uiPreview["PreviewAlert.vue chart + evaluation"] -->|"uses"| apiSchema
uiPreview -->|"renders via"| panelRenderer["PanelSchemaRenderer"]
panelRenderer -->|"options merged"| chartOptions["convertSQLData custom_chart_options"]
envCfg["ZO_ALERT_PREVIEW_TIMERANGE_MINUTES"] -->|"drives"| uiPreview
```
<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><details><summary>13
files</summary><table>
<tr>
<td><strong>alertSummaryGenerator.ts</strong><dd><code>Reorder summary,
improve realtime wording</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10470/files#diff-a4464ad7df3ac3afdca4e6fc583122d701bace10e3a2daf083cb6c902565b20f ">+28/-12</a>
</td>
</tr>
<tr>
<td><strong>convertSQLData.ts</strong><dd><code>Merge per-panel custom
chart options</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10470/files#diff-88c0e865040a20b2c8bb7d77e7f6bd187a5b07c1645c120223bc9d59603752c3 ">+23/-0</a>
</td>
</tr>
<tr>
<td><strong>projections.rs</strong><dd><code>Extract top-level HAVING as
structured tree</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10470/files#diff-7a0420d3649da44b80be36d7f1043d6ff81d88395c961266882c3c700f7edff7 ">+570/-3</a>
</td>
</tr>
<tr>
<td><strong>search.rs</strong><dd><code>Add `HavingNode` and
`LogicalOperator` schema</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10470/files#diff-373e83a31e5bbc82fba05d7ae274b0dbd624ed748272232cf7eb8b8c3b2f3afc ">+26/-0</a>
</td>
</tr>
<tr>
<td><strong>mod.rs</strong><dd><code>Expose HAVING schema and preview
config</code>
</dd></td>
<td><a href=""></a></td>
</tr>
<tr>
<td><strong>AlertSettings.vue</strong><dd><code>Schema-aware threshold
UI and i18n tooltips</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10470/files#diff-1d5bfd6a1ea672884193649b1271d751d6f3b8ec84af759071c9bfd169a8ab28 ">+357/-405</a></td>
</tr>
<tr>
<td><strong>PreviewAlert.vue</strong><dd><code>SQL/PromQL preview
rendering and robust evaluation</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10470/files#diff-760f5f0a261910f17eb167f81802e8a52477b99a83d2d7fc1aeefc7185801795 ">+684/-53</a></td>
</tr>
<tr>
<td><strong>AlertList.vue</strong><dd><code>Replace details drawer with
history dialog</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10470/files#diff-be3e41b823e163b226ffc270d95cc4981e59c600851e4e0d10ee5e4ee994ac8e ">+39/-176</a></td>
</tr>
<tr>
<td><strong>AddAlert.vue</strong><dd><code>Alert wizard integration
updates for preview</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10470/files#diff-7b426bb23e9ed0250c3877d6d97b099c42b2d20e22ddf4459915381b2233a0a8 ">+148/-144</a></td>
</tr>
<tr>
<td><strong>AlertHistoryDrawer.vue</strong><dd><code>New reusable alert
details/history drawer logic</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10470/files#diff-895e1bf3f8edac33d414f99c6c88bbae1098edbadf6d28e6f82a29033ed17ac0 ">+384/-298</a></td>
</tr>
<tr>
<td><strong>AlertSummary.vue</strong><dd><code>Align UI summary
rendering with generator output</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10470/files#diff-c22aa1c5934b763f1d4a5a61a7e810b6bcb1d60b76b64c61cb3ce89dc0a04499 ">+5/-5</a>
</td>
</tr>
<tr>
<td><strong>AlertHistory.vue</strong><dd><code>Alert history view
updates to new drawer flow</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10470/files#diff-1efacbab3b15dacfc79063c799c30b04bf3b75415055f892203e8cf1cb414450 ">+1/-1</a>
</td>
</tr>
<tr>
<td><strong>FilterGroup.vue</strong><dd><code>Filter builder tweaks
supporting alert wizard changes</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10470/files#diff-8d5a73bea3aa0b5c86d48cda4a61ee3e30f27797ac2a5add1ee8bd66c75bef23 ">+7/-5</a>
</td>
</tr>
</table></details></td></tr><tr><td><strong>Configuration
changes</strong></td><td><details><summary>1 files</summary><table>
<tr>
<td><strong>config.rs</strong><dd><code>Add env override for preview
time range</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10470/files#diff-9aeee4a74c0520daa40f9b81c7016f5b6b3254375b968dd7598e745630980d62 ">+6/-0</a>
</td>
</tr>
</table></details></td></tr><tr><td><strong>Bug
fix</strong></td><td><details><summary>4 files</summary><table>
<tr>
<td><strong>mod.rs</strong><dd><code>Fix PromQL evaluation using
operator semantics</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10470/files#diff-ba9b65130898444f7815fd6068bdb0dc590612f74cc893f79d91b0afc44cc851 ">+29/-23</a>
</td>
</tr>
<tr>
<td><strong>alert.rs</strong><dd><code>Remove custom aggregation
auto-threshold override</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10470/files#diff-574be3504bf4d855c65fd3d7a10797a970237ff552edac4962b474b3983e094e ">+1/-7</a>
</td>
</tr>
<tr>
<td><strong>AlertWizardRightColumn.vue</strong><dd><code>Wizard right
column rerender/placement adjustments</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10470/files#diff-f599a1960d1ac37e352854ad368d23e080b3cec2b217df22f40d0e15a4db6986 ">+158/-19</a></td>
</tr>
<tr>
<td><strong>{QueryConfig.vue,CompareWithPast.vue,Advanced.vue}</strong><dd><code>Wizard
step wiring and preview refresh fixes</code>
</dd></td>
<td><a href=""></a></td>
</tr>
</table></details></td></tr><tr><td><strong>Documentation</strong></td><td><details><summary>1
files</summary><table>
<tr>
<td><strong>*.json</strong><dd><code>Add/update alert revamp translation
strings</code>
</dd></td>
<td><a href=""></a></td>
</tr>
</table></details></td></tr><tr><td><strong>Additional
files</strong></td><td><details><summary>16 files</summary><table>
<tr>
<td><strong>mod.rs</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10470/files#diff-96630a0dbb6dd7b2b0248fa325c7c7041ce31340c32826675a4a70772e9d29f6 ">+1/-0</a>
</td>
</tr>
<tr>
<td><strong>mod.rs</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10470/files#diff-ca09c9c9b020049bdbc3382c466bfcca80daac92e98760d9a9a76172abf34049 ">+2/-0</a>
</td>
</tr>
<tr>
<td><strong>Advanced.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10470/files#diff-eae849f0bf6c8868f5640ce1d74862284d8e8a5330e5046c0c437e6672f4f676 ">+4/-5</a>
</td>
</tr>
<tr>
<td><strong>CompareWithPast.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10470/files#diff-6606848e30caef2cda13d65cb30d6590205556259e7e6daf39cada825502d55b ">+27/-27</a>
</td>
</tr>
<tr>
<td><strong>QueryConfig.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10470/files#diff-7273c8de49b8ebf706d7bee5b275c75818c0493f41c73f00c55efe667cbd00d9 ">+432/-10</a></td>
</tr>
<tr>
<td><strong>de.json</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10470/files#diff-78f24ecb2dbcfc38fdf3ec22b2559a5b40d236ea689d1c55f5d3e87168310264 ">+97/-2</a>
</td>
</tr>
<tr>
<td><strong>en.json</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10470/files#diff-892aa3d75ab6e129ef9116aa21bec1b9a15ba69ce5366d2a19128078c690d824 ">+99/-2</a>
</td>
</tr>
<tr>
<td><strong>es.json</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10470/files#diff-ac2a2167b8b973e3f776f9fe3b43bef4576470d8ad33f3d7cfaff6edff0e5778 ">+97/-2</a>
</td>
</tr>
<tr>
<td><strong>fr.json</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10470/files#diff-db80e762b88ddf183820c050cdc6b215e6b02b365b5e73f5152af46b0d26f1a2 ">+97/-2</a>
</td>
</tr>
<tr>
<td><strong>it.json</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10470/files#diff-2de78074a5f887afddce60d694ead9322e6ab223eb70251c13819f3028bdc70d ">+97/-2</a>
</td>
</tr>
<tr>
<td><strong>ja.json</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10470/files#diff-092e49c5f9fbc1b539ab9c2866d108d0ce1d314022b4c294eb4611b285e7bbd3 ">+97/-2</a>
</td>
</tr>
<tr>
<td><strong>ko.json</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10470/files#diff-50e27ca1b4825a5026f3a251bfcf79c97cab07cfade2ebd512d332453d707c48 ">+97/-2</a>
</td>
</tr>
<tr>
<td><strong>nl.json</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10470/files#diff-a1706021687ae5d8a1c006c49eab3946174fecd895f9b70a89c2e76d97250906 ">+97/-2</a>
</td>
</tr>
<tr>
<td><strong>pt.json</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10470/files#diff-38e804f64cb5e0e451849fc84e9b46e53c954a4a4263d51c18665ad45f4b4815 ">+97/-2</a>
</td>
</tr>
<tr>
<td><strong>tr.json</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10470/files#diff-6f0f131e9e2591480c4c5d1eaffc72d02dc31cbd8d3f90d8f012f08cabac8818 ">+97/-2</a>
</td>
</tr>
<tr>
<td><strong>zh.json</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10470/files#diff-8818055db58f83230aeea4ebfd4cec31d924e8c47b6f91298e356959ab25339e ">+97/-2</a>
</td>
</tr>
</table></details></td></tr></tr></tbody></table>
</details>
___
### E2E Tests Added
| # | Spec File | Test Name |
|---|-----------|-----------|
| 1 | `alerts-scheduled-features.spec.js` | Alert details dialog opens
with history and action buttons work |
| 2 | `alerts-scheduled-features.spec.js` | Create scheduled alert with
aggregation via Builder |
| 3 | `alerts-scheduled-features.spec.js` | Create scheduled alert with
PromQL query |
| 4 | `alerts-scheduled-features.spec.js` | SQL mode preview renders
chart |
| 5 | `alerts-scheduled-features.spec.js` | Would Trigger indicator
displays for scheduled alerts |
| 6 | `alerts-scheduled-features.spec.js` | Aggregation toggle off
clears group-by fields |
---------
Co-authored-by: Ashish Kolhe <ashish.j.kolhe@gmail.com >
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Subhradeep Chakraborty <chakrabortysubhradeep556@gmail.com >
Co-authored-by: Shrinath Rao <shnath@openobserve.ai >
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-17 10:20:14 +05:30
Hengfei Yang
f83f84d841
feat: remove mysql support ( #10522 )
...
impl #8276 , Design at: #8276
2026-02-14 12:28:24 +08:00
udev
b0eac49a3a
fix: [ITER 2] O2 Assistant improvements ( #10473 )
2026-02-13 17:53:05 +05:30
ByteBaker and github-actions[bot]
cf98c39c81
fix: semantic groups, service graph, dedup, dashboard cleanup ( #10502 )
...
## Summary
- **Semantic Groups**: add JSON export button, fix broken JSON import
(`handleJsonUpdate` was a no-op), fix "Applied 0 changes" toast bug
- **Service Graph**: remove unused `availableStreams` from
`build_topology` return and API response, skip `_`-prefixed orgs in
processor
- **Dedup Config**: change `time_window_minutes` from `Option<i64>` to
`Option<i32>`, add `deserialize_optional_i32` for defense-in-depth,
sanitize empty/NaN values on frontend before sending
- **Dashboard**: remove dead `/export` endpoint (identical to GET,
unused by frontend)
## Test plan
- [x] Semantic groups: export downloads JSON, import with file upload
works, import shows correct change count
- [x] Service graph: topology loads, stream dropdown works (populated by
`loadTraceStreams`)
- [x] Dedup: clearing time window field and saving no longer returns 422
- [x] Dashboard: GET `/{dashboard_id}` still works, `/export` route
removed
- [x] `cargo check` clean, `cargo clippy` clean
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-02-13 12:42:41 +05:30
Subhra264
9f98a593bf
fix: print vrl errors once for the whole batch instead of every record ( #10250 )
...
### **User description**
Currently there are warning logs in the `apply_vrl_fn` function which
prints the warning for each and every record whenever there is vrl
error. If there are huge number of records, then the number of logs for
the error is also unnecessarily huge. This pr fixes this by logging the
error once for the whole batch.
___
### **PR Type**
Bug fix
___
### **Description**
- Consolidate VRL errors into batch-level logs
- Downgrade per-record warnings to debug logs
- Add info-level pipeline error logging
___
### Diagram Walkthrough
```mermaid
flowchart LR
A["apply_vrl_fn returns (value, err)"]
B["err.is_some()?"]
C["log error once per batch"]
A -- returns --> B
B -- yes --> C
```
<details> <summary><h3> File Walkthrough</h3></summary>
<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Bug
fix</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>multi_streams.rs</strong><dd><code>Batch error logging
in search_multi</code>
</dd></summary>
<hr>
src/handler/http/request/search/multi_streams.rs
<ul><li>Capture <code>err</code> from <code>apply_vrl_fn</code>
calls<br> <li> Log a single error per batch when present<br> <li> Apply
changes in both apply_over_hits branches</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10250/files#diff-c3233cdf1e68cb2455f91457719b9c2f477e735ee16546fdfe111e76768bd054 ">+15/-4</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>mod.rs</strong><dd><code>Cache VRL error batch
logging</code>
</dd></summary>
<hr>
src/service/search/cache/mod.rs
<ul><li>Capture <code>err</code> from <code>apply_vrl_fn</code> in cache
search<br> <li> Log VRL errors once per batch<br> <li> Update
apply_over_hits and non-apply logic</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10250/files#diff-f07bfacc0501b9c234e64b16c1dd8eb0ae8fcbe231f90c81fed72bcc94946f74 ">+15/-4</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>http.rs</strong><dd><code>Cluster HTTP VRL error
logging</code>
</dd></summary>
<hr>
src/service/search/cluster/http.rs
<ul><li>Extract <code>err</code> from <code>apply_vrl_fn</code> in
cluster HTTP search<br> <li> Log a single error per batch after
processing</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10250/files#diff-fe0a1bbec7ef6418120544b589a531e5144b28cd2650f99135ed8a70ac17ac03 ">+17/-4</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>mod.rs</strong><dd><code>Core search VRL error
batching</code>
</dd></summary>
<hr>
src/service/search/mod.rs
<ul><li>Capture and accumulate <code>err</code> in core search logic<br>
<li> Log batch-level VRL errors in apply_over_hits and else</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10250/files#diff-c3b85ea662a885fbd39797968928b291cb59a58f53a03f7b7dfd7ba8b6a7985a ">+15/-4</a>
</td>
</tr>
</table></td></tr><tr><td><strong>Error
handling</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>mod.rs</strong><dd><code>Downgrade VRL failure logs to
debug</code>
</dd></summary>
<hr>
src/service/ingestion/mod.rs
<ul><li>Changed <code>log::warn!</code> to <code>log::debug!</code> for
VRL failures<br> <li> Preserve metrics increment on transform
failures</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10250/files#diff-7c7b5bca85f0ced652965cae66540c96f56dfcca4f4c16b77bf7b45aac203d1b ">+2/-2</a>
</td>
</tr>
<tr>
<td>
<details>
<summary><strong>batch_execution.rs</strong><dd><code>Info log for
pipeline error details</code>
</dd></summary>
<hr>
src/service/pipeline/batch_execution.rs
<ul><li>Added <code>log::info!</code> for pipeline error details<br>
<li> Log <code>pipeline_id</code>, <code>pipeline_name</code>, and
<code>node_errors</code></ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10250/files#diff-3f6824a6eddaf1603e5cb0f1a4311ac6a45e1ffb967266ccc1f0bba944625e69 ">+6/-0</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
2026-02-10 18:54:35 +05:30
ByteBaker
d3c217e28b
refactor: simplify enterprise feature-flag handling in status handler
...
Introduce `enterprise_value!` macro to replace repetitive `#[cfg(feature = "enterprise")]` / `#[cfg(not(...))]` pairs. Also clean up `zo_config`, `schedulez`, `cache_status`, `config_runtime`, and related helpers:
- Add `Rum::from_cfg()` constructor
- Take `&mut` in `hide_sensitive_fields` to avoid cloning
- Use `HashMap::with_capacity`, `fold`, and `itertools::Itertools::join`
- Simplify `get_stream_schema_status` with iterator methods
2026-02-10 13:16:39 +05:30
ByteBaker
b26af8c2f5
fix: remove rca_enabled check in AI chat enabled
2026-02-09 23:58:06 +05:30
Huaijin
713fe2ef01
feat: impl user view for llm ( #10418 )
2026-02-09 17:05:04 +08:00
Huaijin
16afc7588c
feat: impl llm session view backend api ( #10412 )
2026-02-06 22:26:06 +08:00
ByteBaker
6a03a7675f
feat(incidents): enrich alert dimensions from query conditions ( #10399 )
...
### **User description**
## Summary
Adds dimension enrichment from alert conditions (SQL WHERE, GUI
conditions, PromQL) to ensure consistent dimensions across alert
firings, preventing duplicate incidents caused by incomplete result_row
data.
## Problem
Alert `result_row` has inconsistent fields depending on log entry
completeness:
- Same alert creates incidents with different dimensions
- Production data shows 50% of incidents missing deployment dimension
- Causes unnecessary duplicate incidents (e.g.,
"test_alert_1_might_break" creates 6 separate incidents for same
namespaces)
**Example:**
```
Alert fires 3 times:
Firing #1 : result_row = {namespace: "ziox"}
→ Incident #1 (68 alerts)
Firing #2 : result_row = {namespace: "ziox", deployment: "router"}
→ Incident #2 (23 alerts) ❌ Separate!
Firing #3 : result_row = {namespace: "ziox", deployment: "compactor"}
→ Incident #3 (19 alerts) ❌ Separate!
Result: 3 incidents for same namespace
```
## Solution
Extract baseline dimensions from alert query conditions and enrich
result_row:
**Priority order:**
1. result_row (actual runtime data) - highest priority
2. Alert conditions (SQL/GUI/PromQL) - fills gaps with baseline
3. Service Discovery - fills remaining gaps
**Supported condition types:**
- ✅ SQL WHERE clauses: `WHERE namespace='prod' AND deployment='api'`
- ✅ GUI conditions V1 (tree-based) and V2 (linear)
- ✅ PromQL label matchers: `{namespace="prod",deployment="api"}`
## Changes
- Make result_row labels mutable for enrichment
- Call enterprise sql_parser to extract condition dimensions
- Merge condition dimensions into labels using `.entry().or_insert()`
- Add logging for dimension enrichment tracking
- Update debug log message
## Impact
- **Dimension consistency:** 50% → >95%
- **Incident reduction:** Target -60% total (from -50% with hierarchical
correlation)
- **Works for:** Auto-fired and manually triggered alerts
- **Performance:** <1ms overhead per alert
## Testing
- Covered by enterprise integration tests (26 tests passing)
- Requires enterprise PR (to be created) for sql_parser implementation
- Full test suite: 92 tests passing
## Design
Design at: `designs/incidents/hierarchical-correlation.md`
## Related
- Depends on: Enterprise PR (creating next)
- Builds on: #10XXX (hierarchical correlation)
___
### **PR Type**
Enhancement, Bug fix, Tests
___
### **Description**
- Add hierarchical incident correlation upgrades
- Enrich alert labels from query conditions
- Introduce upgrade window configuration defaults
- Add key/dimension relationship unit tests
2026-02-06 15:17:12 +05:30
Huaijin
b315f4ca08
feat: dag graph for llm traces ( #10388 )
2026-02-06 16:46:44 +08:00
Harsh Mahajan
e6d5b6eed5
fix: ParserError on streams with : in name ( #10394 )
2026-02-06 12:46:49 +08:00
Harsh Mahajan
ac57e491d6
fix: query usage stream for their org ( #10139 )
...
### **User description**
resolve https://github.com/openobserve/o2-enterprise/issues/1168
___
### **PR Type**
Enhancement, Tests
___
### **Description**
- Add `usage_stream_enabled` org setting flag
- Provide `get_org_setting_usage_stream_enabled` function
- Extend ingestion to route usage streams per org
- Introduce `usage_schema` module for lazy schema init
- Add `UsageData::init_for_reflection` for schema inference
___
### Diagram Walkthrough
```mermaid
flowchart LR
UD["UsageData ingestion"] -- "serialize & filter" --> RD["report_data: Vec<Value>"]
RD -- "ingest to meta org" --> META["ingest_reporting_data(META_ORG_ID)"]
RD -- "split by org" --> PERORG["per_org_map"]
PERORG -- "for each enabled org" --> INIT["ensure_usage_stream_initialized(org)"]
INIT -- "then" --> INGORG["ingest_reporting_data(org)"]
```
<details> <summary><h3> File Walkthrough</h3></summary>
<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Configuration
changes</strong></td><td><details><summary>2 files</summary><table>
<tr>
<td><strong>organization.rs</strong><dd><code>Add default and config for
usage_stream_enabled</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10139/files#diff-4f089715a7ac4f78b45039d773f2fccbb4fbc6a409e0ab9ceee1fcf7911bc44b ">+9/-0</a>
</td>
</tr>
<tr>
<td><strong>mod.rs</strong><dd><code>Include usage_schema
module</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10139/files#diff-c6255010f7a87d6acdb3ad04954fc9f2c27350ae319c53a1857b120aa06408a3 ">+1/-0</a>
</td>
</tr>
</table></details></td></tr><tr><td><strong>Enhancement</strong></td><td><details><summary>5
files</summary><table>
<tr>
<td><strong>usage.rs</strong><dd><code>Add UsageData init_for_reflection
method</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10139/files#diff-b15a6adcb163dc27993c83528105a6726c44c86d8a84c5cf5d1d382c6ec8cc29 ">+55/-0</a>
</td>
</tr>
<tr>
<td><strong>settings.rs</strong><dd><code>Handle usage_stream_enabled in
HTTP settings</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10139/files#diff-1e807254f2faf8fd09b802f71b23412f203eed289033f96bfc62b15dd997db8c ">+5/-0</a>
</td>
</tr>
<tr>
<td><strong>organization.rs</strong><dd><code>Add
get_org_setting_usage_stream_enabled API</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10139/files#diff-ce65cea926a09721a8fea14d07fe188bc2b887218e95d74a8bffefb54001da50 ">+27/-0</a>
</td>
</tr>
<tr>
<td><strong>ingestion.rs</strong><dd><code>Route and serialize usage
streams per org</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10139/files#diff-3edd5f4ed1eed0f765b7b450ef0fbf587632e6b22302006a5e397049e297057f ">+60/-5</a>
</td>
</tr>
<tr>
<td><strong>usage_schema.rs</strong><dd><code>Implement lazy schema init
and unit tests</code>
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10139/files#diff-20a9eccd303d49e271e64fb18c608b7ef135a710e9e057d32db9c0d13b15e1e3 ">+191/-0</a>
</td>
</tr>
</table></details></td></tr></tr></tbody></table>
</details>
___
2026-02-05 20:44:03 +05:30
Huaijin
21155591fd
feat: map otel field to openobserve field ( #10213 )
2026-02-04 15:30:55 +08:00
ByteBaker
b11a50e4ff
fix: prevent incorrect incident correlation for alerts with empty stable dimensions ( #10361 )
2026-02-04 04:39:44 +05:30
Harsh Mahajan
f23d22d9b7
fix: adds pass through headers for ai-agent ( #10330 )
...
### **User description**
refer https://github.com/openobserve/openobserve/pull/10069
___
### **PR Type**
- Enhancement
- Tests
- Bug fix
___
### **Description**
- Add configurable header passthrough extraction
- Prepare AI chat to forward headers
- Add unit tests for header matching
- Stop storing backfill ingestion errors
___
### Diagram Walkthrough
```mermaid
flowchart LR
req["Incoming AI chat request"]
cfg["Passthrough patterns (CSV)"]
ext["extract_passthrough_headers()"]
fwd["forward_headers merged"]
agent["Agent client query (future headers)"]
tests["Unit tests"]
req -- "provides headers" --> ext
cfg -- "patterns" --> ext
ext -- "selected headers" --> fwd
fwd -- "intended to forward" --> agent
ext -- "verified by" --> tests
```
<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>chat.rs</strong><dd><code>Add passthrough header
extraction for AI chat</code>
</dd></summary>
<hr>
src/handler/http/request/ai/chat.rs
<ul><li>Add <code>extract_passthrough_headers</code> helper with
wildcard support<br> <li> Collect passthrough headers in
<code>chat</code> and <code>chat_stream</code><br> <li> Merge
passthrough headers without overwriting existing ones<br> <li> Add unit
tests for matching behavior</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10330/files#diff-12a78cbb31b313cb3a0ca50f25c177470cf49b02708f179fe138ed3d66a2926b ">+178/-1</a>
</td>
</tr>
</table></td></tr><tr><td><strong>Bug fix</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>handlers.rs</strong><dd><code>Disable persisting
ingestion error during backfill</code>
</dd></summary>
<hr>
src/service/alerts/scheduler/handlers.rs
- Comment out `ingestion_error` assignment on batch failure
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10330/files#diff-5eca8995a88fcecb6d6b8efd3c7c4496f4a96a4b060fb4ed85593574f7cf49eb ">+1/-1</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
2026-02-03 17:41:01 +05:30
Ashish Kolhe
571be3e746
fix: include functions validation in mcp ( #10324 )
...
### **PR Type**
Documentation, Enhancement
___
### **Description**
- Update function test endpoint docs
- Clarify VRL/JS validation behavior
- Add MCP extension metadata
___
### Diagram Walkthrough
```mermaid
flowchart LR
A["/api/{org_id}/functions/test endpoint"] -- "updates OpenAPI summary/description" --> B["Clearer VRL/JS validation docs"]
A["/api/{org_id}/functions/test endpoint"] -- "adds extension" --> C["x-o2-mcp category metadata"]
```
<details> <summary><h3> File Walkthrough</h3></summary>
<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Documentation</strong></td><td><table>
<tr>
<td>
<details>
<summary><strong>mod.rs</strong><dd><code>Refine testFunction docs and
MCP metadata</code>
</dd></summary>
<hr>
src/handler/http/request/functions/mod.rs
<ul><li>Change OpenAPI summary to validation focus<br> <li> Rewrite
description to emphasize syntax validation<br> <li> Document
<code>trans_type</code> VRL/JS options<br> <li> Add
<code>x-o2-mcp</code> OpenAPI extension metadata</ul>
</details>
</td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10324/files#diff-a5e1b3644cef9feb689dfe66382e44e5434ecadbff3469127346a333d4733102 ">+6/-5</a>
</td>
</tr>
</table></td></tr></tr></tbody></table>
</details>
___
2026-02-03 06:27:19 +05:30
Ashish Kolhe
6e8426feb3
fix: pick up fqn based on lastest update ( #10334 )
2026-02-03 00:36:09 +08:00