Skip to content

Commit 2d4ad86

Browse files
authored
Merge pull request #317 from flashcatcloud/doc-review/20260827-080700
docs: doc-review 2026-08-27 incremental fixes
2 parents ca537bb + d6c0001 commit 2d4ad86

17 files changed

Lines changed: 242 additions & 20 deletions

File tree

‎docs.json‎

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1945,6 +1945,13 @@
19451945
"zh/monitors/data-sources/data-sources"
19461946
]
19471947
},
1948+
{
1949+
"group": "查询工作台",
1950+
"icon": "magnifying-glass-chart",
1951+
"pages": [
1952+
"zh/monitors/explore/explore"
1953+
]
1954+
},
19481955
{
19491956
"group": "实体树",
19501957
"icon": "sitemap",
@@ -3308,6 +3315,13 @@
33083315
"en/monitors/data-sources/data-sources"
33093316
]
33103317
},
3318+
{
3319+
"group": "Query Workbench",
3320+
"icon": "magnifying-glass-chart",
3321+
"pages": [
3322+
"en/monitors/explore/explore"
3323+
]
3324+
},
33113325
{
33123326
"group": "Entity Tree",
33133327
"icon": "sitemap",

‎en/ai-sre/skills.mdx‎

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,10 @@ When triggering explicitly, you can append arguments: `/<skill-name> arg1 arg2`.
2626

2727
If you just want to **mention** `/skill-name` in a message (for example, asking "what does `\/skill-name` do?") without triggering it, add a backslash escape at the start of the message: a message starting with `\/` has that leading backslash stripped and is sent as plain text instead of being parsed as a command.
2828

29+
<Info>
30+
**Cross-team skill name conflicts and the `@` qualifier.** Skill names must be unique within a team, but different teams may each own a skill with the same name. When two teams both have an enabled skill with the same name and both are in scope for the current session, a bare `/<skill-name>` cannot resolve to either and is rejected with a hint listing the qualified forms. In that case, use `/<skill-name>@<team_id>` to disambiguate (e.g., `/deploy@5`). The `@` character is therefore reserved and cannot be used in skill names.
31+
</Info>
32+
2933
<Tip>
3034
The difference between Skills and MCP: MCP provides **connectivity to external tools**; Skills provide **the methodology for orchestrating those tools to complete a category of tasks**. They work together — a skill declares in SKILL.md which tools it needs, including built-in tools and MCP tools in the form `mcp:server/tool`.
3135
</Tip>
@@ -135,7 +139,7 @@ In addition to installing from the Marketplace, you can upload your own skill pa
135139
| Owner | Team / Account | Yes | Select the scope for this skill: **Account** (visible to all members account-wide) or a specific **Team** (visible only to members of that team). To upload into a team scope, you must belong to the target team; account-level upload is limited to the account owner or admins. See "Scope" below. |
136140
| Zip file | File | Yes | An archive containing `SKILL.md` (required) and any optional resource files. `.zip` / `.skill` / `.tar.gz` / `.tgz` archives are accepted. |
137141

138-
At upload time, the system automatically validates that: the archive is a valid zip, `SKILL.md` exists in the root directory, the frontmatter is parseable, `name` follows kebab-case naming, and all declared tools are valid (built-in tools exist, MCP servers exist). **Skill names must be unique within an account** — a duplicate name is rejected with a prompt to choose a different name.
142+
At upload time, the system automatically validates that: the archive is a valid zip, `SKILL.md` exists in the root directory, the frontmatter is parseable, `name` follows kebab-case naming, and all declared tools are valid (built-in tools exist, MCP servers exist). **Skill names must be unique within a team** — a duplicate name within the same team is rejected with a prompt to choose a different name; different teams may each own a skill with the same name.
139143

140144
<Note>
141145
All metadata other than the skill name (description, version, tags, author, tools, etc.) is parsed from `SKILL.md`'s frontmatter and does not need to be entered separately in the form.

‎en/monitors/explore/explore.mdx‎

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
---
2+
title: "Query Workbench"
3+
description: "Run ad-hoc queries against Prometheus, Loki, VictoriaLogs, SLS, CLS, and SQL data sources in Flashduty Monitors. Supports graph, raw, and log volume views."
4+
keywords: ["Explore", "Query Workbench", "ad-hoc query", "Prometheus", "Loki", "data source"]
5+
---
6+
7+
The Query Workbench (Explore) is an ad-hoc query interface in Flashduty Monitors for running temporary queries against data sources without creating alert rules. It supports Prometheus, Loki, VictoriaLogs, Alibaba Cloud SLS, Tencent Cloud CLS, and MySQL, PostgreSQL, Oracle, ClickHouse, Elasticsearch data sources.
8+
9+
## Access
10+
11+
- **From the data source list**: Go to **Monitors → Data Sources** and click the "Query Workbench" entry on the target data source row.
12+
- **Direct URL**: Navigate to `/monit/explore` and select a data source in the page.
13+
- **From incident/alert labels**: In the label area of incident or alert detail, the "Explore" icon on query-type label rows opens the workbench with the alert's triggering query and time window pre-filled.
14+
15+
## Query Types
16+
17+
Different data sources support different query types, switched above the editor:
18+
19+
| Data Source | Query Type | Description |
20+
|-------------|-----------|-------------|
21+
| Prometheus | Graph + Raw | Shows both a line chart and raw samples |
22+
| Prometheus | Graph only | Shows only the line chart (range query) |
23+
| Prometheus | Raw only | Shows only raw samples (instant query) |
24+
| Loki | Range | Returns log lines within the time range |
25+
| Loki | Instant | Returns matching log lines at the current moment |
26+
| VictoriaLogs | Raw logs | Returns raw log lines |
27+
| VictoriaLogs | Instant stats | Returns instant aggregate statistics |
28+
| VictoriaLogs | Range stats | Returns range trend statistics |
29+
| SLS / CLS | — | No query type selector; vendor-classified logs/tables |
30+
| MySQL / PostgreSQL / Oracle / ClickHouse / ES | — | SQL/query expression executed directly |
31+
32+
## Result Display
33+
34+
The result area auto-layouts based on data source and query type:
35+
36+
- **Prometheus**: Split pane — line chart (Graph) on top, raw samples (Raw) below, with a draggable splitter.
37+
- **Other data sources**: Single result pane showing log view, table view, or samples view depending on the query type.
38+
39+
### Graph Features
40+
41+
- **Drag-to-zoom**: Drag-select a time range on the chart to zoom in.
42+
- **Legend facet filtering**: The legend area supports searching by label value and grouping by metric name. Series beyond the display limit are collapsed; click to expand.
43+
- **Tooltip**: Hover to see values for all series at a given time point. Series beyond the limit are summarized in the tooltip.
44+
45+
### Log Time Distribution
46+
47+
When the query type includes logs, a log time distribution chart appears above the result area:
48+
49+
- Time range ≤ 24 hours: auto-loaded.
50+
- 24 hours – 30 days: requires manual click to load.
51+
- Beyond 30 days: not supported.
52+
53+
## Query Parameters
54+
55+
In addition to the query expression, some data sources support private parameters:
56+
57+
| Parameter | Data Sources | Description |
58+
|-----------|-------------|-------------|
59+
| Limit | Loki / VictoriaLogs | Caps the number of returned rows |
60+
| Min step (seconds) | Prometheus | Lower bound for auto step calculation |
61+
| Direction | Loki / VictoriaLogs | Latest-first or earliest-first |
62+
| Project / Logstore | SLS | Required; used in the request URL |
63+
| Region / Topic / Syntax | Tencent CLS | Required |
64+
| PowerSQL | SLS | Enables PowerSQL mode |
65+
| Time macros | SQL data sources | `$__timeFilter(column)`, `$__timeFrom()`, `$__timeTo()` make the time range take effect |
66+
67+
## Query History
68+
69+
Each successful query is automatically saved to query history, which stores only the query expression — not the time range or results. History is isolated per data source, stored in the browser locally, and retains up to 200 entries. When the limit is exceeded, the oldest entry is evicted. Oversized query expressions are not saved to history but the query itself still succeeds. You can delete individual entries or clear all history for the current data source from the history panel.
70+
71+
## Sharing and URL State
72+
73+
The workbench encodes the current data source, query expression, time range, and query type into URL parameters. Copy the browser address bar to share the current query state — opening the link restores it automatically. If the data source in the link doesn't exist, is disabled, or the user lacks permissions, the page prompts and does not auto-execute.
74+
75+
## Edge Version Requirements
76+
77+
The Query Workbench relies on monit-edge to execute queries. If the Edge version in the data source's cluster is too low or versions are mixed, the page shows an upgrade prompt and disables querying. All Edge instances in the cluster must be upgraded to the required version before use.

‎en/on-call/channel/escalation-rule.mdx‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,10 @@ Determines how users are reached.
8181
<Note>
8282
**Don't use any of the above IM platforms?** You can select any bot type and set the webhook URL to your own server endpoint (the system does not validate domains), then implement the corresponding message protocol on your server. See [FAQ](/en/on-call/quickstart/faq#custom-bot-notifications).
8383
</Note>
84+
85+
<Info>
86+
**Cross-team webhook address scoping.** When selecting a Webhook bot address in a dispatch policy, addresses are grouped by ownership tier: **Current Channel** (already referenced by this channel), **Same Team** (referenced by other channels in the same team), and **Other Team** (referenced only by channels in other teams). Other-team addresses are collapsed by default and require manual expansion. Selecting an other-team address shows a **Cross-team** badge and warning; on save, a confirmation modal appears when cross-team addresses are present, preventing alerts from being sent to another team's chat by accident.
87+
</Info>
8488
</Tab>
8589
</Tabs>
8690

‎en/on-call/incident/handle-update-incident.mdx‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ You have three ways to acknowledge a newly triggered incident.
6565
<Tab title="Acknowledge via Console">
6666
- **Single Acknowledge**: Click incident details in console, click **Acknowledge** button to complete
6767
- **Batch Operation**: In console incident list, select multiple triggered incidents, click **Acknowledge** button for batch acknowledgment
68+
- **AI Analysis**: After selecting multiple incidents, click the **AI Analysis** button to batch-send the selected incidents as context to the AI SRE Agent for analysis. This button requires the AI SRE module to be enabled and the `AiSreChatVisit` permission; if all selected incidents belong to the same team, the session defaults to that team's scope.
6869
</Tab>
6970

7071
<Tab title="Acknowledge via IM App">

‎en/on-call/incident/search-view-incident.mdx‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,8 @@ Incident labels are displayed in the **Details** area of the details page. When
117117

118118
Jumping to an entity-tree rule requires contextual labels such as `__entity_alert_account_id`, `__entity_alert_entity_definition_id`, `__entity_alert_data_source_id`, and `__entity_alert_policy_scope_group_id` for locating; when any required label is missing or invalid, the label value is shown as plain text. Standalone alert rules (`rule_id` / `__alert_rule_id`) likewise require a positive integer value (e.g. `123`); when the value is empty, `0`, or non-numeric, the label is shown as plain text to avoid generating an invalid link. This deep-link capability also applies to the label area of the alert details page.
119119

120+
Additionally, when a label carries query-type information (such as the PromQL / log expression that was active when the alert triggered), an **Explore** icon appears on the right side of the label row. Clicking it opens the Query Workbench in a new tab, pre-filled with the alert's triggering query and a time window set around the alert's start time. A single query links directly; multiple queries (primary + related) display a popover list for selection.
121+
120122
### Detail Tabs
121123

122124
The incident details page contains 7 tabs; some appear only under certain conditions:

‎en/rum/analytics/native.mdx‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@ The Insights dashboard includes 4 core analysis dimensions: **Overview**, **Perf
1212
<Note>
1313
**Platform Differences**
1414

15-
The Native dashboard applies to Android, iOS, HarmonyOS, and Flutter apps, with the following platform-specific differences:
15+
The Native dashboard applies to Android, iOS, HarmonyOS, Flutter, and React Native apps, with the following platform-specific differences:
1616

17-
- **Flutter**: A single Flutter app spans both Android and iOS, so the filter bar additionally pins the `os_name` filter to let you slice metrics by device OS. In the Overview and Error Analysis, the **ANR Rate** (from Android devices) and **Unresponsive Time Rate** (from App Hangs on iOS devices) cards are displayed side by side.
17+
- **Flutter / React Native**: A single Flutter or React Native app spans both Android and iOS, so the filter bar additionally pins the `os_name` filter to let you slice metrics by device OS. In the Overview and Error Analysis, the **ANR Rate** (from Android devices) and **Unresponsive Time Rate** (from App Hangs on iOS devices) cards are displayed side by side.
1818
- **HarmonyOS**: The SDK does not report performance or hang metrics yet, so hang-related cards are hidden and the "Performance" tab is not available.
1919
- **Electron**: Does not use the Native dashboard — Electron apps reuse the **Web Insights dashboard**, but UV is keyed on the anonymous ID (the Electron SDK does not report `usr_id`). See "Metrics Reference" below.
2020
</Note>
@@ -510,7 +510,7 @@ Flashduty RUM typically completes data collection and display within **1-3 minut
510510
| App Startup Time | vital_duration (vital_type=app_launch, vital_app_launch_metric=ttid) | Within 2s | Within 4s | Over 4s |
511511
| Frame Rate | view_refresh_rate_average | 55 FPS or above | 50 FPS or above | Below 50 FPS |
512512
| CPU Usage | view_cpu_ticks_per_second | Below 40 ticks/s | Below 60 ticks/s | 60 ticks/s or above |
513-
| Memory Usage | view_memory_average | Below 100 MB | Below 200 MB | 200 MB or above |
513+
| Memory Usage | view_memory_average | Below 200 MB | Below 400 MB | 400 MB or above |
514514
| Peak Memory | view_memory_max | Below 200 MB | Below 400 MB | 400 MB or above |
515515
| JS Thread Frame Rate | view_js_refresh_rate_avg | 55 FPS or above | 50 FPS or above | Below 50 FPS |
516516

‎en/rum/explorer/overview.mdx‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,15 @@ Each saved view contains the following information:
133133
</Tab>
134134
</Tabs>
135135

136+
## Event Export
137+
138+
The event table in the Sessions Explorer provides a **CSV Export** button that exports the data under the current filter conditions and column configuration.
139+
140+
- **Export limit**: A single export caps at 5000 rows. If the filtered data exceeds the limit, a toast notification appears after export completes, indicating that the first N rows were exported and more data remains.
141+
- **Column matching**: Exported columns match the current event type's column settings — names, order, and units follow the on-screen configuration. When field metadata is not yet loaded, the export uses raw field names and bare values.
142+
- **Cancel export**: Clicking the button again during an export cancels it; any fetched data is not saved.
143+
- **Scope**: All view types in the Sessions Explorer event table support export.
144+
136145
## Next Steps
137146

138147
<CardGroup cols={2}>

‎en/rum/sdk/react-native/sdk-integration.mdx‎

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ keywords: ["RUM", "React Native SDK", "user monitoring", "mobile monitoring", "J
77
The React Native SDK wraps the native iOS / Android SDKs and provides RUM capabilities through `@flashcatcloud/mobile-react-native`. After initialization, the SDK reports the application's views, user actions, network requests, errors, and crashes to Flashduty RUM, with `source: "react-native"` identifying the data source.
88

99
<Info>
10-
The current SDK version is `0.1.x` and supports the **iOS and Android** platforms (React Native Web is not supported). JavaScript class names begin with `Dd*` (such as `DdSdkReactNative`, `DdSdkReactNativeConfiguration`, and `DdRum`). Session Replay is not supported; Logs only work on Android and are a no-op on iOS.
10+
The current SDK version is `0.1.x` and supports the **iOS and Android** platforms (React Native Web is not supported). The SDK provides two API entry points: `DatadogProvider` / `DatadogProviderConfiguration` (recommended, declarative initialization via a React component wrapper) and `DdSdkReactNative` / `DdSdkReactNativeConfiguration` / `DdRum` (imperative API, still available). Session Replay is not supported; Logs only work on Android and are a no-op on iOS.
1111
</Info>
1212

1313
## Prerequisites
@@ -58,16 +58,16 @@ module.exports = withDatadogMetroConfig(
5858

5959
## Initialize the SDK
6060

61-
Initialize as early as possible in the application entry, and only once. The three boolean constructor arguments control automatic collection of user actions, network requests, and JS errors respectively.
61+
Initialize as early as possible in the application entry, and only once. Using the `DatadogProvider` component to wrap your app root is recommended — it installs JS-layer instrumentation (the XHR proxy behind `track XHR / fetch resources`) before initializing the native SDK, capturing network requests during startup. The imperative `DdSdkReactNative.initialize()` is still available but loses the startup-window resource collection. The three boolean constructor arguments control automatic collection of user actions, network requests, and JS errors respectively.
6262

6363
```typescript App.tsx
6464
import {
65-
DdSdkReactNative,
66-
DdSdkReactNativeConfiguration,
65+
DatadogProvider,
66+
DatadogProviderConfiguration,
6767
TrackingConsent,
6868
} from '@flashcatcloud/mobile-react-native';
6969

70-
const config = new DdSdkReactNativeConfiguration(
70+
const config = new DatadogProviderConfiguration(
7171
'<CLIENT_TOKEN>',
7272
'production',
7373
'<APPLICATION_ID>',
@@ -80,8 +80,15 @@ config.site = 'CN';
8080
config.serviceName = 'com.example.shopping'; // Recommended: keeps Android and iOS under one service
8181
config.nativeCrashReportEnabled = true; // Collect native Android / iOS crashes
8282
config.sessionSamplingRate = 100;
83+
config.firstPartyHosts = ['<YOUR_API_HOST>']; // Matching hosts get tracing headers
8384

84-
DdSdkReactNative.initialize(config);
85+
export default function App() {
86+
return (
87+
<DatadogProvider configuration={config}>
88+
{/* your app */}
89+
</DatadogProvider>
90+
);
91+
}
8592
```
8693

8794
<Tip>

0 commit comments

Comments
 (0)