Commit Graph
2560 Commits
Author SHA1 Message Date
udev 0829ee89fe feat: add metrics workgroup (#9400) 2025-12-04 21:43:31 +05:30
Hengfei Yang 04b15af48f refactor: unify bulk API to use the same ingestion function (#9467) 2025-12-04 18:21:58 +08:00
Ashish Kolheandgithub-actions[bot] 1353ea653b feat: service discovery (#9469)
Design at:

streams-corelation/SERVICE_CORRELATION_ARCHITECTURE.md

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-04 13:58:09 +05:30
Shrinath Rao ffc265ceba test: added auto rerun step to e2e yml (#9466) 2025-12-04 13:14:43 +05:30
ktx-vaidehi 975bca13c9 feat: dashboard table chart show data as json (#9327) 2025-12-04 12:19:51 +05:30
udev aff58b33a4 fix: use chrono apis to validate time (#9422) 2025-12-04 13:52:54 +08:00
Harsh Mahajan 6a91424339 fix: removing the await (#9465)
removing the .await
2025-12-04 07:44:25 +05:30
ByteBaker 012e720005 chore: use tokio::spawn properly 2025-12-03 19:36:37 +05:30
Harsh Mahajan 32cd68e331 feat: user session migration from meta to new table (#9183)
This PR make necessary changing for using new sessions table for storing
user sessions and also removes the existing sessions from meta table

NEED TO BE MERGED POST RELEASE
2025-12-03 17:58:45 +05:30
ByteBaker 1fafad5dcd refactor: extract service graph into independent job and support INTERNAL spans
- Move service graph processor from compactor to dedicated job module
- Create `src/job/service_graph.rs` with independent lifecycle
- Remove service graph code from `src/job/compactor.rs`
- Update `src/job/mod.rs` to spawn service_graph job

- Support INTERNAL spans (span_kind='1') in addition to CLIENT/SERVER
- Remove early exit when peer attributes are missing
- Use 'internal' as fallback for peer identification
- Update SQL to include `span_kind IN ('1', '2', '3')`

This enables service graph to work with OpenObserve's internal tracing
data which uses INTERNAL spans without explicit peer.service attributes.
2025-12-03 16:40:17 +05:30
ByteBaker 9bb1576b1d fix: handle peer.service attribute in nested structures
The peer.service attribute can be stored in:
- peer_service column (flattened)
- attributes['peer.service'] map
- attributes_string['peer.service'] map

Use COALESCE to try all locations. Filter NULL results in WHERE clause.
2025-12-03 16:40:17 +05:30
udev 99c3391575 fix: audit (#9417)
This brings changes to the MMDB parser logic. Need to test via VRL
functions.
2025-12-03 15:33:04 +05:30
Hengfei Yang 9c249f2c3c fix: rollback scc (#9442) 2025-12-03 11:08:23 +08:00
udev 25c3b1d454 fix: null check in conditions (#9449)
fixes https://github.com/openobserve/openobserve/issues/9443
2025-12-03 00:34:36 +05:30
ByteBaker ada80858e8 feat: migrate service graph to SQL-based daemon architecture
Replace in-memory EdgeStore with daemon-based architecture that periodically
queries trace streams using SQL aggregation in DataFusion.

Architecture:
- Daemon runs in compactor job every 1 hour (default, configurable)
- Queries last 60 minutes of trace data (configurable window)
- Uses DataFusion SQL with CTE for efficient aggregation
- Calculates p50, p95, p99 percentiles using approx functions
- Writes aggregated edges to internal `_o2_service_graph` stream
- Zero impact on trace ingestion performance

Key Changes:
- Add `processor.rs` with SQL-based daemon that queries trace streams
- Add `aggregator.rs` to write SQL results to `_o2_service_graph` stream (uses json! macro)
- Refactor `api.rs` to query pre-aggregated data from stream
- Move business logic to enterprise repo (`build_topology()`, `span_to_graph_span()`)
- Remove ALL inline processing during trace ingestion
- Delete in-memory EdgeStore, worker threads, and buffering code
- Feature-gated for enterprise builds with non-enterprise stubs

SQL Query:
- CTE extracts client/server from span_kind ('2'=SERVER, '3'=CLIENT)
- Aggregates by (client, server) with COUNT, percentiles, error rate
- Filters: span_kind IN ('2','3') AND peer_service IS NOT NULL

Configuration:
- O2_SERVICE_GRAPH_ENABLED (default: false)
- O2_SERVICE_GRAPH_PROCESSING_INTERVAL_SECS (default: 3600) - Daemon run frequency
- O2_SERVICE_GRAPH_QUERY_TIME_RANGE_MINUTES (default: 60) - Query window size

Technical Details:
- Stream name: `_o2_service_graph` (internal stream)
- Edge timestamp: Uses query end time for API compatibility
- Span kinds: '2' (SERVER), '3' (CLIENT) as VARCHAR in parquet
- Percentiles: approx_median(), approx_percentile_cont(0.95), approx_percentile_cont(0.99)
2025-12-01 17:06:53 +05:30
Hengfei Yang 1734f63b3c fix: search on wal panic (#9402) 2025-12-01 09:06:48 +05:30
Loakesh Indiran 5ebcb845d7 fix: streaming aggs complete cache hit (#9397) 2025-11-29 20:36:59 +05:30
Loakesh Indiran baa7520d90 fix: overwrite aggs cache instead of delete and rewrite cache (#9390)
How I run my query 
1. nov 26 10:30 - 11:30 - interval 30 mins
2. nov 26 10:30 - 16:30 - interval 60 mins
3. nov 26 10:30 - 16:30 - interval 60 mins -- refresh cache

Cache dir
1. on first run 
- has 2 caches 30 mins 
2. on 2nd run 
- will havve mixed 30mins cache and 60 mins cache 

TODO: 
-  [x] Problem 1: 
on step 3 
- the interval for that duration is 60 mins
- but the discovery of cache will also include the 30 mins cache
[@mod.rs](file:///Users/lin/o2/openobserve/src/service/search/mod.rs)
`discover_cache_for_query`
- the overwrite will over write the 60 mins cache only. How to address
this problem?
- [x] Problem 2:
- fix: add rbac control only user with permussion to edit stream can
`refresh cache`

Proposed Solution
- On `refresh_cache` run streaming aggs without using cache
- at `streaming/execution.rs` , at the end of steaming aggs delete all
the cache files for the given duration when there are miss matched cache
interval files
- then remove the `streaming_id` from the `GLOBAL_CACHE`
- eg: nov 26 10:30 - 16:30 - interval 60 mins -- refresh cache 
- Cache consists of 30mins or 4hr interval files all of them will be
deleted
- 60 mins cache interval files will be overwritten or created a new.
- This way on the next run there will be no query results mismatch when
the query runs again with the newly updated cache, especially delayed
data for the same duration.
- add rbac control to only allow users with edit permissions to stream
to use this feature
2025-11-29 12:49:39 +05:30
Ashish Kolhe e0aef9677e chore:move-service-graph-config (#9370) 2025-11-28 22:19:32 +05:30
Subhra264andgithub-actions[bot] 999d25c88e fix: use bulk update for scheduled job updates in super cluster sync (#9211)
In super cluster, currently we broadcast the trigger update events
individually. This pr allows bulk updates through super cluster.

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-28 18:30:29 +05:30
Ashish Kolheandgithub-actions[bot] 0b4e66c8f6 feat: sampling for search apis and patterns (#9207)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-28 16:13:04 +05:30
Huaijin dd6df5443f fix: RecordBatch create with empty value[main] (#9374) 2025-11-28 16:30:42 +08:00
Loakesh Indiran 3a690bd6fb fix: result cache & aggs cache max size needs to honor for entire dir (#9376)
fixes: https://github.com/openobserve/openobserve/issues/9344
2025-11-28 13:08:58 +05:30
udev e5284b82aa fix: add email headers to metrics and traces ep (#9357)
adding headers to multiple endpoints for usage reporting
2025-11-28 10:57:17 +05:30
Hengfei Yang 467a42d23c perf: optimize get_opts for object store (#9363)
Refactor `get_opts` function that improve `5x` for vortex search.
2025-11-28 08:42:29 +08:00
Hengfei Yang 0c00876f10 fix: no process-level CryptoProvider available (#9361)
fixed #9359
2025-11-27 23:53:49 +08:00
Hengfei Yang fa0672a663 feat: add super cluster support for metrics (#9225) 2025-11-27 20:39:09 +08:00
Yashodhan JoshiandYashodhan Joshi b75aa57d83 fix: self-org-trigger issues (#9348)
This fixes two issues for reporting triggers to own org :
- sometimes triggers of different orgs would get reporting to different
orgs, this fixes it by grouping triggers by org and then ingesting them
- for cloud, previously it would cause issues for expired orgs and block
alert manager, now this skips the expired orgs altogether. With a
previous change of disabling trigger causing stuff (alerts, reports etc)
for expired orgs completely, this change should fix the minor remaining
problem as well.

---------

Signed-off-by: Yashodhan Joshi <yjdoc2@gmail.com>
Co-authored-by: Yashodhan Joshi <yjdoc2@gmail.com>
2025-11-27 16:12:49 +05:30
Huaijin 2d1cec8c9c perf: use datafusion native listingtable (#9259) 2025-11-27 16:46:43 +08:00
44011fbebc feat: add organization-level alert deduplication with semantic field groups (#9209)
## Summary

Implements org-level alert deduplication with semantic field groups for
intelligent alert suppression and batched notifications. This feature
prevents alert storms by deduplicating alerts based on configurable
fingerprints and grouping related alerts together.

### Core Capabilities

- **Semantic Field Groups**: Map field name variations (`hostname`,
`host`, `node`) to canonical dimensions for consistent deduplication
across different data sources
- **Organization-Level Configuration**: Global deduplication settings
with cross-alert support to suppress alerts from different rules sharing
semantic dimensions
- **Alert Grouping & Batching**: Wait-and-collect logic with three send
strategies (`FirstWithCount`, `Summary`, `All`) for batched
notifications
- **Per-Alert Control**: Individual alert deduplication settings with
optional fingerprint field customization

### Features

**Deduplication Modes:**
- Per-alert exact matching using fingerprint-based TTL expiration
- Cross-alert semantic matching using org-defined dimension groups
- Configurable time windows (per-alert override or org-level default)

**Alert Grouping:**
- Batch alerts with same fingerprint before sending notifications
- Three strategies: first alert with count, summary with names, or all
details
- Configurable wait time (1-300 seconds) and max batch size (1-100
alerts)
- Background processor runs every 1 second for expired batches

**Semantic Field Groups:**
- Built-in presets for common fields (host, IP address, service)
- Kubernetes resource groups (cluster, namespace, pod, node, container)
- Field normalization support (lowercase + trim)
- Overlap handling with first-defined precedence

### Configuration Types

- `SemanticFieldGroup`: Field name equivalence definitions with
normalization
- `GlobalDeduplicationConfig`: Org-level settings with semantic groups
and cross-alert dedup
- `DeduplicationConfig`: Per-alert fingerprint fields and grouping
options

### API Endpoints

- `GET /{org_id}/alerts/deduplication/config` - Retrieve org-level dedup
config
- `POST /{org_id}/alerts/deduplication/config` - Set org-level dedup
config
- `DELETE /{org_id}/alerts/deduplication/config` - Delete org-level
dedup config

### Implementation Details

- Pure business logic algorithms in enterprise layer (fingerprinting,
matching, calculations)
- OSS service layer orchestrates database operations with enterprise
delegation
- Feature-gated with `#[cfg(feature = "enterprise")]` for
enterprise-only functionality
- Background job architecture for async batch processing
- Storage: Org config in KV DB at `/alert_config/{org_id}/deduplication`

### Architecture

```
Alert Triggered
     ↓
Query Evaluation
     ↓
Deduplication Check (fingerprint + TTL)
     ↓
Grouping Enabled? → Add to Batch → Wait/Collect → Send Grouped
     ↓ No
Send Individual Notification
```

---------

Co-authored-by: Ashish Kolhe <ashish.j.kolhe@gmail.com>
Co-authored-by: Shrinath Rao <shnath@openobserve.ai>
2025-11-26 12:09:10 +05:30
Huaijin 9190a9d650 feat: upgrade datafusion to 51 (#9202) 2025-11-25 23:16:09 +08:00
de5edadb9e feat: added destination type for remote destination (#9080)
Signed-off-by: Yashodhan Joshi <yjdoc2@gmail.com>
Co-authored-by: Yashodhan Joshi <yjdoc2@gmail.com>
Co-authored-by: mmosarafO2 <mosraf@openobserve.ai>
Co-authored-by: Yashodhan Joshi <yashodhan@openobserve.ai>
2025-11-25 14:07:37 +05:30
Loakesh Indiran 152218942e fix: write_results cache start & end times (#9200) 2025-11-25 13:12:02 +05:30
Loakesh IndiranandShrinath Rao 4b2cd9d69e fix: cache start and end time calc (#9268)
problem: 
```
 INFO service::search::search_stream_h2:service:search:stream_cache:handle_cache_responses_and_deltas: openobserve::service::search::streaming::cache: [HTTP2_STREAM trace_id 019aa5f8430a716d90be83e2a587baaa] Handling cache response and deltas, curr_res_size: 0, cached_search_duration: -6739886800, remaining_query_duration: 24, deltas_len: 4, cache_start_time: 1763646864583000, cache_end_time: 1763640124696200,
```

---------

Co-authored-by: Shrinath Rao <shnath@openobserve.ai>
2025-11-25 12:32:48 +05:30
Hengfei Yang 2e28f9be47 fix: use result cache env for metrics (#9281) 2025-11-25 14:14:46 +08:00
udev a5751f3c28 feat: add logic to keep the root token before camel case split (#9185) 2025-11-25 07:16:26 +08:00
Harsh Mahajan 7f9a4b7359 fix: small bug in runtime config API (#9278)
There was case in which root-password was not hidden, PR makes this go
away
2025-11-24 19:38:51 +05:30
Subhra264 b9d50d5330 fix: make triggers and error events reporting non-blocking in alert manager (#8934)
# Self-Reporting Non-Blocking Implementation

## Summary

Implements a comprehensive non-blocking architecture for the
self-reporting system to prevent indefinite blocking of alert/pipeline
handlers when queues are saturated. This enhancement improves system
stability and prevents resource exhaustion under high load while
maintaining data reliability appropriate to each data type's
criticality.

## Problem Statement

Previously, alert and pipeline handlers could block indefinitely when
publishing usage, trigger, and error data to self-reporting queues.
Under high load:
- Multiple alerts firing simultaneously caused unbounded task
accumulation
- Blocking `mpsc::Sender::send().await` would wait indefinitely for
queue space
- System could experience memory exhaustion and degraded performance
- No visibility into queue depth or dropped events

## Solution

Implemented a **priority-based non-blocking strategy** with different
behaviors for different data types:

| Data Type | Strategy | Timeout | Can Drop | Priority |
|-----------|----------|---------|----------|----------|
| **Usage** | Blocking | ∞ | No | CRITICAL (billing) |
| **Triggers** | Non-blocking | 0s | Yes | MEDIUM (metrics) |
| **Errors** | Timeout-based | 2s (configurable) | Yes (after timeout) |
HIGH (debugging) |

## Changes

### Core Functionality (Phases 1-3)

#### 1. Infrastructure (Phase 1)
- Added `try_enqueue()` - non-blocking immediate return
- Added `enqueue_with_timeout()` - bounded timeout waiting
- Added `EnqueueError` type for better error handling
- Enhanced existing `enqueue()` with timing logs

#### 2. Non-Blocking Triggers (Phase 2)
- Changed `publish_triggers_usage()` from `async fn` to `fn`
- Uses `try_enqueue()` - drops immediately if queue full
- Updated 9 call sites to remove `.await`
- Added `SELF_REPORTING_DROPPED_TRIGGERS` metric

#### 3. Timeout-Based Errors (Phase 3)
- Updated `publish_error()` to use `enqueue_with_timeout()`
- Added `ZO_ERROR_PUBLISH_TIMEOUT_SECS` config (default: 2s)
- Prevents indefinite blocking (max 2 seconds wait)
- Added `SELF_REPORTING_TIMEOUT_ERRORS` metric

### Observability (Phase 4)

Added comprehensive metrics for monitoring:
- `zo_self_reporting_dropped_triggers_total` - Counter for dropped
triggers
- `zo_self_reporting_timeout_errors_total` - Counter for error timeouts
- `zo_self_reporting_queue_depth{queue_type}` - Real-time queue depth
gauge

Queue depth tracking integrated in ingestion workers for proactive
capacity monitoring.

### Debug Logging (Bonus)

Enhanced logging throughout the system:
- Pre/post operation logs with timing information
- Context (org, key, source, status) for troubleshooting
- Slow operation detection (warns if > 100ms)
- Appropriate log levels (TRACE/DEBUG/WARN/ERROR)

### Configuration (Phase 5)

- **New**: `ZO_ERROR_PUBLISH_TIMEOUT_SECS` (default: 2)
- **Existing**: All previous config options retained
- Comprehensive configuration guide with templates for different
deployment sizes

## Files Modified

### Config Package
- `src/config/src/config.rs` - Added error timeout configuration
- `src/config/src/metrics.rs` - Added 3 new metrics
- `src/config/src/meta/self_reporting/mod.rs` - Added non-blocking
enqueue methods

### Service Package
- `src/service/self_reporting/mod.rs` - Updated publish functions with
non-blocking behavior
- `src/service/self_reporting/queues.rs` - Added queue depth tracking
- `src/service/alerts/scheduler/handlers.rs` - Updated trigger publish
call sites
- `src/service/ingestion/mod.rs` - Updated trigger publish call site

**Total**: 7 files modified, ~300 lines of code changes

## Benefits

### Stability
- ✅ No indefinite blocking - max 2 seconds for errors, immediate for
triggers
- ✅ Prevents task accumulation and memory exhaustion
- ✅ System remains responsive under extreme load
- ✅ Graceful degradation (drops non-critical data)

### Observability
- ✅ Real-time queue depth visibility
- ✅ Metrics track all drops and timeouts
- ✅ Comprehensive debug logging for troubleshooting
- ✅ Proactive monitoring (detect issues before saturation)

### Reliability
- ✅ Critical usage data unchanged (zero risk to billing)
- ✅ Acceptable data loss for non-critical data (triggers, errors)
- ✅ Configurable timeout for different environments
- ✅ Backwards compatible - existing deployments work unchanged

## Configuration

### Minimal (Use Defaults)
```bash
export ZO_USAGE_REPORTING_ENABLED=true
# All other values use sensible defaults
```

### Recommended for High Load
```bash
export ZO_USAGE_REPORTING_ENABLED=true
export ZO_USAGE_BATCH_SIZE=5000
export ZO_USAGE_REPORTING_THREAD_NUM=8
export ZO_USAGE_PUBLISH_INTERVAL=30
export ZO_ERROR_PUBLISH_TIMEOUT_SECS=3
```

## Monitoring

### Key Metrics to Watch
```promql
# Should remain at 0 in healthy system
rate(zo_self_reporting_dropped_triggers_total[5m])
rate(zo_self_reporting_timeout_errors_total[5m])

# Should be < 75% of capacity
zo_self_reporting_queue_depth{queue_type="usage"}
```

### Alerts
If metrics > 0, scale capacity:
- Increase `ZO_USAGE_BATCH_SIZE`
- Increase `ZO_USAGE_REPORTING_THREAD_NUM`

## Testing

- ✅ All unit tests pass
- ✅ Build successful (zero compilation errors)
- ✅ Backwards compatible with existing deployments
- ✅ Tested with small queues to simulate saturation
- ✅ Metrics validated via Prometheus endpoint

**Total**: ~6000+ lines of documentation

## Backwards Compatibility

✅ **Fully backwards compatible**
- All existing configuration options work unchanged
- Default values remain the same
- Existing deployments work without any changes
- Only new option: `ZO_ERROR_PUBLISH_TIMEOUT_SECS` (optional)
- Behavior change is internal (non-blocking vs blocking)

## Risk Assessment

### Low Risk ✅
- Infrastructure well-tested with existing patterns
- Only affects trigger/error publishing (non-critical for system
operation)
- Usage data unchanged (zero risk to billing/compliance)
- Can scale capacity if drops occur

### Medium Risk ⚠️
- May lose trigger metrics under extreme load (acceptable trade-off)
- May lose error data after timeout (configurable, acceptable for v1)

### Mitigation
- Comprehensive metrics track all drops/timeouts
- Clear logging with actionable messages
- Configuration guide helps operators tune capacity
- Proactive queue depth monitoring

## Future Work (v2)

After v1 runs in production for 1-2 weeks:
1. Evaluate adding timeout to usage data (currently unchanged for
safety)
2. Consider separate queue for triggers (full isolation)
3. Implement FIFO dropping for better data quality
4. Add circuit breaker pattern for automatic backoff

## Checklist

- [x] Code changes implemented
- [x] Unit tests pass
- [x] Build successful
- [x] Metrics added and registered
- [x] Debug logging added
- [x] Configuration documented
- [x] Implementation summaries written
- [x] Backwards compatibility verified
- [x] No breaking changes
2025-11-24 18:58:14 +05:30
Subhra264 5c465c1fc5 feat: add a warning about future deprecation of mysql support (#9229) 2025-11-24 16:28:05 +05:30
Subhra264andmmosarafO2 f57b1d3c05 fix: mysql migration error for alert row_template_type field (#9227)
Co-authored-by: mmosarafO2 <mosraf@openobserve.ai>
2025-11-24 14:44:54 +05:30
Hengfei Yang 5ffd64d65b feat: add configurable batch size for file list deletion (#9264) 2025-11-24 16:42:12 +08:00
Loakesh Indiran 1e7af6372a fix: add use_cache & clear_cache for _multi_search_stream (#9249) 2025-11-23 19:38:25 +05:30
udev a765af49bc feat: bill data retention (#9132)
- [x] Ingest to data_retention_usage fn
- [x] UI for data retention
2025-11-21 10:20:22 +05:30
Subhra264 de734bd5d8 feat: Allow Json values in alert row templates (#9137)
# Add Row Template Type Support for Alerts

## Overview
This PR adds support for configurable row template types in alerts,
allowing users to choose between **String** and **JSON** formats for row
templates. This provides flexibility in how alert data is formatted and
sent to destinations.

## Features

### Row Template Type Selection
- Added a new `row_template_type` field to alerts with two options:
- **String**: Traditional string-based templates with variable
interpolation
  - **JSON**: Structured JSON templates for programmatic consumption

### Database Layer
- Uses efficient `smallint` (i16) storage: `0` for String, `1` for JSON
- Added migration `m20251118_000001_add_alert_row_template_type` with
backward compatibility (defaults to String)
- Includes support for PostgreSQL, MySQL, and SQLite

### API Layer
- Returns enum string representation (`"String"` or `"Json"`) in API
responses
- Full support in GET, CREATE, and UPDATE alert endpoints

### UI Changes
- Added toggle button in alert creation/editing form to switch between
String and JSON template types
- Dynamic placeholder text based on selected template type
- Persists user's template type selection in the database

## Usage Example

### String Template (Default)
When creating an alert with row template type set to **String**:

```
Template Type: [String] JSON
Row Template: Alert triggered: {alert_name} at {timestamp} Affected user: {user_id} Error count: {error_count}
```

### JSON Template
When creating an alert with row template type set to **JSON**:

```
Template Type: String [JSON]
Row Template: { "alert": "{alert_name}", "timestamp": "{timestamp}", "user": { "id": "{user_id}", "name": "{user_name}" }, "metrics": { "error_count": {error_count}, "severity": "{severity}" } }
```

The JSON template type automatically parses and validates JSON
structure, making it ideal for:
- Webhook integrations that expect JSON payloads
- Structured logging systems
- API endpoints requiring specific JSON schemas
- Downstream systems that need programmatic access to alert data

## Technical Details

### Architecture
- **Database**: Stores as `smallint` (0 or 1) for efficiency
- **Service Layer**: Uses `RowTemplateType` enum throughout application
logic
- **API**: Serializes enum as strings (`"String"`, `"Json"`)
- **Frontend**: TypeScript interface uses string type with toggle UI
component

### Backward Compatibility
- Existing alerts without `row_template_type` default to `String`
- Migration adds column with `DEFAULT 0` ensuring zero downtime
- API handles both old and new alert formats seamlessly

## Testing
- Added unit tests for database migration (PostgreSQL, MySQL, SQLite)
- Tested enum serialization/deserialization
- Verified UI toggle behavior and data persistence
- Confirmed backward compatibility with existing alerts

<img width="1070" height="770" alt="Screenshot 2025-11-19 at 5 46 34 PM"
src="https://github.com/user-attachments/assets/900edb1c-815e-4240-91e2-50a1a582a9b0"
/>
2025-11-20 14:44:08 +05:30
Hengfei Yang f3f5b29aa2 feat: introduce query_values_default_num configuration. (#9206)
This PR add a new ENV that allow you to change the default num of field
values.
```
ZO_QUERY_VALUES_DEFAULT_NUM=10
```
2025-11-20 16:25:12 +08:00
HuaijinandHengfei Yang 5e8b32f0e1 fix: tantivy distinct not work for alias (#9187)
Co-authored-by: Hengfei Yang <hengfei.yang@gmail.com>
2025-11-20 11:22:32 +08:00
Hengfei Yang 51a0980323 feat: [BE] PromQL streaming output support (#9191) 2025-11-20 10:30:55 +08:00
Sai Nikhil f98183787f fix: mainlayout page refactoring (#9176)
1. we have created header component which will seperate out the header
part from mainlayout
2. introduced custom dark logo feature , it will fallback to light mode
logo if dark mode logo is not there
2025-11-19 15:48:35 +05:30
Harsh Mahajan ab260764b3 feat:adding config api (#9160) 2025-11-19 14:59:18 +08:00
Harsh Mahajan 1f06d4a46a feat:adding configuration ENV for colour theme (#9165) 2025-11-19 14:23:09 +08:00