diff --git a/docs.json b/docs.json index 98e1dc1e..75a1c820 100644 --- a/docs.json +++ b/docs.json @@ -1503,6 +1503,10 @@ "source": "/en/rum/error-tracking/erro-reporting/web", "destination": "/en/rum/error-tracking/error-reporting/web" }, + { + "source": "/en/rum/quickstart/faq", + "destination": "/en/rum/sdk/web/faq" + }, { "source": "/account/info", "destination": "/zh/api-reference/platform/account/account-read-info" diff --git a/en/ai-sre/im.mdx b/en/ai-sre/im.mdx index 60e2dc3c..cd187e62 100644 --- a/en/ai-sre/im.mdx +++ b/en/ai-sre/im.mdx @@ -5,7 +5,7 @@ keywords: ["AI SRE", "IM", "Slack", "Lark", "DingTalk", "WeCom", "war room", "@m sidebarTitle: IM platform --- -> Activate AI SRE separately; it does not require an On-call subscription or a member license. Every plan can create IM applications for AI conversations. Using an application for On-call notifications, including escalation policies and on-call reminders, still requires an active On-call Professional plan. +> Activate AI SRE separately; it does not require an On-call subscription or a member license. Every plan can create IM applications for AI conversations. Using an application for On-call notifications, including escalation policies and on-call reminders, still requires an active On-call Pro plan. ## Overview @@ -49,10 +49,10 @@ IM interaction requires that you have already connected the corresponding platfo ## AI SRE settings in IM integrations -Open the corresponding IM integration under **On-call → Integration Center → Integration List → Instant Messaging** and configure its AI SRE behavior under **Enhanced features**. Of the three switches below, the first two are on by default and the last one is off by default: +Open the corresponding IM integration under **On-call → Integration Center → Integration List → Instant Messaging** and configure its AI SRE behavior under **Advanced Features**. Of the three switches below, the first two are on by default and the last one is off by default: - **Allow AI SRE conversations in IM**: available without enabling War Room. It controls both entry points — **group @mentions** and **direct chats with the bot**; in Slack it also controls the `/fd` command. Turning it off makes group @mentions and direct chats with the bot (and, in Slack, `/fd`) silent. In WeCom's Third-party App mode, only direct chats with the bot are available; group @mentions require Custom App Integration mode. -- **Use thread replies in normal group chats**: available only for Feishu/Lark and Slack. When enabled, each normal-group thread has an independent session; War Rooms still receive replies directly in the group. +- **AI SRE uses thread replies in regular group chats**: available only for Feishu/Lark and Slack. When enabled, each normal-group thread has an independent session; War Rooms still receive replies directly in the group. - **Allow AI to reply proactively**: available only on Slack, Lark / Feishu and Microsoft Teams; DingTalk and WeCom have no such switch. When enabled, AI reads messages in the connected group chats that **do not mention it** and replies only when it judges a reply worthwhile; @mentions always get a reply. A message it reads but judges not worth answering gets neither a receipt nor a reply. Each group can opt out with `/ambient off` (see [/ambient command](#ambient-command)). @@ -76,7 +76,7 @@ In a connected IM group with **Allow AI SRE conversations in IM** on, **@mention -The **reply mode** is configurable (off / first / all), controlling whether AI SRE @mentions the person who asked, and whether it replies **in-thread** or in the main channel. In a busy large group, in-thread replies keep the investigation discussion focused without flooding the channel. +In normal group chats on Feishu / Lark and Slack, whether AI SRE replies inside the thread is set by **AI SRE uses thread replies in regular group chats** under **Advanced Features** of the IM integration (on by default). In a busy large group, enabling it gives each thread its own session, so the investigation discussion stays focused without flooding the channel. ### Attachments and images @@ -98,22 +98,10 @@ Per turn, the attachment quota is counted by type. The current message's attachm ### Processing receipt -Once the bot has your message, it first puts an emoji reaction on **the message you sent**, as an immediate "received, working on it" signal. The emoji is picked at random from a small set for each platform: - -| Platform | Emoji | -| --- | --- | -| Slack | eyes, hourglass_flowing_sand | -| Lark / Feishu | Typing, OneSecond | -| DingTalk | Platform built-in emotions: 专注, 忙疯了 | - -On Slack this sits alongside a native "is working on it" status, which the bot also shows. - -The reaction is removed once the answer is delivered. +Once the bot has your message, it puts an emoji reaction on **the message you sent** as a "received, working on it" signal (WeCom has no emoji API, so it posts a placeholder message that the task checklist card and the final answer then replace in place). The reaction is removed once the answer is delivered. Slack also shows a native "is working on it" status. With **Allow AI to reply proactively** on, a receipt is added only to the message AI decides to answer: a message it read but judged not worth answering gets neither a receipt nor a reply. -WeCom has no emoji API, so its "processing" receipt is a placeholder message, such as a random "On it…". The task checklist card and the final answer then replace it in place. - ### How a reply reaches the chat Once you hand AI SRE an investigation, every message that appears in the group is one of two kinds: @@ -187,7 +175,15 @@ On the automation channel, nobody is watching and no reply will arrive. The agen ## In-session switch commands -IM sessions have no picker UI like the console. Instead, three slash commands let you adjust session bindings and proactive replies **mid-conversation**. Console sessions don't support these commands: their environment and team bindings are fixed at creation, and proactive replies are configured only in IM groups. +IM sessions have no picker UI like the console. Instead, slash commands let you adjust session bindings and proactive replies **mid-conversation**. Console sessions don't support these commands: their environment and team bindings are fixed at creation, and proactive replies are configured only in IM groups. On Slack, write a command as `/fd `, for example `/fd stop`. + +| Command | What it does | +| --- | --- | +| `/new [message]` | Starts a fresh conversation and resets the context; with a message, starts from it. Not available in groups with thread replies on; open a new top-level @mention instead | +| `/stop` | Stops the current analysis | +| `/help` | Lists the commands | + +The next three switch bindings and proactive replies. ### /env — Switch Runner environment @@ -260,7 +256,7 @@ Once an AI SRE reply lands in a group chat, anyone in the group can rate it — Whether you start a session from IM or the console, it's **the same AI SRE**. It handles messages one at a time and streams output. It compacts context automatically in long conversations and supports optional team and environment bindings. The only difference is the entry point — - **Console**: ask questions one at a time in the **Chat** workspace and view the full tool-call and sub-session panels. Environment and team bindings are fixed at creation and cannot be changed. -- **IM**: @mention it in the group where your team already works; findings are posted back to the thread. Use `/env` and `/scope` to switch bindings mid-conversation, and `/ambient` to control whether the group gets proactive replies. Great for grabbing a quick analysis at the incident scene, then diving deeper in the console. +- **IM**: @mention it in the group where your team already works; findings are posted back to the thread. Use `/env` and `/scope` to switch bindings mid-conversation, `/ambient` to control whether the group gets proactive replies, and `/stop` to stop the current analysis at any time. Great for grabbing a quick analysis at the incident scene, then diving deeper in the console. For more about sessions, see [Conversations](/en/ai-sre/sessions). diff --git a/en/ai-sre/knowledge.mdx b/en/ai-sre/knowledge.mdx index cd92e333..e7c8dbc8 100644 --- a/en/ai-sre/knowledge.mdx +++ b/en/ai-sre/knowledge.mdx @@ -55,7 +55,7 @@ After reading `DUTY.md`, the agent decides which `@references` to expand based o | Constraint | Value | Notes | | --- | --- | --- | | File content | Plain text (UTF-8) | Validated by **content**, not extension: a file saves as long as it contains no NUL bytes and decodes as valid UTF-8. So `.py`, `.sql`, and even an extension-less `Dockerfile` can be uploaded alongside `.md` `.yaml` `.json` `.txt` `.sh`; conversely, a file with a `.txt` extension but binary content is rejected | -| Per-file size limit | 1 MiB | Files exceeding this cannot be saved | +| Per-file size limit | 1 MiB; 32 KB for `DUTY.md` | Files exceeding this cannot be saved. `DUTY.md` is loaded into the context in full on every turn, so its limit is smaller; move detail into other files | | Per-knowledge size limit | 5 MiB | The usage bar in the console reflects this quota | | File count limit | 100 | No new files can be added once the limit is reached | | Subdirectories | Allowed | Paths may contain `/` (for example, `runbooks/api-5xx.md`); path segments cannot start with `.` | diff --git a/en/ai-sre/overview.mdx b/en/ai-sre/overview.mdx index 60857aa0..247eba06 100644 --- a/en/ai-sre/overview.mdx +++ b/en/ai-sre/overview.mdx @@ -76,7 +76,7 @@ After closing: Billing and gift-credit periods run in consecutive 30-day windows from the first AI SRE activation. Disabling and re-enabling the service does not reset the period or grant that period’s gift credits again. Existing accounts retain their current period and continue with independent 30-day periods when it ends. -IM applications can be created, authorized, and enabled on every plan for AI SRE direct or group conversations. Using an application as an On-call notification target, including escalation policies and on-call reminders, still requires an active On-call Professional plan. Otherwise, selection is disabled, the server rejects the configuration, and restricted notifications from existing configurations are not sent. On-call expiry or downgrade does not interrupt AI SRE conversations. +IM applications can be created, authorized, and enabled on every plan for AI SRE direct or group conversations. Using an application as an On-call notification target, including escalation policies and on-call reminders, still requires an active On-call Pro plan. Otherwise, selection is disabled, the server rejects the configuration, and restricted notifications from existing configurations are not sent. On-call expiry or downgrade does not interrupt AI SRE conversations. On-call actions such as acknowledging or resolving an incident retain their existing permission and license requirements. AI SRE analysis does not grant additional incident-management permissions. diff --git a/en/ai-sre/sessions.mdx b/en/ai-sre/sessions.mdx index 9a33a94e..96f64097 100644 --- a/en/ai-sre/sessions.mdx +++ b/en/ai-sre/sessions.mdx @@ -286,19 +286,7 @@ As a conversation grows, AI SRE automatically summarizes older history while kee Progress is shown while compacting; afterwards the **Context** percentage in the chat header drops (hover for token usage). -A summary paraphrases the conversation, but the text before it is not lost: the messages and tool results it replaced are still stored exactly as they were returned. When an investigation depends on an exact value (an ID, a host, a metric value, a threshold, a log line, the text of an error, a command), the agent calls the built-in `session_transcript` tool to write that text into the `.history//` directory of its execution environment, then searches it with `grep` / `read` instead of repeating the summary's wording. If the value really is not there, it says so plainly rather than guessing. - -| File | Content | -| --- | --- | -| `seg_NNN.md` | The text replaced by the Nth summary | -| `tail.md` | Everything after the latest summary (always present, may be empty) | -| `index.md` | How many rows each file covers and its time span | - -What gets recorded is **what the agent was given at the time**: images and attachments leave only an `[inline …]` / `[file …]` placeholder, a truncated result keeps only the `file_path` of its full output, and a Subagent's internal steps stay in its own session rather than in these files. - - -This recall only works for agents that **have the tool**: the main session and a Subagent with full tools can use it, while a restricted Subagent such as a read-only one does not have the tool and can only go by the summary after compaction. - +Compaction only replaces what is sent to the model; the original messages and tool results stay stored. When an investigation depends on an exact value (an ID, a host, a metric value, a threshold, a log line, the text of an error, a command), the agent looks the original text up instead of repeating the summary's wording; if the value really is not there, it says so plainly rather than guessing. Images and attachments leave only a placeholder with no original text, and a truncated large output keeps only the file path of its full result. ## Choosing a runtime environment diff --git a/en/developer/cli.mdx b/en/developer/cli.mdx index bad530b1..5e756b0a 100644 --- a/en/developer/cli.mdx +++ b/en/developer/cli.mdx @@ -41,7 +41,6 @@ Read the latest version from the [CDN latest version pointer](https://static.fla | `FLASHDUTY_VERSION` | Install a specific version, for example, `v1.5.12` | latest | | `FLASHDUTY_INSTALL_DIR` | Custom install directory | the directory of the `flashduty` already on `PATH`, else `/usr/local/bin` (shell); `~\.flashduty\bin` (PowerShell) | | `MIRROR_URL` | Override the release asset download mirror prefix used by the installer script; must use `https://` | `https://static.flashcat.cloud/flashduty-cli` | -| `FLASHDUTY_UPDATE_BASE_URL` | Override the base URL used by `flashduty update` and the automatic update check | `https://static.flashcat.cloud/flashduty-cli` | | `INSTALLED_NAME` | Command name to install as, for example, `fduty` | `flashduty` | A copy installed under another command name uses that name in help output, error messages, and shell completion scripts; `flashduty update` replaces the running binary in place, under its own name and directory, instead of installing a default-named copy elsewhere. @@ -501,7 +500,7 @@ flashduty rum resource-info [--no-cache] # View the RUM plan version, quotas, flashduty oncall license-list # List people with active On-call licenses in the current account ``` -This read-only command returns each person's ID, name, and license type: `fixed` is explicitly assigned, while `temporary` is active for the current temporary-license window. The response also carries `release_limited`, which is `true` once the account has used up its license-release quota for the current billing period; while it is `true`, releasing a member's seat fails with the error code `NoLicense`. That quota is the [limit on the number of License releases in each billing period](/en/platform/pricing). +This read-only command returns each person's ID, name, and license type: `fixed` is explicitly assigned, while `temporary` is active for the current temporary-license window. ### calendar — Service calendars @@ -694,7 +693,7 @@ Panel runtime and variable resolution take their time window and variable select #### `prometheus-api-v1-label-{label_name}-values` — Query Prometheus label values -`GET /monit/prometheus/api/v1/label/{label_name}/values` (operationId `monit-prometheus-read-label-values`) carries a path parameter, so it is excluded from code generation and provided by a hand-written command. The command name is derived from the API path: the `monit` group plus the remaining path segments joined by hyphens. It appears under `flashduty monit --help` but is hard to guess, so use it as written here: +Lists every value of a label on a Prometheus-compatible data source. The command is named `monit prometheus-api-v1-label-{label_name}-values` (visible under `flashduty monit --help`); use it as written here: ```bash flashduty monit prometheus-api-v1-label-{label_name}-values --data-source-id @@ -960,7 +959,7 @@ inc_def456 High memory usage Warning Processing Staging 2026 Showing 2 results (page 1, total 2). ``` -A generated command's list response that carries fields beyond the row array (`items` / `docs` / `list`) — for example `calendar event-list`'s `days` or `oncall license-list`'s `release_limited` — prints an extra line after the row table: `Also in the response: (use --json to see it).` Those fields never appear in the table; use `--json` or `--output-format toon` to read them. +A generated command's list response that carries fields beyond the row array (`items` / `docs` / `list`) (for example `calendar event-list`'s `days`) prints an extra line after the row table: `Also in the response: (use --json to see it).` Those fields never appear in the table; use `--json` or `--output-format toon` to read them. @@ -1036,11 +1035,7 @@ For example, export only an incident ID, title, and progress: flashduty incident list --json --fields incident_id,title,progress ``` -When a list projection (`incident list`, `incident similar`, `alert-event list`, `channel escalate-rule-list`, `insight incidents`) exceeds its 16 KiB limit, the CLI handles it in three tiers, with every note going to stderr and stdout left untouched: - -1. **Whole page overflows**: only the leading rows that fit are emitted, with values intact. A stderr note reports how many rows were emitted. Narrow `--fields` or lower `--limit` to fit more rows per page. -2. **A single row overflows the budget**: that row's string values are shortened and end with `...`, and a stderr note names the clipped fields. Matching or filtering on a shortened field misses, so narrow `--fields` or `--limit` to get full values. Identifier fields (keys ending in `_id` or `_key`) are never shortened at any tier. -3. **A row cannot be reduced enough to fit**: the command fails with an error naming the largest fields (up to 3, with their byte sizes); reduce the fields in `--fields` or lower `--limit` and retry. +When a list projection (`incident list`, `incident similar`, `alert-event list`, `channel escalate-rule-list`, `insight incidents`) exceeds its 16 KiB limit, the three-tier reduction is the same as in "Generated-command output bound" above, with every note going to stderr and stdout left untouched. The difference is that you narrow the output with `--fields` or `--limit` to fit more rows per page or to get full values. Matching or filtering on a shortened field misses; identifier fields (keys ending in `_id` or `_key`) are never shortened at any tier. `incident detail` behaves differently when its projection overflows: the detail is a single object, and a truncated value is indistinguishable from a genuinely short one, so silently shortening it would hand you wrong data. A projection over 8 KiB therefore fails the command outright, and the error names the largest fields (up to 3, with their byte sizes). Reduce the fields in `--fields`, or omit `--fields` entirely to get the full detail, which is not subject to the projection limit. diff --git a/en/developer/go-sdk.mdx b/en/developer/go-sdk.mdx index 8d257edf..c5177585 100644 --- a/en/developer/go-sdk.mdx +++ b/en/developer/go-sdk.mdx @@ -307,12 +307,12 @@ zero := inc.StartTime.IsZero() // whether it's the unset sentinel -`AlertRuleV2`'s `investigation_targets` (the same return type of `AlertRules.ReadInfoV2` / `WriteCreateV2` / `WriteUpdateV2`) changed shape as well, so callers still sending the old fields have to migrate: +`AlertRuleV2`'s `investigation_targets` (the same return type of `AlertRules.ReadInfoV2` / `WriteCreateV2` / `WriteUpdateV2`) has this shape: -- The field itself is `[]InvestigationTarget`, at most 20 entries with no duplicates, and the serialized list must not exceed **32 KiB** (`MaxInvestigationTargetsBytes = 32 * 1024`; exceeding it returns `investigation_targets must not exceed 32768 bytes`). On the update endpoint it is presence-based — omitting it keeps the saved configuration, sending `[]` clears it. Each entry may carry an optional `purpose`: one-sentence plain text saying what the entry helps confirm (**do not put line breaks in it**; the server validates ≤512 bytes and requires valid UTF-8 with no control characters, while the console caps the input at 200 characters, so the API accepts somewhat more than the console, but 200 CJK characters can already exceed 512 bytes). `purpose` is literal text, not a template, and is not part of alert identity or de-duplication. +- The field itself is `[]InvestigationTarget`, at most 20 entries with no duplicates, and the serialized list must not exceed **32 KiB** (32768 bytes); exceeding it returns `investigation_targets must not exceed 32768 bytes`. On the update endpoint it is presence-based — omitting it keeps the saved configuration, sending `[]` clears it. Each entry may carry an optional `purpose`: one-sentence plain text saying what the entry helps confirm (**do not put line breaks in it**; the server validates ≤512 bytes and requires valid UTF-8 with no control characters, while the console caps the input at 200 characters, so the API accepts somewhat more than the console, but 200 CJK characters can already exceed 512 bytes). `purpose` is literal text, not a template, and is not part of alert identity or de-duplication. - Each entry is a **closed tagged union**, and `Kind` decides which sub-object you supply. `dashboard` (opens a dashboard panel) requires `Dashboard`, and `query` (opens an Explore query) requires `Query`. Supplying the other one, or an unknown field, is rejected. - `TimeRange` (`InvestigationTimeRange`: `BeforeSeconds` and `AfterSeconds`) is required on **every** saved entry — both directions are non-negative and at least one is greater than zero. -- The `Dashboard` entry (`DashboardInvestigationTarget`) replaces the old `VariableBindings` (keyed by dashboard variable name, with values of `{source: event_label, key: label name}`) with `Variables`: a `map[string]string` keyed by variable name whose values are literal, and may reference event labels through `{{ }}` templates (the old `InvestigationVariableBinding` type is gone). `DashboardID` and `Variables` are required and `TargetID` is optional; `DashboardID` and `TargetID` must both be canonical UUIDv7 values. +- The `Dashboard` entry (`DashboardInvestigationTarget`) takes its variables in `Variables`: a `map[string]string` keyed by variable name whose values are literal, and may reference event labels through `{{ }}` templates. `DashboardID` and `Variables` are required and `TargetID` is optional; `DashboardID` and `TargetID` must both be canonical UUIDv7 values. - The `Query` entry uses `QueryInvestigationTarget`: `Query` is required and is a `DashboardQuery` — `Mode` is `instant`, `range`, or `window`, `Expr` is an expression in the target data source's own language that may use `{{ }}` templates, `Args` are named parameters passed through verbatim and must not contain templates, and `MinStepSeconds` is only accepted when `Mode` is `range`. `DatasourceID` may be omitted (or set to 0), which runs the query on the alert event's own datasource. diff --git a/en/developer/mcp-server.mdx b/en/developer/mcp-server.mdx index 16aff6b9..e1448d81 100644 --- a/en/developer/mcp-server.mdx +++ b/en/developer/mcp-server.mdx @@ -270,7 +270,7 @@ The tools in each toolset are as follows: | Parameter | Type | Description | | --- | --- | --- | | `incident_ids` | string | Comma-separated full incident IDs for direct lookup. When provided, all other filters are ignored. | - | `nums` | string | Comma-separated short incident IDs (the 6-char number shown in the UI, for example, `311510`). Matched within the `since`/`until` window; a single lookup is capped to ~30 days, so incidents older than that must be queried by their full `incident_id`. | + | `nums` | string | Comma-separated short incident IDs (the 6-char number shown in the UI, for example, `311510`). Matched within the `since`/`until` window; a single lookup is capped to 31 days, so incidents older than that must be queried by their full `incident_id`. | | `since` | string | Query start time (see time format reference below). | | `until` | string | Query end time (see time format reference below). | | `progress` | string | Filter by status: `Triggered`, `Processing`, `Closed`. Comma-separated for multiple values. | @@ -285,7 +285,7 @@ The tools in each toolset are as follows: - **Both omitted**: defaults to the last 30 days (convenient for querying current/open incidents). - **Only `since` provided**: queries from that time through the current moment. - **Only `until` provided**: not allowed — returns an error (`since` is required when `until` is set; omit both to use the 30-day default). - - **Both provided**: queries the specified range; the span is capped at about 30 days. + - **Both provided**: queries the specified range; the span is capped at 31 days, and a longer one returns an error. **Accepted time formats** for `since` and `until`: - Relative duration: `30d`, `24h`, `168h` (meaning "this far before now") diff --git a/en/monitors/data-sources/data-sources.mdx b/en/monitors/data-sources/data-sources.mdx index 8ec4c9e1..dd099b06 100644 --- a/en/monitors/data-sources/data-sources.mdx +++ b/en/monitors/data-sources/data-sources.mdx @@ -6,7 +6,7 @@ keywords: ["data source", "Prometheus", "Elasticsearch", "Loki", "ClickHouse", " Data sources are where the alert engine queries data. You need to configure data sources first so the alert engine can read data from them for anomaly detection. -**Menu Entry**: Data Sources +**Menu Entry**: Data ingestion → Data Sources ## Supported data source types diff --git a/en/monitors/engine/engine-lost-alert.mdx b/en/monitors/engine/engine-lost-alert.mdx index 809da866..b492860e 100644 --- a/en/monitors/engine/engine-lost-alert.mdx +++ b/en/monitors/engine/engine-lost-alert.mdx @@ -6,7 +6,7 @@ keywords: ["engine disconnection", "alert engine", "monitedge", "disconnection a If the alert engine (`monitedge`) goes down, alert rules cannot execute, which has a significant impact. The engine disconnection alert feature sends timely notifications when the engine goes down, ensuring the reliability of your monitoring system. -**Menu Entry**: Alert Engine → Engine Disconnection Alert +**Menu Entry**: Data ingestion → Edge engines → Engine Disconnection Alert For an engine cluster composed of multiple instances, as long as at least one instance in the cluster is alive, the disconnection alert will not trigger. It only triggers when all instances in the cluster are disconnected. diff --git a/en/monitors/engine/engine.mdx b/en/monitors/engine/engine.mdx index d5fcf3c1..6d188b68 100644 --- a/en/monitors/engine/engine.mdx +++ b/en/monitors/engine/engine.mdx @@ -6,7 +6,7 @@ keywords: ["alert engine", "monitedge", "engine installation", "engine status", The alert engine (`monitedge`) is a core component deployed in your private network. It syncs alert rules from the Flashduty SaaS, reads data from local data sources for anomaly detection, and pushes alert events to the SaaS for further processing. -**Menu Entry**: Alert Engine +**Menu Entry**: Data ingestion → Edge engines (the page title is "Alert engine") The alert engine page contains three tabs: **Alert Engine Status**, **Engine Installation/Upgrade**, and **Engine Disconnection Alert**. diff --git a/en/monitors/entity-tree/entity-tree.mdx b/en/monitors/entity-tree/entity-tree.mdx index d02639cd..ed79008b 100644 --- a/en/monitors/entity-tree/entity-tree.mdx +++ b/en/monitors/entity-tree/entity-tree.mdx @@ -59,7 +59,7 @@ If the alert engine version is incompatible, the page prompts you to upgrade and ### 1. Request access -Go to **Monitors → Entity Tree**. If Entity Tree is not enabled for the account, click **Request access**. The page shows the submission time while the request is pending. You can start configuring Entity Tree after approval. +Go to **Rules → Entity Tree**. If Entity Tree is not enabled for the account, click **Request access**. The page shows the submission time while the request is pending. You can start configuring Entity Tree after approval. ### 2. Create an entity definition diff --git a/en/monitors/explore/explore.mdx b/en/monitors/explore/explore.mdx index 62df59c1..b9ab329a 100644 --- a/en/monitors/explore/explore.mdx +++ b/en/monitors/explore/explore.mdx @@ -8,7 +8,7 @@ The Query Workbench (Explore) is an ad-hoc query interface in Flashduty Monitors ## Access -- **From the data source list**: Go to **Monitors → Data Sources** and click the "Query Workbench" entry on the target data source row. +- **From the data source list**: Go to **Data ingestion → Data Sources** and click the "Query Workbench" entry on the target data source row. - **Directly**: open the Query Workbench and select a data source on the page. - **From incident/alert details**: From the **Investigation** block on an incident or alert details page, the **Investigate** popover on an associated alert row, or the hover card on a system label, clicking an entry opens the workbench with the alert's triggering query and time window pre-filled. See [Search and view incidents](/en/on-call/incident/search-view-incident#investigation). diff --git a/en/monitors/faq/faq.mdx b/en/monitors/faq/faq.mdx index 11a650eb..0dc7cf17 100644 --- a/en/monitors/faq/faq.mdx +++ b/en/monitors/faq/faq.mdx @@ -38,7 +38,7 @@ The overview page checks whether you have installed an alert engine. If not, a p -On the alert rule edit or detail page, you can find the **Clone** action button. Clicking it creates a new rule based on the current rule's configuration, with all settings copied over (except the name), making it easy to quickly create similar alert rules. +In the alert rules list, choose **Clone** in the `⋮` menu at the end of the rule's row. Clicking it creates a new rule based on the current rule's configuration, with all settings copied over (except the name), making it easy to quickly create similar alert rules. diff --git a/en/monitors/quickstart/quickstart.mdx b/en/monitors/quickstart/quickstart.mdx index de5433c2..9b5e5e7f 100644 --- a/en/monitors/quickstart/quickstart.mdx +++ b/en/monitors/quickstart/quickstart.mdx @@ -22,7 +22,7 @@ Define alert conditions and notification methods `monitedge` needs to be deployed in your private network. It is responsible for syncing alert rules from SaaS, periodically querying data sources, performing threshold evaluation, generating alert events, and pushing them to the SaaS. -**Menu Entry**: Alert Engine → Engine Installation/Upgrade +**Menu Entry**: Data ingestion → Edge engines → Engine Installation/Upgrade Supports Linux, Docker, and Kubernetes installation methods. @@ -47,7 +47,7 @@ Configure an engine disconnection alert to be notified promptly when the alert e ## Create data source -**Menu Entry**: Data Sources → New +**Menu Entry**: Data ingestion → Data Sources → New ![Create data source](https://docs-cdn.flashcat.cloud/imges/mon/3eee06165afe05405db6187205f7025c.png) @@ -58,7 +58,7 @@ Configure an engine disconnection alert to be notified promptly when the alert e ## Create alert rules -**Menu Entry**: Alert Rules +**Menu Entry**: Rules → Alert Rules There may be many alert rules. Monitors provides a tree-structured grouping for categorized management. Each alert rule must belong to a group. You can create groups first, then create alert rules under the groups. @@ -263,7 +263,7 @@ Click the number in the **Active alerts** column to switch to the **Active alert ## Rule runtime details -Every row in the alert rules list provides runtime introspection. Click **Runtime Details** in the row action menu (`⋮` at the end of the row) to open the rule runtime details drawer. Use it to judge the rule's execution health and troubleshoot quickly. +Every row in the alert rules list provides runtime introspection. Click **Runtime Details** in the row action menu (`⋮` at the end of the row; the menu items are Runtime details, Clone, Move, Version history, and Delete) to open the rule runtime details drawer. Use it to judge the rule's execution health and troubleshoot quickly. At the top of the drawer you can pick which **data source** to inspect (a rule may be bound to multiple data sources). The viewer's query (`readonly`) permission on each data source filters this picker. Data sources without that permission are dropped silently, so a restricted viewer may see fewer data sources than the rule binds. Below are two tabs: @@ -385,20 +385,20 @@ Select the rules to export in the list and click the **Export** button. The syst The exported YAML can be used for backup or imported into other environments through file upload — see [Import alert rules](#import-alert-rules). -## Rule change history +## Rule version history -Every alert rule has a complete change audit trail. You can view the **Change History** in the rule details to understand the historical modifications. +Click **Version history** in the `⋮` menu at the end of a row in the alert rules list to see how the rule has been modified (requires update permission on the rule). -### View change history +### View version history -The change history list shows the following information for each operation: +The version history list shows: | Column | Description | |--------|-------------| -| **Operation Time** | When the change occurred | -| **Operation Type** | Such as create, update, and so on | +| **Version** | The version number; the latest one carries a "Current version" badge | | **Operator** | The user who performed the change | +| **Operation time** | When the change occurred | ### Version comparison -Select two records in the change history list and click the **Compare** button. The system displays the differences between the two versions in JSON diff format, helping you quickly understand which configuration items were modified. +Select two versions in the version history list and click the **Compare** button. The system displays the differences between the two versions in JSON diff format, helping you quickly understand which configuration items were modified. diff --git a/en/on-call/advanced/war-room.mdx b/en/on-call/advanced/war-room.mdx index 9d3f645e..72fd1d2d 100644 --- a/en/on-call/advanced/war-room.mdx +++ b/en/on-call/advanced/war-room.mdx @@ -100,12 +100,13 @@ If someone later disables or deletes the war room's IM integration, the console ## Message sync -Flashduty posts key incident operations (acknowledgment, closure, snooze, comments, and so on) to the war room group in real time. Four [action item and follow-up](/en/on-call/incident/work-items) operations (created, assignees updated, completed, converted) are posted as plain text, for example: +Flashduty posts key incident operations (acknowledgment, closure, snooze, comments, and so on) to the war room group in real time. Five [action item and follow-up](/en/on-call/incident/work-items) operations (created, assignees updated, completed, converted, and automatic conversion when the incident closes) are posted as plain text, for example: - Created: `John created Action "Scale up the database connection pool"` - Assignees updated: `John updated assignees on Action "Scale up the database connection pool"` - Completed: `John completed Action "Scale up the database connection pool"` - Converted: `John converted Action "Scale up the database connection pool" to Follow-up` +- Automatic conversion: `Incident closed. 3 unfinished action(s) became follow-ups; track them on the incident page.` - In messages for follow-up operations, `Action` is replaced with `Follow-up` - When the operator cannot be resolved to a specific member, the message shows **System** as the operator diff --git a/en/on-call/analytics/insights.mdx b/en/on-call/analytics/insights.mdx index 12985667..12cc55f8 100644 --- a/en/on-call/analytics/insights.mdx +++ b/en/on-call/analytics/insights.mdx @@ -24,7 +24,7 @@ When customizing filter conditions, the system remembers your selections. Even a | Team | Select team names to query, supports multiple selection. Dashboard data updates based on selected teams | | Channel | Select channel names to query, supports multiple selection. Dashboard data updates based on selected channels | | Severity | Select severity levels to query, supports multiple selection. Dashboard data updates based on selected severity levels | -| Time Range | Select time range to query. Supports this week, last two weeks, this month, last month, and custom time ranges, querying up to the last **2 years (720 days)** of data (the exact limit depends on your plan). For older data, use the [API Query](/en/api-reference/on-call/analytics/insight-incident-list) | +| Time Range | Select time range to query. Supports this week, last 2 weeks, this month, last 1 month, last 6 months, last 1 year, and custom time ranges, querying up to the last **2 years (720 days)** of data (the exact limit depends on your plan). For older data, use the [API Query](/en/api-reference/on-call/analytics/insight-incident-list) | | Data Interval | Hourly by default; day, week or month also available. Daily view is not available for time ranges over 31 days | | Time Zone | Times and day/week/month statistics use your time zone (personal time zone first, otherwise the organization's), shown on the right of the filter bar | | Sorting | Team, channel, and individual dimension dashboards support ascending and descending order. Defaults to showing TOP 10 data; expand to show more | diff --git a/en/on-call/channel/create-edit.mdx b/en/on-call/channel/create-edit.mdx index 9df97de1..5a2dd290 100644 --- a/en/on-call/channel/create-edit.mdx +++ b/en/on-call/channel/create-edit.mdx @@ -40,20 +40,6 @@ Go to **Channels** → **Create Channel**. The wizard has four steps, and **step - **Public**: Visible to all users in the account, can view and operate incidents but cannot modify channel configuration - **Private**: Only visible to the owning team (or managing team), creator, and account administrators - - Enable the auto-resolve timeout toggle, then configure the following parameters: - - **Window timing start**: Select **Incident trigger** or **Alerts stop merging**. **Incident trigger** starts the timer when the incident first triggers and suits alerts without automatic recovery. **Alerts stop merging** starts the timer at the last alert merge and suits channels with alert grouping enabled - - **Timeout duration**: Set the timeout duration in minutes, hours, or days, up to a maximum of 30 days - - - This toggle is hidden by default; contact the Flashduty team to make it appear. Once visible, it is on by default. When enabled, incidents automatically close when all associated alerts recover. When disabled, alert recovery does not auto-close the incident — you need to close it manually or rely on the auto-close timeout policy. - - - When enabled, incident lists and notification content will include an "Outlier Incident" indicator for quick identification. [Learn more](/en/on-call/incident/outlier-incidents) - - - When enabled, external personnel can submit incident tickets with a shareable external reporting link without logging in. The system generates a shareable link that you can distribute to external personnel. Disabling external reporting immediately invalidates all previously shared links; re-enabling generates a new link. - ### Step 2: Configure an escalation rule (skippable) @@ -180,13 +166,13 @@ Go to Channel Details, then navigate to **Configuration** → **Settings** to mo | Setting | Description | Plan availability | | :--- | :--- | :--- | -| Auto-resolve timeout | Toggle, window timing start, timeout duration | All plans | -| Close with alerts | Automatically close the incident once all associated alerts recover | Contact the Flashduty team to enable on request | -| Outlier incident detection | Identify and flag unusual new incidents | Professional plan and above | -| External reporting | When enabled, generates a shareable link for external personnel to submit incident tickets without logging in | Professional plan and above | +| Auto close on timeout | Set **Timeout start point** to **Incident trigger** (the timer starts when the incident first triggers; suits alerts without automatic recovery) or **Stop merging new alerts** (the timer starts at the last alert merge; suits channels with alert grouping enabled). **Timeout duration** is set in minutes, hours, or days, up to 30 days | All plans | +| Close with alert recovery | On by default once visible. When on, the incident closes automatically after all associated alerts recover. When off, close it manually or rely on **Auto close on timeout** | Contact the Flashduty team to enable on request | +| Outlier incident detection | Adds a **Rare incident** indicator to incident lists and notifications. See [Outlier incidents](/en/on-call/incident/outlier-incidents) | Pro plan and above | +| External reporting | When enabled, generates a shareable link for external personnel to submit incident tickets without logging in. See [External reporting](/en/on-call/incident/external-submission) | Pro plan and above | - The free and standard plans hide the **Outlier incident detection** and **External reporting** toggles. The **Close with alerts** toggle is hidden by default; contact the Flashduty team to enable it. + The free and standard plans hide the **Outlier incident detection** and **External reporting** toggles. The **Close with alert recovery** toggle is hidden by default; contact the Flashduty team to enable it. ### Disabling and deleting diff --git a/en/on-call/channel/noise-reduction.mdx b/en/on-call/channel/noise-reduction.mdx index 0417e1cb..d7e8c904 100644 --- a/en/on-call/channel/noise-reduction.mdx +++ b/en/on-call/channel/noise-reduction.mdx @@ -3,7 +3,7 @@ title: "Noise reduction" description: "Reduce alert noise through grouping, silencing, inhibition, and other strategies to improve processing efficiency" --- -**Plan requirement**: which grouping methods you can pick depends on your subscription — **No grouping** is available on every plan, **Rule-based grouping** requires On-call Standard or higher, and **Intelligent grouping** requires On-call Professional (selectable by default on-premises). Alert storm warning and inhibit rules require an On-call Standard or higher subscription. Silence rules are available on all plans. [Learn more](https://flashcat.cloud/flashduty/price/) +**Plan requirement**: which grouping methods you can pick depends on your subscription — **No grouping** is available on every plan, **Rule-based grouping** requires On-call Standard or higher, and **Intelligent grouping** requires On-call Pro (selectable by default on-premises). Alert storm warning and inhibit rules require an On-call Standard or higher subscription. Silence rules are available on all plans. [Learn more](https://flashcat.cloud/flashduty/price/) An alert storm can bring hundreds of similar notifications. Noise reduction groups these alerts into one incident, so you handle it once instead of wading through repeats. @@ -75,19 +75,7 @@ The header of the **Alert grouping** and **Flapping detection** pages carries a **Prerequisite**: AI SRE is enabled for the account and you have permission to use AI SRE conversations. The button is hidden when either is missing. -The agent then works through these steps: - - - - It pulls this channel's recent alerts, over an adjustable look-back window of up to 30 days. From them it counts the titles that fire most, bursts where one title fires many times in a short span (and the labels that vary inside a burst), alerts that keep re-firing, and each label's coverage and number of distinct values. Nothing is written in this step. - - - It recommends a grouping method and dimensions, or a flapping observation window, state change threshold and mute duration, and says what the numbers are based on. On the Alert grouping page it also replays candidate dimensions through the page's own grouping preview, so it can give you an expected incident count and reduction instead of general advice. - - - Nothing is written straight away. The agent can fill the recommended values into the form for you to review and save, or, when you choose to save directly, call the page's own save. In that case a confirmation card lists every setting it will change with its before and after value (for example, "Dimensions: `labels.check` → `labels.check` + `labels.service`"), and only your confirmation writes it. The change takes effect immediately and the page refreshes itself. - - +The agent reads the channel's recent alerts (the look-back window is adjustable, up to 30 days) and recommends values; on the Alert grouping page it also gives an expected incident count from the page's grouping preview. Nothing is written straight away: you can review the recommended values it fills into the form and click **Save**, or let it save directly, in which case a confirmation card lists each setting with its before and after value (for example, "Dimensions: `labels.check` → `labels.check` + `labels.service`") and only your confirmation writes it. The change takes effect immediately. `/channel-noise` changes **Alert grouping** and **Flapping detection** only. For **Event aggregation**, silence rules, inhibit rules and drop rules it recommends what to change and names the page to change it on, but never writes. For how a reference tag travels with a message and how sessions are managed, see [Console chat](/en/ai-sre/sessions#attachments-and-context-references). @@ -133,7 +121,7 @@ Go to Channel Details → **Noise Reduction** to configure. Alert grouping merges multiple similar alerts into a single incident for unified assignment and notification. When an alert storm hits, you only need to handle one incident instead of hundreds of repeated notifications. - A new channel's grouping method is derived from your subscription. The create wizard's **Alert Grouping** step pre-selects it and marks that card with a **Default** badge, and saving the channel writes that configuration: free plans default to **No grouping**, Standard to **Rule-based grouping** (default grouping field `labels.check`), and Professional and on-premises deployments to **Intelligent grouping** (default fields for the similarity judgement: `title`, `description`, `labels.service`, `labels.resource`). With these defaults the aggregation window is **until the incident closes**, alert storm warning is **off** (default threshold 100 once enabled), and strict grouping is **off**. You can pick another available method in the wizard, or change it later under **Noise Reduction → Alert Grouping**. For the wizard step, see [Create a channel](/en/on-call/channel/create-edit#step-4-alert-grouping). + A new channel's grouping method is derived from your subscription. The create wizard's **Alert Grouping** step pre-selects it and marks that card with a **Default** badge, and saving the channel writes that configuration: free plans default to **No grouping**, Standard to **Rule-based grouping** (default grouping field `labels.check`), and Pro and on-premises deployments to **Intelligent grouping** (default fields for the similarity judgement: `title`, `description`, `labels.service`, `labels.resource`). With these defaults the aggregation window is **until the incident closes**, alert storm warning is **off** (default threshold 100 once enabled), and strict grouping is **off**. You can pick another available method in the wizard, or change it later under **Noise Reduction → Alert Grouping**. For the wizard step, see [Create a channel](/en/on-call/channel/create-edit#step-4-alert-grouping). ### Grouping modes @@ -142,7 +130,7 @@ The Alert Grouping page offers three mutually exclusive methods. A choice takes | Method | Description | Plan availability | | :------- | :--------------------- | :--- | -| **Intelligent grouping** | Decided automatically from how similar the titles, descriptions and label content are; no manual rules | Professional or higher (selectable by default on-premises) | +| **Intelligent grouping** | Decided automatically from how similar the titles, descriptions and label content are; no manual rules | Pro or higher (selectable by default on-premises) | | **Rule-based grouping** | Alerts with identical field values enter the same incident — predictable and previewable | Standard or higher | | **No grouping** | Every alert creates its own incident and never joins an existing one | Every plan | @@ -166,7 +154,7 @@ Clicking another method card shows that method's settings right below, with no c - Pick the **Intelligent grouping** card under **Grouping method** at the top of the page (greyed out on Standard, which needs Professional or higher) + Pick the **Intelligent grouping** card under **Grouping method** at the top of the page (greyed out on Standard, which needs Pro or higher) Select the fields used for similarity calculation. Default fields include: title, description, labels.service, labels.resource. You can add or remove fields based on your needs, up to a maximum of **10** fields. Click **Reset** to restore default settings. diff --git a/en/on-call/comparison/vs-opsgenie.mdx b/en/on-call/comparison/vs-opsgenie.mdx index 30973cad..203f0638 100644 --- a/en/on-call/comparison/vs-opsgenie.mdx +++ b/en/on-call/comparison/vs-opsgenie.mdx @@ -132,7 +132,7 @@ Response solves "closing the loop quickly once the right person is found": a sin | Core Capability | Flashduty | Opsgenie | | --- | --- | --- | | **Alert Integration** | 290+ integration sources with full coverage of China-region cloud and monitoring ecosystems (Alibaba Cloud, Tencent Cloud, Huawei Cloud, and so on), compatible with the PagerDuty protocol | 200+ integrations with a mature overseas ecosystem | -| **Heartbeat Monitoring** | Monitoring-side heartbeats are covered by the [Monitors engine-lost alert](/en/monitors/engine/engine-lost-alert); On-call has no standalone cron-job heartbeat capability | ✅ Heartbeats are a mature Opsgenie capability — evaluate alternatives for cron/scheduled-job monitoring before migrating | +| **Heartbeat Monitoring** | An integration's [No-event detection](/en/on-call/integration/alert-integration/alert-sources/standard-alert#no-event-detection) creates a Warning alert when no valid event arrives within 10 minutes to 48 hours, which can watch cron jobs; monitoring-side heartbeats are covered by the [Monitors engine-lost alert](/en/monitors/engine/engine-lost-alert) | ✅ Heartbeats are a mature Opsgenie capability — evaluate alternatives for cron/scheduled-job monitoring before migrating | | **Alert Pipelines & Label Enrichment** | Routing, filtering, severity reset, regex extraction, and [data mapping](/en/on-call/integration/alert-integration/label-enhancement) (import CMDB tables to dynamically generate labels) | Alert Policies cover basic filtering and field modification | | **Insights & Reporting** | MTTA/MTTR, personnel workload, frequency analysis, and **time period analysis** (work/rest/sleep) | Basic reporting | | **Private Deployment** | ✅ Supported | ❌ Cloud only | @@ -145,16 +145,16 @@ Response solves "closing the loop quickly once the right person is found": a sin | Dimension | Flashduty | Opsgenie / JSM Path | | --- | --- | --- | | **Billing Model** | License fee + excess communication fees | Per-user seats; after migrating to JSM, billed by the JSM plan | -| **Edition Pricing** | **Professional ¥199/user/month**, including intelligent grouping, AI summaries, and AI post-mortems; AI SRE is billed on usage-based credits | Opsgenie historical pricing (1–25 user band, annual): Essentials about \$9.45, Standard about \$19.95, Enterprise about \$31.90 per user/month; JSM has separate Free/Standard/Premium/Enterprise plans | +| **Edition Pricing** | **Pro ¥199/user/month**, including intelligent grouping, AI summaries, and AI post-mortems; AI SRE is billed on usage-based credits | Opsgenie historical pricing (1–25 user band, annual): Essentials about \$9.45, Standard about \$19.95, Enterprise about \$31.90 per user/month; JSM has separate Free/Standard/Premium/Enterprise plans | | **Billing Target** | ✅ **Only active users are charged** — only members who view and handle incidents need a License; notification recipients are free | Responders count as paid seats; Stakeholders (notify-only) are free on Enterprise per the licensing FAQ — evaluate per plan | | **Status Page Subscriptions** | ✅ Free, no account required | Requires a separately purchased Atlassian Statuspage plan | -| **Free Trial** | Professional 14 days free, extendable on request | No longer sold — no new trials | +| **Free Trial** | Pro 14 days free, extendable on request | No longer sold — no new trials | ### Billing model difference example Take a 100-person engineering team where 15 people routinely handle incidents: -| Cost Item | Flashduty Professional | Opsgenie Standard (historical) | +| Cost Item | Flashduty Pro | Opsgenie Standard (historical) | | --- | --- | --- | | Seats/Licenses required | **15** Licenses | Counted as Responder seats — assume 15 | | Monthly cost | 15 × ¥199 = **¥2,985/month** | 15 × \$19.95 ≈ **\$299/month** | diff --git a/en/on-call/comparison/vs-pagerduty.mdx b/en/on-call/comparison/vs-pagerduty.mdx index 19130208..f2390286 100644 --- a/en/on-call/comparison/vs-pagerduty.mdx +++ b/en/on-call/comparison/vs-pagerduty.mdx @@ -106,7 +106,7 @@ Communicating service status to the outside world is the last mile of incident m | Dimension | Flashduty | PagerDuty | | --- | --- | --- | -| **Availability** | [Status Page](/en/on-call/statuspage/statuspage) ships with the On-call product—public status pages are included starting from the free tier with **full feature parity across every tier**, and public + internal status pages are unified in one (internal status pages included from Professional up) | Each plan includes 1 public status page, **with features tiered by plan**; internal status pages require Business or above, and private status pages are a Premium add-on | +| **Availability** | [Status Page](/en/on-call/statuspage/statuspage) ships with the On-call product—public status pages are included starting from the free tier with **full feature parity across every tier**, and public + internal status pages are unified in one (internal status pages included from Pro up) | Each plan includes 1 public status page, **with features tiered by plan**; internal status pages require Business or above, and private status pages are a Premium add-on | | **Subscription Cost** | ✅ **Free for subscribers, no account required** | Public-page subscriptions are free but capped by plan (Professional 250 / Business 500 / Enterprise 1,000; exceeding the cap requires a sales add-on); **viewers of internal status pages and internal incident activity must hold an account, at minimum a paid Stakeholder license** | | **Subscription Granularity & Methods** | **Three-tier subscriptions** (all / component / event level), email + **confirmation-free RSS 2.0 / Atom 1.0 subscriptions**, with bulk import/export and self-service subscriber management | Email / Slack / Webhook | | **Multilingual Notifications** | ✅ Natively preserves each subscriber's language preference | — | @@ -215,11 +215,11 @@ Before reaching the team, alerts pass through routing, filtering, and transforma | --- | --- | --- | | **Pricing Page** | [flashduty.com/pricing](https://www.flashduty.com/pricing) | [pagerduty.com/pricing](https://www.pagerduty.com/pricing/incident-response/) | | **Billing Model** | License fee + excess communication fees | Seat fee + Add-Ons | -| **Edition Pricing** | **Professional ¥199/user/month**, including intelligent grouping, AI summaries, and AI post-mortems; AI SRE is billed on usage-based credits | Business \$41/user/month (annual billing); AIOps requires a separate add-on (starting at \$699+/month, billed by event volume); Advance tiers each include a one-time AI Action allowance, with extra usage billed separately | +| **Edition Pricing** | **Pro ¥199/user/month**, including intelligent grouping, AI summaries, and AI post-mortems; AI SRE is billed on usage-based credits | Business \$41/user/month (annual billing); AIOps requires a separate add-on (starting at \$699+/month, billed by event volume); Advance tiers each include a one-time AI Action allowance, with extra usage billed separately | | **Billing Target** | ✅ **Only active users are charged**—only members who view and handle incidents need a License | ❌ **All users must pay**—including members who only receive notifications | | **Notification Capability** | ✅ Members without a License can still receive all notifications (email, SMS, voice call, IM) | ❌ A paid seat is required to receive notifications; even just viewing internal incident activity requires at least a paid Stakeholder license | | **Status Page Subscriptions** | ✅ Free, no account required, doesn't consume a License | Public-page subscriptions are capped by plan (250/500/1,000), with an add-on required beyond that; viewing internal status pages requires a Stakeholder license | -| **Free Trial** | Professional 14 days free, extendable on request | Business 14 days free | +| **Free Trial** | Pro 14 days free, extendable on request | Business 14 days free | ### Billing model difference: License vs full-team seats @@ -248,7 +248,7 @@ This is the most fundamental pricing difference between Flashduty and PagerDuty. Take a 100-person engineering team where 15 people are routinely involved in incident handling as an example: -| Cost Item | Flashduty Professional | PagerDuty Business | +| Cost Item | Flashduty Pro | PagerDuty Business | | --- | --- | --- | | Seats/Licenses required | **15** Licenses | **100** seats | | Monthly cost | 15 × ¥199 = **¥2,985/month** | 100 × \$41 × 7.2 (estimated exchange rate) ≈ **¥29,500/month** | @@ -269,7 +269,7 @@ Take a 100-person engineering team where 15 people are routinely involved in inc | **Email Support** | ✅ | ✅ | | **Dedicated Support** | ✅ Dedicated IM service group, instant response | ❌ Requires separate purchase | | **Expert Remote** | ✅ Remote meetings to solve problems, one-on-one expert guidance | ❌ Requires separate purchase | -| **Service Hours** | Standard and Professional: 7×8 | — | +| **Service Hours** | Standard and Pro: 7×8 | — | | **Status Page** | ✅ [status.flashcat.cloud](https://status.flashcat.cloud/) | ✅ [status.pagerduty.com](https://status.pagerduty.com/) | --- diff --git a/en/on-call/configuration/custom-forms.mdx b/en/on-call/configuration/custom-forms.mdx index b3624698..76da6459 100644 --- a/en/on-call/configuration/custom-forms.mdx +++ b/en/on-call/configuration/custom-forms.mdx @@ -24,7 +24,7 @@ Use forms to collect handoff context, impact details, resolution notes, or scree | Image upload | Lets the person submitting the action upload images. | - Select an added element to set its help text, placeholder, and required rule. An element can always be shown, shown only when conditions match, or required only when conditions match. + Select an added element to set its help text, placeholder, and required rule. An element can always be shown, shown only when conditions match, or required only when conditions match. The create-incident form does not support display conditions; you can only set whether an element is required. Drag elements into the required display order. Flashduty saves the new order automatically, and it takes effect immediately. diff --git a/en/on-call/configuration/notifications.mdx b/en/on-call/configuration/notifications.mdx index e18a26dd..99c65aa2 100644 --- a/en/on-call/configuration/notifications.mdx +++ b/en/on-call/configuration/notifications.mdx @@ -278,8 +278,8 @@ If your team cannot do app integration temporarily, using bots is a simple, quic When enabled, the system uses the user mapping table to @ mention corresponding responders: - 1. Admin obtains user `user_id` from the Zoom console - 2. Create a Zoom-type mapping table in Flashduty **Configuration** → **Mappings**, mapping Flashduty member emails to Zoom `user_id` + 1. Admin obtains the user JID from the Zoom console + 2. Create a Zoom-type mapping table in Flashduty **Configuration** → **Mappings**, mapping Flashduty member emails to Zoom JID (target label `zoom_jid`) 3. Associate the corresponding Zoom bot and mapping table in **Escalation Rules** @@ -294,8 +294,8 @@ All bot types support the following advanced options, accessible by expanding ** | :--- | :--- | :--- | | **Alias** | All | Set an alias for the bot to help remember and distinguish different notification channels | | **Severity filter** | All | Select which alert severity levels trigger notifications. Incidents with unselected severity levels will not be pushed | -| **Notification event types** | Feishu/Lark, Dingtalk, WeCom, Slack, Zoom | Select which event types trigger notification pushes (for example, triggered, acknowledged, closed). All selected by default | -| **@ Mentions** | Feishu/Lark, Dingtalk, WeCom, Slack, Zoom | When enabled, @ mentions corresponding responders. Feishu/Lark and Zoom require a user mapping table; WeCom optionally supports one; Dingtalk matches by phone number by default. Dingtalk also supports @ all | +| **Notification event types** | Feishu/Lark, Dingtalk, WeCom, Zoom | Select which event types trigger notification pushes (for example, triggered, acknowledged, closed). All selected by default | +| **@ Mentions** | Feishu/Lark, Dingtalk, WeCom, Zoom | When enabled, @ mentions corresponding responders. Feishu/Lark and Zoom require a user mapping table; WeCom optionally supports one; Dingtalk matches by phone number by default. Dingtalk also supports @ all | The user mapping table defines the correspondence between Flashduty users and IM platform users. You can create and maintain mapping tables on the **Configuration** → **Mappings** page. @@ -320,7 +320,6 @@ Verify the following: - Feishu/Lark, Zoom: a **user mapping table** is correctly selected with complete mappings - WeCom: if using a mapping table, verify the mappings are correct - Dingtalk: verify member phone numbers are correct -- Slack: verify member account associations are correct diff --git a/en/on-call/configuration/schedule.mdx b/en/on-call/configuration/schedule.mdx index 3de39a58..9d54a08a 100644 --- a/en/on-call/configuration/schedule.mdx +++ b/en/on-call/configuration/schedule.mdx @@ -31,7 +31,7 @@ Understanding these concepts before configuration will help you better plan your - Go to **Schedule Management**, click "Create Schedule" + Go to **Schedule Management**, click **Create schedule** - **Schedule Name**: 1–40 characters, must be unique within the account - **Owning Team**: Specifies which team manages this schedule; team members gain edit permissions for this schedule - **Schedule Description**: Supports Markdown syntax, content can be included in notifications; up to 500 characters @@ -142,8 +142,8 @@ When on-call personnel need time off or have a temporary conflict, **don't modif On the schedule details page, click the time slot you want to adjust in the calendar view, and choose **Override**. The system prefills the default window as **[today 00:00, next day 00:00]**, which you can adjust as needed. - - In the on-call rule list, click **Add Rule** and switch the rule type to **Override**. This entry point is ideal for planning time off or coverage in bulk ahead of time. + + In the on-call rule list, click **Add rule** and switch the rule type to **Override**. This entry point is ideal for planning time off or coverage in bulk ahead of time. diff --git a/en/on-call/configuration/templates.mdx b/en/on-call/configuration/templates.mdx index 0b6cef68..b01e5d5a 100644 --- a/en/on-call/configuration/templates.mdx +++ b/en/on-call/configuration/templates.mdx @@ -114,6 +114,7 @@ Complete variable list for incident objects: | Images | []Image | | Incident images; each item has `Src`, `Href`, and `Alt` | | FireType | string | | Notification type: fire (notify) / refire (loop notify) | | IsFlapping | bool | | Whether in flapping state | +| `Fields` | map | | Custom field values, keyed by field name, for example `{{.Fields.severity_tag}}` | | Impact | string | | Incident impact, filled after closure | | RootCause | string | | Incident root cause, filled after closure | | Resolution | string | | Resolution, filled after closure | @@ -251,7 +252,7 @@ Limits and common failures: | The channel rejected the message: the channel's own error | The channel returned a failure; the message carries the channel's own error | -How test sends differ from real notifications: when the template has a syntax error, a real notification silently falls back to the system default template and is still delivered, while a test send shows "The template failed to render. Fix it first" — that is the point, to surface template problems. Conversely, a test send leaves no notification record on the incident, so it never acknowledges or closes an incident and never creates a war room. +How test sends differ from real notifications: when the template has a syntax error, a real notification falls back to the system default template and is still delivered, with the line "【🔴 Custom template rendering exception, downgraded to default template】" appended to bot and app messages, while a test send shows "The template failed to render. Fix it first" — that is the point, to surface template problems. Conversely, a test send leaves no notification record on the incident, so it never acknowledges or closes an incident and never creates a war room. ## Channel templates @@ -447,6 +448,10 @@ For the switches on the **Additional info** tab, see [Card Fields and Bottom Act Template formats supported by group chat bots. + +SMS, voice, mobile app push and group chat bot messages automatically get a notice line appended when the incident is flapping (`IsFlapping`), in an alert storm (`IsInStorm`), or the first of its kind in 30 days. You don't need to write it in the template and can't remove it. App cards and email don't get these lines. + + These channels do not render Markdown tables and send them as raw text: the Dingtalk, Slack and Telegram bots, the WeCom bot on Markdown v1, and the Dingtalk, Slack, WeCom and Teams apps. The preview flags this. For those channels, rewrite tables as lists. @@ -698,7 +703,7 @@ Go to **Incident List** → view incident details to see all label information. -Passing the syntax check when you save a template does not guarantee that every incident renders. If rendering fails when a notification is sent, the system falls back to the default template. +Passing the syntax check when you save a template does not guarantee that every incident renders. If rendering fails when a notification is sent, the system falls back to the default template, and bot and app messages end with the line "【🔴 Custom template rendering exception, downgraded to default template】". Recommend checking if variable exists before referencing: diff --git a/en/on-call/incident/alert-management.mdx b/en/on-call/incident/alert-management.mdx index 48158e86..c62e245e 100644 --- a/en/on-call/incident/alert-management.mdx +++ b/en/on-call/incident/alert-management.mdx @@ -7,7 +7,7 @@ description: "View, filter, and manage all alerts through the alert management p The alert management page provides an alert-centric view independent of incidents, where you can see detailed information about all alerts regardless of whether they have been grouped into incidents. -Go to **Incident List** → **Alert List** to access the alert management page. +On the **Incident List** page, click **More actions (⋯)** → **View alerts** in the top-right corner to open the alert management page; opened from inside a channel, the list is already filtered to that channel. The alert list displays the following information: @@ -45,12 +45,16 @@ The following filters are available at the top of the alert list: | :--- | :--- | | **Alert Title** | Substring match on the title, in plain text, wildcard, or regex form (see below) | | **Severity** | Multi-select Critical / Warning / Info | -| **Channel** | Filter by the channel the alert belongs to | -| **Integration** | Filter by the source integration of the alert | +| **Status** | All / Active / Resolved, always shown on the filter bar | +| **Channel** | Filter by the channel the alert belongs to (global alert list only) | +| **Integration** | Filter by the source integration of the alert (alert list inside a channel only) | | **Labels** | Filter by label key-value pairs, with candidate values loaded dynamically. Values match exactly; use **Alert Title** for fuzzy, wildcard, or regular-expression title lookup | -| **Alert ID** | Supports entering multiple IDs; invalid IDs are marked with a red tag | +| **Alert ID** | Supports entering multiple IDs, separated by Enter; an invalid ID is not accepted and an **Invalid ID format** notice appears | +| **Alert Key** | Exact match on the alert key (alert_key); multiple values are supported (any match) | | **Silenced / Inhibited** | Filter alerts that were ever silenced or inhibited | +A single query can span at most 31 days; a title search at most 7 days. + Each view keeps its filter conditions and restores them when you refresh or return to the page. @@ -105,10 +109,10 @@ The details page body is split into two tabs: | Tab | Description | | :--- | :--- | -| **Alert Overview** | The left side shows the alert description, labels, and **related events preview** (up to 5 entries, with a link to the *Associated Events* tab for the full list); the right side shows attributes (channel, trigger time), images, alert source, associated incident, and Links. Monit alerts additionally show an **Investigation** block after **Attributes** (see **Investigation** below) | -| **Associated Events** | Shows the list of all raw events associated with this alert | +| **Alert Overview** | The left side shows the alert description, labels, and **Alert events** (up to 5 entries; **View all** appears beyond 5 and links to the *Alert events* tab); the right side shows attributes (channel, trigger time), images, alert source, associated incident, and Links. Monit alerts additionally show an **Investigation** block after **Attributes** (see **Investigation** below) | +| **Alert events** | Shows the list of all raw events associated with this alert | -Append `?tab=events` to the alert details URL (for example, `/alert/detail/{id}?tab=events`) to open the **Associated Events** tab directly; switching tabs updates the address bar. The **View full event history** link on the incident details page opens alerts this way. +Append `?tab=events` to the alert details URL (for example, `/alert/detail/{id}?tab=events`) to open the **Alert events** tab directly; switching tabs updates the address bar. The **View full event history** link on the incident details page opens alerts this way. The **Alert Source** is clickable so you can quickly trace where an alert came from: diff --git a/en/on-call/incident/external-submission.mdx b/en/on-call/incident/external-submission.mdx index cfdea34f..9629218b 100644 --- a/en/on-call/incident/external-submission.mdx +++ b/en/on-call/incident/external-submission.mdx @@ -10,7 +10,7 @@ External incident submission allows external personnel (such as your customers o ## Enable external reporting -Go to **Channel Details → Configuration → Settings → Advanced Configuration** and turn on the **External Reporting** switch (you can also enable it in the channel creation wizard). Once enabled, the system generates a dedicated external reporting link for the channel — copy it and share it with external personnel. +Go to **Channel Details → Configuration → Settings → Advanced Configuration** and turn on the **External Reporting** switch. Once enabled, the system generates a dedicated external reporting link for the channel — copy it and share it with external personnel. - The external reporting link is a login-free submission entry. Anyone with the link can submit incidents, so share it only with intended recipients diff --git a/en/on-call/incident/outlier-incidents.mdx b/en/on-call/incident/outlier-incidents.mdx index 5ccc36d7..0313dd1e 100644 --- a/en/on-call/incident/outlier-incidents.mdx +++ b/en/on-call/incident/outlier-incidents.mdx @@ -42,7 +42,7 @@ You configure outlier incident detection per channel. It is on by default for Pr -Go to **Channel** → Select target channel → **Basic Settings** +Go to **Channel** → Select target channel → **Configuration** → **Settings** → **Advanced Configuration** Find **Outlier Incident Detection** option, enable or disable the feature diff --git a/en/on-call/incident/past-incidents.mdx b/en/on-call/incident/past-incidents.mdx index ad2f4bc6..e5823c8a 100644 --- a/en/on-call/incident/past-incidents.mdx +++ b/en/on-call/incident/past-incidents.mdx @@ -3,6 +3,8 @@ title: "Past incidents" description: "Review historical similar incident resolutions to quickly handle new incidents" --- +**Plan requirement**: This feature requires an On-call Pro or higher subscription. [Learn more](https://flashcat.cloud/flashduty/price/) + When responding to incidents, being able to view resolutions from historically similar incidents can greatly accelerate resolution efficiency. The Past Incidents feature provides responders with a list of similar resolved incidents. For responders unfamiliar with the issue, they can quickly review the timeline, root cause, and resolution of past incidents, and replicate relevant actions. Past incidents provide the context needed to solve problems. diff --git a/en/on-call/incident/search-view-incident.mdx b/en/on-call/incident/search-view-incident.mdx index aab11872..0de41fab 100644 --- a/en/on-call/incident/search-view-incident.mdx +++ b/en/on-call/incident/search-view-incident.mdx @@ -27,9 +27,9 @@ For query performance, the query time range is limited based on your subscriptio - **Free**: up to **30 days** - **Standard**: up to **180 days** -- **Professional**: up to **366 days** +- **Pro**: up to **366 days** -To query older data, adjust the start and end times, or use the [Incident Query API](/en/api-reference/on-call/incidents/incident-list). +Regardless of plan, **a single query can span at most 31 days**. To query older data or a longer range, adjust the start and end times and query in segments, or use the [Incident Query API](/en/api-reference/on-call/incidents/incident-list). @@ -126,9 +126,9 @@ Incident details is the main entry point for investigating an incident and shows | 4 | Tab Area | Use the tabs at the top to view richer content; see the **Detail Tabs** section below | | 5 | Comprehensive Info | Centralizes supporting information such as incident attributes, key timestamps, responders, related links, images, custom fields, and external tickets; incidents aggregated from Monitors alerts also gain an **Investigation** block (see the **Comprehensive Info Panel** section below) | -### Labels and related links +### Label display -Incident labels appear in the **Details** area of the details page. Link labels are lifted into a **Links** button bar above the label list. For the button-name mapping, the jump links to RUM issues and alert rules, and how images, ARNs, times, and query expressions are rendered, see [What is an incident · Incident labels](/en/on-call/incident/what-is-incident#related-links-and-label-value-rendering). +Incident labels appear in the **Details** area of the details page. For how values are rendered (links, RUM issues, images, ARNs, times, query expressions), see [What is an incident · Label value rendering](/en/on-call/incident/what-is-incident#label-value-rendering). To get back to the query as it was when the alert fired, open the Query Workbench from any of these places: @@ -205,7 +205,7 @@ The incident details page contains 7 tabs; some appear only under certain condit | **Change History** | Change events correlated with the current incident in time, helping you pinpoint the relationship between the incident and recent deployments or configuration changes | Always visible | | **Resolution** | Records the incident's impact, root cause, and resolution | Visible when any of the three has content | | **Post-Mortem** | A built-in post-mortem editor that lets you create, edit, AI-generate, and publish a post-mortem report without leaving the details page | On-call Pro or higher | -| **Past Incidents** | Shows historical incidents similar to the current one, so you can draw on prior handling experience | Always visible | +| **Past Incidents** | Shows historical incidents similar to the current one, so you can draw on prior handling experience | Always visible; the content requires On-call Pro or higher, other plans see an upgrade prompt | ### Timeline comments diff --git a/en/on-call/incident/what-is-incident.mdx b/en/on-call/incident/what-is-incident.mdx index 0c12f6d9..3e662345 100644 --- a/en/on-call/incident/what-is-incident.mdx +++ b/en/on-call/incident/what-is-incident.mdx @@ -69,45 +69,20 @@ Platform-internal labels (names starting with `__`, such as `__alert_rule_id`) a - The **Show system labels** / **Hide system labels** button next to the label panel heading expands or collapses the section. It appears only when system labels exist. The choice is saved as a per-user preference shared by the web console and the mobile app - While collapsed, the **JSON view** and the JSON you copy exclude system labels. System labels are not reordered by drag-and-drop -- The count next to the heading is the total number of labels, including system labels and related links +- The count next to the heading is the total number of labels, including system labels - Hovering a system label on a Monit alert opens a hover card that explains it in plain words (alert rule, data source, values and queries at trigger time) and offers a jump -### Related links and label value rendering +### Label value rendering -The label panel shows a **Links** button bar above the list and renders some label values specially. +Link labels stay in the label list. Some label values are rendered specially. -**Related links**: labels whose value is an `http(s)://` link and that are not images no longer stay in the label list. They are lifted above it, one button per link. The button name comes from the label key: - -| Label key | Button name | -| :--- | :--- | -| `generatorURL`, `generator_url`, `detail_url`, `link`, `web_url`, `client_url`, `insight_url` | **View source**; shown as **View in {source}** when the alert's integration has a name | -| `runbook_url` | **Runbook** | -| `silenceURL` | **Silence** | -| `dashboardURL`, `dashboard_url` | **Open dashboard** | -| `panelURL` | **Open panel** | -| `query_url` | **View query** | -| `log_url` | **View logs** | -| `alert_url` | **View alert** | -| `ruleURL`, `rule_url`, `alert_rule_url` | **View rules** | -| `alert_history_url` | **Alert history** | -| Any other key | `key · host` | - -Buttons follow the order of the table; keys not listed come after them in alphabetical order. Hover a button to see the full key and URL. Image links stay in the label list, and link labels in the **System labels** section stay where they are. - -For incidents aggregated from Monitors or RUM alerts, these labels also show a jump link, and the alert details page supports the same links: - -| Alert source | Label | Link | -| :--- | :--- | :--- | -| RUM | `issue_id` | **View Issue**: opens the RUM issue | -| Monitors alert rule | `__alert_rule_id` (`rule_id` for older data) | **View Rule**: opens the alert rule that generated the alert | -| Monitors entity tree | `__entity_alert_rule_id` | **View Rule**: opens the alert rule in the entity tree | - -If a label value is invalid or the needed context is missing, Flashduty shows it as plain text. +For incidents aggregated from RUM alerts, hovering the `issue_id` value opens a RUM Issue card; click the link in the card to open the issue. For Monitors entity-tree alerts, **View Rule** appears next to `__entity_alert_rule_id` and opens the matching alert rule in the entity tree. If a label value is invalid or the needed context is missing, Flashduty shows it as plain text. **Special label value rendering**: | Form | Recognition | Rendering | | :--- | :--- | :--- | +| Link | The value is an `http(s)` link (images excluded) | The full URL as a clickable link, opened in a new tab | | Image thumbnail | The value is an `http(s)` link and the key contains `image` (Grafana's `imageURL`, for example), or the link ends in `.png` / `.jpg` / `.jpeg` / `.gif` / `.webp` / `.svg` | A thumbnail; clicking opens the original image in a new tab | | ARN | The value looks like `arn:partition:service:region:account:resource` | The resource segment on the main line, followed by small **Service** / **Region** chips | | Time | The key ends in `_time` / `_at` / `timestamp` and the value is a 10-digit (seconds) or 13-digit (milliseconds) timestamp; or the value is an ISO 8601 time with a time zone | Formatted as `YYYY-MM-DD HH:mm:ss` in the account's time zone with a relative "x ago"; hover shows the original value | diff --git a/en/on-call/integration/alert-integration/alert-sources/apimetrics.mdx b/en/on-call/integration/alert-integration/alert-sources/apimetrics.mdx index 0dcab40c..8c3656a0 100644 --- a/en/on-call/integration/alert-integration/alert-sources/apimetrics.mdx +++ b/en/on-call/integration/alert-integration/alert-sources/apimetrics.mdx @@ -66,6 +66,7 @@ With **Pass** selected, every successful call sends a request to Flashduty. A `P 1. Turn on the **Enabled** toggle on the right and click **Save** 2. Make a monitored API actually fail (for example, point the call at an address that returns 5xx), confirm Flashduty receives an active alert, and the integration shows **Latest event time** 3. Restore the API and confirm the original alert closes once the next `PASS` result arrives + {/* console: The checklist item "Receive the first event" is then complete as well. */} diff --git a/en/on-call/integration/alert-integration/alert-sources/appsignal.mdx b/en/on-call/integration/alert-integration/alert-sources/appsignal.mdx index 40f9cbbf..5bace83d 100644 --- a/en/on-call/integration/alert-integration/alert-sources/appsignal.mdx +++ b/en/on-call/integration/alert-integration/alert-sources/appsignal.mdx @@ -66,6 +66,7 @@ AppSignal's documentation does not give the menu paths of the trigger and notifi 1. Put a trigger into the alert state in AppSignal, or raise a new exception in your app. A few seconds later, the integration in Flashduty shows a **Latest event time** and an active alert appears 2. After the anomaly detection alert is resolved, confirm the Flashduty alert recovers + {/* console: The "Receive first event" item in the setup checklist turns green as well. */} diff --git a/en/on-call/integration/alert-integration/alert-sources/bugsnag.mdx b/en/on-call/integration/alert-integration/alert-sources/bugsnag.mdx index bfd52e25..c34abb40 100644 --- a/en/on-call/integration/alert-integration/alert-sources/bugsnag.mdx +++ b/en/on-call/integration/alert-integration/alert-sources/bugsnag.mdx @@ -81,6 +81,7 @@ The filters below the triggers, such as release stage and handled state, reduce 1. Raise a new error in an application that uses the BugSnag SDK and confirm that Flashduty receives an active alert 2. Mark the error as **Fixed** in BugSnag and confirm that the alert recovers + {/* console: The "first event received" item in the setup checklist also turns complete. */} diff --git a/en/on-call/integration/alert-integration/alert-sources/canarytokens.mdx b/en/on-call/integration/alert-integration/alert-sources/canarytokens.mdx index 75edc317..4bcc3c0d 100644 --- a/en/on-call/integration/alert-integration/alert-sources/canarytokens.mdx +++ b/en/on-call/integration/alert-integration/alert-sources/canarytokens.mdx @@ -69,6 +69,7 @@ While the alert is open, further touches of the same token merge into it; a touc 1. When you save the webhook URL, Canarytokens posts a test request to it. Flashduty creates an Info alert titled `Canarytokens test notification`. It does not recover, so close it by hand after checking 2. Touch the token (for example, open a web bug token's link in a browser or with `curl`) and confirm that Flashduty receives a Critical alert + {/* console: The checklist item "Receive the first event" is then complete as well. */} diff --git a/en/on-call/integration/alert-integration/alert-sources/cato.mdx b/en/on-call/integration/alert-integration/alert-sources/cato.mdx index 6f352764..1426991f 100644 --- a/en/on-call/integration/alert-integration/alert-sources/cato.mdx +++ b/en/on-call/integration/alert-integration/alert-sources/cato.mdx @@ -81,6 +81,7 @@ Field definitions: [Understanding the JSON Fields for Alert Integrations](https: 1. Under **Account → Subscriptions**, add this webhook as a delivery target for the alert types you want (Site Operations stories and so on). Recovery notifications must also be delivered to this webhook, otherwise alerts do not recover 2. Click **Test** on the webhook page. Cato sends the test request with auto-generated content, and `Test passed successfully` only proves the connection works. The Cato documentation does not show the test request body, and Flashduty handles it as a normal alert: without `storyId` and `correlationId` it returns a parameter error, otherwise it opens a separate alert that you close manually after the check 3. Trigger a real event (for example, disconnect the Socket of a test site), confirm Flashduty receives an active alert, then confirm it recovers when the story resolves + {/* console: The checklist item "Receive the first event" is then complete as well. */} diff --git a/en/on-call/integration/alert-integration/alert-sources/cronitor.mdx b/en/on-call/integration/alert-integration/alert-sources/cronitor.mdx index dee90553..897abee2 100644 --- a/en/on-call/integration/alert-integration/alert-sources/cronitor.mdx +++ b/en/on-call/integration/alert-integration/alert-sources/cronitor.mdx @@ -72,6 +72,7 @@ Cronitor recommends testing alerts with a heartbeat monitor: 2. Open the monitor's telemetry URL in a browser to send one normal ping 3. Open the telemetry URL again with `?state=fail` appended; Cronitor sends an alert notification, an active alert appears in Flashduty, and the integration shows **Latest event time** 4. Open it once more without `?state=fail`; Cronitor sends a recovery notification and the original Flashduty alert recovers + {/* console: The checklist item "Receive the first event" is then complete as well. */} diff --git a/en/on-call/integration/alert-integration/alert-sources/ctyun.mdx b/en/on-call/integration/alert-integration/alert-sources/ctyun.mdx index fa44ebd1..f180c395 100644 --- a/en/on-call/integration/alert-integration/alert-sources/ctyun.mdx +++ b/en/on-call/integration/alert-integration/alert-sources/ctyun.mdx @@ -80,6 +80,7 @@ StateCloud calls back from 182.43.5.0/24 and 182.43.7.0/24, so allowlist them if **Test** only verifies connectivity; let the rule fire a real alert to confirm Flashduty receives the event. Go back to Flashduty. If the integration shows a **Latest event time**, the setup works. + {/* console: The checklist item "Receive the first event" is then complete as well. */} @@ -87,8 +88,6 @@ The checklist item "Receive the first event" is then complete as well. -
- ## Status and severity
diff --git a/en/on-call/integration/alert-integration/alert-sources/db-pull.mdx b/en/on-call/integration/alert-integration/alert-sources/db-pull.mdx index 981badff..8c2e7d44 100644 --- a/en/on-call/integration/alert-integration/alert-sources/db-pull.mdx +++ b/en/on-call/integration/alert-integration/alert-sources/db-pull.mdx @@ -71,7 +71,7 @@ DB Pull is configured entirely in Flashduty. On the database side you only need | Field | Required | Description | | :-: | :-: | :--- | -| SQL query (`query`) | Yes | A read-only SELECT statement (or a CTE starting with `WITH`). **DML/DDL keywords** (`INSERT`, `UPDATE`, `DELETE`, `DROP`) are **forbidden**. **Parameter placeholders** (`?`) are **forbidden**. **Row-limiting keywords** (`LIMIT`, `OFFSET`, `FETCH NEXT`, `SELECT TOP`) are **forbidden** — the system controls pagination automatically. The query output **must include** both cursor columns (`time_column` and `id_column`); validation fails at save time if they are missing. | +| SQL query (`query`) | Yes | A read-only SELECT statement (or a CTE starting with `WITH`). **DML/DDL keywords** (`INSERT`, `UPDATE`, `DELETE`, `DROP`) are **forbidden**. **Parameter placeholders** (`?`) are **forbidden**. **Row-limiting keywords** (`LIMIT`, `OFFSET`, `FETCH NEXT`, `SELECT TOP`) are **forbidden** — the system controls pagination automatically. A semicolon (`;`) is also **forbidden**. The query output **must include** both cursor columns (`time_column` and `id_column`); validation fails at save time if they are missing. | | Time cursor column (`time_column`) | Yes | The timestamp column used for ordering and pagination. The name must match `[a-zA-Z_][a-zA-Z0-9_]*` and must appear in the SELECT output. | | ID cursor column (`id_column`) | Yes | A unique-identifier column used together with the time column to break ties when multiple rows share the same timestamp (typically an auto-increment primary key or UUID). Same naming rules as `time_column`. | | Initial pull time (`initial_time`) | Yes | The starting point for the very first fetch (or after a checkpoint reset), in `YYYY-MM-DD HH:mm:ss` format. The form defaults to the current time, so **rows that already exist before that moment will not be fetched**. Select an earlier time if you need to backfill historical rows. | @@ -105,22 +105,22 @@ Each cycle ingests at most `max_pages × page_size` rows. Set `page_size` to 200 **Field mapping** controls which database columns (or constant values) are mapped to which fields of the Standard Alert Event. Each mapping rule specifies a **target field** (a Standard Event field name) and a **rule**. Three rule types are supported: -| Rule type | `type` value | `value` description | -| :-: | :-: | :--- | -| Column | `column` | Reads the value of the named column from the database row directly. Example: `"type": "column", "value": "alert_title"` reads the `alert_title` column. | -| Constant | `const` | A fixed string applied to every row. Example: `"type": "const", "value": "Critical"` always sets the field to `Critical`. | -| Template | `template` | A Go template string that can reference any column in the row. Example: `"type": "template", "value": "{{.host}}: {{.message}}"` concatenates the `host` and `message` columns. | +| Rule type | Description | +| :-: | :--- | +| Column | Reads the value of the named column from the database row directly. Example: entering `alert_title` reads the `alert_title` column. | +| Constant | A fixed string applied to every row. Example: entering `Critical` always sets the field to `Critical`. | +| Template | A Go template string that can reference any column in the row. Example: `{{.host}}: {{.message}}` concatenates the `host` and `message` columns. | When the target field is `event_time`, the system automatically converts the column value to a Unix timestamp in seconds. Supported input formats include `time.Time`, Unix milliseconds (integer), `"2006-01-02T15:04:05"`, `"2006-01-02 15:04:05"`, and other common datetime representations. **Label source** (label mapping, `labels`) controls how database columns are converted into the `labels` dictionary of the alert event. Four modes are supported: -| Mode | `mode` value | Description | -| :-: | :-: | :--- | -| Specific columns | `include_columns` | Only the columns listed in `columns` are included as labels. The label key is the column name; the label value is the column's string representation. | -| All columns | `all_columns` | Every column in the query result is automatically added as a label, excluding cursor columns and columns already referenced by `fields` rules. Useful when the column set is small or variable. | -| JSON column | `json_column` | Parses the specified column's value as a JSON object (`{"key": "value", ...}`) and maps it directly to labels. The column value must be valid JSON. | -| Manual | `manual` | Explicitly maps label keys to source column names, for example, `{"region": "dc_region", "env": "deploy_env"}`. The map key is the label name; the map value is the source column name. | +| Mode | Description | +| :-: | :--- | +| Selected columns | Only the columns listed in `columns` are included as labels. The label key is the column name; the label value is the column's string representation. | +| All unmapped columns | Every column in the query result is automatically added as a label, excluding cursor columns and columns already referenced by `fields` rules. Useful when the column set is small or variable. | +| JSON column | Parses the specified column's value as a JSON object (`{"key": "value", ...}`) and maps it directly to labels. The column value must be valid JSON. | +| Manual mapping | Explicitly maps label keys to source column names, for example, `{"region": "dc_region", "env": "deploy_env"}`. The map key is the label name; the map value is the source column name. | **Severity mapping**: external systems use inconsistent field names and values for alert severity. Severity mapping translates the external value into Flashduty's standard `Critical / Warning / Info / Ok`. diff --git a/en/on-call/integration/alert-integration/alert-sources/elastic.mdx b/en/on-call/integration/alert-integration/alert-sources/elastic.mdx index 4163a2a9..760fb158 100644 --- a/en/on-call/integration/alert-integration/alert-sources/elastic.mdx +++ b/en/on-call/integration/alert-integration/alert-sources/elastic.mdx @@ -195,7 +195,7 @@ Security detection rules do not send Recovered notifications. Each detection ale If your rules already use the Kibana PagerDuty connector, you can point it at the Flashduty [PagerDuty Compatible integration](/en/on-call/integration/alert-integration/alert-sources/pagerduty) without rewriting the actions. Alerts sent this way arrive through Flashduty's PagerDuty Compatible integration, not the Elastic integration on this page. 1. Add a **PagerDuty Compatible** integration in Flashduty and copy its push URL -2. Create a PagerDuty connector in Kibana: set **API URL** to that push URL (in the form `https://api.flashcat.cloud/event/push/alert/pagerduty?integration_key=`) and **Integration Key** to the integration key from the push URL +2. Create a PagerDuty connector in Kibana: set **API URL** to that push URL (that is, `{integration_url}`) and **Integration Key** to the integration key from the push URL 3. In the rule, use **For each alert**. Add an action with **Event action** `Trigger` for the alert action group, and one with **Event action** `Resolve` for **Recovered**. The Recovered action defaults to `Resolve` 4. Keep the **DedupKey** that Kibana pre-fills, `{{rule.id}}:{{alert.id}}`, on both actions and do not clear it, so the resolve event closes the matching alert. With an empty DedupKey on the Trigger action, Kibana sends no `dedup_key`, Flashduty generates a random Alert Key for each trigger, and the resolve event cannot close it diff --git a/en/on-call/integration/alert-integration/alert-sources/google-cloud-monitoring.mdx b/en/on-call/integration/alert-integration/alert-sources/google-cloud-monitoring.mdx index 75c69a9f..051f440c 100644 --- a/en/on-call/integration/alert-integration/alert-sources/google-cloud-monitoring.mdx +++ b/en/on-call/integration/alert-integration/alert-sources/google-cloud-monitoring.mdx @@ -56,7 +56,7 @@ The push URL of one **GCP Cloud Monitoring** integration accepts all of the foll | Security Command Center findings | Continuous export (NotificationConfig) to Pub/Sub + push subscription | Yes, when the finding becomes INACTIVE or is muted | | Cloud Billing budgets | Budget connected to a Pub/Sub topic + push subscription | No | -Below, **push URL** means the integration push URL you copied earlier, in the form `https://api.flashcat.cloud/event/push/alert/google-cm?integration_key=`. +Below, **push URL** means the integration push URL you copied earlier, that is, `{integration_url}`.
diff --git a/en/on-call/integration/alert-integration/alert-sources/hookdeck.mdx b/en/on-call/integration/alert-integration/alert-sources/hookdeck.mdx index 9fd74283..f854094a 100644 --- a/en/on-call/integration/alert-integration/alert-sources/hookdeck.mdx +++ b/en/on-call/integration/alert-integration/alert-sources/hookdeck.mdx @@ -91,6 +91,7 @@ Hookdeck sends notifications when a real issue opens or changes status, so use a 2. Once a new delivery issue appears on the Hookdeck **Issues** page, confirm that Flashduty receives a Critical alert and the integration shows a **Latest event time** 3. On the Issues page, change the issue's status to **Resolved** and confirm that the alert recovers 4. Delete the test connection when you are done + {/* console: The checklist item "Receive the first event" is then complete as well. */} diff --git a/en/on-call/integration/alert-integration/alert-sources/image-upload.mdx b/en/on-call/integration/alert-integration/alert-sources/image-upload.mdx index 178f1270..74ef7461 100644 --- a/en/on-call/integration/alert-integration/alert-sources/image-upload.mdx +++ b/en/on-call/integration/alert-integration/alert-sources/image-upload.mdx @@ -154,7 +154,7 @@ Once you have the `image_key`, put it into the `src` field of an image in the `i For the full field definitions of the `images` array and the `image` struct, see [Standard Alert - image struct](/en/on-call/integration/alert-integration/alert-sources/standard-alert#image). -- In `images[].src`, `image_key` is limited to `256` characters; anything longer is discarded. +- In `images[].src`, `image_key` is limited to `512` characters; anything longer is discarded. - An uploaded image is stored temporarily at first and is promoted to long-term storage only after it is referenced by an alert. Use the `image_key` in an alert report promptly after uploading. diff --git a/en/on-call/integration/alert-integration/alert-sources/kapacitor.mdx b/en/on-call/integration/alert-integration/alert-sources/kapacitor.mdx index 63470641..0484eb60 100644 --- a/en/on-call/integration/alert-integration/alert-sources/kapacitor.mdx +++ b/en/on-call/integration/alert-integration/alert-sources/kapacitor.mdx @@ -127,6 +127,7 @@ Make the task's alert condition actually match once (for example, temporarily ra 1. Confirm Flashduty receives an alert and the integration shows a **Latest event time** 2. Once the condition returns to `OK`, confirm the original alert recovers (Kapacitor sends an event with `level` `OK`, and Flashduty closes the alert with the same `id`) 3. If no alert arrives, add `.captureResponse()` to `.post()` to see Flashduty's response + {/* console: The checklist item "Receive the first event" is then complete as well. */} diff --git a/en/on-call/integration/alert-integration/alert-sources/kener.mdx b/en/on-call/integration/alert-integration/alert-sources/kener.mdx index 873fd6b1..d3718c5b 100644 --- a/en/on-call/integration/alert-integration/alert-sources/kener.mdx +++ b/en/on-call/integration/alert-integration/alert-sources/kener.mdx @@ -95,6 +95,7 @@ Save the configuration. 1. Use the trigger's test button and confirm that Kener reports the request as sent. The test only proves that Kener can reach Flashduty, not that a real monitor is connected. The test request is a fixed body built into Kener (alert ID `1`, severity `WARNING`, status randomly `TRIGGERED` or `RESOLVED`), and Flashduty handles it like any other alert: `TRIGGERED` creates or updates a Warning alert with Alert Key `1`, and `RESOLVED` recovers that alert, or creates nothing when no such alert is open. If the alert is still open after verifying, close it manually in Flashduty 2. Make a monitored service actually fail and confirm that an active alert appears in Flashduty once the failure threshold is reached, and the integration shows **Latest event time** 3. Restore the service and confirm that the alert recovers once the success threshold is reached + {/* console: The checklist item "Receive the first event" is then complete as well. */} diff --git a/en/on-call/integration/alert-integration/alert-sources/label-mapping-api.mdx b/en/on-call/integration/alert-integration/alert-sources/label-mapping-api.mdx index a100c3de..67e658a4 100644 --- a/en/on-call/integration/alert-integration/alert-sources/label-mapping-api.mdx +++ b/en/on-call/integration/alert-integration/alert-sources/label-mapping-api.mdx @@ -50,7 +50,6 @@ The endpoint must respond within the timeout you set in step 2 (1–3 seconds). | Timeout (seconds, `timeout`) | No | Request timeout, range: 1–3 | | Retry Count (`retry_count`) | No | Number of retries after request failure, range: 0–1 | | Custom Headers (`headers`) | No | HTTP request headers for passing custom authentication, subject to [security blacklist](#HeaderBlacklist) restrictions | -| Status (`status`) | No | API field only: service status, for example, `enabled`, `disabled` | Each account can create up to 50 APIs. Creating a mapping table schema also requires the Pro plan. @@ -114,12 +113,20 @@ POST, Content-Type:"application/json" | title_rule | string | No | Title rule | | description | string | No | Alert description | | alert_key | string | Yes | Alert unique identifier | -| alert_id | string | Yes | Alert ID | | event_severity | string | Yes | Event severity, enum: Critical, Warning, Info | | event_status | string | Yes | Event status, enum: Critical, Warning, Info, Ok | | event_time | int64 | Yes | Event time, Unix timestamp in seconds | | labels | map[string]string | No | Alert original label key-value pairs | -| images | []string | No | List of alert-related images | +| images | [][Image](#Image) | No | List of alert-related images | + + +**Image**: + +| Field | Type | Description | +| :--------: | :-------------------: | :--------- | +| src | string | Image URL | +| alt | string | Image alternative text | +| href | string | Link opened when the image is clicked |
@@ -139,7 +146,6 @@ POST, Content-Type:"application/json" "title": "High CPU Usage on instance 10.0.1.101:9100", "title_rule": "", "alert_key": "d41d8cd98f00b204e9800998ecf8427e", - "alert_id": "62d6c0f6b8f1b2b3c4d5e6f7", "event_severity": "Critical", "event_status": "Critical", "event_time": 1678886400, diff --git a/en/on-call/integration/alert-integration/alert-sources/oci-monitoring.mdx b/en/on-call/integration/alert-integration/alert-sources/oci-monitoring.mdx index 70d395cd..a1a70c38 100644 --- a/en/on-call/integration/alert-integration/alert-sources/oci-monitoring.mdx +++ b/en/on-call/integration/alert-integration/alert-sources/oci-monitoring.mdx @@ -30,7 +30,7 @@ You can get the integration push URL in either of the following ways. -OCI HTTPS subscription URLs cannot contain query parameters, so this integration's push URL carries the integration key in the path, for example `https://api.flashcat.cloud/event/push/alert/oci-monitoring/`. Paste the complete URL as is; do not rewrite it to the `?integration_key=` form. +OCI HTTPS subscription URLs cannot contain query parameters, so this integration's push URL carries the integration key in the path, for example `{api_host}/event/push/alert/oci-monitoring/{integration_key}`. Paste the complete URL as is; do not rewrite it to the `?integration_key=` form. ## Configure OCI diff --git a/en/on-call/integration/alert-integration/alert-sources/opensearch.mdx b/en/on-call/integration/alert-integration/alert-sources/opensearch.mdx index d6520f31..cd2a122b 100644 --- a/en/on-call/integration/alert-integration/alert-sources/opensearch.mdx +++ b/en/on-call/integration/alert-integration/alert-sources/opensearch.mdx @@ -113,6 +113,7 @@ After the condition clears, the alert closes when the timeout is reached; if the 1. Open the channel and click **Send test message**. Flashduty opens an Info alert titled `OpenSearch test notification` and the integration shows a **Latest event time**; close the alert manually after verifying. This test message only proves connectivity; it carries no monitor or trigger information 2. Make the trigger condition actually hold (for example, temporarily lower the threshold), wait for the next monitor run, and confirm Flashduty receives an alert whose severity matches the trigger's Severity level 3. Restore the threshold, wait for the auto-close timeout to be reached, and confirm the alert closes on its own + {/* console: The checklist item "Receive the first event" is then complete as well. */} diff --git a/en/on-call/integration/alert-integration/alert-sources/raygun.mdx b/en/on-call/integration/alert-integration/alert-sources/raygun.mdx index 953b189a..7b104a54 100644 --- a/en/on-call/integration/alert-integration/alert-sources/raygun.mdx +++ b/en/on-call/integration/alert-integration/alert-sources/raygun.mdx @@ -55,6 +55,7 @@ The Webhooks integration has no test button, so verify with a real error. How Fl 1. Trigger a new error in an application that uses a Raygun SDK and confirm Flashduty receives an active alert. The first notification usually arrives within a minute 2. Open the status menu on the error group page in Raygun, choose **Resolve**, and confirm the original alert recovers + {/* console: The checklist item "Receive the first event" is then complete as well. */} diff --git a/en/on-call/integration/alert-integration/alert-sources/semgrep.mdx b/en/on-call/integration/alert-integration/alert-sources/semgrep.mdx index 7d4d2d8a..fa329034 100644 --- a/en/on-call/integration/alert-integration/alert-sources/semgrep.mdx +++ b/en/on-call/integration/alert-integration/alert-sources/semgrep.mdx @@ -69,6 +69,7 @@ To receive supply chain incidents, find the **Early notification for Supply Chai 1. Click **Test** next to the webhook integration and confirm Flashduty returns success. The test posts `[{"text":"Test Notification","username":"Semgrep"}]`; Flashduty returns success and opens a separate Info alert titled "Semgrep test notification" that you close by hand. The test only proves connectivity 2. Commit code that matches a rule and run a scan, then confirm Flashduty receives a new alert + {/* console: The checklist item "Receive the first event" is then complete as well. */} diff --git a/en/on-call/integration/alert-integration/alert-sources/standard-alert.mdx b/en/on-call/integration/alert-integration/alert-sources/standard-alert.mdx index cd6501b0..18d6b07a 100644 --- a/en/on-call/integration/alert-integration/alert-sources/standard-alert.mdx +++ b/en/on-call/integration/alert-integration/alert-sources/standard-alert.mdx @@ -137,15 +137,15 @@ Field|Required|Type|Description | alert_key | No | string | Alert identifier, used to update or automatically recover existing alerts. You can customize this value, up to `255` bytes; a longer value is replaced by its MD5 (a 32-character hex string). The same value always yields the same MD5, so alert merging and recovery work as usual. You can also rely on system auto-generation, this value will be returned in the response. If you're reporting a recovery event, this value must exist. | description | No | string | Alert description, no more than `2048` characters, will be truncated if exceeded. | labels | No | map | Alert label collection, key is the label name, value is the label value. 1. Both key and value of labels are string type, case-sensitive. 2. Label key should not exceed `128` characters, following Prometheus label naming conventions. Value should not exceed `8192` bytes (8 KB) and is truncated if exceeded; the cut backs off to a UTF-8 character boundary. 3. Maximum of `50` labels. See `Label Content Reference` in [Best Practices](#best-practices). Example: "resource": "171.26.23.22", "check": "api latency > 500ms" -| images | No | [][image](#image) | Array of images, used for image display in frontend or Feishu/DingTalk application notifications.The system merged/overwritten based on alt, for the same alt (including empty strings), only one is retained +| images | No | [][image](#image) | Array of images, used for image display in frontend or Feishu/DingTalk application notifications.The system merged/overwritten based on alt, for the same alt (including empty strings), only one is retained. At most 5 images are kept per event; extra images are dropped in order #### image structure Field|Required|Type|Description :-:|:-:|:-:|:--- | alt | No | string | Image alternative text, limit 128 characters, truncated if exceeded. -| src | Yes | string | Image source, value: http/https URL or image_key returned by [Image Upload API](/en/on-call/integration/alert-integration/alert-sources/image-upload). Limit 256 characters, discarded if exceeded -| href | No | string | Hyperlink reference path, limit 256 characters, truncated if exceeded +| src | Yes | string | Image source, value: http/https URL or image_key returned by [Image Upload API](/en/on-call/integration/alert-integration/alert-sources/image-upload). Limit 512 characters, discarded if exceeded +| href | No | string | Hyperlink reference path, limit 512 characters, truncated if exceeded @@ -233,7 +233,7 @@ Failed Response: ## Field mapping and value mapping -If your JSON doesn't match the standard payload above, configure **field mapping (field_mapping)** and **value mapping (value_mapping)** in the integration settings. Flashduty then converts your JSON into standard alert events. +If your JSON doesn't match the standard payload above, configure **field mapping** and **value mapping** in the integration settings. Flashduty then converts your JSON into standard alert events. Once field mapping is configured, the request body no longer requires a fixed format. It accepts any JSON object, and also supports batch push through JSON arrays (up to 100 items per request). @@ -254,7 +254,7 @@ Supported target fields: | alert_key | Alert identifier | | labels | Alert labels | -The above is the whitelist of target fields supported by the field mapping editor in integration settings. The `images` field is not offered as a target in the console's field mapping editor (the underlying `field_mapping` API does accept it), so report it directly in the request payload. +The above is the whitelist of target fields supported by the field mapping editor in integration settings. The `images` field is not offered as a target in the console's field mapping editor, so report it directly in the request payload. **Variable syntax:** diff --git a/en/on-call/integration/alert-integration/alert-sources/sysdig.mdx b/en/on-call/integration/alert-integration/alert-sources/sysdig.mdx index afeb91c3..478338e6 100644 --- a/en/on-call/integration/alert-integration/alert-sources/sysdig.mdx +++ b/en/on-call/integration/alert-integration/alert-sources/sysdig.mdx @@ -70,6 +70,7 @@ Create or edit an alert and select the webhook channel from the previous step in 1. With **Test notification** turned on in that form, Sysdig, when you save the channel, sends a test notification named `TEST ALERT: Testing Notification Channel `. Flashduty returns success but does not create an alert; it only proves the URL is reachable 2. Let an alert that uses this channel fire and confirm Flashduty receives an active alert 3. Wait for the alert condition to clear and confirm the original alert recovers + {/* console: The checklist item "Receive the first event" is then complete as well. */} diff --git a/en/on-call/integration/alert-integration/alert-sources/tactical-rmm.mdx b/en/on-call/integration/alert-integration/alert-sources/tactical-rmm.mdx index f7fbadf0..d9bb47d9 100644 --- a/en/on-call/integration/alert-integration/alert-sources/tactical-rmm.mdx +++ b/en/on-call/integration/alert-integration/alert-sources/tactical-rmm.mdx @@ -110,6 +110,7 @@ Tactical RMM runs webhooks for Error alerts (such as an overdue agent) and Warni 1. On the webhook edit page, click **Test** with the target type set to **None** (no agent, site, or client). Flashduty creates an Info alert titled `Tactical RMM test notification`. It does not recover on its own, so close it manually after verifying. The Tactical RMM documentation says `{{alert.XXX}}` variables are not available in test mode. If you select a target, the variables may be replaced with other values, and Flashduty rejects the request because `alert_type` is invalid. So **Test** only proves connectivity; verify with a real alert 2. Trigger a real alert (for example, stop a test agent) and confirm Flashduty receives an active alert 3. After the alert recovers, confirm the matching Flashduty alert recovers + {/* console: The checklist item "Receive the first event" is then complete as well. */} diff --git a/en/on-call/integration/alert-integration/alert-sources/thousandeyes.mdx b/en/on-call/integration/alert-integration/alert-sources/thousandeyes.mdx index 98f59bc1..91b2c50d 100644 --- a/en/on-call/integration/alert-integration/alert-sources/thousandeyes.mdx +++ b/en/on-call/integration/alert-integration/alert-sources/thousandeyes.mdx @@ -74,6 +74,7 @@ Save the alert rule. Select the webhook in every alert rule that should send ale 1. Clicking **Test** sends a `WEBHOOK_TEST` event. Flashduty returns success but does not create an alert, so **Test** only proves connectivity 2. Make an alert rule that uses the webhook trigger (for example, lower its threshold temporarily), and confirm that Flashduty receives an active alert 3. Wait for the alert to clear (or restore the threshold), and confirm that the alert is recovered + {/* console: The checklist item "Receive the first event" is then complete as well. */} diff --git a/en/on-call/integration/alert-integration/alert-sources/wazuh.mdx b/en/on-call/integration/alert-integration/alert-sources/wazuh.mdx index fd0ea487..3102a819 100644 --- a/en/on-call/integration/alert-integration/alert-sources/wazuh.mdx +++ b/en/on-call/integration/alert-integration/alert-sources/wazuh.mdx @@ -82,6 +82,7 @@ For Docker deployments, restart the manager container. 1. On a monitored host, trigger an alert at or above ``, for example several failed SSH password attempts (rule 5763, level 10) 2. Confirm the alert arrives in Flashduty and the integration shows a **Latest event time** 3. If nothing arrives, check `/var/ossec/logs/integrations.log` and `/var/ossec/logs/ossec.log` on the manager + {/* console: The checklist item "Receive the first event" is then complete as well. */} diff --git a/en/on-call/integration/alert-integration/label-enhancement.mdx b/en/on-call/integration/alert-integration/label-enhancement.mdx index a3d5c152..d554ead3 100644 --- a/en/on-call/integration/alert-integration/label-enhancement.mdx +++ b/en/on-call/integration/alert-integration/label-enhancement.mdx @@ -240,7 +240,7 @@ When an alert is triggered, Flashduty automatically calls the configured API ser ## Mapping data management -Each account can create up to 20 mapping tables and 50 mapping services (APIs). Creation fails with a limit-exceeded error once the quota is reached. +Each account can create up to 20 mapping tables and 50 mapping services (APIs). Each mapping table holds up to 10,000 rows by default. Creating a table or uploading data fails with a limit-exceeded error once a quota is reached. ### Mapping table data management diff --git a/en/on-call/integration/alert-integration/overview.mdx b/en/on-call/integration/alert-integration/overview.mdx index b82d6ddd..8687396e 100644 --- a/en/on-call/integration/alert-integration/overview.mdx +++ b/en/on-call/integration/alert-integration/overview.mdx @@ -42,12 +42,12 @@ After you save an alert integration that has a push URL, a **Finish setup** chec Receiving an event means the push URL is already set correctly, so steps 2 and 3 complete together and the checklist starts at **1/5 done**. The checklist has three states: - **Waiting for the first event**: while no event has arrived and the checklist is expanded, step 3 shows **Waiting… mm:ss so far.**, counted from when you opened the page. Alerts, recoveries and test notifications from upstream all count, including events dropped by the alert pipeline. -- **Configured, wait for a real alert**: after you select **Configured, wait for a real alert** in step 3, the checklist collapses to one **Waiting for the first event** line and the integration settings show again. Select **Show setup checklist** to open it again. The collapsed state is kept per integration in this browser, so the integration stays collapsed the next time you open it. +- **Configured, wait for a real alert**: after you select **Configured, wait for a real alert** in step 3, the checklist collapses to one **Waiting for the first event** line and the integration settings show again. Select **Show setup checklist** to open it again. - **Connected**: once the first event arrives, the checklist collapses to one **Connected** line above the integration settings, followed by the **Latest event** time and how many optional steps are left (**All done** when both are configured). Select **Expand** to see all five steps, then **Hide checklist** to collapse it again. Step 2 shows this integration's own push URL; copy it into your upstream tool. The [Standard Alert Event](/en/on-call/integration/alert-integration/alert-sources/standard-alert) and [Prometheus Alertmanager](/en/on-call/integration/alert-integration/alert-sources/prometheus) integrations also offer **Copy curl command** in step 3: the sample request already carries this integration's push URL, so running it on the upstream host checks both the push URL and the network without waiting for a real alert. -While you set the integration up, the right-hand column shows its setup docs. After the first event arrives, the column shows **First event** instead: the event's time, severity, title, description, and every label, and **View setup docs** switches back to the docs. The checklist refreshes on its own — every 5 seconds while it waits for the first event, and every 30 seconds afterwards to update the **Latest event** time — so you don't need to reload the page. +While you set the integration up, the right-hand column shows its setup docs. After the first event arrives, the column shows **First event** instead: the event's time, severity, title, description, and every label, and **View setup docs** switches back to the docs. The checklist refreshes on its own, so you don't need to reload the page. ## All alert integrations (sorted by name) diff --git a/en/on-call/integration/alert-integration/routing-rules.mdx b/en/on-call/integration/alert-integration/routing-rules.mdx index 33a48acc..952ad5ac 100644 --- a/en/on-call/integration/alert-integration/routing-rules.mdx +++ b/en/on-call/integration/alert-integration/routing-rules.mdx @@ -55,7 +55,7 @@ When using name mapping mode, if corresponding channel doesn't exist, delivers t | Filter Rules | Filter by channel to quickly locate all rules delivering to a specific channel, ideal for scenarios with many rules | | Edit History | View historical configuration versions, compare differences, and quickly restore (see details below) | | Route Preview | After editing routing rules, click the preview button and select up to 20 real alerts to see how the modified rules would route each alert. The system displays routing differences between old and new rules, including added, removed, and unchanged channels | -| Copy Rules | Click the copy button to copy routing rules from another integration to the current one. Three modes are supported: **Prepend** (insert copied rules before existing ones), **Append** (add copied rules after existing ones), and **Replace** (replace all existing rules with copied ones) | +| Copy Rules | Click the copy button to copy routing rules from the current integration to other integrations. Under **Select rules**, tick the rules to copy (all are ticked by default); under **Target integrations**, pick one or more integrations you can edit; then choose a mode: **Append to existing rules** (default), **Prepend to existing rules**, or **Replace all rules**. The target integration's default route stays unchanged | ### Edit history diff --git a/en/on-call/integration/instant-messaging/slack.mdx b/en/on-call/integration/instant-messaging/slack.mdx index cc10980d..a6aca7bb 100644 --- a/en/on-call/integration/instant-messaging/slack.mdx +++ b/en/on-call/integration/instant-messaging/slack.mdx @@ -81,9 +81,8 @@ When you install the app, Flashduty requests the scopes below through OAuth in o | `reactions:read` | Read message reactions for AI SRE processing status confirmation | | `reactions:write` | Add or remove message reactions for AI SRE processing status confirmation | | `files:write` | Upload files, such as post-mortem report attachments | -| `files:read` | Download private files uploaded by users; AI SRE needs this scope to read files and images shared in a Slack conversation | -The console's **missing permissions** check covers every scope in the table above except `files:read`, so a passing check doesn't mean you granted it. If AI SRE can't read files or images uploaded in a conversation, check that the Slack app has `files:read`. +The OAuth authorization request does not include `files:read`, and the console's **missing permissions** check does not test it. For AI SRE to read files and images uploaded in a Slack conversation, add `files:read` to the Bot Token in your Slack app's OAuth & Permissions page and reinstall the app; re-authorizing does not add it. **Allow AI to reply proactively** depends on the app reading channel messages that do not mention it: public channels through `channels:history`, private channels through `groups:history`. A Slack app authorized before this feature shipped does not have those scopes, so non-mentioned channel messages never reach Flashduty and the assistant has nothing to reply to. The integration detail page then shows the banner "We've updated the Slack app. Please reauthorize it." with a **Reauthorize** button; clicking it runs the Slack authorization once more, and your existing integration settings and user links are unaffected. diff --git a/en/on-call/integration/instant-messaging/wecom.mdx b/en/on-call/integration/instant-messaging/wecom.mdx index 527616f6..39252179 100644 --- a/en/on-call/integration/instant-messaging/wecom.mdx +++ b/en/on-call/integration/instant-messaging/wecom.mdx @@ -76,7 +76,6 @@ After binding: - **Enterprise ID** becomes read-only and shows "Confirmed through WeCom and cannot be changed.". Switching enterprises requires scanning again; there is no field to edit the ID directly. - A bind session is valid for 30 minutes and can be used once. After it expires the dialog says "The link has expired. Generate a new one." — click **Generate again** and scan again. - When binding fails the dialog explains why: `This enterprise has not installed the Flashduty app. Close this dialog, choose "Flashduty app not installed yet", and install it first.` (the enterprise has no app but "already installed" was chosen), `The binding was cancelled on the WeCom page.` (Cancel was clicked on the confirmation page), `WeCom did not complete the confirmation. Generate a new link and try again.` (anything else). -- Submitting an enterprise ID in the form alone no longer works: without a confirmed bind session, an API submission is refused with `scan with WeCom to bind your enterprise first`; the console flow never shows this message. diff --git a/en/on-call/post-mortem/create-edit-post-mortem.mdx b/en/on-call/post-mortem/create-edit-post-mortem.mdx index 2aebb4dd..b5baf8b2 100644 --- a/en/on-call/post-mortem/create-edit-post-mortem.mdx +++ b/en/on-call/post-mortem/create-edit-post-mortem.mdx @@ -12,7 +12,7 @@ Once an incident has been closed, you can begin the post-mortem process. -From the incident list or incident detail page, select the incident you want to review. +Open the detail page of a closed incident and switch to the **Post-Mortem** tab. @@ -20,7 +20,7 @@ Pick a post-mortem template to define the report's section structure. The system -Click "Create Post-Mortem Report". Flashduty pulls severity, response time, responders, and other key information from the incident, drafts the report, and opens the editor. +Click "Create Post-Mortem Report". Flashduty pulls severity, response time, responders, and other key information from the incident, creates a report in Drafting status, and opens the editor. @@ -54,37 +54,29 @@ Beyond the report body, there are a few other important fields to pay attention The system auto-generates a default title based on the linked incident's title. You can edit it directly at the top of the editor to something more precise, such as "2026-03-15 Payment Service Timeout Causing Order Failures". The maximum title length is 256 characters. -### Key metrics +### Basic info -The key metrics panel shows the critical indicators for this incident. You can adjust them based on the actual situation: +The **Report Info** panel on the right shows the status, editors, creation time, update time, channel, team, and access level. All are read-only, and the channel, team, and access level are inherited from the linked incident. The linked incident card shows its severity, progress, status timeline, and responders. -| Field | Description | -| :--- | :--- | -| Highest severity | The peak severity level of this incident | -| Earliest start time | When the incident was first triggered | -| Latest close time | When the incident was last closed | -| Total duration | The combined duration of all linked incidents | -| Responders | People who participated in handling the incident | - -### To-dos +### Follow-ups -To-dos record the improvement actions that come out of the review — things like "optimize database connection pool settings" or "add cache circuit breaker". They are the same items as the [follow-ups](/en/on-call/incident/work-items) on the incident details page. To-dos can be edited at any time, whether the report is in draft or published status. +Follow-ups record the improvement actions that come out of the review — things like "optimize database connection pool settings" or "add cache circuit breaker". They are the same items as the [follow-ups](/en/on-call/incident/work-items) on the incident details page. Follow-ups can be edited at any time, whether the report is drafting or published. While the incident is still being handled, they can't be edited; they unlock when it closes. -When you add an **Assignee** to a to-do, the system sends that member a personal notification prompting them to follow through; removing an assignee does not send a notification. +When you add an **Assignee** to a follow-up, the system sends that member a personal notification prompting them to follow through; removing an assignee does not send a notification. ## Publishing and managing ### Publish a report -Once the team has confirmed the content, click the "Publish" button to switch the report from draft to published. +Once the team has confirmed the content, click the "Publish" button to switch the report from drafting to published. -You can still edit after publishing. To add findings or corrections, switch back to draft, make your changes, and republish. +You can still edit after publishing. To add findings or corrections, click **Re-edit**, make your changes, and republish. ### Finding reports -In the post-mortem report list, you can filter by status, team, channel, and creation date range, with sorting by creation time or last updated time. +In the post-mortem report list, you can filter by time range, report status, team, and channel. ### Deleting a report diff --git a/en/on-call/post-mortem/manage-templates.mdx b/en/on-call/post-mortem/manage-templates.mdx index 844922d2..78bf8772 100644 --- a/en/on-call/post-mortem/manage-templates.mdx +++ b/en/on-call/post-mortem/manage-templates.mdx @@ -16,8 +16,8 @@ The system comes with two ready-to-use built-in templates: | Template | Language | Sections | | :--- | :--- | :--- | -| 默认故障复盘报告模板 | Chinese | Summary, Root Cause, Impact, Timeline, Corrective Actions, Lessons Learned | -| Default Post Mortem Report Template | English | Summary, Root Cause, Impact, Timeline, Corrective Actions, Lessons Learned | +| 默认故障复盘报告模板 | Chinese | 综述、时间线、影响范围、促成因素、根本原因、缓解措施、经验教训 | +| Default Post Mortem Report Template | English | Summary, Timeline, Impact, Contributors, Root Cause, Mitigators, Learnings & Risks | These two templates cover the most common sections in a post-mortem and work well for most scenarios. If your team has specific needs, you can create custom templates based on these. @@ -31,7 +31,7 @@ If the built-in templates don't fit, create a custom template. For example, your -On the post-mortem report page, click "Template Management". +On the Post-Mortem page, click **Postmortem templates** at the top right, then click **Create**. @@ -39,8 +39,7 @@ On the post-mortem report page, click "Template Management". | Field | Required | Description | | :--- | :---: | :--- | | Template name | Yes | Give it a clear name, such as "Payment Team Post-Mortem Template" | -| Template description | No | Briefly describe what scenarios this template is for | -| Owning team | Yes | Select the team responsible for maintaining this template | +| Team | Yes | Select the team responsible for maintaining this template | | Template content | Yes | Define the section structure in the editor | @@ -59,7 +58,7 @@ The template's section structure also serves as the framework for AI-generated c ## Editing and deleting templates -Click any custom template in the template list to edit its name, description, owning team, or content. Templates that are no longer needed can be deleted. +Click any custom template in the template list to edit its name, team, or content. Templates that are no longer needed can be deleted. Deleting a template does not affect any post-mortem reports that were already created using it. diff --git a/en/on-call/post-mortem/what-is-post-mortem.mdx b/en/on-call/post-mortem/what-is-post-mortem.mdx index 251d6eda..1a7866f8 100644 --- a/en/on-call/post-mortem/what-is-post-mortem.mdx +++ b/en/on-call/post-mortem/what-is-post-mortem.mdx @@ -17,9 +17,9 @@ In Flashduty, post-mortems are part of incident management. Create a report from A typical post-mortem report contains: - **Linked incident**: Which incident this report is written for -- **Key metrics**: Severity, incident time range, duration, and responders -- **Report body**: A detailed analysis organized by template sections — typically including summary, root cause analysis, impact, timeline, corrective actions, and lessons learned -- **To-dos**: Action items that need to be carried out after the review +- **Basic info**: The linked incident's severity, progress, and responders +- **Report body**: A detailed analysis organized by template sections — typically including summary, timeline, impact, contributors, root cause, mitigators, and learnings and risks +- **Follow-ups**: Action items that need to be carried out after the review - **Author list**: Everyone who contributed to writing the report ### Report status @@ -28,11 +28,11 @@ A post-mortem report has two statuses: | Status | Meaning | | :--- | :--- | -| **Draft** | The report is still being written and can be freely edited | +| **Drafting** | The report is still being written and can be freely edited | | **Published** | The report is finalized and available for the team to review | -You can switch between draft and published at any time. If you need to add something after publishing, switch back to draft, make your changes, and republish. +You can switch between drafting and published at any time. If you need to add something after publishing, click **Re-edit**, make your changes, and republish. ### Ownership diff --git a/en/on-call/quickstart/faq.mdx b/en/on-call/quickstart/faq.mdx index ebf3c0e1..0c009c6f 100644 --- a/en/on-call/quickstart/faq.mdx +++ b/en/on-call/quickstart/faq.mdx @@ -174,8 +174,8 @@ Jump to: [Product](#product-introduction) · [Billing and subscription](#billing **SLA commitment**: - - **Availability**: core functionality is available 99.95% of the time - - **Delivery**: 99.95% of alerts are delivered within 5 minutes of triggering + - **Availability**: core functionality is available 99.9% of the time + - **Delivery**: 99.9% of alerts are delivered within 5 minutes of triggering **How we meet it**: diff --git a/en/on-call/quickstart/mobile-app.mdx b/en/on-call/quickstart/mobile-app.mdx index 3e349693..c8768682 100644 --- a/en/on-call/quickstart/mobile-app.mdx +++ b/en/on-call/quickstart/mobile-app.mdx @@ -57,10 +57,11 @@ Tap the filter icon in the upper-right of the list to combine the following filt ### Incident detail and actions -Tap an incident to open its detail page. It has two tabs, with actions pinned at the bottom: +Tap an incident to open its detail page. It has three tabs, with actions pinned at the bottom: -- **Overview**: title, severity, description, labels, custom fields, related alerts, war room entry, and more -- **Timeline**: handling history and comments +- **Overview**: title, severity, description, labels, custom fields, war room entry, and more +- **Feed**: handling history and comments +- **Alerts**: shown when the incident has linked alerts, with a count badge The bottom actions are: diff --git a/en/on-call/quickstart/quickstart.mdx b/en/on-call/quickstart/quickstart.mdx index e8a32a02..a7dce5f7 100644 --- a/en/on-call/quickstart/quickstart.mdx +++ b/en/on-call/quickstart/quickstart.mdx @@ -123,6 +123,6 @@ You've completed the core workflow. Next, try these features: Go to **Personal Center → Profile** to check whether your phone number is verified, and under **Personal Center → Notification Preferences**, confirm that phone/SMS channels are enabled in **Incident dispatch**. - New enterprises get a **14-day free trial** (Professional edition). After the trial, visit the Billing Center to purchase. + New enterprises get a **14-day free trial** (Pro edition). After the trial, visit the Billing Center to purchase. diff --git a/en/on-call/statuspage/comparison.mdx b/en/on-call/statuspage/comparison.mdx index 32fe4578..152e7306 100644 --- a/en/on-call/statuspage/comparison.mdx +++ b/en/on-call/statuspage/comparison.mdx @@ -127,7 +127,7 @@ Atlassian Statuspage is billed as a standalone product, with pricing increasing | **Billing Model** | **Included in the On-call module**, not sold separately | Standalone product, tiered across multiple dimensions | | **Traffic Limits** | ✅ **Free** | Limited by plan | | **Public Page** | ✅ Free | Tiered by subscribers, components, team members, and metrics | -| **Private Page** | ✅ Professional edition | Tiered by authenticated subscribers | +| **Private Page** | ✅ Pro plan | Tiered by authenticated subscribers | | **Component Subscription** | ✅ All editions | Business and above only | | **Component Grouping** | ✅ All editions | Business and above only | @@ -135,7 +135,7 @@ Atlassian Statuspage is billed as a standalone product, with pricing increasing ## Flashduty status page reliability -Flashduty Status Page has a feature availability SLA of **99.9%**, with compensation if it is missed; see the [Service Level Agreement (SLA)](/en/compliance/service-sla). +The core-function availability and alert delivery time commitments in the [Service Level Agreement (SLA)](/en/compliance/service-sla) apply to paid Flashduty services; they do not apply to the free plan or to self-hosted deployments. --- diff --git a/en/on-call/statuspage/components-sections.mdx b/en/on-call/statuspage/components-sections.mdx index b490960a..2cfdc483 100644 --- a/en/on-call/statuspage/components-sections.mdx +++ b/en/on-call/statuspage/components-sections.mdx @@ -11,22 +11,20 @@ Components are the basic units of a status page. Each component represents a spe ### Create a component -Add a new component in the status page **Component Management** section with the following fields: +In the status page, go to **Settings → Components & Groups** and click **Add component**. Fill in the following fields: | Field | Required | Description | | --- | --- | --- | | **Name** | Yes | Display name for the component; must be unique within the status page | | **Description** | No | Brief description of the component | -| **Section** | No | Assign the component to a section | -| **Order** | No | Controls the display order on the status page | -Newly created components begin tracking uptime from the moment of creation. +Drag a component to change its display order, and drag it into a section to assign it. Newly created components begin tracking uptime from the moment of creation. ### Edit a component -You can modify a component's name, description, section assignment, and order at any time. When changing the name, ensure it does not conflict with other components on the same status page. +You can modify a component's name and description at any time, or drag it to change its section and order. When changing the name, ensure it does not conflict with other components on the same status page. ### Delete a component @@ -38,8 +36,8 @@ Components support two visibility options: | Option | Effect | | --- | --- | -| **Hide uptime** | The component is displayed on the status page but uptime statistics are hidden | -| **Hide all** | The component is not displayed on the status page and is excluded from uptime calculations | +| **Hide historical data** (hide uptime) | The component is displayed on the status page but uptime statistics are hidden | +| **Hide component** (hide all) | The component is not displayed on the status page and is excluded from uptime calculations | For internal-only service components that you do not want to expose to status page visitors, use the "Hide all" option. Hidden components can still be referenced in events. @@ -53,17 +51,16 @@ Sections group related components together for a clearer status page structure. ### Create a section -Add a new section in the status page **Section Management** area with the following fields: +In the status page, go to **Settings → Components & Groups** and click **Add group**. Fill in the following fields: | Field | Required | Description | | --- | --- | --- | | **Name** | Yes | Display name for the section; must be unique within the status page | | **Description** | No | Brief description of the section | -| **Order** | No | Controls the display order on the status page | ### Edit a section -You can modify a section's name, description, and order at any time. +You can modify a section's name and description at any time, and drag it to change its display order. ### Delete a section @@ -75,8 +72,8 @@ Like components, sections also support visibility controls: | Option | Effect | | --- | --- | -| **Hide uptime** | The section is displayed on the status page but uptime statistics are hidden | -| **Hide all** | The section and all its components are hidden from the status page and excluded from uptime calculations | +| **Hide historical data** (hide uptime) | The section is displayed on the status page but uptime statistics are hidden | +| **Hide group** (hide all) | The section and all its components are hidden from the status page and excluded from uptime calculations | Setting a section to "Hide all" also hides all components within it, even if those components are not individually set to hidden. diff --git a/en/on-call/statuspage/create-manage-page.mdx b/en/on-call/statuspage/create-manage-page.mdx index b00ad8bb..f18ebbe8 100644 --- a/en/on-call/statuspage/create-manage-page.mdx +++ b/en/on-call/statuspage/create-manage-page.mdx @@ -11,16 +11,16 @@ If you do not have a status page yet, first read [Get started with Flashduty Sta ## Basic information -You can edit the status page name, URL slug, and basic description at any time. The name is usually your company, product, or service name so visitors can understand what the page represents. +In **Settings → Basic Settings**, you can edit the page title and status page URL at any time. The page title is usually your company, product, or service name so visitors can understand what the page represents. -### URL slug +### Status page URL -The URL slug is the unique path segment in the status page URL. You can change it after creation, but slugs must be unique within the same account for the same page type. +This is the unique path segment in the status page access URL. You can change it after creation, but the URL must be unique within the same account for the same page type. -The system automatically converts names to a URL-safe format: lowercase, with non-alphanumeric characters replaced by hyphens. You can also specify the slug manually. +The system automatically converts the page title to a URL-safe format: lowercase, with non-alphanumeric characters replaced by hyphens. You can also specify it manually. -Changing the URL slug invalidates the previous access URL. For public status pages, plan the slug before launch to avoid breaking external links later. +Changing the status page URL invalidates the previous access URL. For public status pages, plan the URL before launch to avoid breaking external links later. --- @@ -51,7 +51,7 @@ You can customize the status page branding to match your corporate identity. ## Custom domain -By default, status pages are accessed through a Flashduty-provided subdomain. To use your own domain, such as `status.yourcompany.com`, configure a custom domain. +By default, status pages are accessed through a Flashduty-provided subdomain. To use your own domain, such as `status.yourcompany.com`, configure a custom domain. Custom domains are available only for **public status pages**; internal status pages do not offer this option in Basic Settings. @@ -121,6 +121,6 @@ You can control how component uptime statistics are displayed: ## Editing and deletion -You can edit the status page name, URL slug, branding settings, and display configuration at any time. +You can edit the page title, status page URL, branding settings, and display configuration at any time. Deleting a status page permanently removes its associated data. This action cannot be undone. diff --git a/en/on-call/statuspage/get-started.mdx b/en/on-call/statuspage/get-started.mdx index 70c6e972..6fd7f8a6 100644 --- a/en/on-call/statuspage/get-started.mdx +++ b/en/on-call/statuspage/get-started.mdx @@ -25,15 +25,11 @@ If you are evaluating a replacement for Atlassian Statuspage, read [Status Page ## Create a status page from scratch -Creating from scratch only establishes the status page entity and confirms its name, URL slug, and type. Configure branding, domain, components, subscriptions, and event publishing in the follow-up docs. +Creating from scratch only establishes the status page entity and confirms its page title, URL, and type. Configure branding, domain, components, subscriptions, and event publishing in the follow-up docs. - - Choose whether to create a **public status page** or an **internal status page**. Public status pages are for customers, partners, and external visitors. Internal status pages are for organization members and require Flashduty sign-in. - - - - Sign in to the [Flashduty console](https://console.flashcat.cloud), open **On-call → Status Pages** from the left navigation, and click **Create Status Page**. + + Sign in to the [Flashduty console](https://console.flashcat.cloud), open **On-call → Status Pages** from the left navigation, and click **Create public page** or **Create internal page**. Public status pages are for customers, partners, and external visitors. Internal status pages are for organization members and require Flashduty sign-in. @@ -41,13 +37,13 @@ Creating from scratch only establishes the status page entity and confirms its n | Field | Description | | --- | --- | - | **Name** | Display name for the status page, usually your company, product, or service name | - | **URL slug** | Unique identifier used to build the status page URL; only lowercase letters, numbers, hyphens, and underscores are allowed | - | **Type** | Choose **Public** or **Internal** | + | **Page title** | Shown at the top of the status page, usually your company, product, or service name; used in place of the logo when none is set | + | **Status page URL** | Unique identifier in the access URL; only lowercase letters, numbers, hyphens, and underscores are allowed | + | **Components & Groups** | Optional; add initial components and groups while creating | - Click **Confirm** to finish. After creation, configure basic settings, components, subscriptions, templates, and event publishing as needed. + Click **Create** to finish. After creation, configure basic settings, components, subscriptions, templates, and event publishing as needed. diff --git a/en/on-call/statuspage/subscriptions.mdx b/en/on-call/statuspage/subscriptions.mdx index b064b63b..5d3031e7 100644 --- a/en/on-call/statuspage/subscriptions.mdx +++ b/en/on-call/statuspage/subscriptions.mdx @@ -112,7 +112,7 @@ In the Subscriber List section of the **Subscriptions** page in the status page **Plan requirement**: bulk importing subscribers requires the Flashduty **Pro** plan. -Administrators can bulk import subscribers, useful for migration scenarios or pre-configuring subscriptions for specific user groups. The following fields are required for import: +Administrators can bulk import subscribers, useful for migration scenarios or pre-configuring subscriptions for specific user groups. The console has no import entry; import through the API (see the [bulk import subscribers API](/en/api-reference/on-call/status-pages/status-page-subscriber-import)). The following fields are required for import: | Field | Description | | --- | --- | @@ -130,7 +130,7 @@ Subscriptions imported by administrators do not require email confirmation and t **Plan requirement**: exporting subscribers requires the Flashduty **Standard** plan or above. -Administrators can export the subscriber list, including each subscriber's recipient address, subscription method, and subscribed components. +Administrators can click **Export CSV** in the **Subscribers** list to export the subscriber list, including each subscriber's recipient address, subscription method, and subscribed components. --- diff --git a/en/on-call/statuspage/templates.mdx b/en/on-call/statuspage/templates.mdx index c909f81e..cb29a5a1 100644 --- a/en/on-call/statuspage/templates.mdx +++ b/en/on-call/statuspage/templates.mdx @@ -15,10 +15,9 @@ Use complete status update templates to create events with complete initial info | Field | Description | | --- | --- | -| **Title** | Event title | -| **Type** | Event type: Incident or Maintenance | -| **Status** | Initial event status | -| **Description** | Detailed event description | +| **Template name** | Name of the template | +| **Incident status** / **Maintenance status** | Initial event status; whether the template is for incidents or maintenance depends on whether you create it under **Incident template** or **Maintenance template** | +| **Update message** | Detailed event description | ### Use cases @@ -31,13 +30,13 @@ Complete status update templates are ideal for foreseeable, recurring event scen - In the status page settings under the **Event Templates** tab, select **Complete status update** and click **Create Template**. Fill in the title, type, status, and description. + In the status page settings under the **Event Templates** tab, select **Complete status update** and click **Create template** under **Incident template** or **Maintenance template**. Fill in the template name, status, and update message. When publishing an event, select a complete status update template. The system auto-fills the template fields, which you can then adjust as needed. - You can modify a template's title, description, and status at any time, or delete templates that are no longer needed. + You can modify a template's name, status, and update message at any time, or delete templates that are no longer needed. @@ -47,13 +46,7 @@ Complete status update templates are ideal for foreseeable, recurring event scen Use status description templates to pre-set update messages for different event status stages. Unlike complete status update templates which focus on event initialization, status description templates focus on the notification wording used as events progress. -Each status description template contains the following fields: - -| Field | Description | -| --- | --- | -| **Title** | Template name | -| **Type** | Event type: Incident or Maintenance | -| **Messages** | Pre-set update text for each event status | +The page provides two fixed status description templates, **Incident template** and **Maintenance template**. Each pre-sets an update message for every event status. ### Message mapping @@ -84,15 +77,12 @@ Status description templates are ideal for standardizing event update wording, e ### Manage status description templates - - In the status page settings under the **Event Templates** tab, select **Status description** and click **Create Template**. Fill in the title, type, and message content for each status. + + In the status page settings under the **Event Templates** tab, select **Status description**, click **Edit template** on the **Incident template** or **Maintenance template** card, fill in the update message for each status, and click **Save**. These two templates can only be edited, not created or deleted. When adding a timeline update to an event, select a status description template. The system auto-fills the message text based on the current event status. - - You can update a template's title, type, and message content at any time, or delete templates that are no longer needed. - --- diff --git a/en/on-call/statuspage/widgets.mdx b/en/on-call/statuspage/widgets.mdx index 214c8fc2..0fb661a7 100644 --- a/en/on-call/statuspage/widgets.mdx +++ b/en/on-call/statuspage/widgets.mdx @@ -10,7 +10,7 @@ Widgets are only available for **public status pages**. The Widget settings page -Widgets are on by default, with no configuration needed. In self-hosted deployments, an administrator can turn the feature off globally with the `deploy.widgetEnabled` switch (the API then returns 404). +Widgets are on by default, with no configuration needed. ## Two forms diff --git a/en/openapi/api-catalog.mdx b/en/openapi/api-catalog.mdx index 48ef6a7e..ad7c0163 100644 --- a/en/openapi/api-catalog.mdx +++ b/en/openapi/api-catalog.mdx @@ -6,7 +6,7 @@ description: "Complete list of Flashduty Open API endpoints, organized by produc Flashduty Open API provides **392** endpoints covering five major modules: On-call, Monitors, RUM, AI SRE, and Platform. All endpoints use unified authentication and request specifications. See [Quick Start](/en/openapi/introduction) for details. -All endpoint URLs use `https://api.flashcat.cloud` as the base, authenticated through APP Key through query string. +All endpoint URLs use `https://api.flashcat.cloud` as the base, authenticated with an APP Key (the `app_key` query parameter or the `Fd-App-Key` request header; see the [quickstart](/en/openapi/introduction#passing-the-app-key)). diff --git a/en/platform/audit-log.mdx b/en/platform/audit-log.mdx index ebcd72d7..53b8e2ee 100644 --- a/en/platform/audit-log.mdx +++ b/en/platform/audit-log.mdx @@ -28,7 +28,7 @@ Audit logs provide multiple filtering criteria to help you quickly locate target | Filter | Description | | --- | --- | -| **Time Range** | Select the query time interval; defaults to showing the last 7 days of logs, up to a maximum of 30 days | +| **Time Range** | Defaults to the last 7 days. Choose the last 7 / 30 / 90 days or a custom range; a single query can span at most 90 days, and the range you can actually query is limited by your plan's retention period | | **User** | Filter by operator, supports searching by member name or email | | **Event** | Filter by event type, supports multi-select and keyword search | | **Event ID** | Enter an event ID to precisely match a specific operation record | @@ -43,7 +43,7 @@ You can combine multiple filters. For example, you can specify both a time range Audit logs display 10 records per page. Use the pagination buttons at the bottom of the page to browse more records. The bottom of the page shows the current page and total pages. -Audit logs are retained for up to 30 days. Flashduty purges older logs automatically. +Audit log retention depends on your plan. Flashduty purges older logs automatically. See [Pricing](/en/platform/pricing#resource-limits) for the retention period. ## FAQ diff --git a/en/platform/configure-sso.mdx b/en/platform/configure-sso.mdx index 46add1b6..53fa7661 100644 --- a/en/platform/configure-sso.mdx +++ b/en/platform/configure-sso.mdx @@ -272,13 +272,13 @@ The same restriction applies when switching accounts inside a password session: 3. If the IdP may be temporarily unavailable, keep this toggle off and re-enable it after the IdP is verified. -### Comparison with "Prevent editing external members" +### Comparison with "Disable SSO member editing" -`force_sso` controls **how members sign in** — whether password and verification-code sign-in are allowed. `sso_user_non_editable` ([Prevent editing external members](#external-member-management)) controls **member editability** — whether SSO-synchronized external members can have their profile and role modified in the console. The two settings act on different layers and can be toggled independently. +`force_sso` controls **how members sign in** — whether password and verification-code sign-in are allowed. `sso_user_non_editable` ([Disable SSO member editing](#external-member-management)) controls **member editability** — whether SSO-synchronized external members can have their profile and role modified in the console. The two settings act on different layers and can be toggled independently. ## External member management -When you enable single sign-on, Flashduty marks members created by their first SSO login as **external members**. You can enable the **Prevent editing external members** option in SSO settings (disabled by default). When enabled, these external members become read-only in Flashduty — you cannot modify their roles or delete them in Flashduty. All member management must be done through the identity provider. +When you enable single sign-on, Flashduty marks members created by their first SSO login as **external members**. You can enable the **Disable SSO member editing** option in SSO settings (disabled by default). When enabled, these external members become read-only in Flashduty — you cannot modify their roles or delete them in Flashduty. All member management must be done through the identity provider. This feature is ideal for organizations that need to centrally manage user permissions in the identity provider, ensuring member information in Flashduty always stays in sync. diff --git a/en/platform/permission-design.mdx b/en/platform/permission-design.mdx index 64fd2f3a..a3ada15a 100644 --- a/en/platform/permission-design.mdx +++ b/en/platform/permission-design.mdx @@ -25,7 +25,7 @@ Flashduty **controls functional permissions based on roles (RBAC)**, with permis Has all permissions, for core members who manage everything. Automatically has access to every custom menu. - Has all **system** permissions except "Payment Center", "Members Manage", "Roles Manage", and "SSO Manage". Suitable for members handling daily operations work. Automatically has access to every custom menu. + Has all **system** permissions except "Payment Center", "Members Manage", "Roles Manage", "SSO Manage", "Comment Types Manage", and the AI SRE actions that enable or disable Apps, revoke the GitHub App, and disconnect the GitLab App. Suitable for members handling daily operations work. Automatically has access to every custom menu. Has most read-only **system** permissions except "Audit" and "Onboarding". Suitable for members who only need to view data. Automatically has access to every custom menu. @@ -44,6 +44,7 @@ The system divides permissions by product scope, with each permission point havi - **On-call**: Incident response, configuration management, status pages, and other on-call related permissions - **RUM**: Frontend monitoring related permissions - **Monitors**: Monitoring and alerting related permissions +- **AI SRE**: Chat, Skill, MCP, Agent, knowledge, environment, Apps, and Automation permissions; shown only for accounts with AI SRE enabled - **Custom menu**: Account-level dynamic permission group; each configured custom menu becomes a permission point @@ -104,6 +105,7 @@ For creating and managing custom menus themselves, use **Platform Management → | **Integrations Read** | Read | View configured integration list and integration details | | **Integrations Manage** | Manage | Add, configure, test and delete integrations. You must also have the corresponding data permissions for the integration | | **Analytics Read** | Read | View incident response, system health and other analytics reports and statistics | + | **Comment Types Manage** | Manage | Create, edit, reorder and delete incident comment types (Admin only by default) |
| Permission | Type | Description | @@ -151,6 +153,13 @@ For creating and managing custom menus themselves, use **Platform Management → | **Session Explorer Read** | Read | View event details, and so on | | **Session Replay Read** | Read | View frontend monitoring session replay, and so on | + + | Permission | Type | Description | + | --- | --- | --- | + | **Chat Read** | Read | View and send AI SRE chat messages | + | **Read permissions** | Read | Separate permissions to view Skills, MCP, Agents, knowledge, environments, Apps, and Automations | + | **Manage permissions** | Manage | Separate permissions to create, edit, enable, disable, and delete Skills, MCP, Agents, knowledge, environments, Apps, and Automations; plus GitHub App authorization and Kubernetes App management | + | Permission | Type | Description | | --- | --- | --- | diff --git a/en/platform/pricing.mdx b/en/platform/pricing.mdx index a06803c0..2df3cbce 100644 --- a/en/platform/pricing.mdx +++ b/en/platform/pricing.mdx @@ -142,10 +142,6 @@ Flashduty uses a **License (active user)** billing model—only members who need - -The number of License **releases** an account can perform within one billing period is limited, and releasing a **fixed** or a **temporary** License both count against the limit; once it is used up, you can release again only in the next billing period. **Deleting a member is not a release** and does not count against the limit; that member's License is released together with the member. - - #### Permissions for members without license @@ -349,7 +345,7 @@ After you renew or re-enable the subscription, you **don't reconfigure anything* - Flashduty releases temporary Licenses automatically - Deleting a member releases their License automatically - Licenses are billed per active member each month and can't be rotated between members. The number of releases in each billing period is limited; deleting a member is not affected. To let more members handle incidents at the same time, purchase more Licenses. + Licenses are billed per active member each month. To let more members handle incidents at the same time, purchase more Licenses. diff --git a/en/platform/team-members.mdx b/en/platform/team-members.mdx index de81cada..bbb68f48 100644 --- a/en/platform/team-members.mdx +++ b/en/platform/team-members.mdx @@ -123,10 +123,10 @@ Licenses determine whether a member can view and handle incidents. In the member You can perform the following actions in the License column of the member list: - **Grant Fixed License**: Assign a fixed license to a member, provided there are available license slots -- **Revoke License**: Release the member's license; the member will no longer be able to view or handle incidents. The number of releases per billing period is limited, see [Plans and Billing](/en/platform/pricing); once it is used up, **Revoke License** is greyed out (hover to see when the quota resets) +- **Revoke License**: Release the member's license; the member will no longer be able to view or handle incidents -The total number of licenses depends on your subscription plan. When all licenses are allocated, you need to release another member's license or upgrade your subscription to assign one to a new member. Removing a member is not subject to the release quota and releases that member's license. +The total number of licenses depends on your subscription plan. When all licenses are allocated, you need to release another member's license or upgrade your subscription to assign one to a new member. Removing a member releases that member's license. ### Member detail page diff --git a/en/rum/best-practices/alert-noise-reduction.mdx b/en/rum/best-practices/alert-noise-reduction.mdx index ec67b1c2..4ee15859 100644 --- a/en/rum/best-practices/alert-noise-reduction.mdx +++ b/en/rum/best-practices/alert-noise-reduction.mdx @@ -29,20 +29,20 @@ Before configuring alert grading, start by cleaning up the data source. Common n Errors from browser extensions or third-party ad/analytics scripts are unrelated to your business and should be excluded: - - Error Stack contains `chrome-extension://` - - Error Stack contains `moz-extension://` - - Error Stack contains `cdn.third-party.com` + - Error Stack matches `*chrome-extension://*` + - Error Stack matches `*moz-extension://*` + - Error Stack matches `*cdn.third-party.com*` Some errors occur frequently but don't affect user experience: - - Error Message contains `ResizeObserver loop` - - Error Message contains `Script error` + - Error Message matches `*ResizeObserver loop*` + - Error Message matches `*Script error*` If you only care about production alerts, filter out other environments: - - Environment not contains `production` + - Environment does not match `production` @@ -70,19 +70,19 @@ Here are recommended rules ranked by business priority from high to low: A crash means the application is completely unavailable, requiring the highest priority response. - - Condition: Environment contains `production`, AND Is Crash contains `true` + - Condition: Environment matches `production`, AND Is Crash matches `true` - Alert level: P0 VIP user experience is directly tied to business value. - - Condition: User ID contains `vip` (or match through custom field `context.user.level` contains `vip`) + - Condition: User ID matches `*vip*` (or custom field `context.user.level` matches `vip`) - Alert level: P0 Errors on payment, login, and checkout pages need priority handling. - - Condition: Page URL contains `/payment` + - Condition: Page URL matches `*/payment*` - Alert level: P1 You can create separate rules for each critical page, or use multiple match values in a single rule. diff --git a/en/rum/error-tracking/error-reporting/android.mdx b/en/rum/error-tracking/error-reporting/android.mdx index 774ab18c..5ca31249 100644 --- a/en/rum/error-tracking/error-reporting/android.mdx +++ b/en/rum/error-tracking/error-reporting/android.mdx @@ -170,7 +170,7 @@ plugins { ```groovy build.gradle flashcat { - site = "CN" // Optional values: CN, STAGING. Default: CN + site = "CN" // Optional. Default: CN serviceName = "" // Optional, defaults to the application ID versionName = "1.0.0" // Optional, defaults to android.defaultConfig.versionName } @@ -210,7 +210,7 @@ If you're using NDK crash reporting, you also need to upload NDK symbol files to | -------- | ----------- | | `versionName` | App version name. Defaults to the Android build configuration's `versionName` | | `serviceName` | Service name. Defaults to the application ID | -| `site` | Upload site. Options: `CN`, `STAGING`. Default: `CN` | +| `site` | Upload site. Default: `CN` | | `mappingFilePath` | Custom ProGuard/R8 mapping file path. Defaults to the current variant's Android build output | | `nonDefaultObfuscation` | Set to `true` when using DexGuard or another non-default obfuscator. The plugin creates upload tasks for all variants | | `additionalSymbolFilesLocations` | Extra NDK symbol directories. Directory structure should look like `/path/to/location/obj/{arch}/libname.so` | diff --git a/en/rum/error-tracking/error-reporting/ios.mdx b/en/rum/error-tracking/error-reporting/ios.mdx index e05deb55..3cf87d59 100644 --- a/en/rum/error-tracking/error-reporting/ios.mdx +++ b/en/rum/error-tracking/error-reporting/ios.mdx @@ -262,25 +262,7 @@ lane :upload_dsyms do end ``` -### dSYM for Bitcode Apps - -If your app has Bitcode enabled, Apple will recompile the app during App Store processing, generating new dSYM files. You need to download these dSYMs from App Store Connect and upload them. - -#### Download Bitcode dSYM - - - - Visit [App Store Connect](https://appstoreconnect.apple.com) and log in to your account. - - - - Go to your app → Activity → Select the build version for which you need to download dSYMs. - - - - Click the "Download dSYM" button, then upload using Flashduty CLI after download completes. - - +For builds distributed through App Store Connect, download the dSYM from the build page in App Store Connect when you need symbol files, then upload it. ### dSYM file limitations @@ -303,7 +285,6 @@ By default, only crashes that occur while a view is active are tracked. To track - Only crashes from real devices support symbolication; crashes from simulators are not supported. - Each release version requires uploading the corresponding dSYM files. -- If using Bitcode, you need to download and upload the regenerated dSYMs from App Store Connect. ### App Hang Detection limitations @@ -369,7 +350,6 @@ Each error record contains the following attributes: - Upload corresponding dSYM files for each release version - Integrate dSYM upload into your CI/CD pipeline - - If using Bitcode, promptly download and upload dSYMs from App Store Connect 3. **Set Appropriate App Hang Threshold**: Set a suitable threshold based on your app's performance requirements to avoid excessive false positives. diff --git a/en/rum/error-tracking/issue-alerts.mdx b/en/rum/error-tracking/issue-alerts.mdx index 86a8e459..bf494405 100644 --- a/en/rum/error-tracking/issue-alerts.mdx +++ b/en/rum/error-tracking/issue-alerts.mdx @@ -105,10 +105,10 @@ Rules are evaluated from top to bottom in priority order; **the first matching r |-------|-------------|---------| | User ID (`error.usr_id`) | User identifier that reported the error | `vip_001` | | User Email (`error.usr_email`) | User email address | `*@vip.com` | -| Page URL (`error.view_url`) | Full page URL where the error occurred | Contains `/payment` | +| Page URL (`error.view_url`) | Full page URL where the error occurred | Matches `*/payment*` | | Error Type (`error.error_type`) | Error type classification | `TypeError`, `SyntaxError` | -| Error Message (`error.error_message`) | Error description text | Contains `Cannot read property` | -| Stack (`error.error_stack`) | Error stack trace | Contains `at handleClick` | +| Error Message (`error.error_message`) | Error description text | Matches `*Cannot read property*` | +| Stack (`error.error_stack`) | Error stack trace | Matches `*at handleClick*` | | Environment (`error.env`) | Environment where the error occurred | `production`, `staging` | | Service (`error.service`) | Service the error belongs to | `payment` | | Version (`error.version`) | Application version | `1.2.0` | @@ -116,7 +116,7 @@ Rules are evaluated from top to bottom in priority order; **the first matching r | Browser Version (`error.browser_version`) | Browser version number | `120.0` | | Is Crash (`error.is_crash`) | Whether it's a crash error | `true` | -Match operators support "contains" and "not contains". +The operators are "Match" and "Not Match". A plain value must equal the whole field value. Wildcards `*` (for example `*vip*` for "contains vip") and regular expressions (for example `/^TypeError/i`) are supported. A condition takes up to 8 values and matches if any one matches. #### Configuration examples @@ -124,19 +124,19 @@ Match operators support "contains" and "not contains". Set the highest priority for VIP user errors to ensure immediate response: - - Match condition: User ID contains `vip` + - Match condition: User ID matches `*vip*` - Alert level: P0 (Critical) The payment page is a critical business flow; related errors need priority handling: - - Match condition: Page URL contains `/payment` + - Match condition: Page URL matches `*/payment*` - Alert level: P1 (Warning) Production crashes require immediate response: - - Match condition: Environment contains `production`, AND Is Crash contains `true` + - Match condition: Environment matches `production`, AND Is Crash matches `true` - Alert level: P0 (Critical) @@ -154,9 +154,9 @@ You can add filter rules in "Alert Settings". Each rule can have multiple match | Scenario | Example Rule | |----------|--------------| -| Exclude third-party script errors | Error Stack contains `cdn.third-party.com` | -| Exclude known harmless errors | Error Message contains `ResizeObserver loop` | -| Exclude debug page errors | Page URL contains `/debug` | +| Exclude third-party script errors | Error Stack matches `*cdn.third-party.com*` | +| Exclude known harmless errors | Error Message matches `*ResizeObserver loop*` | +| Exclude debug page errors | Page URL matches `*/debug*` | - Filtered Errors will not participate in Issue aggregation or alerting, but the data is still retained and can be viewed in the Explorer using filter conditions diff --git a/en/rum/error-tracking/source-mapping.mdx b/en/rum/error-tracking/source-mapping.mdx index 811f8e80..a7a294fc 100644 --- a/en/rum/error-tracking/source-mapping.mdx +++ b/en/rum/error-tracking/source-mapping.mdx @@ -301,7 +301,7 @@ For apps containing NDK native code, NDK symbol files also need to be uploaded t flashcat { versionName = "1.3.0" // Optional, defaults to Android versionName serviceName = "my-service" // Optional, defaults to the application ID - site = "CN" // Optional values: CN, STAGING. Default: CN + site = "CN" // Optional. Default: CN sourcemapEndpoint = "https://rum.example.com" // Optional custom intake endpoint for private deployments; /sourcemap/upload is appended if omitted checkProjectDependencies = "none" // Optional: none, warn, fail. Default: no check mappingFilePath = "path/to/mapping.txt" // Optional custom mapping file path @@ -312,7 +312,7 @@ For apps containing NDK native code, NDK symbol files also need to be uploaded t ``` - By default the plugin selects the upload endpoint from `site`: `CN` uses `ci.flashcat.cloud`, and `STAGING` uses `ci-dev.flashcat.cloud`. For private deployments, set `sourcemapEndpoint` to a custom intake endpoint (supported since `1.2.0`); if the value omits the `/sourcemap/upload` path it is appended automatically. The three configuration sources are resolved in this order of precedence: `flashcat {}` extension config > `flashcat-ci.json` > the `FLASHCAT_SOURCEMAP_INTAKE_URL` environment variable. Once a custom endpoint is set, `site` is only used as a fallback and no longer affects the actual upload URL. + By default the plugin selects the upload endpoint from `site`: `CN` uses `ci.flashcat.cloud`. For private deployments, set `sourcemapEndpoint` to a custom intake endpoint (supported since `1.2.0`); if the value omits the `/sourcemap/upload` path it is appended automatically. The three configuration sources are resolved in this order of precedence: `flashcat {}` extension config > `flashcat-ci.json` > the `FLASHCAT_SOURCEMAP_INTAKE_URL` environment variable. Once a custom endpoint is set, `site` is only used as a fallback and no longer affects the actual upload URL. diff --git a/en/rum/others/compliance-guide.mdx b/en/rum/others/compliance-guide.mdx index 97ad5c11..f4cb7b3c 100644 --- a/en/rum/others/compliance-guide.mdx +++ b/en/rum/others/compliance-guide.mdx @@ -98,7 +98,7 @@ Beyond collecting data on a minimal, as-needed basis, the SDK provides the follo See the RUM [Data security](/en/rum/others/data-security) doc for details. - You can disable collection of IP address and geolocation (country/city) data in the app's "user data collection" settings; the change takes effect immediately server-side. + You can disable collection of IP address and geolocation (country/city) data on the **Privacy** tab of the application details; the change takes effect immediately server-side. All RUM events can be forwarded through your own proxy server so end-user devices never communicate with Flashduty directly, letting you centrally control egress traffic. diff --git a/en/rum/others/data-security.mdx b/en/rum/others/data-security.mdx index 97390e65..0a2bc05e 100644 --- a/en/rum/others/data-security.mdx +++ b/en/rum/others/data-security.mdx @@ -63,7 +63,7 @@ Scenarios where PII may appear in RUM include: This setting is also designed to be compatible with existing HTML override attributes. - After initializing the RUM application, you can choose whether to include IP or geolocation data in the **User Data Collection** tab. + After initializing the RUM application, you can choose whether to include IP or geolocation data with the **Collect user IP address** and **Collect user location data** switches on the **Privacy** tab of the application details. After disabling IP data collection, changes take effect immediately. Any events collected before disabling will not have IP data removed. The browser SDK still sends data; IP addresses are discarded when Flashduty processes it on the server side. @@ -73,7 +73,7 @@ Scenarios where PII may appear in RUM include: In addition to removing client IP, you can also choose to disable collection of geolocation (country, city, county) or GeoIP information from all future collected data. - If you uncheck the **Collect geolocation data** box, changes take effect immediately. Any events collected before disabling will not have corresponding geolocation data removed. Geolocation data is discarded when Flashduty processes events on the server side. + If you turn off the **Collect user location data** switch, changes take effect immediately. Any events collected before disabling will not have corresponding geolocation data removed. Geolocation data is discarded when Flashduty processes events on the server side. diff --git a/en/rum/performance/diagnosis-optimization.mdx b/en/rum/performance/diagnosis-optimization.mdx index 56fd4466..06cbd89b 100644 --- a/en/rum/performance/diagnosis-optimization.mdx +++ b/en/rum/performance/diagnosis-optimization.mdx @@ -42,6 +42,12 @@ Open the optimization page from the **Performance Monitoring** menu, or jump to Problem Diagnosis + The page also shows: + + - **Diagnosis**: the main source slowing down the current metric, judged from the data below. Click **View evidence** to jump to the matching section. + - **LCP elements / Interaction targets / Shifted elements**: correspond to LCP, INP and CLS, with each element's share of views and P75. + - **Scripts blocking the main thread**: the longest-running scripts across the latest views with long tasks. Only Chromium-based browsers report script attribution. + For example, for Largest Contentful Paint (LCP), you can view resources loaded before LCP was triggered. LCP measures how long the largest element on the page takes to load. Diagnose it from two angles: resource loading and errors. diff --git a/en/rum/quickstart/app-management.mdx b/en/rum/quickstart/app-management.mdx index a4a16cd1..47cd36e5 100644 --- a/en/rum/quickstart/app-management.mdx +++ b/en/rum/quickstart/app-management.mdx @@ -20,7 +20,7 @@ To meet the data security requirements of different business scenarios, RUM appl | Access Level | Visibility | Applicable Scenarios | |--------------|------------|----------------------| | **Public** | Visible to all users in the account, can view data and handle Issues | General business applications | -| **Private** | Only visible to creator, account administrator, and owner account | Sensitive business data | +| **Private** | Only visible to managing team members, the creator, and account administrators (including the owner account) | Sensitive business data | In private applications, if other members need to view content, they can be temporarily authorized to access it by sharing the incident link. @@ -423,7 +423,7 @@ Status labels: ## Delete application -If you no longer need an application, you can find the delete button at the bottom of the "Basic Info" tab in the application details. +If you no longer need an application, you can find the delete button at the bottom of the "Basic information" tab in the application details. After deleting an application: diff --git a/en/rum/quickstart/faq.mdx b/en/rum/quickstart/faq.mdx deleted file mode 100644 index ff39754a..00000000 --- a/en/rum/quickstart/faq.mdx +++ /dev/null @@ -1,416 +0,0 @@ ---- -title: "Troubleshooting guide" -description: "Comprehensive guide to troubleshooting Flashduty RUM issues, ensuring accuracy and completeness of monitoring data" ---- - -## Overview - -This guide helps you resolve common issues you may encounter when using Flashduty RUM, including data collection anomalies, SDK configuration issues, and performance optimization. - -## Data collection verification - -If you don't see data on the RUM platform, follow these steps to check. - -### SDK installation check - - - -Confirm that the RUM SDK is correctly imported: - - -```html CDN Integration - - -``` - -```javascript npm Integration -import { flashcatRum } from "@flashcatcloud/browser-rum"; - -flashcatRum.init({ - applicationId: "Your Application ID", - clientToken: "Your Client Token", - service: "", - env: "", - version: "1.0.0" -}); -``` - - - - -Open browser developer tools (F12) and check if there are JavaScript errors in the Console panel. - - - -Confirm that the application ID and client token match the configuration in the RUM console. - - - -### Network request check - -1. Open the browser developer tools **Network** panel -2. Filter requests for `browser.flashcat.cloud` -3. Confirm the request status code is `200` -4. If the request fails, check the specific error message - - -If you see CORS errors, check if your CSP configuration is correct. - - -### Browser compatibility - -Confirm that your browser version is supported: - -| Browser | Minimum Version | -|--------|----------| -| Chrome | 60+ | -| Firefox | 60+ | -| Safari | 12+ | -| Edge | 15+ | -| Internet Explorer | 11 (limited functionality) | - -### Ad blocker impact - - -Some ad blocking extensions may block the RUM SDK from running. We recommend adding your domain and `browser.flashcat.cloud` to the whitelist. - - -## Common problem solutions - - - -**Problem**: SDK configuration is complete, but no data on the platform. - -**Solutions**: - -1. **Wait for Data Sync**: Data typically appears within 2-5 minutes - -2. **Check Initialization Timing**: Ensure SDK is initialized when the page loads - -3. **Check Sampling Rate**: Confirm sampling rate is set appropriately - - ```javascript - flashcatRum.init({ - // ... other configuration - sessionSampleRate: 100 // Set to 100 to collect all sessions - }); - ``` - -4. **Check User Consent**: Confirm user tracking consent status - -```javascript -flashcatRum.setTrackingConsent("granted"); -``` - - - -**Problem**: User behavior data is incomplete. - -**Solutions**: - -1. **Enable Behavior Tracking**: - - ```javascript - flashcatRum.init({ - // ... other configuration - trackUserInteractions: true - }); - ``` - -2. **Add Labels to Custom Elements**: - - ```html - - ``` - -3. **Manually Record Complex Interactions**: - -```javascript -flashcatRum.addAction("click", "Custom Button Click"); -``` - - - -**Problem**: JavaScript exceptions are not being recorded. - -**Solutions**: - -1. **Enable Exception Tracking**: - - ```javascript - flashcatRum.init({ - // ... other configuration - trackErrors: true - }); - ``` - -2. **Manually Report Exceptions in try-catch**: - - ```javascript - try { - // Code that might error - } catch (error) { - console.error(error); - flashcatRum.addError(error); - } - ``` - -3. **Configure Source Map**: For locating issues in production, see [Source Mapping](/en/rum/error-tracking/source-mapping) - - - -**Problem**: Concerned about RUM SDK affecting website performance. - -**Solutions**: - -1. **Only Enable Necessary Features**: - - ```javascript - flashcatRum.init({ - // ... other configuration - trackResources: true, - trackLongTasks: false, // Disable unnecessary features - trackErrors: true, - trackUserInteractions: true - }); - ``` - -2. **Adjust Sampling Rate**: - - ```javascript - flashcatRum.init({ - // ... other configuration - sessionSampleRate: 50 // Only collect 50% of sessions - }); - ``` - -3. **Filter Non-Critical Resources**: - -```javascript -flashcatRum.init({ - // ... other configuration - beforeSend: (event) => { - // Filter out non-critical resources - if (event.type === 'resource' && event.resource.url.includes('/static/')) { - return false; - } - return true; - } -}); -``` - - - -**Problem**: CSP policy blocking RUM SDK from running. - -**Solution**: - -Add the following rules to your CSP configuration: - -``` -script-src 'self' https://static.flashcat.cloud; -connect-src 'self' https://browser.flashcat.cloud; -``` - - - -**Problem**: Route changes in SPA applications are not being recorded. - -**Solutions**: - - - -```javascript -import { useEffect } from "react"; -import { useLocation } from "react-router-dom"; - -function RumRouteTracker() { - const location = useLocation(); - - useEffect(() => { - flashcatRum.startView({ - name: location.pathname, - url: location.pathname + location.search - }); - }, [location]); - - return null; -} - -// Use in App component -function App() { - return ( - - - {/* Other routes */} - - ); -} -``` - - - -```javascript -router.afterEach((to) => { - flashcatRum.startView({ - name: to.name || to.path, - url: to.fullPath - }); -}); -``` - - - -```javascript -// Call when route changes -flashcatRum.startView({ - name: "Product Details Page", - url: "/products/123" -}); -``` - - - - - -## Advanced debugging - -### Enable debug mode - -Enable debug mode to get detailed logs in the console: - -```javascript -flashcatRum.init({ - // ... other configuration - debug: true -}); -``` - -### Force full data collection - -Force full data collection during testing: - -```javascript -flashcatRum.init({ - // ... other configuration - sessionSampleRate: 100, - sessionReplaySampleRate: 100 -}); -``` - - -Do not use 100% sampling rate in production to avoid generating excessive data and costs. - - -### Console debug commands - -The following commands can be used in the browser console: - -```javascript -// Get RUM internal context -window.FC_RUM.getInternalContext(); - -// Get current session ID -window.FC_RUM.getSessionId(); - -// Get current page ID -window.FC_RUM.getViewId(); - -// Manually send test event -window.FC_RUM.addAction('test', 'debug_action'); -``` - -### Network request analysis - -1. Open developer tools **Network** panel -2. Filter `browser.flashcat.cloud` requests -3. View request Payload to confirm data content -4. Check Response to confirm successful reporting - -## FAQ - - - -Generally within 2-5 minutes, with possible slight delays during peak times. - - - -Yes, mainstream mobile browsers like iOS Safari and Android Chrome are supported, but some advanced features (like Long Tasks monitoring) may be limited. - - - -You can conditionally decide whether to initialize based on URL: - -```javascript -// Exclude admin pages -if (!window.location.pathname.startsWith("/admin")) { - flashcatRum.init({ - // ... configuration - }); -} -``` - - - -The following configuration is needed: - -1. Use the same application ID and client token -2. Set consistent user identification -3. Enable cross-domain tracking: - -```javascript -flashcatRum.init({ - // ... other configuration - allowedTracingUrls: [ - "https://example.com", - "https://app.example.com", - "https://shop.example.com" - ] -}); -``` - - - -You can do the following: - -1. **Lower Sampling Rate**: Set `sessionSampleRate` to 10-50 -2. **Disable Unnecessary Features**: Such as `trackLongTasks: false` -3. **Exclude Specific Pages**: Don't initialize on admin or internal pages -4. **Configure Data Filtering**: Use `beforeSend` to filter non-critical data - - - -## Contact technical support - -If you still have issues after following the above troubleshooting steps, please contact our technical support team. - - - -Please collect the following information: - -- Application ID -- Browser type and version -- SDK version -- Console error screenshots -- Network panel request screenshots -- Problem reproduction steps - - - -- **Email**: [support@flashcat.cloud](mailto:support@flashcat.cloud) -- **Online Chat**: Click the "Help" button in the bottom right corner of the platform - - diff --git a/en/rum/quickstart/quickstart.mdx b/en/rum/quickstart/quickstart.mdx index c8e98f7d..c1c0d9b5 100644 --- a/en/rum/quickstart/quickstart.mdx +++ b/en/rum/quickstart/quickstart.mdx @@ -106,4 +106,4 @@ In the RUM console, you can use the following features: - [Data Collection](/en/rum/sdk/web/data-collection) - Learn about data types and storage strategies - [Advanced Configuration](/en/rum/sdk/web/advanced-config) - Customize SDK behavior -- [Troubleshooting](/en/rum/quickstart/faq) - Solve common problems +- [Troubleshooting](/en/rum/sdk/web/faq) - Solve common problems diff --git a/en/rum/sdk/flutter/sdk-integration.mdx b/en/rum/sdk/flutter/sdk-integration.mdx index 1b87be5c..6a28cac7 100644 --- a/en/rum/sdk/flutter/sdk-integration.mdx +++ b/en/rum/sdk/flutter/sdk-integration.mdx @@ -28,10 +28,6 @@ dependencies: flashcat_flutter_plugin: ^0.2.0 ``` - -Use `0.1.3` or later. On earlier versions, `flutter build apk --release` — including the `--obfuscate` build that crash symbolication requires — fails in R8 with `Missing class org.bouncycastle.jsse.BCSSLParameters`. From `0.1.3` the required ProGuard rules ship with the package and no app-side configuration is needed. - - ## Initialize the SDK We recommend initializing in `main()`, before `runApp`. When you start the application with `DatadogSdk.runApp`, the SDK automatically takes over `FlutterError.onError` and `PlatformDispatcher.instance.onError`, so it can collect unhandled exceptions without manual wiring. diff --git a/en/rum/sdk/harmony/advanced-config.mdx b/en/rum/sdk/harmony/advanced-config.mdx index ba7004a5..1460a107 100644 --- a/en/rum/sdk/harmony/advanced-config.mdx +++ b/en/rum/sdk/harmony/advanced-config.mdx @@ -492,7 +492,7 @@ npm install -D @flashcatcloud/hvigor-plugin ``` -Use **0.1.5 or later** (0.1.4 was withdrawn from npm and can no longer be installed). 0.1.3 made the upload task depend on both `assembleHap` and `assembleHar`. A module has at most one of them, so the build fails with `Cannot find hvigor task 'assembleHar' in module 'entry'`. +Use **0.1.5 or later**. Then register the plugin in the module's `hvigorfile.ts`: @@ -514,7 +514,7 @@ export default { ``` -On SaaS, omit `endpoint` — **hvigor-plugin ≥ 0.1.3** defaults to `https://ci.flashcat.cloud` (**not** the RUM ingest host `browser.flashcat.cloud`). For a private deployment set `FLASHCAT_SOURCEMAP_INTAKE_URL` (scheme + host, no path; also requires ≥ 0.1.3), or pass `endpoint: 'https://rum.example.com'`. Plugin 0.1.2 does not honour `FLASHCAT_SOURCEMAP_INTAKE_URL` — set `endpoint` explicitly, or use the legacy `FLASHCAT_ENDPOINT` env var (deprecated in 0.1.3 but still honoured). `flashcatSymbolUploadPlugin()` also accepts two optional fields: `buildDir` and `pluginVersion` (the version sent in the `DD-EVP-ORIGIN-VERSION` upload header, which defaults to the plugin's own version). **From 0.1.5, the build directory follows the product being built** (`-p product=beta` → `build/beta`). Pass `buildDir` only when the artifacts are elsewhere. 0.1.3 and earlier always used `build/default` and silently scanned the wrong directory for other products. +On SaaS, omit `endpoint` — **hvigor-plugin ≥ 0.1.3** defaults to `https://ci.flashcat.cloud` (**not** the RUM ingest host `browser.flashcat.cloud`). For a private deployment set `FLASHCAT_SOURCEMAP_INTAKE_URL` (scheme + host, no path; also requires ≥ 0.1.3), or pass `endpoint: 'https://rum.example.com'`. `flashcatSymbolUploadPlugin()` also accepts an optional `buildDir`. **From 0.1.5, the build directory follows the product being built** (`-p product=beta` → `build/beta`). Pass `buildDir` only when the artifacts are elsewhere. After a release build, run the upload task as its own hvigor invocation: @@ -526,26 +526,9 @@ FLASHCAT_API_KEY=*** \ ``` -`--no-daemon` is not optional when you configure the plugin from environment variables. hvigor builds through a long-lived daemon that **copies the environment once, when it starts**. After that it refreshes only a fixed allowlist: `DEVECO_SDK_HOME`, `OHOS_BASE_SDK_HOME`, and two incremental-build flags. A reused daemon therefore hands the plugin the environment of whoever started it — an IDE build, or an earlier command — not the one you just typed. - -The failure is silent: `FLASHCAT_API_KEY` reads as unset and the upload is skipped with a single log line, or a stale key ends in a 401 — either way the build still succeeds. Values written directly into `hvigorfile.ts` are not affected. +Add `--no-daemon` when you configure the plugin from environment variables: the hvigor daemon does not re-read them. Otherwise the upload is silently skipped (`FLASHCAT_API_KEY` reads as unset) or uses a stale key (401), and the build still shows success. Values written directly into `hvigorfile.ts` are not affected. -The plugin sends `multipart/form-data` to `{endpoint}/sourcemap/upload`: - -| Header | Value | -|--------|-------| -| `DD-API-KEY` | Flashduty API Key used to resolve the account | -| `DD-EVP-ORIGIN` | `flashcat-hvigor-plugin` | -| `DD-EVP-ORIGIN-VERSION` | Plugin version | - -Upload event types: - -| Event type | Form fields | -|------------|-------------| -| `harmony_sourcemap` | `event`, `source_map`, optional `name_cache` | -| `harmony_symbol_file` | `event`, `symbol_file` | - Native symbolication depends on the GNU build-id in each `.so`. The HarmonyOS NDK generates build-id by default. If your build pipeline disables it, add `-Wl,--build-id` for the `.so`. diff --git a/en/rum/sdk/react-native/advanced-config.mdx b/en/rum/sdk/react-native/advanced-config.mdx index 0f465800..a1ae3c87 100644 --- a/en/rum/sdk/react-native/advanced-config.mdx +++ b/en/rum/sdk/react-native/advanced-config.mdx @@ -171,10 +171,6 @@ Upload behavior (from `0.1.1`): | `FLASHCAT_API_KEY` not set | Prints a warning and skips the upload; the release build still succeeds | | Upload fails (network, invalid key, and so on) | Prints a warning; the build result is unaffected | | `FLASHCAT_SOURCEMAPS_DRY_RUN=true` | Generates the source map only, without uploading | - - -In `0.1.0`, a missing `FLASHCAT_API_KEY` fails `assembleRelease` entirely and the APK stays on the previous version. Upgrade to `0.1.1` or later. - First make the release build produce a source map: in the **Bundle React Native code and images** build phase in Xcode, set `SOURCEMAP_FILE` before `react-native-xcode.sh` runs. diff --git a/en/rum/sdk/react-native/sdk-integration.mdx b/en/rum/sdk/react-native/sdk-integration.mdx index d3f57a59..90712de0 100644 --- a/en/rum/sdk/react-native/sdk-integration.mdx +++ b/en/rum/sdk/react-native/sdk-integration.mdx @@ -35,10 +35,6 @@ npm install @flashcatcloud/mobile-react-native-navigation # react-native-navig cd ios && pod install ``` - -Use `0.1.1` or later. When `FLASHCAT_API_KEY` is missing, the upload prints a warning and is skipped; it does not fail the release build. See Source map upload in Advanced configuration. - - ## Configure Metro (optional) Wrap the Metro config with `withDatadogMetroConfig` so the release bundle and its sourcemap both carry a Debug ID. This step is optional: the server matches source maps by service + version + bundle file name and does not depend on the Debug ID. diff --git a/en/rum/sdk/web/advanced-config.mdx b/en/rum/sdk/web/advanced-config.mdx index 03dfb489..5e0234dd 100644 --- a/en/rum/sdk/web/advanced-config.mdx +++ b/en/rum/sdk/web/advanced-config.mdx @@ -370,6 +370,17 @@ At `sessionSampleRate: 100`, `sessionOnError` has no additional effect; at `sess You can also change both options through [remote configuration](/en/rum/quickstart/app-management#remote-configuration). +## Remote configuration + +With Web SDK 0.4.0 or later and `remoteConfigurationEnabled: true` set at initialization (default `false`), the SDK reads what the application publishes on the **Remote configuration** tab in the console: session sample rate, session replay sample rate, trace sample rate, replay privacy level, capture additional sessions on error, capture additional replay on error, and custom items. These override the matching values in `init()`. A published configuration applies from the next new session. For what each item does and how to publish, see [Application management](/en/rum/quickstart/app-management#remote-configuration). + +```javascript +flashcatRum.init({ + // ... other configuration + remoteConfigurationEnabled: true +}); +``` + ## User tracking consent To comply with privacy regulations like GDPR and CCPA, Flashduty RUM allows setting user tracking consent state during initialization: diff --git a/en/rum/sdk/web/faq.mdx b/en/rum/sdk/web/faq.mdx index 76249ed9..a0d04098 100644 --- a/en/rum/sdk/web/faq.mdx +++ b/en/rum/sdk/web/faq.mdx @@ -304,7 +304,7 @@ flashcatRum.init({ ``` -Do not use 100% sample rate in production to avoid excessive data and costs. +100% is for testing. The SDK default for `sessionSampleRate` is 100; in production, lower it to fit your traffic and budget. The code generated in the console defaults to 10. ### Console debug commands diff --git a/en/rum/sdk/web/sdk-integration.mdx b/en/rum/sdk/web/sdk-integration.mdx index 1d1d9875..459b2348 100644 --- a/en/rum/sdk/web/sdk-integration.mdx +++ b/en/rum/sdk/web/sdk-integration.mdx @@ -152,6 +152,10 @@ Application version number Percentage of sessions to track: 100 for all, 0 for none + +Whether to read the [remote configuration](/en/rum/sdk/web/advanced-config#remote-configuration) published in the console. Requires Web SDK 0.4.0 or later + + Percentage of sessions with [Session Replay](/en/rum/session-replay/overview) enabled diff --git a/en/rum/sdk/wechat-miniprogram/advanced-config.mdx b/en/rum/sdk/wechat-miniprogram/advanced-config.mdx index 998ba980..1e45e3f4 100644 --- a/en/rum/sdk/wechat-miniprogram/advanced-config.mdx +++ b/en/rum/sdk/wechat-miniprogram/advanced-config.mdx @@ -186,6 +186,17 @@ flashcatRum.addCustomEvent("coupon_selected", { | `addError(message, source?, stack?)` | `error` | Records a business error. The public API uses `custom` when the source is omitted | | `addCustomEvent(name, context?)` | `custom` | Records a custom business event with context | +## Remote configuration + +With `@flashcatcloud/miniprogram-rum` 0.2.0 or later and `remoteConfigurationEnabled: true` set at initialization (default `false`), the SDK reads the session sample rate and custom items published on the **Remote configuration** tab in the console, and the session sample rate overrides the one in `init()`. Other items have no effect. A published configuration applies from the next new session. To publish, see [Application management](/en/rum/quickstart/app-management#remote-configuration). + +```javascript app.js +flashcatRum.init({ + // ... other configuration + remoteConfigurationEnabled: true +}); +``` + ## Related Pages diff --git a/en/rum/sdk/wechat-miniprogram/sdk-integration.mdx b/en/rum/sdk/wechat-miniprogram/sdk-integration.mdx index cb28659a..16e6b11e 100644 --- a/en/rum/sdk/wechat-miniprogram/sdk-integration.mdx +++ b/en/rum/sdk/wechat-miniprogram/sdk-integration.mdx @@ -88,6 +88,10 @@ For production environments, a lower sample rate (for example, `10` for 10% samp + +Whether to read the [remote configuration](/en/rum/sdk/wechat-miniprogram/advanced-config#remote-configuration) published in the console. Requires `@flashcatcloud/miniprogram-rum` 0.2.0 or later. + + Batch flush interval in milliseconds. By default, the SDK tries to flush event batches every 15 seconds and also flushes when the Mini Program moves to the background. diff --git a/en/rum/session-replay/session-viewing.mdx b/en/rum/session-replay/session-viewing.mdx index 9b2c1815..f1008a68 100644 --- a/en/rum/session-replay/session-viewing.mdx +++ b/en/rum/session-replay/session-viewing.mdx @@ -59,7 +59,7 @@ Through the "View All Events and Exceptions" feature, you can enter widescreen m - Filter by event type (such as clicks, page navigation) - Click on a specific event, and the player will automatically jump to the corresponding timestamp - With **Capture additional sessions on error** on, an **error-captured session** keeps only a small slice of detail before the error. A Browser application turns this on under **Remote Configuration → Data collection**. The event counts above cover the whole session, so the list shows fewer events than those numbers. + With **Capture additional sessions on error** on, an **error-captured session** keeps only a small slice of detail before the error. Turn it on with **Capture additional sessions on error** on the **Remote configuration** tab of the application details; see [Remote configuration](/en/rum/quickstart/app-management#remote-configuration). The event counts above cover the whole session, so the list shows fewer events than those numbers. A row marked "⋯" at the start of the timeline says when the stored detail begins, or that only a small slice before the error was kept. You can't click this row, and it doesn't appear when you drill into a single event. diff --git a/zh/ai-sre/im.mdx b/zh/ai-sre/im.mdx index f8ce0f91..3aa5f781 100644 --- a/zh/ai-sre/im.mdx +++ b/zh/ai-sre/im.mdx @@ -76,7 +76,7 @@ IM 交互依赖您已在 Flashduty 中接入对应平台的机器人(用于告 -**回复模式**可配置(off / first / all),决定 AI SRE 是否在回复时 @ 提问者、以及是在**线程内**还是主频道作答。在嘈杂的大群里,线程内回复能让排查讨论保持聚拢、不刷屏。 +在飞书 / Lark 和 Slack 的普通群聊里,是否在话题(线程)内回复,由 IM 集成 **增强功能** 中的 **普通群聊中 AI-SRE 使用话题回复** 决定(默认开启)。大群里开启后,每个话题是一个独立会话,排查讨论不刷屏。 ### 附件与图片 @@ -98,22 +98,10 @@ IM 交互依赖您已在 Flashduty 中接入对应平台的机器人(用于告 ### 处理中回执 -收到您的消息后,机器人会先给**您发出的那条消息**添加一个表情回执,作为“已收到、正在处理”的即时信号。表情从该平台的一小组表情里随机选取: - -| 平台 | 表情 | -| --- | --- | -| Slack | eyes、hourglass_flowing_sand | -| 飞书 / Lark | Typing、OneSecond | -| 钉钉 / DingTalk | 平台内置表情:专注、忙疯了 | - -Slack 除此之外还会显示一条原生的“正在处理”状态,与表情回执并存。 - -答案送达后,回执会被移除。 +收到消息后,机器人先在**您那条消息**上加一个表情(企业微信没有表情接口,是一条占位消息,随后被任务清单卡片与最终回答就地替换),表示已收到、正在处理;答案送达后移除。Slack 另外显示原生“正在处理”状态。 开启 **允许 AI 主动接话** 后,回执只加在 AI 决定接话的那条消息上:它读到但判断不值得回复的消息,既不会有回执,也不会有回复。 -企业微信没有表情接口,它的“处理中”回执是一条占位消息(随机的一句“收到,处理中⋯⋯”),随后被任务清单卡片与最终回答就地替换。 - ### 答复如何抵达聊天 您把一次排查交给 AI SRE 之后,群里出现的每一条消息都属于两类之一: @@ -187,7 +175,15 @@ Agent 的当前回合结束时,如果它留下的**常驻进程类任务**还 ## IM 会话内切换命令 -IM 会话没有控制台那样的选择器 UI,但支持三条斜杠命令在**对话进行中**调整会话绑定与接话方式——控制台会话不支持这些操作:环境与团队绑定在创建时固定、不可变更,AI 主动接话也只在 IM 群聊里配置。 +IM 会话没有控制台那样的选择器 UI,但支持斜杠命令在**对话进行中**调整会话绑定与接话方式——控制台会话不支持这些操作:环境与团队绑定在创建时固定、不可变更,AI 主动接话也只在 IM 群聊里配置。Slack 上命令写成 `/fd <命令>`,如 `/fd stop`。 + +| 命令 | 作用 | +| --- | --- | +| `/new [消息]` | 开启全新对话并重置上下文;带上消息则以它开始。开启话题回复的群聊里不提供,直接新开一个顶层 @ 即可 | +| `/stop` | 停止当前分析 | +| `/help` | 显示命令列表 | + +下面三条用于切换绑定与接话方式。 ### /env — 切换运行环境 @@ -260,7 +256,7 @@ AI SRE 的回复进入群聊后,群里任何人都可以评价它——不只 无论从 IM 还是控制台发起,**都是同一个 AI SRE**:按顺序处理消息、流式输出、长对话自动压缩上下文、可绑定团队与运行环境。区别只在入口—— - **控制台**:在“对话”工作区里逐条提问、查看完整的工具调用与子会话面板;环境与团队绑定在创建时固定,后续不可变更。 -- **IM**:在您日常协作的群里 @ 召唤,结论发回线程;支持 `/env` 和 `/scope` 命令在对话中途动态切换绑定,以及 `/ambient` 控制本群是否主动接话,适合在故障现场快速拿到分析,再到控制台深入。 +- **IM**:在您日常协作的群里 @ 召唤,结论发回线程;支持 `/env` 和 `/scope` 命令在对话中途动态切换绑定,`/ambient` 控制本群是否主动接话,`/stop` 随时停止当前分析,适合在故障现场快速拿到分析,再到控制台深入。 会话的更多细节见 [对话](/zh/ai-sre/sessions)。 diff --git a/zh/ai-sre/knowledge.mdx b/zh/ai-sre/knowledge.mdx index 896e1938..bccfe470 100644 --- a/zh/ai-sre/knowledge.mdx +++ b/zh/ai-sre/knowledge.mdx @@ -55,7 +55,7 @@ Agent 读取 `DUTY.md` 后,会根据当前故障判断需要展开哪些 `@引 | 约束 | 取值 | 说明 | | --- | --- | --- | | 文件内容 | 纯文本(UTF-8) | 按**内容**校验而非扩展名:文件不含 NUL 字节且能按 UTF-8 解码即可保存。因此 `.md` `.yaml` `.json` `.txt` `.sh` 之外的 `.py` `.sql`,乃至没有扩展名的 `Dockerfile` 都可以上传;反之,扩展名是 `.txt` 但内容为二进制的文件会被拒绝 | -| 单文件上限 | 1 MiB | 超出无法保存 | +| 单文件上限 | 1 MiB;`DUTY.md` 为 32 KB | 超出无法保存。`DUTY.md` 每轮都会整份载入上下文,所以上限更小,细节请拆到其他文件 | | 单份知识上限 | 5 MiB | 控制台用量条按此额度显示 | | 文件数量上限 | 100 | 达到上限后无法新增文件 | | 子目录 | 允许 | 路径可含 `/`,如 `runbooks/api-5xx.md`;不允许以 `.` 开头的路径段 | diff --git a/zh/ai-sre/sessions.mdx b/zh/ai-sre/sessions.mdx index d041b393..031a9779 100644 --- a/zh/ai-sre/sessions.mdx +++ b/zh/ai-sre/sessions.mdx @@ -286,19 +286,7 @@ IM 和 API 会话不显示草稿卡,Agent 会在回复开头给出“审阅并 压缩时对话中会显示进度,完成后聊天页头部的 **Context** 占用百分比会下降(悬停可查看 token 用量)。 -摘要会改写原话,但压缩前的原文没有丢:被摘要替换掉的消息与工具结果仍按当时返回的样子完整保存。当排查依赖某个**精确值**(ID、主机名、指标值、阈值、日志行、报错原文、命令)时,Agent 会调用内置工具 `session_transcript` 把这部分原文写进执行环境的 `.history//` 目录,再用 `grep` / `read` 检索,而不是照着摘要的措辞复述;原文里确实没有时,它会明说,不会猜。 - -| 文件 | 内容 | -| --- | --- | -| `seg_NNN.md` | 被第 N 次摘要替换掉的那段原文 | -| `tail.md` | 最近一次摘要之后的全部内容(始终存在,可能为空) | -| `index.md` | 每个文件覆盖的条数与起止时间 | - -记录的是**当时交给 Agent 的内容**:图片与附件只留下 `[inline …]` / `[file …]` 占位,没有原文;被截断的大输出只保留完整结果的 `file_path`;子代理的内部步骤在它自己的会话里,不写进这些文件。 - - -原文召回只对**带有该工具**的 Agent 生效:主会话和拥有完整工具的子代理可以用;只读等受限子代理没有该工具,压缩后只能依靠摘要。 - +压缩只替换发给模型的上下文,原始消息和工具结果仍然保存。当排查依赖精确值(ID、主机名、指标值、阈值、日志行、报错原文、命令)时,Agent 会回查压缩前的原文,不会照着摘要复述;原文里确实没有时,它会明说,不会猜。图片与附件只留下占位,没有原文;被截断的大输出只保留完整结果的文件路径。 ## 选择运行环境 diff --git a/zh/developer/cli.mdx b/zh/developer/cli.mdx index 8eceb8e0..91181cf0 100644 --- a/zh/developer/cli.mdx +++ b/zh/developer/cli.mdx @@ -41,7 +41,6 @@ irm https://static.flashcat.cloud/flashduty-cli/install.ps1 | iex | `FLASHDUTY_VERSION` | 安装指定版本,如 `v1.5.12` | 最新版本 | | `FLASHDUTY_INSTALL_DIR` | 安装目录 | `PATH` 上已有 `flashduty` 所在目录,否则 `/usr/local/bin`(Shell);`~\.flashduty\bin`(PowerShell) | | `MIRROR_URL` | 覆盖安装脚本的 Release 资产下载镜像前缀,需以 `https://` 开头 | `https://static.flashcat.cloud/flashduty-cli` | -| `FLASHDUTY_UPDATE_BASE_URL` | 覆盖 `flashduty update` 及自动更新检查的下载基础 URL | `https://static.flashcat.cloud/flashduty-cli` | | `INSTALLED_NAME` | 安装后的命令名,例如 `fduty` | `flashduty` | 以自定义命令名安装的副本,在帮助、错误信息与 Shell 自动补全中都使用该名称;`flashduty update` 按正在运行的可执行文件名与所在目录就地替换自身,而不是另装一份默认命名的副本。 @@ -501,7 +500,7 @@ flashduty rum resource-info [--no-cache] # 查看 RUM 套餐版本、配额与 flashduty oncall license-list # 列出当前账户中持有有效 On-call 许可证的成员 ``` -该命令只读,返回成员 ID、名称及许可证类型:`fixed` 表示固定分配,`temporary` 表示当前临时许可证窗口内生效。响应还带 `release_limited`:本账户在本计费周期内的 License 释放次数已用尽时为 `true`,此时释放成员席位会以错误码 `NoLicense` 失败;该额度即[每个计费周期的释放次数上限](/zh/platform/pricing)。 +该命令只读,返回成员 ID、名称及许可证类型:`fixed` 表示固定分配,`temporary` 表示当前临时许可证窗口内生效。 ### calendar — 服务日历 @@ -694,7 +693,7 @@ flashduty monit dashboard-runtime-queries-resolve [...] # 解 #### `prometheus-api-v1-label-{label_name}-values` — 查询 Prometheus 标签值 -`GET /monit/prometheus/api/v1/label/{label_name}/values`(operationId `monit-prometheus-read-label-values`)带路径参数,因此不参与代码生成,由手工实现命令提供。命令名沿用生成命令的路径派生写法(`monit` 组 + 路径剩余段连字符拼接),因此在 `flashduty monit --help` 下可见、但无法按直觉猜到,需要按本节的写法使用: +查询 Prometheus 兼容数据源上某个标签的全部取值,命令名为 `monit prometheus-api-v1-label-{label_name}-values`(在 `flashduty monit --help` 下可见),按下面的写法使用: ```bash flashduty monit prometheus-api-v1-label-{label_name}-values --data-source-id @@ -949,7 +948,7 @@ inc_def456 High memory usage Warning Processing Staging 2026 Showing 2 results (page 1, total 2). ``` -生成命令的列表响应若在行数组(`items` / `docs` / `list`)之外还带其它字段(如 `calendar event-list` 的 `days`、`oncall license-list` 的 `release_limited`),表格会在行表格之后额外打印一行 `Also in the response: <字段> (use --json to see it).`,提示这些字段不在表格里,要看它们请用 `--json` 或 `--output-format toon`。 +生成命令的列表响应若在行数组(`items` / `docs` / `list`)之外还带其它字段(如 `calendar event-list` 的 `days`),表格会在行表格之后额外打印一行 `Also in the response: <字段> (use --json to see it).`,提示这些字段不在表格里,要看它们请用 `--json` 或 `--output-format toon`。 @@ -979,11 +978,11 @@ TOON 不能直接用 `jq` 解析;需要管道给 `jq` 时请改用 `--json`。 ### 时间窗口提示 -查询时间范围的命令会把本次实际发送的窗口按本地时区写到 stderr,例如 `note: window 2026-10-08T14:00:00+08:00..2026-10-09T14:00:00+08:00 (1d, ended now)`。括号里是窗口跨度与结束时间相对当前的位置(`ended 3m ago` / `ends in 2h`);若窗口来自某个默认值而非你显式传入的 `--since`/`--until`,还会说明是哪个默认值(如 `--progress` 只含开放状态、`--active`)。 +查询时间范围的命令会把本次实际发送的窗口按本地时区写到 stderr,例如 `note: window 2026-10-08T14:00:00+08:00..2026-10-09T14:00:00+08:00 (1d, ended now)`。括号里是窗口跨度与结束时间相对当前的位置(`ended 3m ago` / `ends in 2h`);若窗口来自某个默认值而非您显式传入的 `--since`/`--until`,还会说明是哪个默认值(如 `--progress` 只含开放状态、`--active`)。 覆盖范围包括 `incident list`、`alert list`、`alert-event list`、`change list`、`audit search`、`insight`、`oncall`、`monit-query`(工具参数带执行窗口时),以及所有解析出 `--start-time`/`--end-time` 的生成命令(只给出一侧、另一侧交给 `--data` 或服务端默认的命令不输出该提示,因为窗口没有被完整确定)。只有一个时间点的查询写成 `note: instant <时刻> (…)`。 -它用来核对窗口是否就是你要的那个:默认值可能比你预期的宽(例如 `--active` 会把默认窗口放宽到 30 天),把时间戳按错误时区解读会让窗口落到未来,此时提示形如 `ends in 7h`。提示只写 stderr,stdout 保持原样,`jq` 与 toon 消费方不受影响。 +它用来核对窗口是否就是您要的那个:默认值可能比您预期的宽(例如 `--active` 会把默认窗口放宽到 30 天),把时间戳按错误时区解读会让窗口落到未来,此时提示形如 `ends in 7h`。提示只写 stderr,stdout 保持原样,`jq` 与 toon 消费方不受影响。 ### 生成命令的输出上限 @@ -1025,11 +1024,7 @@ TOON 不能直接用 `jq` 解析;需要管道给 `jq` 时请改用 `--json`。 flashduty incident list --json --fields incident_id,title,progress ``` -列表投影(`incident list`、`incident similar`、`alert-event list`、`channel escalate-rule-list`、`insight incidents`)超过 16 KiB 上限时,CLI 按三级行为处理,所有提示只写 stderr、不改写 stdout: - -1. **整页超限**:只输出能完整放下的前 N 行,每个值保持原样、不再截短,stderr 提示实际输出了 N/M 行、其余行未输出;收窄 `--fields` 或调低 `--limit` 可让每页容纳更多行。 -2. **单行本身超预算**:截短该行的字符串值并以 `...` 标记,stderr 点名被截短的字段;在被截短过的字段上匹配或过滤会漏数据,需要原始值时请收窄 `--fields` 或 `--limit`。标识符字段(以 `_id` 或 `_key` 结尾)在任何一级都不会被截短。 -3. **行无法缩减到上限以内**:命令报错并点名字节数最大的字段(最多 3 个,含各自字节数),请减少 `--fields` 字段或调低 `--limit` 后重试。 +列表投影(`incident list`、`incident similar`、`alert-event list`、`channel escalate-rule-list`、`insight incidents`)超过 16 KiB 上限时,缩减的三级行为与上文「生成命令的输出上限」相同,提示只写 stderr、不改写 stdout;区别是请用 `--fields` 或 `--limit` 收窄输出,让每页容纳更多行或取回完整值。被截短的字段上匹配或过滤会漏数据;标识符字段(以 `_id` 或 `_key` 结尾)在任何一级都不会被截短。 `incident detail` 的投影超限行为不同:详情是单个对象,截断后的值与本身就很短的真实值无法区分,静默截短会返回错误数据,因此投影超过 8 KiB 时命令直接失败,错误信息会点名最大的字段(最多 3 个,含各自字节数)。此时请减少 `--fields` 中的字段,或直接省略 `--fields` 获取不受投影上限约束的完整详情。 diff --git a/zh/developer/go-sdk.mdx b/zh/developer/go-sdk.mdx index 4282e0b2..f606f7e1 100644 --- a/zh/developer/go-sdk.mdx +++ b/zh/developer/go-sdk.mdx @@ -307,12 +307,12 @@ zero := inc.StartTime.IsZero() // 是否为未设置哨兵 -同样属于 `AlertRuleV2`(`AlertRules.ReadInfoV2` / `WriteCreateV2` / `WriteUpdateV2` 的返回类型)的 `investigation_targets` 也换了形状,仍在发送旧字段的调用方需要一并改: +同样属于 `AlertRuleV2`(`AlertRules.ReadInfoV2` / `WriteCreateV2` / `WriteUpdateV2` 的返回类型)的 `investigation_targets` 也换了形状,形状如下: -- 字段本身是 `[]InvestigationTarget`,最多 20 项且不允许重复;整个列表序列化后还不得超过 **32 KiB**(`MaxInvestigationTargetsBytes = 32 * 1024`,超限报 `investigation_targets must not exceed 32768 bytes`)。更新接口按 presence 处理——省略保留原配置,传 `[]` 清空。每个入口可带可选的 `purpose`:一句话纯文本,说明该入口帮助确认什么排查意图(**文本里不要写换行**,服务端按 ≤512 字节校验,且必须是合法 UTF-8、不含控制字符;控制台的输入框限 200 个字符,因此 API 侧可以比控制台多填一些,但 200 个中文字符就可能超过 512 字节)。`purpose` 不是模板,也不参与告警身份与去重。 +- 字段本身是 `[]InvestigationTarget`,最多 20 项且不允许重复;整个列表序列化后还不得超过 **32 KiB**(32768 字节),超限报 `investigation_targets must not exceed 32768 bytes`。更新接口按 presence 处理——省略保留原配置,传 `[]` 清空。每个入口可带可选的 `purpose`:一句话纯文本,说明该入口帮助确认什么排查意图(**文本里不要写换行**,服务端按 ≤512 字节校验,且必须是合法 UTF-8、不含控制字符;控制台的输入框限 200 个字符,因此 API 侧可以比控制台多填一些,但 200 个中文字符就可能超过 512 字节)。`purpose` 不是模板,也不参与告警身份与去重。 - 每个入口是**封闭的 tagged union**,`Kind` 决定必须提供哪个子对象:`dashboard`(打开仪表盘面板)必须给 `Dashboard`,`query`(打开 Explore 查询)必须给 `Query`,提供另一个会被拒绝,入口内出现未知字段同样会被拒绝。 - `TimeRange`(`InvestigationTimeRange`:`BeforeSeconds` 与 `AfterSeconds`)在**每个**已保存的入口上都必填——两个方向都非负,且至少一个大于 0。 -- `Dashboard` 入口(`DashboardInvestigationTarget`)的变量由原来的 `VariableBindings`(键为仪表盘变量名,值为 `{source: event_label, key: 标签名}`)换成 `Variables`:`map[string]string`,键为变量名、值为字面取值,可用 `{{ }}` 模板引用事件标签(旧类型 `InvestigationVariableBinding` 已不存在)。`DashboardID` 与 `Variables` 必填,`TargetID` 可选;`DashboardID` 与 `TargetID` 都必须是规范的 UUIDv7。 +- `Dashboard` 入口(`DashboardInvestigationTarget`)的变量是 `Variables`:`map[string]string`,键为变量名、值为字面取值,可用 `{{ }}` 模板引用事件标签。`DashboardID` 与 `Variables` 必填,`TargetID` 可选;`DashboardID` 与 `TargetID` 都必须是规范的 UUIDv7。 - `Query` 入口用 `QueryInvestigationTarget`:`Query`(必填)为 `DashboardQuery`——`Mode` 取 `instant` / `range` / `window`,`Expr` 是目标数据源原生语法的表达式且可用 `{{ }}` 模板,`Args` 是原样透传的命名参数、不允许出现模板,`MinStepSeconds` 仅在 `Mode` 为 `range` 时接受;`DatasourceID` 可省略(或填 0),表示使用告警事件自身的数据源。 diff --git a/zh/developer/mcp-server.mdx b/zh/developer/mcp-server.mdx index 5245d22a..36d714c3 100644 --- a/zh/developer/mcp-server.mdx +++ b/zh/developer/mcp-server.mdx @@ -270,7 +270,7 @@ docker run -i --rm \ | 参数 | 类型 | 说明 | | --- | --- | --- | | `incident_ids` | string | 逗号分隔的完整故障 ID,用于直接查找。提供此参数时其他过滤条件将被忽略。 | - | `nums` | string | 逗号分隔的短号(6 位数字,即 UI 中显示的短 ID,如 `311510`)。短号匹配在 `since`/`until` 时间窗口内进行,单次查询最长约 30 天;超过 30 天的历史故障需改用完整 `incident_id` 查询。 | + | `nums` | string | 逗号分隔的短号(6 位数字,即 UI 中显示的短 ID,如 `311510`)。短号匹配在 `since`/`until` 时间窗口内进行,单次查询最长 31 天;超过 31 天的历史故障需改用完整 `incident_id` 查询。 | | `since` | string | 查询起始时间(见下方时间格式说明)。 | | `until` | string | 查询截止时间(见下方时间格式说明)。 | | `progress` | string | 按状态过滤,可选:`Triggered`、`Processing`、`Closed`,逗号分隔支持多选。 | @@ -285,7 +285,7 @@ docker run -i --rm \ - **两者均省略**:默认查询最近 30 天(适合查询当前未关闭故障)。 - **仅提供 `since`**:从该时间查询到当前时刻。 - **仅提供 `until`**:不允许,返回错误(`since` 为必填,或两者都省略)。 - - **同时提供**:查询指定时间段,最长约 30 天。 + - **同时提供**:查询指定时间段,最长 31 天,超出会返回错误。 **时间格式**:支持以下任意格式: - 相对时长:`30d`、`24h`、`168h`(表示距今多久之前) diff --git a/zh/monitors/data-sources/data-sources.mdx b/zh/monitors/data-sources/data-sources.mdx index 24590f21..68f9ebf5 100644 --- a/zh/monitors/data-sources/data-sources.mdx +++ b/zh/monitors/data-sources/data-sources.mdx @@ -6,7 +6,7 @@ keywords: ["数据源", "Prometheus", "Elasticsearch", "Loki", "ClickHouse", "My 数据源是告警引擎查询数据的来源。您需要先配置数据源,告警引擎才能从中读取数据进行异常判定。 -**菜单入口**:数据源 +**菜单入口**:数据接入 → 数据源 ## 支持的数据源类型 diff --git a/zh/monitors/engine/engine-lost-alert.mdx b/zh/monitors/engine/engine-lost-alert.mdx index e37ffba3..9c674649 100644 --- a/zh/monitors/engine/engine-lost-alert.mdx +++ b/zh/monitors/engine/engine-lost-alert.mdx @@ -6,7 +6,7 @@ keywords: ["引擎失联", "告警引擎", "monitedge", "失联告警", "健康 告警引擎(`monitedge`)如果挂掉,会导致告警规则无法执行,影响非常大。引擎失联告警功能可以在引擎挂掉时及时发出告警通知,保障监控系统的可靠性。 -**菜单入口**:告警引擎 → 引擎失联告警 +**菜单入口**:数据接入 → 边缘引擎 → 引擎失联告警 多个实例组成的引擎集群,只要集群中有一个实例存活,就不会触发引擎失联告警。只有集群中所有实例都失联时才会触发。 diff --git a/zh/monitors/engine/engine.mdx b/zh/monitors/engine/engine.mdx index 89abc0ce..bab62367 100644 --- a/zh/monitors/engine/engine.mdx +++ b/zh/monitors/engine/engine.mdx @@ -6,7 +6,7 @@ keywords: ["告警引擎", "monitedge", "引擎安装", "引擎状态", "API Key 告警引擎(`monitedge`)是部署在您私有网络中的核心组件,负责从 Flashduty SaaS 端同步告警规则,从本地数据源读取数据进行异常判定,并将告警事件推送到 SaaS 端进行后续处理。 -**菜单入口**:告警引擎 +**菜单入口**:数据接入 → 边缘引擎(页面标题为“告警引擎”) 告警引擎页面包含三个标签页:**告警引擎状态**、**引擎安装/升级**、**引擎失联告警**。 diff --git a/zh/monitors/entity-tree/entity-tree.mdx b/zh/monitors/entity-tree/entity-tree.mdx index 0f2f6807..7b41b788 100644 --- a/zh/monitors/entity-tree/entity-tree.mdx +++ b/zh/monitors/entity-tree/entity-tree.mdx @@ -59,7 +59,7 @@ keywords: ["实体树", "实体告警", "动态分组", "规则继承", "Prometh ### 1. 申请开通 -进入 **Monitors → 实体树**。如果当前租户尚未开通,点击 **申请开通**。申请提交后,页面会显示申请时间;审核通过后即可开始配置。 +进入 **规则管理 → 实体树**。如果当前租户尚未开通,点击 **申请开通**。申请提交后,页面会显示申请时间;审核通过后即可开始配置。 ### 2. 创建实体类别 diff --git a/zh/monitors/explore/explore.mdx b/zh/monitors/explore/explore.mdx index e426a65f..d62e2fe4 100644 --- a/zh/monitors/explore/explore.mdx +++ b/zh/monitors/explore/explore.mdx @@ -8,7 +8,7 @@ keywords: ["查询工作台", "Explore", "即时查询", "Prometheus", "Loki", " ## 访问入口 -- **从数据源列表**:进入 **监控 → 数据源**,点击目标数据源行的“查询工作台”入口。 +- **从数据源列表**:进入 **数据接入 → 数据源**,点击目标数据源行的“查询工作台”入口。 - **直接打开**:进入查询工作台后,在页面内选择数据源。 - **从故障/告警详情**:在故障或告警详情页的 **排查入口** 区块、关联告警行上的 **排查** 浮层,或系统标签的悬停解读卡片里,点击入口即可带着告警触发时的查询和时间窗口打开工作台。详见[检索与查看故障](/zh/on-call/incident/search-view-incident#排查入口)。 diff --git a/zh/monitors/faq/faq.mdx b/zh/monitors/faq/faq.mdx index f9b6af7e..5a89d412 100644 --- a/zh/monitors/faq/faq.mdx +++ b/zh/monitors/faq/faq.mdx @@ -39,7 +39,7 @@ keywords: ["常见问题", "FAQ", "调试日志", "故障排查", "monitedge"] -在告警规则的编辑页面或详情页面,您可以找到**克隆**操作按钮。点击后会基于当前规则的配置创建一条新规则,所有配置项会被复制过来(名称除外),方便您快速创建相似的告警规则。 +在告警规则列表中,点击目标规则行尾 `⋮` 菜单里的**克隆**。点击后会基于当前规则的配置创建一条新规则,所有配置项会被复制过来(名称除外),方便您快速创建相似的告警规则。 diff --git a/zh/monitors/quickstart/quickstart.mdx b/zh/monitors/quickstart/quickstart.mdx index 00fdcbee..536d383d 100644 --- a/zh/monitors/quickstart/quickstart.mdx +++ b/zh/monitors/quickstart/quickstart.mdx @@ -23,7 +23,7 @@ keywords: ["入门指南", "monitedge", "数据源", "告警规则", "快速开 `monitedge` 需要部署在用户私有网络内,负责从 SaaS 同步告警规则,周期性查询数据源并进行阈值判定,产生告警事件并推送给 SaaS 端。 -**菜单入口**:告警引擎 → 引擎安装/升级 +**菜单入口**:数据接入 → 边缘引擎 → 引擎安装/升级 支持 Linux、Docker、Kubernetes 三种安装方式。 @@ -48,7 +48,7 @@ keywords: ["入门指南", "monitedge", "数据源", "告警规则", "快速开 ## 创建数据源 -**菜单入口**:数据源 → 新建 +**菜单入口**:数据接入 → 数据源 → 新建 ![创建数据源](https://docs-cdn.flashcat.cloud/imges/mon/3eee06165afe05405db6187205f7025c.png) @@ -59,7 +59,7 @@ keywords: ["入门指南", "monitedge", "数据源", "告警规则", "快速开 ## 创建告警规则 -**菜单入口**:告警规则 +**菜单入口**:规则管理 → 告警规则 告警规则可能会很多,Monitors 提供树形分组结构进行分类管理。每个告警规则都要属于某个分组,您可以先创建分组,再在分组下创建告警规则。 @@ -264,7 +264,7 @@ Go 模板可以使用以下变量: ## 规则运行详情 -告警规则列表的每一行都提供运行时自省能力。点击行操作菜单(行尾 `⋮`)中的**运行详情**,打开规则运行详情抽屉,帮助您判断规则的执行健康度并快速排障。 +告警规则列表的每一行都提供运行时自省能力。点击行操作菜单(行尾 `⋮`,菜单项依次为运行详情、克隆、移动、历史版本、删除)中的**运行详情**,打开规则运行详情抽屉,帮助您判断规则的执行健康度并快速排障。 抽屉顶部可以选择要查看的**数据源**(规则可能绑定多个数据源);这个选择器按查看者对各数据源的查询(`readonly`)权限过滤,没有查询权限的数据源会被静默丢弃,受限查看者看到的数据源可能少于规则实际绑定的数量。下方分为两个标签页: @@ -386,20 +386,20 @@ Nightingale 规则导入后统一保持停用,需检查数据源匹配和转 导出的 YAML 可用于备份,也可以通过文件上传方式导入到其他环境,详见[导入告警规则](#导入告警规则)。 -## 规则变更记录 +## 规则历史版本 -每条告警规则都有完整的变更审计记录。您可以在规则详情中查看**变更记录**,了解规则的历史修改情况。 +点击规则列表行尾 `⋮` 菜单中的**历史版本**,查看规则的历史修改情况(需要规则的更新权限)。 -### 查看变更记录 +### 查看历史版本 -变更记录列表展示每次操作的以下信息: +历史版本列表展示以下信息: | 列信息 | 说明 | |--------|------| -| **操作时间** | 变更发生的时间 | -| **操作类型** | 如创建、更新等 | +| **版本** | 版本号,最新一版带“当前版本”标记 | | **操作人** | 执行变更的用户 | +| **操作时间** | 变更发生的时间 | ### 版本对比 -在变更记录列表中勾选两条记录,点击**对比**按钮,系统会以 JSON diff 的方式展示两个版本之间的差异,帮助您快速了解具体修改了哪些配置项。 +在历史版本列表中勾选两个版本,点击**对比**按钮,系统会以 JSON diff 的方式展示两个版本之间的差异,帮助您快速了解具体修改了哪些配置项。 diff --git a/zh/on-call/advanced/war-room.mdx b/zh/on-call/advanced/war-room.mdx index 5467cf60..b6b59f8c 100644 --- a/zh/on-call/advanced/war-room.mdx +++ b/zh/on-call/advanced/war-room.mdx @@ -101,13 +101,14 @@ Flashduty On-call 作战室(War Room)是专为故障应急响应设计的自 ## 消息同步 -故障的关键操作(认领、关闭、暂缓、评论等)会以消息形式实时同步到作战室群聊。其中,[行动项与跟进项](/zh/on-call/incident/work-items)的四类操作(创建、更新负责人、完成、转为跟进项)发生时,会以纯文本消息回帖到群聊,例如: - -- 创建:`张三 创建了Action「扩容数据库连接池」` -- 更新负责人:`张三 更新了Action「扩容数据库连接池」的负责人` -- 完成:`张三 完成了Action「扩容数据库连接池」` -- 转为跟进项:`张三 将 Action「扩容数据库连接池」转为 Follow-up` -- 跟进项的同类操作消息中,`Action` 字样会替换为 `Follow-up` +故障的关键操作(认领、关闭、暂缓、评论等)会以消息形式实时同步到作战室群聊。其中,[行动项与跟进项](/zh/on-call/incident/work-items)的五类操作(创建、更新负责人、完成、转为跟进项,以及故障关闭时系统自动转换)发生时,会以纯文本消息回帖到群聊,例如: + +- 创建:`张三 创建了行动项「扩容数据库连接池」` +- 更新负责人:`张三 更新了行动项「扩容数据库连接池」的负责人` +- 完成:`张三 完成了行动项「扩容数据库连接池」` +- 转为跟进项:`张三 将行动项「扩容数据库连接池」转为跟进项` +- 故障关闭自动转换:`故障已关闭,3 个未完成行动项已转为跟进项,可在故障详情继续跟踪。` +- 跟进项的同类操作消息中,`行动项` 会替换为 `跟进项`(英文界面为 Action / Follow-up) - 当操作人无法解析为具体成员时,消息中的操作人显示为 **系统** ## AI SRE diff --git a/zh/on-call/analytics/insights.mdx b/zh/on-call/analytics/insights.mdx index 1a634061..014c2efc 100644 --- a/zh/on-call/analytics/insights.mdx +++ b/zh/on-call/analytics/insights.mdx @@ -25,7 +25,7 @@ keywords: ["分析看板", "数据分析", "故障统计", "报表导出", "运 | 团队 | 选择需要查询的团队名称,支持多选,选中后会按选中的团队更新仪表盘中的数据 | | 协作空间 | 选择需要查询的协作空间名称,支持多选,选中后会按选中的协作空间更新仪表盘中的数据 | | 严重程度 | 选择需要查询的严重程度,支持多选,选中后会按选中的严重程度更新仪表盘中的数据 | -| 时间范围 | 选择需要查询的时间范围,支持按本周、最近两周、本月、上个月以及自定义时间的维度进行查询,最长支持查询最近 **2 年(720 天)** 的数据(具体上限以您的订阅版本为准),更早的数据可通过 [API 查询](/zh/api-reference/on-call/analytics/insight-incident-list) | +| 时间范围 | 选择需要查询的时间范围,支持按本周、最近两周、本月、最近1个月、最近6个月、最近1年以及自定义时间的维度进行查询,最长支持查询最近 **2 年(720 天)** 的数据(具体上限以您的订阅版本为准),更早的数据可通过 [API 查询](/zh/api-reference/on-call/analytics/insight-incident-list) | | 数据间隔 | 默认按小时,也可以按天、周、月查看;时间范围超过 31 天时不能按天查看 | | 时区 | 时间显示和天 / 周 / 月统计均按您的时区(个人时区优先,否则为组织时区),当前时区显示在筛选栏右侧 | | 排序 | 团队、协作空间和个人维度的仪表盘可以选择倒排和正排,默认只显示 TOP 10 的数据,单独放大后可以展示更多 | diff --git a/zh/on-call/channel/create-edit.mdx b/zh/on-call/channel/create-edit.mdx index 0b902582..293dc2df 100644 --- a/zh/on-call/channel/create-edit.mdx +++ b/zh/on-call/channel/create-edit.mdx @@ -41,20 +41,6 @@ keywords: ["协作空间", "创建管理", "业务隔离", "团队协作", "告 - **公开**:账户内所有用户可见,可查看和操作故障,但无法修改空间配置 - **私有**:仅所属团队(或代管团队)、创建者和账户管理员可见 - - 开启超时自动关闭开关后,配置以下参数: - - **超时计时起点**:选择 **故障触发**(从故障首次触发开始计时,适合未自动恢复的告警)或 **停止合入新告警**(从最后一次合入新告警开始计时,适合开启聚合降噪的场景) - - **超时时长**:设置超时时长,支持分钟、小时、天为单位,最长 30 天 - - - 该开关默认隐藏,需联系 Flashduty 团队开通后才会显示;显示后默认开启。当该选项开启时,故障关联的所有告警恢复后,故障将自动关闭;当该选项关闭时,告警恢复不会自动关闭故障,您需要手动关闭或依赖超时自动关闭策略。 - - - 开启后,故障列表及通知内容中将带有"新奇故障"标识,便于快速识别。[了解更多](/zh/on-call/incident/outlier-incidents) - - - 开启后,外部人员可通过外部提报链接提交故障工单,无需登录系统。系统会生成一个可分享的链接,您可以将该链接发送给外部人员。关闭外部提报后,已分享的链接将立即失效;再次开启将生成新的链接。 - ### 第二步:设定分派策略(可跳过) @@ -181,10 +167,10 @@ keywords: ["协作空间", "创建管理", "业务隔离", "团队协作", "告 | 配置项 | 说明 | 版本可用性 | | :--- | :--- | :--- | -| 超时自动关闭 | 开关、超时计时起点、超时时长 | 所有版本 | -| 跟随告警关闭 | 故障关联告警全部恢复后自动关闭故障 | 需联系 Flashduty 团队按需开通 | -| 新奇故障检测 | 识别并标记异常新型故障 | 专业版及以上 | -| 外部提报 | 开启后生成可分享的链接,外部人员无需登录即可提交故障工单 | 专业版及以上 | +| 超时自动关闭 | 超时计时起点选 **故障触发**(从故障首次触发开始计时,适合未自动恢复的告警)或 **停止合入新告警**(从最后一次合入新告警开始计时,适合开启聚合降噪的场景);超时时长支持分钟、小时、天,最长 30 天 | 所有版本 | +| 跟随告警关闭 | 显示后默认开启。开启时,故障关联的所有告警恢复后故障自动关闭;关闭时,需手动关闭故障或依赖超时自动关闭 | 需联系 Flashduty 团队按需开通 | +| 新奇故障检测 | 故障列表及通知内容带 **新奇故障** 标识,详见[新奇故障](/zh/on-call/incident/outlier-incidents) | 专业版及以上 | +| 外部提报 | 开启后生成可分享的链接,外部人员无需登录即可提交故障工单,详见[外部提报](/zh/on-call/incident/external-submission) | 专业版及以上 | 免费版 / 标准版下,**新奇故障检测** 与 **外部提报** 开关不会显示;**跟随告警关闭** 开关默认隐藏,如需使用请联系 Flashduty 团队开通。 diff --git a/zh/on-call/channel/noise-reduction.mdx b/zh/on-call/channel/noise-reduction.mdx index 62d1f7f7..11e25cf4 100644 --- a/zh/on-call/channel/noise-reduction.mdx +++ b/zh/on-call/channel/noise-reduction.mdx @@ -61,7 +61,7 @@ keywords: ["告警降噪", "告警聚合", "静默策略", "抑制策略", "噪 ![告警降噪流程图](https://docs-cdn.flashcat.cloud/images/png/6fec1c4fa6318119ab5c7f69f0c3cd55.png) -## 让 AI 帮你配置降噪 +## 让 AI 帮您配置降噪 **告警聚合** 与 **抖动检测** 的页头右侧各有一个 **让 AI 帮我配置降噪** 按钮。点击后会在右侧打开 [AI SRE](/zh/ai-sre) 面板,把该协作空间作为上下文引用带入会话,并按您所在的页面预填一条请求: @@ -76,19 +76,7 @@ keywords: ["告警降噪", "告警聚合", "静默策略", "抑制策略", "噪 **前提**:账户已启用 AI SRE,且您有使用 AI SRE 对话的权限。不满足任一条件时,该按钮不显示。 -之后 Agent 按以下步骤工作: - - - - 拉取该协作空间最近的告警,回看范围可以调整,最长 30 天。它据此统计高频告警标题、同一标题在短时间内集中触发的爆发及其内部发生变化的标签、反复触发的告警,以及各标签的覆盖率和取值数量。这一步只读。 - - - 推荐聚合方式与聚合维度,或推荐抖动检测的观测窗口、状态变化次数与静默时长,并说明依据。在告警聚合页,它还会用页面自身的聚合预览试算候选维度,给出预计的故障数量与降噪幅度,而不是只给一般性建议。 - - - 改动不会直接落库。Agent 可以把推荐值填进表单,由您检查后点 **保存**;也可以在您选择直接保存时调用页面自身的保存动作,此时会先给出一张确认卡片,逐条列出变更项与变更前后的值(如「聚合维度:`labels.check` → `labels.check` + `labels.service`」),确认后才写入。保存后立即生效,页面自动刷新。 - - +Agent 会读取该协作空间最近的告警(回看范围可以调整,最长 30 天)并给出推荐值;在告警聚合页,还会按页面的聚合预览给出预计的故障数量。改动不会直接落库:您可以检查它填入表单的推荐值后点 **保存**,也可以让它直接保存,此时会先弹出一张确认卡片,逐条列出变更前后的值(如「聚合维度:`labels.check` → `labels.check` + `labels.service`」),确认后才写入并立即生效。 `/channel-noise` 只修改 **告警聚合** 与 **抖动检测** 两项配置;**事件聚合**、静默策略、抑制策略和排除规则它只给建议并指出对应的配置页面,不写入。引用标签如何随消息发送、会话如何管理,见 [控制台对话](/zh/ai-sre/sessions#附件与上下文引用)。 diff --git a/zh/on-call/comparison/vs-opsgenie.mdx b/zh/on-call/comparison/vs-opsgenie.mdx index af5da800..3fcd1837 100644 --- a/zh/on-call/comparison/vs-opsgenie.mdx +++ b/zh/on-call/comparison/vs-opsgenie.mdx @@ -132,7 +132,7 @@ Response 解决「找到人之后怎么快速闭环」:一条时间线、一 | 核心能力 | Flashduty | Opsgenie | | --- | --- | --- | | **告警集成** | 290+ 集成源,国内云与监控生态全覆盖(阿里云、腾讯云、华为云等),兼容 PagerDuty 协议 | 200+ 集成,海外生态成熟 | -| **心跳监控** | 监控类心跳由 [Monitors 引擎失联告警](/zh/monitors/engine/engine-lost-alert)覆盖,On-call 侧无独立的定时任务心跳能力 | ✅ Heartbeats 是 Opsgenie 的成熟能力,Cron/定时任务场景迁出前请单独评估替代方案 | +| **心跳监控** | 集成的[无事件检测](/zh/on-call/integration/alert-integration/alert-sources/standard-alert#无事件检测)可在 10 分钟到 48 小时内未收到有效事件时生成 Warning 告警,可用于定时任务保活;监控类心跳另由 [Monitors 引擎失联告警](/zh/monitors/engine/engine-lost-alert)覆盖 | ✅ Heartbeats 是 Opsgenie 的成熟能力,Cron/定时任务场景迁出前请单独评估替代方案 | | **告警流水线与标签增强** | 路由、过滤、等级重设、正则提取、[数据映射](/zh/on-call/integration/alert-integration/label-enhancement)(导入 CMDB 表格动态生成标签) | Alert Policies 支持基础的过滤与字段修改 | | **洞察报表** | MTTA/MTTR、人员工作量、频发分析、**时段分析**(工作/休息/睡眠) | 基础报表 | | **私有化部署** | ✅ 支持 | ❌ 仅 Cloud | diff --git a/zh/on-call/configuration/custom-forms.mdx b/zh/on-call/configuration/custom-forms.mdx index 4a4e9748..a22d377f 100644 --- a/zh/on-call/configuration/custom-forms.mdx +++ b/zh/on-call/configuration/custom-forms.mdx @@ -24,7 +24,7 @@ keywords: ["自定义表单", "故障创建", "故障认领", "故障关闭", " | 图片上传 | 允许填写人在提交操作时上传图片。 | - 点击已添加的元素,设置帮助说明、占位提示和必填规则。您可以让元素始终显示、在条件满足时显示,或仅在条件满足时必填。 + 点击已添加的元素,设置帮助说明、占位提示和必填规则。您可以让元素始终显示、在条件满足时显示,或仅在条件满足时必填。创建故障表单不支持显示条件,只能设置是否必填。 拖拽元素调整显示顺序。顺序变更会自动保存,新的填写规则立即生效。 diff --git a/zh/on-call/configuration/notifications.mdx b/zh/on-call/configuration/notifications.mdx index 14cf2184..17e03378 100644 --- a/zh/on-call/configuration/notifications.mdx +++ b/zh/on-call/configuration/notifications.mdx @@ -279,8 +279,8 @@ Flashduty On-call 提供覆盖移动端 App、传统通信和主流即时消息 开启 @ 提醒后,系统通过用户信息映射表中的数据 @ 提醒对应的处理人员: - 1. 管理员在 Zoom 控制台获取用户 `user_id` - 2. 在 Flashduty **配置中心** → **映射数据**中创建 Zoom 类型映射表,将 Flashduty 成员邮箱映射到 Zoom `user_id` + 1. 管理员在 Zoom 控制台获取用户 JID + 2. 在 Flashduty **配置中心** → **映射数据**中创建 Zoom 类型映射表,将 Flashduty 成员邮箱映射到 Zoom JID(目标标签 `zoom_jid`) 3. 在**分派策略**中关联对应的 Zoom 机器人和映射表 @@ -295,8 +295,8 @@ Flashduty On-call 提供覆盖移动端 App、传统通信和主流即时消息 | :--- | :--- | :--- | | **别名** | 全部 | 为机器人设置别名,方便记忆和区分不同的通知渠道 | | **严重程度过滤** | 全部 | 选择需要推送通知的告警严重程度,未选中的严重程度对应的故障将不会推送 | -| **触发通知事件类型** | 飞书、钉钉、企微、Slack、Zoom | 选择哪些事件类型触发通知推送(如触发、认领、关闭等),默认全选 | -| **@ 提醒** | 飞书、钉钉、企微、Slack、Zoom | 开启后 @ 提醒对应的处理人员。飞书和 Zoom 需配置用户信息映射表,企微可选配置映射表,钉钉默认使用手机号匹配。钉钉还支持 @ 所有人 | +| **触发通知事件类型** | 飞书、钉钉、企微、Zoom | 选择哪些事件类型触发通知推送(如触发、认领、关闭等),默认全选 | +| **@ 提醒** | 飞书、钉钉、企微、Zoom | 开启后 @ 提醒对应的处理人员。飞书和 Zoom 需配置用户信息映射表,企微可选配置映射表,钉钉默认使用手机号匹配。钉钉还支持 @ 所有人 | 用户信息映射表定义了 Flashduty 用户与 IM 平台用户之间的对应关系。您可以在 **配置中心** → **映射数据** 页面创建和维护映射表。 @@ -321,7 +321,6 @@ Flashduty On-call 提供覆盖移动端 App、传统通信和主流即时消息 - 飞书、Zoom:已正确选择 **用户信息映射表**,映射关系正确且完整 - 企微:如使用映射表,确认映射关系正确 - 钉钉:确认成员手机号正确 -- Slack:确认成员账户关联正确 diff --git a/zh/on-call/configuration/schedule.mdx b/zh/on-call/configuration/schedule.mdx index 66e37294..fc3a243f 100644 --- a/zh/on-call/configuration/schedule.mdx +++ b/zh/on-call/configuration/schedule.mdx @@ -32,7 +32,7 @@ keywords: ["值班管理", "值班表", "轮换规则", "7x24", "值班排班"] - 进入 **值班管理**,点击"创建值班表" + 进入 **值班管理**,点击 **创建值班** - **值班名称**:长度为 1~40 个字符,同一账户下不可重复 - **管理团队**:指定该值班表归属哪个团队管理,团队成员将获得该值班表的编辑权限 - **值班描述**:支持 Markdown 语法,该区域的内容可以在通知时携带,长度不超过 500 字符 @@ -143,8 +143,8 @@ keywords: ["值班管理", "值班表", "轮换规则", "7x24", "值班排班"] 进入值班表详情页,在日历视图中点击需要调整的时间段,选择 **临时调班**。系统会自动将默认时间窗口填为 **[今日 00:00,次日 00:00]**,您可以按需调整。 - - 在值班规则列表中点击 **新增规则**,将规则类型切换为 **临时调班**。该入口适合提前批量安排请假或替班。 + + 在值班规则列表中点击 **添加规则**,将规则类型切换为 **临时调班**。该入口适合提前批量安排请假或替班。 diff --git a/zh/on-call/configuration/templates.mdx b/zh/on-call/configuration/templates.mdx index f61ef134..426abaca 100644 --- a/zh/on-call/configuration/templates.mdx +++ b/zh/on-call/configuration/templates.mdx @@ -115,6 +115,7 @@ keywords: ["通知模板", "模板配置", "消息格式", "模板变量", "通 | Images | []Image | | 故障图片列表,每项含 `Src`、`Href`、`Alt` | | FireType | string | | 通知类型:fire(通知)/ refire(循环通知) | | IsFlapping | bool | | 是否处于抖动状态 | +| `Fields` | map | | 自定义字段值,Key 为字段名称,例如 `{{.Fields.severity_tag}}` | | Impact | string | | 故障影响,关闭后填写 | | RootCause | string | | 故障根因,关闭后填写 | | Resolution | string | | 解决办法,关闭后填写 | @@ -215,7 +216,7 @@ keywords: ["通知模板", "模板配置", "消息格式", "模板变量", "通 | 群聊机器人 | 临时填机器人地址 | 与通知规则里填的地址相同,裸 token 或完整地址都行;Telegram 另填 Chat ID,Zoom 另填 Verify Token。这些值只用于这一次发送,不会保存 | | 邮件 | 自己的账号邮箱 | 账号没有邮箱时不能发送 | -- **我自己**:要求当前账号已关联该 IM 集成,未关联时发送按钮不可点,有权限的成员可以点 **去关联** 到接入向导完成关联。Slack 应用例外,不需要逐人关联(按工作区成员直接私信),但发送时仍要把你解析成该工作区的成员,解析不到会提示「你的账号还没有关联这个 IM,无法私信」。 +- **我自己**:要求当前账号已关联该 IM 集成,未关联时发送按钮不可点,有权限的成员可以点 **去关联** 到接入向导完成关联。Slack 应用例外,不需要逐人关联(按工作区成员直接私信),但发送时仍要把您解析成该工作区的成员,解析不到会提示「你的账号还没有关联这个 IM,无法私信」。 - **群聊**:只列出该机器人在这个集成里**已加入**的群(Slack 按频道,Teams 按团队下的频道或群聊)。群里所有成员都会收到这条测试消息。 - 同一渠道配了多个集成时,先在 **集成** 里选一个;只列已启用的集成。 @@ -252,7 +253,7 @@ IM 应用提示「已发送」才表示消息已送达;机器人和邮件的 | 渠道返回失败:渠道的原始报错 | 渠道返回失败,提示里带渠道的原始报错 | -测试发送与真实通知的差别:模板语法有错时,真实通知会静默回退成系统默认模板继续发,而发送测试直接提示「模板渲染失败,请先修正模板」,把模板问题暴露出来。反过来,测试发送不会在故障上留下通知记录,所以它不会认领、关闭故障或创建作战室。 +测试发送与真实通知的差别:模板语法有错时,真实通知会回退成系统默认模板继续发,机器人和应用渠道的消息末尾会附一行「【🔴 自定义模板渲染异常,已降级为默认模板】」,而发送测试直接提示「模板渲染失败,请先修正模板」,把模板问题暴露出来。反过来,测试发送不会在故障上留下通知记录,所以它不会认领、关闭故障或创建作战室。 ## 渠道模板 @@ -448,6 +449,10 @@ IM 应用提示「已发送」才表示消息已送达;机器人和邮件的 群聊机器人支持的模板格式。 + +短信、语音、App 推送和各群聊机器人的消息末尾,系统会在故障抖动(`IsFlapping`)、告警风暴(`IsInStorm`)或 30 天内首次出现同类故障时自动追加提示行,模板里不用写,也无法去掉。应用卡片和邮件不追加。 + + 以下渠道不渲染 Markdown 表格,会把表格按带 `|` 的原文发出去,预览里也会给出提示:钉钉、Slack、Telegram 机器人,企业微信机器人(Markdown v1),以及钉钉、Slack、企业微信、Teams 应用。发给这些渠道的模板建议把表格改写成列表。 @@ -698,7 +703,7 @@ Markdown v2 按 UTF-8 字节计算,消息最大为 **4096 字节**。中文通 -创建自定义模板时,保存模板时的语法检查通过,不代表所有故障都能渲染成功。实际发送时渲染失败,系统将改用默认模板。 +创建自定义模板时,保存模板时的语法检查通过,不代表所有故障都能渲染成功。实际发送时渲染失败,系统将改用默认模板,机器人和应用渠道的消息末尾会附一行「【🔴 自定义模板渲染异常,已降级为默认模板】」。 建议在引用变量前先判断是否存在: diff --git a/zh/on-call/incident/alert-management.mdx b/zh/on-call/incident/alert-management.mdx index 3f8dc97e..8f4019a0 100644 --- a/zh/on-call/incident/alert-management.mdx +++ b/zh/on-call/incident/alert-management.mdx @@ -8,7 +8,7 @@ keywords: ["告警管理", "告警列表", "告警详情", "聚合视图", "告 告警管理页面提供了独立于故障的告警视角,您可以在此查看所有告警的详细信息,无论这些告警是否已被聚合到故障中。 -进入 **故障列表** → **告警列表**,即可访问告警管理页面。 +在 **故障列表** 页右上角点击 **更多操作(⋯)** → **查看原始告警**,即可进入告警管理页面;从协作空间内进入时,列表已按该协作空间筛选。 告警列表展示以下信息: @@ -46,12 +46,16 @@ keywords: ["告警管理", "告警列表", "告警详情", "聚合视图", "告 | :--- | :--- | | **告警标题** | 按标题子串匹配,也支持通配与正则写法(见下方说明) | | **严重程度** | 多选 Critical / Warning / Info | -| **协作空间** | 按所属协作空间筛选 | -| **集成** | 按告警来源集成筛选 | -| **标签** | 按标签键值筛选,支持动态加载候选值;值只做精确匹配;模糊、通配或正则查找标题时请用 **告警标题** | -| **告警 ID** | 支持输入多个 ID,格式错误的 ID 会以红色标签提示 | +| **告警状态** | 全部 / 未恢复 / 已恢复,常驻在筛选条上 | +| **协作空间** | 按所属协作空间筛选(仅全局告警列表) | +| **集成来源** | 按告警来源集成筛选(仅协作空间内的告警列表) | +| **告警标签** | 按标签键值筛选,支持动态加载候选值;值只做精确匹配;模糊、通配或正则查找标题时请用 **告警标题** | +| **告警 ID** | 支持输入多个 ID,按回车分隔;格式错误的 ID 不会被收下,并弹出 **ID 格式错误,请检查** 提示 | +| **告警标识** | 按告警标识(alert_key)完整匹配,支持多个值(任一匹配) | | **是否被静默/抑制** | 筛选曾经被静默或抑制过的告警 | +单次查询的时间跨度最多 31 天;按告警标题检索时最多 7 天。 + 筛选条件会按视图保留,刷新或重新进入页面后自动恢复。 @@ -106,10 +110,10 @@ keywords: ["告警管理", "告警列表", "告警详情", "聚合视图", "告 | Tab | 说明 | | :--- | :--- | -| **告警概览** | 左侧展示告警描述、标签、**关联事件预览**(最多 5 条,可跳转到 *关联事件* Tab 查看全部);右侧展示属性(协作空间、触发时间)、图片、告警来源、所属故障、Links。Monit 告警还会在 **属性** 之后多出一块 **排查入口**(详见下方 **排查入口**) | -| **关联事件** | 展示该告警关联的所有原始事件列表 | +| **告警概览** | 左侧展示告警描述、标签、**告警事件**(最多 5 条,超过 5 条显示 **查看全部**,可跳转到 *告警事件* 页签);右侧展示属性(协作空间、触发时间)、图片、告警来源、所属故障、Links。Monit 告警还会在 **属性** 之后多出一块 **排查入口**(详见下方 **排查入口**) | +| **告警事件** | 展示该告警关联的所有原始事件列表 | -在告警详情地址后附加 `?tab=events`(如 `/alert/detail/{id}?tab=events`)可直达 **关联事件** 页签;切换页签时地址栏会同步更新。故障详情中的 **查看完整事件历史** 链接就是这样打开的。 +在告警详情地址后附加 `?tab=events`(如 `/alert/detail/{id}?tab=events`)可直达 **告警事件** 页签;切换页签时地址栏会同步更新。故障详情中的 **查看完整事件历史** 链接就是这样打开的。 **告警来源**支持点击跳转,便于您快速溯源: diff --git a/zh/on-call/incident/external-submission.mdx b/zh/on-call/incident/external-submission.mdx index 1319c18d..a7f44722 100644 --- a/zh/on-call/incident/external-submission.mdx +++ b/zh/on-call/incident/external-submission.mdx @@ -10,7 +10,7 @@ keywords: ["外部故障提交", "外部提报", "免登录提交", "故障工 ## 开启外部提报 -进入 **协作空间详情 → 配置 → 设置 → 高级配置**,打开 **外部提报** 开关(创建协作空间的向导中也可以开启)。开启后系统会为该协作空间生成一条专属的外部提报链接,复制并分享给外部人员即可。 +进入 **协作空间详情 → 配置 → 设置 → 高级配置**,打开 **外部提报** 开关。开启后系统会为该协作空间生成一条专属的外部提报链接,复制并分享给外部人员即可。 - 外部提报链接是免登录提交入口,任何持有链接的人都可以提交故障,请仅分享给需要的对象 diff --git a/zh/on-call/incident/outlier-incidents.mdx b/zh/on-call/incident/outlier-incidents.mdx index 0023af01..42be08f4 100644 --- a/zh/on-call/incident/outlier-incidents.mdx +++ b/zh/on-call/incident/outlier-incidents.mdx @@ -43,7 +43,7 @@ keywords: ["新奇故障", "异常检测", "AI识别", "故障分析", "智能 -前往 **协作空间** → 选择目标空间 → **基础设置** +前往 **协作空间** → 选择目标空间 → **配置** → **设置** → **高级配置** 找到 **新奇故障检测** 选项,开启或关闭该功能 diff --git a/zh/on-call/incident/past-incidents.mdx b/zh/on-call/incident/past-incidents.mdx index dab7486b..fc577693 100644 --- a/zh/on-call/incident/past-incidents.mdx +++ b/zh/on-call/incident/past-incidents.mdx @@ -4,6 +4,8 @@ description: "查阅历史相似故障解决办法,快速处理新故障" keywords: ["历史故障", "相似故障", "故障溯源", "解决方案", "知识库"] --- +**版本要求**:此功能需要 On-call 专业版及以上订阅。[了解更多](https://flashcat.cloud/flashduty/price/) + 在我们响应故障时,如果可以查看到历史上相似故障的解决方案,将极大加快故障解决效率。历史故障功能,正是为响应人员提供的一个已解决的相似的故障列表。对于不熟悉此问题的响应人员,可以快速查阅历史故障的时间线、根因和解决办法,并复制相关操作。历史故障提供了解决问题所需的上下文。 diff --git a/zh/on-call/incident/search-view-incident.mdx b/zh/on-call/incident/search-view-incident.mdx index fd490895..355c908f 100644 --- a/zh/on-call/incident/search-view-incident.mdx +++ b/zh/on-call/incident/search-view-incident.mdx @@ -30,7 +30,7 @@ keywords: ["故障检索", "故障列表", "聚合视图", "时间线", "故障 - **标准版**:最多查询最近 **180 天** - **专业版**:最多查询最近 **366 天** -如果要查询更早的数据,请调整起止时间,或通过 [故障查询 API](/zh/api-reference/on-call/incidents/incident-list) 获取。 +无论版本,**单次查询的时间跨度最多 31 天**。如果要查询更早的数据,或需要更长的时间范围,请调整起止时间并分段查询,或通过 [故障查询 API](/zh/api-reference/on-call/incidents/incident-list) 获取。 @@ -127,9 +127,9 @@ keywords: ["故障检索", "故障列表", "聚合视图", "时间线", "故障 | 4 | Tab 区域 | 通过上方 Tab 页查看更详细的内容,详见下方 **详情 Tab** 说明 | | 5 | 综合信息 | 集中展示故障的属性、关键时间节点、处理人员、关联链接、图片、自定义字段以及外部工单等辅助信息,Monit 告警聚合出的故障还会多出一块 **排查入口**(详见下方 **综合信息面板**) | -### 标签与相关链接 +### 标签展示 -故障标签显示在详情页的 **详细信息** 区域,链接类标签会被提到列表上方的 **相关链接** 按钮条。按钮名映射、跳转到 RUM Issue 或告警规则的标签,以及图片、ARN、时间和查询语句的展示方式,见[什么是故障 · 故障标签](/zh/on-call/incident/what-is-incident#相关链接与标签值展示)。 +故障标签显示在详情页的 **详细信息** 区域,值的特殊展示方式(链接、RUM Issue、图片、ARN、时间、查询语句)见[什么是故障 · 标签值展示](/zh/on-call/incident/what-is-incident#标签值展示)。 要查看告警触发那一刻的查询,可从这几处打开查询工作台: @@ -206,7 +206,7 @@ AI 总结仅适用于由告警自动触发的故障,手动创建的故障不 | **历史变更** | 与当前故障在时间上相关联的变更事件,帮助定位故障与部署或配置变更的关系 | 始终显示 | | **问题修复** | 记录故障的影响、根因与解决方案 | 三项中任一项有内容时显示 | | **故障复盘** | 内置复盘编辑器,无需离开详情即可完成复盘报告的创建、编辑、AI 生成与发布 | On-call 专业版及以上 | -| **历史故障** | 展示与当前故障相似的历史故障,便于借鉴以往的处置经验 | 始终显示 | +| **历史故障** | 展示与当前故障相似的历史故障,便于借鉴以往的处置经验 | 始终显示;内容需 On-call 专业版及以上,其它版本显示升级引导 | ### 时间线评论 diff --git a/zh/on-call/incident/what-is-incident.mdx b/zh/on-call/incident/what-is-incident.mdx index 02c4c18f..08c93d65 100644 --- a/zh/on-call/incident/what-is-incident.mdx +++ b/zh/on-call/incident/what-is-incident.mdx @@ -70,45 +70,20 @@ Flashduty On-call 提供了标签增强方案,用于自动化生成标签, - 标签面板标题右侧的 **显示系统标签** / **隐藏系统标签** 按钮用于展开或收起该分区,仅当存在系统标签时出现。该选择保存为个人偏好,Web 端和移动端共用 - 收起时,**JSON 视图** 和复制出的 JSON 不含系统标签。系统标签不参与拖拽排序 -- 标题旁的数字是标签总数,包含系统标签和相关链接 +- 标题旁的数字是标签总数,包含系统标签 - 悬停 Monit 告警的系统标签,会显示中文说明卡片(告警规则、数据源、触发时的值和查询语句等),并提供跳转 -### 相关链接与标签值展示 +### 标签值展示 -标签面板在列表上方提供一行 **相关链接** 按钮条,并为部分标签值做特殊渲染。 +链接标签留在标签列表里。部分标签值会做特殊渲染。 -**相关链接**:值是 `http(s)://` 链接、且不是图片的标签,不再留在标签列表里,而是被提到列表上方,每个链接渲染为一个按钮。按钮名由标签 key 决定: - -| 标签 key | 按钮名 | -| :--- | :--- | -| `generatorURL`、`generator_url`、`detail_url`、`link`、`web_url`、`client_url`、`insight_url` | **查看来源**;告警所属集成有名称时显示 **在 X 中查看** | -| `runbook_url` | **Runbook** | -| `silenceURL` | **去静默** | -| `dashboardURL`、`dashboard_url` | **打开仪表盘** | -| `panelURL` | **打开面板** | -| `query_url` | **查看查询** | -| `log_url` | **查看日志** | -| `alert_url` | **查看告警** | -| `ruleURL`、`rule_url`、`alert_rule_url` | **查看规则** | -| `alert_history_url` | **告警历史** | -| 其它 key | `key · 域名` | - -按钮顺序与上表一致,未列到的 key 按字母序排在后面,悬停可看到完整的 key 与 URL。图片链接仍留在标签列表里,**系统标签** 分区里的链接标签也保持原样。 - -由 Monitors 或 RUM 告警聚合而成的故障,以下标签旁还会显示跳转链接,告警详情页同样支持: - -| 告警来源 | 标签 | 链接 | -| :--- | :--- | :--- | -| RUM | `issue_id` | **查看 Issue**:打开对应的 RUM Issue | -| Monitors 告警规则 | `__alert_rule_id`(历史数据为 `rule_id`) | **查看规则**:打开产生告警的告警规则 | -| Monitors 实体树 | `__entity_alert_rule_id` | **查看规则**:打开实体树中对应的告警规则 | - -标签值无效或定位信息不完整时,只显示为普通文本。 +由 RUM 告警聚合而成的故障,悬停 `issue_id` 的值会弹出 RUM Issue 卡片,点击卡片里的链接打开对应 Issue。Monitors 实体树告警的 `__entity_alert_rule_id` 旁显示 **查看规则**,打开实体树中对应的告警规则。标签值无效或定位信息不完整时,只显示为普通文本。 **标签值的特殊渲染**: | 形态 | 识别条件 | 展示效果 | | :--- | :--- | :--- | +| 链接 | 值是 `http(s)` 链接(图片除外) | 以可点击链接展示完整 URL,新页签打开 | | 图片缩略图 | 值是 `http(s)` 链接,且 key 里含 `image`(如 Grafana 的 `imageURL`),或链接以 `.png` / `.jpg` / `.jpeg` / `.gif` / `.webp` / `.svg` 结尾 | 展示缩略图,点击在新页签打开原图 | | ARN | 值形如 `arn:partition:service:region:account:resource` | 主行显示资源段,后面跟 **服务** / **区域** 小标签 | | 时间 | key 以 `_time` / `_at` / `timestamp` 结尾且值是 10 位(秒)或 13 位(毫秒)时间戳;或值是带时区的 ISO 8601 时间 | 按账户时区格式化为 `YYYY-MM-DD HH:mm:ss` 并附「x 前」相对时间,悬停可看原始值 | diff --git a/zh/on-call/integration/alert-integration/alert-sources/apimetrics.mdx b/zh/on-call/integration/alert-integration/alert-sources/apimetrics.mdx index d727f085..7854e234 100644 --- a/zh/on-call/integration/alert-integration/alert-sources/apimetrics.mdx +++ b/zh/on-call/integration/alert-integration/alert-sources/apimetrics.mdx @@ -66,6 +66,7 @@ keywords: ["告警集成", "APIContext", "APImetrics", "API 监控", "Webhook", 1. 打开右侧的 **Enabled** 开关,点击 **Save** 2. 让一个被监控的 API 真正失败(例如把调用指向一个返回 5xx 的地址),确认 Flashduty 收到活动告警,集成显示 **最新事件时间** 3. 恢复该 API,确认下一次 `PASS` 结果到达后原告警关闭 + {/* console: 接入清单中的「收到第一个事件」同时变为已完成。 */} diff --git a/zh/on-call/integration/alert-integration/alert-sources/appsignal.mdx b/zh/on-call/integration/alert-integration/alert-sources/appsignal.mdx index 0c2e137c..dc0c3fd6 100644 --- a/zh/on-call/integration/alert-integration/alert-sources/appsignal.mdx +++ b/zh/on-call/integration/alert-integration/alert-sources/appsignal.mdx @@ -66,6 +66,7 @@ AppSignal 官方文档没有给出触发器和通知频率设置页面的菜单 1. 在 AppSignal 中让一个触发器进入告警状态,或在应用中触发一个新的异常,几秒后回到 Flashduty,集成显示 **最新事件时间**,并出现活动告警 2. 异常检测告警解决后,确认 Flashduty 中对应的告警恢复 + {/* console: 接入清单中的「收到第一个事件」同时变为已完成。 */} diff --git a/zh/on-call/integration/alert-integration/alert-sources/bugsnag.mdx b/zh/on-call/integration/alert-integration/alert-sources/bugsnag.mdx index 49f393ed..d3ccba97 100644 --- a/zh/on-call/integration/alert-integration/alert-sources/bugsnag.mdx +++ b/zh/on-call/integration/alert-integration/alert-sources/bugsnag.mdx @@ -81,6 +81,7 @@ Webhook 集成按项目配置,需要项目的管理员权限。每个需要接 1. 在接入 BugSnag SDK 的应用中触发一个新错误,确认 Flashduty 收到活动告警 2. 在 BugSnag 中将该错误标记为 **Fixed**,确认原告警恢复 + {/* console: 接入清单中的「收到第一个事件」同时变为已完成。 */} diff --git a/zh/on-call/integration/alert-integration/alert-sources/canarytokens.mdx b/zh/on-call/integration/alert-integration/alert-sources/canarytokens.mdx index 5772c1d4..df19e863 100644 --- a/zh/on-call/integration/alert-integration/alert-sources/canarytokens.mdx +++ b/zh/on-call/integration/alert-integration/alert-sources/canarytokens.mdx @@ -69,6 +69,7 @@ Canarytokens 的告警是一次性事件,不会推送恢复。请在接收这 1. 保存 Webhook 地址时,Canarytokens 会向该地址发送一条测试请求。Flashduty 会创建一条 Info 级别的测试告警,标题为 `Canarytokens test notification`,它不会自动恢复,验证后请手动关闭 2. 触碰蜜标(例如用浏览器或 `curl` 打开 Web bug 蜜标的链接),确认 Flashduty 收到 Critical 告警 + {/* console: 接入清单中的「收到第一个事件」同时变为已完成。 */} diff --git a/zh/on-call/integration/alert-integration/alert-sources/cato.mdx b/zh/on-call/integration/alert-integration/alert-sources/cato.mdx index dd22a4a1..b94568a1 100644 --- a/zh/on-call/integration/alert-integration/alert-sources/cato.mdx +++ b/zh/on-call/integration/alert-integration/alert-sources/cato.mdx @@ -81,6 +81,7 @@ Body 选择 **Custom**,粘贴以下模板。`${字段:}` 会被 Cato 替换为 1. 在 **Account → Subscriptions** 中,将该 Webhook 作为需要接收的告警类型(站点运维事件等)的订阅投递目标。恢复通知也要投递到该 Webhook,否则告警不会恢复 2. 点击 Webhook 页面的 **Test**。Cato 用自动生成的内容发送测试请求,页面显示 `Test passed successfully` 只说明链路可达;Cato 文档没有给出测试请求的内容,Flashduty 按普通告警处理:若测试请求不含 `storyId` 与 `correlationId` 会返回参数错误,若含有则产生一条独立告警,请在验证后手动关闭 3. 触发真实事件(如断开测试站点的 Socket),确认 Flashduty 收到活动告警;事件解决后确认该告警恢复 + {/* console: 接入清单中的「收到第一个事件」同时变为已完成。 */} diff --git a/zh/on-call/integration/alert-integration/alert-sources/cronitor.mdx b/zh/on-call/integration/alert-integration/alert-sources/cronitor.mdx index 837225ff..51ef5330 100644 --- a/zh/on-call/integration/alert-integration/alert-sources/cronitor.mdx +++ b/zh/on-call/integration/alert-integration/alert-sources/cronitor.mdx @@ -72,6 +72,7 @@ Cronitor 推荐用一个心跳监控测试告警: 2. 在浏览器中打开监控的遥测 URL,发送一次正常 ping 3. 在遥测 URL 末尾加上 `?state=fail` 再打开一次,Cronitor 发送告警通知,Flashduty 中出现一条活动告警,集成显示 **最新事件时间** 4. 去掉 `?state=fail` 再打开一次,Cronitor 发送恢复通知,Flashduty 中的原告警恢复 + {/* console: 接入清单中的「收到第一个事件」同时变为已完成。 */} diff --git a/zh/on-call/integration/alert-integration/alert-sources/ctyun.mdx b/zh/on-call/integration/alert-integration/alert-sources/ctyun.mdx index ae10f96d..8b958b9c 100644 --- a/zh/on-call/integration/alert-integration/alert-sources/ctyun.mdx +++ b/zh/on-call/integration/alert-integration/alert-sources/ctyun.mdx @@ -80,6 +80,7 @@ keywords: ["告警集成", "天翼云告警事件", "监控告警", "数据接 **测试** 只验证连通性;请让规则触发一条真实告警,以确认 Flashduty 收到事件。 回到 Flashduty,集成显示 **最新事件时间**,说明配置成功。 + {/* console: 接入清单中的「收到第一个事件」同时变为已完成。 */} @@ -87,8 +88,6 @@ keywords: ["告警集成", "天翼云告警事件", "监控告警", "数据接 -
- ## 状态和告警等级
diff --git a/zh/on-call/integration/alert-integration/alert-sources/db-pull.mdx b/zh/on-call/integration/alert-integration/alert-sources/db-pull.mdx index 22d5ed69..e6f06070 100644 --- a/zh/on-call/integration/alert-integration/alert-sources/db-pull.mdx +++ b/zh/on-call/integration/alert-integration/alert-sources/db-pull.mdx @@ -69,7 +69,7 @@ DB Pull 在 Flashduty 内完成全部配置,数据库侧只需提供一个可 | 字段 | 必填 | 说明 | | :-: | :-: | :--- | -| SQL 查询(query) | 是 | 一条只读 SELECT 语句(或以 `WITH` 开头的 CTE 查询)。**禁止**包含 `INSERT`、`UPDATE`、`DELETE`、`DROP` 等 DML/DDL 关键字,**禁止**使用 `?` 占位符,**禁止**包含 `LIMIT` / `OFFSET` / `FETCH NEXT` / `SELECT TOP` 等行数限制子句(系统自动处理分页)。查询输出列中**必须包含**游标字段(`time_column` 与 `id_column`),否则保存时校验失败。 | +| SQL 查询(query) | 是 | 一条只读 SELECT 语句(或以 `WITH` 开头的 CTE 查询)。**禁止**包含 `INSERT`、`UPDATE`、`DELETE`、`DROP` 等 DML/DDL 关键字,**禁止**使用 `?` 占位符,**禁止**包含 `LIMIT` / `OFFSET` / `FETCH NEXT` / `SELECT TOP` 等行数限制子句(系统自动处理分页),**禁止**包含分号 `;`。查询输出列中**必须包含**游标字段(`time_column` 与 `id_column`),否则保存时校验失败。 | | 时间游标列(time_column) | 是 | 用于排序和分页的时间类型列名,列名只能包含字母、数字和下划线且不能以数字开头。该列必须出现在 SELECT 输出中。 | | ID 游标列(id_column) | 是 | 与时间列联合用于分页的唯一标识列名(通常为自增主键或 UUID),规则同上。当同一时刻有多行时,ID 列用于消除时间列的排序歧义,防止漏行。 | | 初始拉取时间(initial_time) | 是 | 首次拉取(或检查点重置后)使用的起始时间,格式为 `YYYY-MM-DD HH:mm:ss`。表单默认使用当前时间作为起点,**已存在的历史行不会被拉取**;如需补拉历史数据,请手动选择更早的时间。 | @@ -103,22 +103,22 @@ DB Pull 在 Flashduty 内完成全部配置,数据库侧只需提供一个可 **字段映射**决定数据库行的哪些列(或常量值)映射到标准告警事件的哪些字段。每条映射规则由 **目标字段**(标准事件字段名)和 **规则** 组成,规则有三种类型: -| 规则类型 | type 值 | value 说明 | -| :-: | :-: | :--- | -| 列映射 | `column` | 直接取数据库行中该列名对应的值。例如 `"type": "column", "value": "alert_title"` 表示取 `alert_title` 列。 | -| 常量 | `const` | 固定字符串,每行均使用相同的值。例如 `"type": "const", "value": "Critical"` 表示始终填入 `Critical`。 | -| 模板 | `template` | Go 模板字符串,可引用行中任意列。例如 `"type": "template", "value": "{{.host}}: {{.message}}"` 会将 `host` 和 `message` 列拼接为字符串。 | +| 规则类型 | 说明 | +| :-: | :--- | +| 列名 | 直接取数据库行中该列名对应的值。例如填 `alert_title` 表示取 `alert_title` 列。 | +| 常量 | 固定字符串,每行均使用相同的值。例如填 `Critical` 表示始终填入 `Critical`。 | +| 模板 | Go 模板字符串,可引用行中任意列。例如 `{{.host}}: {{.message}}` 会将 `host` 和 `message` 列拼接为字符串。 | 当目标字段为 `event_time` 时,系统会将列值自动转换为 Unix 时间戳(秒);支持的输入格式包括 `time.Time`、Unix 毫秒整数、`"2006-01-02T15:04:05"`、`"2006-01-02 15:04:05"` 等常见格式。 **标签来源**(标签映射,`labels`)决定如何将数据库列转换为告警事件的 `labels` 字典,支持四种模式: -| 模式 | mode 值 | 说明 | -| :-: | :-: | :--- | -| 指定列 | `include_columns` | 仅将 `columns` 列表中列出的列作为标签,标签名即列名,标签值为列值字符串。 | -| 全部列 | `all_columns` | 将查询结果中所有列(排除游标列和已被 `fields` 引用的列)自动转为标签。适合列数较少且不确定列名的场景。 | -| JSON 列 | `json_column` | 将指定列的 JSON 字符串(`{"key": "value", ...}`)解析为标签字典。该列的值必须是合法的 JSON 对象。 | -| 手动映射 | `manual` | 显式指定标签名到列名的映射,例如 `{"region": "dc_region", "env": "deploy_env"}`,标签名为键,源列名为值。 | +| 模式 | 说明 | +| :-: | :--- | +| 指定列 | 仅将 `columns` 列表中列出的列作为标签,标签名即列名,标签值为列值字符串。 | +| 全部未映射列 | 将查询结果中所有列(排除游标列和已被 `fields` 引用的列)自动转为标签。适合列数较少且不确定列名的场景。 | +| JSON 列 | 将指定列的 JSON 字符串(`{"key": "value", ...}`)解析为标签字典。该列的值必须是合法的 JSON 对象。 | +| 手动映射 | 显式指定标签名到列名的映射,例如 `{"region": "dc_region", "env": "deploy_env"}`,标签名为键,源列名为值。 | **严重程度映射**:外部系统的告警级别字段取值往往不一致,Flashduty 通过严重程度映射将外部值翻译为标准的 `Critical / Warning / Info / Ok`。 diff --git a/zh/on-call/integration/alert-integration/alert-sources/dingtalk-alert.mdx b/zh/on-call/integration/alert-integration/alert-sources/dingtalk-alert.mdx index bf6e316d..b6ecbb66 100644 --- a/zh/on-call/integration/alert-integration/alert-sources/dingtalk-alert.mdx +++ b/zh/on-call/integration/alert-integration/alert-sources/dingtalk-alert.mdx @@ -124,7 +124,7 @@ Flashduty 生成钉钉自定义机器人格式的 Webhook 地址。已在向钉 **操作路径**:Flashduty › 集成中心 › 告警事件 -在右侧集成列表中点开你的集成(类型为 钉钉机器人兼容),进入 **接收**,找到 **无事件检测** 卡片。 +在右侧集成列表中点开您的集成(类型为 钉钉机器人兼容),进入 **接收**,找到 **无事件检测** 卡片。 **无事件检测** 卡片在指定时间内未收到有效事件时,生成一条 Warning 告警。开关位于卡片标题行右侧,默认关闭;关闭时卡片只有一行,不显示其他选项。 diff --git a/zh/on-call/integration/alert-integration/alert-sources/elastic.mdx b/zh/on-call/integration/alert-integration/alert-sources/elastic.mdx index 4fdf44e6..f336d19c 100644 --- a/zh/on-call/integration/alert-integration/alert-sources/elastic.mdx +++ b/zh/on-call/integration/alert-integration/alert-sources/elastic.mdx @@ -195,7 +195,7 @@ Security 检测规则不会发送 Recovered 通知,每条检测告警都会在 如果已有规则在使用 Kibana 的 PagerDuty 连接器,也可以把它指向 Flashduty 的 [PagerDuty 兼容集成](/zh/on-call/integration/alert-integration/alert-sources/pagerduty),无需改写动作内容。此方式接入的是 Flashduty 的 PagerDuty 兼容集成,不是本页的 Elastic 集成。 1. 在 Flashduty 中添加一个 **PagerDuty 兼容** 集成,复制推送地址 -2. 在 Kibana 中创建 PagerDuty 连接器:**API URL** 填写该推送地址(形如 `https://api.flashcat.cloud/event/push/alert/pagerduty?integration_key=<集成密钥>`),**Integration Key** 填写推送地址中的集成密钥 +2. 在 Kibana 中创建 PagerDuty 连接器:**API URL** 填写该推送地址(即 `{integration_url}`),**Integration Key** 填写推送地址中的集成密钥 3. 规则动作选择 **For each alert**,为告警动作组添加 **Event action** 为 `Trigger` 的动作,为 **Recovered** 添加 **Event action** 为 `Resolve` 的动作(Recovered 动作默认就是 `Resolve`) 4. 两个动作的 **DedupKey** 都保留 Kibana 预填的 `{{rule.id}}:{{alert.id}}`,不要清空,这样恢复事件会关闭对应的告警。Trigger 动作的 DedupKey 为空时,Kibana 不发送 `dedup_key`,Flashduty 会为每次触发生成随机的 Alert Key,恢复事件将无法关闭它 diff --git a/zh/on-call/integration/alert-integration/alert-sources/email.mdx b/zh/on-call/integration/alert-integration/alert-sources/email.mdx index 0ce4f77b..413e3c0f 100644 --- a/zh/on-call/integration/alert-integration/alert-sources/email.mdx +++ b/zh/on-call/integration/alert-integration/alert-sources/email.mdx @@ -87,7 +87,7 @@ keywords: ["告警集成", "邮件Email集成", "监控告警", "数据接入"] **操作路径**:Flashduty › 集成中心 › 告警事件 -在右侧集成列表中点开你的邮件集成(类型为 邮件 Email),进入 **接收** 页签,在 **邮件怎么变成告警** 卡片的 **简单配置** 方式里回答下面两个问题。 +在右侧集成列表中点开您的邮件集成(类型为 邮件 Email),进入 **接收** 页签,在 **邮件怎么变成告警** 卡片的 **简单配置** 方式里回答下面两个问题。 **问题 1:同一个故障的多封邮件,怎么归到一起?** @@ -126,7 +126,7 @@ keywords: ["告警集成", "邮件Email集成", "监控告警", "数据接入"] **操作路径**:Flashduty › 集成中心 › 告警事件 -在右侧集成列表中点开你的邮件集成(类型为 邮件 Email),进入 **接收** 页签。右栏 **用一封邮件试试** 面板的下方是 **对一对恢复邮件**(问题 1 选了 **按标题里的一段识别** 时显示)。 +在右侧集成列表中点开您的邮件集成(类型为 邮件 Email),进入 **接收** 页签。右栏 **用一封邮件试试** 面板的下方是 **对一对恢复邮件**(问题 1 选了 **按标题里的一段识别** 时显示)。 上面那封邮件作为触发邮件,在 **选一封恢复邮件** 中选择或粘贴一封恢复邮件。系统按页面上尚未保存的配置分别处理两封邮件: @@ -171,7 +171,7 @@ keywords: ["告警集成", "邮件Email集成", "监控告警", "数据接入"] **操作路径**:Flashduty › 集成中心 › 告警事件 -在右侧集成列表中点开你的邮件集成(类型为 邮件 Email),进入 **接收**,找到 **无事件检测** 卡片。 +在右侧集成列表中点开您的邮件集成(类型为 邮件 Email),进入 **接收**,找到 **无事件检测** 卡片。 **无事件检测** 卡片在指定时间内未收到有效事件时,生成一条 Warning 告警。开关位于卡片标题行右侧,默认关闭;关闭时卡片只有一行,不显示其他选项。 diff --git a/zh/on-call/integration/alert-integration/alert-sources/google-cloud-monitoring.mdx b/zh/on-call/integration/alert-integration/alert-sources/google-cloud-monitoring.mdx index f66c1223..ca716f1f 100644 --- a/zh/on-call/integration/alert-integration/alert-sources/google-cloud-monitoring.mdx +++ b/zh/on-call/integration/alert-integration/alert-sources/google-cloud-monitoring.mdx @@ -59,7 +59,7 @@ keywords: ["告警集成", "GoogleCloudMonitoring 告警事件", "Google Cloud", | Security Command Center 发现 | 持续导出(NotificationConfig)到 Pub/Sub + 推送订阅 | 是,发现变为 INACTIVE 或被静音时恢复 | | Cloud Billing 预算 | 预算关联 Pub/Sub 主题 + 推送订阅 | 否 | -下文的 **推送地址** 指上一步复制的集成推送地址,形如 `https://api.flashcat.cloud/event/push/alert/google-cm?integration_key=<集成密钥>`。 +下文的 **推送地址** 指上一步复制的集成推送地址,即 `{integration_url}`。
diff --git a/zh/on-call/integration/alert-integration/alert-sources/hookdeck.mdx b/zh/on-call/integration/alert-integration/alert-sources/hookdeck.mdx index 946480ec..7d83371c 100644 --- a/zh/on-call/integration/alert-integration/alert-sources/hookdeck.mdx +++ b/zh/on-call/integration/alert-integration/alert-sources/hookdeck.mdx @@ -91,6 +91,7 @@ Hookdeck 的通知在真实 Issue 打开或状态变化时发送,因此用一 2. 在 Hookdeck **Issues** 页面看到新的投递 Issue 后,确认 Flashduty 收到一条 Critical 告警,集成显示 **最新事件时间** 3. 在 Issues 页面将该 Issue 的状态改为 **Resolved**,确认原告警恢复 4. 验证完成后删除测试连接 + {/* console: 接入清单中的「收到第一个事件」同时变为已完成。 */} diff --git a/zh/on-call/integration/alert-integration/alert-sources/image-upload.mdx b/zh/on-call/integration/alert-integration/alert-sources/image-upload.mdx index 5fa00362..06cda742 100644 --- a/zh/on-call/integration/alert-integration/alert-sources/image-upload.mdx +++ b/zh/on-call/integration/alert-integration/alert-sources/image-upload.mdx @@ -154,7 +154,7 @@ curl -X POST '{api_host}/push/image/upload?integration_key={integration_key}' \ `images` 与 `image` 结构体的完整字段说明,请参考 [标准告警 - image 结构体](/zh/on-call/integration/alert-integration/alert-sources/standard-alert#image)。 -- `image_key` 在 `images[].src` 中的长度限制为 `256` 字符,超长会被丢弃。 +- `image_key` 在 `images[].src` 中的长度限制为 `512` 字符,超长会被丢弃。 - 上传后的图片先临时存储,被告警引用后才会转为长期存储。请在上传后及时将 `image_key` 用于告警上报。 diff --git a/zh/on-call/integration/alert-integration/alert-sources/kapacitor.mdx b/zh/on-call/integration/alert-integration/alert-sources/kapacitor.mdx index c5429049..031a6812 100644 --- a/zh/on-call/integration/alert-integration/alert-sources/kapacitor.mdx +++ b/zh/on-call/integration/alert-integration/alert-sources/kapacitor.mdx @@ -127,6 +127,7 @@ options: 1. 确认 Flashduty 收到一条告警,集成显示 **最新事件时间** 2. 条件回到 `OK` 后,确认原告警恢复(Kapacitor 发送 `level` 为 `OK` 的事件,Flashduty 按相同的 `id` 关闭告警) 3. 没有收到告警时,在 `.post()` 上加 `.captureResponse()` 查看 Flashduty 的返回 + {/* console: 接入清单中的「收到第一个事件」同时变为已完成。 */} diff --git a/zh/on-call/integration/alert-integration/alert-sources/kener.mdx b/zh/on-call/integration/alert-integration/alert-sources/kener.mdx index 9a5e6dab..5757c598 100644 --- a/zh/on-call/integration/alert-integration/alert-sources/kener.mdx +++ b/zh/on-call/integration/alert-integration/alert-sources/kener.mdx @@ -95,6 +95,7 @@ Kener 渲染模板时不做 JSON 转义。内置默认模板包含 `alert_messag 1. 点击触发器的测试按钮,确认 Kener 显示发送成功。测试只能证明 Kener 能连通 Flashduty,不代表真实监控已接通。测试请求是 Kener 内置的固定内容(告警 ID 为 `1`,严重程度 `WARNING`,状态随机为 `TRIGGERED` 或 `RESOLVED`),Flashduty 按普通告警处理:`TRIGGERED` 时会创建或更新 Alert Key 为 `1` 的 Warning 告警,`RESOLVED` 时会恢复这条告警,没有打开的告警时不产生新告警。验证后若该告警仍未恢复,请在 Flashduty 中手动关闭 2. 让被监控的服务真正失败,达到失败阈值后确认 Flashduty 出现活动告警,集成显示 **最新事件时间** 3. 服务恢复并达到成功阈值后,确认该告警自动恢复 + {/* console: 接入清单中的「收到第一个事件」同时变为已完成。 */} diff --git a/zh/on-call/integration/alert-integration/alert-sources/label-mapping-api.mdx b/zh/on-call/integration/alert-integration/alert-sources/label-mapping-api.mdx index e1f4610c..0cbab1de 100644 --- a/zh/on-call/integration/alert-integration/alert-sources/label-mapping-api.mdx +++ b/zh/on-call/integration/alert-integration/alert-sources/label-mapping-api.mdx @@ -51,7 +51,6 @@ keywords: ["标签映射", "API", "告警增强", "CMDB", "标签丰富", "外 | 超时时间(秒,`timeout`) | 否 | 请求超时时间,可取值:1–3 | | 重试次数(`retry_count`) | 否 | 请求失败后的重试次数,可取值:0–1 | | 自定义请求头(`headers`) | 否 | HTTP 请求头,用于传递自定义认证信息,受 [安全黑名单](#HeaderBlacklist) 限制 | -| 状态(`status`) | 否 | 仅 API 字段,服务状态,如 `enabled`、`disabled` | 单个账户最多创建 50 个 API。创建元数据表(Schema)同样需要专业版。 @@ -115,12 +114,20 @@ POST, Content-Type:"application/json" | title_rule | string | 否 | 标题规则 | | description | string | 否 | 告警描述 | | alert_key | string | 是 | 告警唯一标识 | -| alert_id | string | 是 | 告警 ID | | event_severity | string | 是 | 事件严重程度,枚举值:Critical、Warning、Info | | event_status | string | 是 | 事件状态,枚举值:Critical、Warning、Info、Ok | | event_time | int64 | 是 | 事件时间,Unix 秒时间戳 | | labels | map[string]string | 否 | 告警原始标签 KV | -| images | []string | 否 | 告警关联图片列表 | +| images | [][Image](#Image) | 否 | 告警关联图片列表 | + + +**Image**: + +| 字段 | 类型 | 释义 | +| :--------: | :-------------------: | :--------- | +| src | string | 图片地址 | +| alt | string | 图片替代文本 | +| href | string | 图片点击后的跳转链接 |
@@ -140,7 +147,6 @@ POST, Content-Type:"application/json" "title": "High CPU Usage on instance 10.0.1.101:9100", "title_rule": "", "alert_key": "d41d8cd98f00b204e9800998ecf8427e", - "alert_id": "62d6c0f6b8f1b2b3c4d5e6f7", "event_severity": "Critical", "event_status": "Critical", "event_time": 1678886400, diff --git a/zh/on-call/integration/alert-integration/alert-sources/lark-alert.mdx b/zh/on-call/integration/alert-integration/alert-sources/lark-alert.mdx index c68fb8e3..28e3db45 100644 --- a/zh/on-call/integration/alert-integration/alert-sources/lark-alert.mdx +++ b/zh/on-call/integration/alert-integration/alert-sources/lark-alert.mdx @@ -124,7 +124,7 @@ Flashduty 生成飞书自定义机器人格式的 Webhook 地址。已在向飞 **操作路径**:Flashduty › 集成中心 › 告警事件 -在右侧集成列表中点开你的集成(类型为 飞书机器人兼容),进入 **接收**,找到 **无事件检测** 卡片。 +在右侧集成列表中点开您的集成(类型为 飞书机器人兼容),进入 **接收**,找到 **无事件检测** 卡片。 **无事件检测** 卡片在指定时间内未收到有效事件时,生成一条 Warning 告警。开关位于卡片标题行右侧,默认关闭;关闭时卡片只有一行,不显示其他选项。 diff --git a/zh/on-call/integration/alert-integration/alert-sources/mackerel.mdx b/zh/on-call/integration/alert-integration/alert-sources/mackerel.mdx index bf61d0f1..b3b619e0 100644 --- a/zh/on-call/integration/alert-integration/alert-sources/mackerel.mdx +++ b/zh/on-call/integration/alert-integration/alert-sources/mackerel.mdx @@ -68,6 +68,7 @@ keywords: ["告警集成", "Mackerel", "Webhook", "服务器监控", "外形监 1. 选择一条监控规则(例如主机指标监控),临时调低阈值,使其产生告警 2. 确认 Flashduty 收到活动告警 3. 恢复阈值,等 Mackerel 关闭告警后,确认原告警在 Flashduty 中恢复。也可以在 Mackerel 告警页面点击 **Close alert** 手动关闭,Flashduty 同样会恢复该告警 + {/* console: 接入清单中的「收到第一个事件」同时变为已完成。 */} diff --git a/zh/on-call/integration/alert-integration/alert-sources/oci-monitoring.mdx b/zh/on-call/integration/alert-integration/alert-sources/oci-monitoring.mdx index b083ca06..cf974ce7 100644 --- a/zh/on-call/integration/alert-integration/alert-sources/oci-monitoring.mdx +++ b/zh/on-call/integration/alert-integration/alert-sources/oci-monitoring.mdx @@ -30,7 +30,7 @@ keywords: ["告警集成", "Oracle Cloud", "OCI", "Monitoring", "Alarm", "Notifi -OCI 的 HTTPS 订阅地址不允许带查询参数,所以本集成的推送地址把集成 key 放在路径里,形如 `https://api.flashcat.cloud/event/push/alert/oci-monitoring/`。请原样粘贴完整地址,不要改成 `?integration_key=` 的写法。 +OCI 的 HTTPS 订阅地址不允许带查询参数,所以本集成的推送地址把集成 key 放在路径里,形如 `{api_host}/event/push/alert/oci-monitoring/{integration_key}`。请原样粘贴完整地址,不要改成 `?integration_key=` 的写法。 ## 在 OCI 中配置 diff --git a/zh/on-call/integration/alert-integration/alert-sources/opensearch.mdx b/zh/on-call/integration/alert-integration/alert-sources/opensearch.mdx index 2ff65787..6aef8325 100644 --- a/zh/on-call/integration/alert-integration/alert-sources/opensearch.mdx +++ b/zh/on-call/integration/alert-integration/alert-sources/opensearch.mdx @@ -113,6 +113,7 @@ Per query 和 Per cluster metrics 的触发器只在条件成立时执行动作 1. 打开该渠道,点击 **Send test message**,Flashduty 会创建一条标题为 `OpenSearch test notification` 的 Info 告警,集成显示 **最新事件时间**,验证后请手动关闭。这条测试消息只能证明连通性,不含 Monitor 和触发器信息 2. 让 Monitor 的触发条件真正成立(例如临时降低阈值),等待 Monitor 下一次运行,确认 Flashduty 收到告警,等级与触发器的 Severity level 对应 3. 恢复阈值,等待超时自动关闭时长到达,确认告警自动关闭 + {/* console: 接入清单中的「收到第一个事件」同时变为已完成。 */} diff --git a/zh/on-call/integration/alert-integration/alert-sources/ossec.mdx b/zh/on-call/integration/alert-integration/alert-sources/ossec.mdx index f985044e..110bf3de 100644 --- a/zh/on-call/integration/alert-integration/alert-sources/ossec.mdx +++ b/zh/on-call/integration/alert-integration/alert-sources/ossec.mdx @@ -50,7 +50,7 @@ OSSEC 不会发送恢复通知,请在接收该集成的协作空间中开启 [ | :--- | :--- | :--- | | `` | `yes`(默认 `no`) | 必填 | | `` | Flashduty 邮件集成的邮件地址 | 必填 | -| `` | 你的 SMTP 服务器 | 必填 | +| `` | 您的 SMTP 服务器 | 必填 | | `` | 发件人地址 | 必填 | ```xml diff --git a/zh/on-call/integration/alert-integration/alert-sources/raygun.mdx b/zh/on-call/integration/alert-integration/alert-sources/raygun.mdx index 38ef48b6..5a23bf4e 100644 --- a/zh/on-call/integration/alert-integration/alert-sources/raygun.mdx +++ b/zh/on-call/integration/alert-integration/alert-sources/raygun.mdx @@ -55,6 +55,7 @@ Webhooks 集成没有测试按钮,请用真实错误验证,各事件在 Flas 1. 在接入 Raygun SDK 的应用中触发一个新错误,确认 Flashduty 收到活动告警,首次通知通常在一分钟内到达 2. 在 Raygun 的错误组页面打开状态菜单,选择 **Resolve**,确认原告警恢复 + {/* console: 接入清单中的「收到第一个事件」同时变为已完成。 */} diff --git a/zh/on-call/integration/alert-integration/alert-sources/semgrep.mdx b/zh/on-call/integration/alert-integration/alert-sources/semgrep.mdx index e49fc83e..33c23b54 100644 --- a/zh/on-call/integration/alert-integration/alert-sources/semgrep.mdx +++ b/zh/on-call/integration/alert-integration/alert-sources/semgrep.mdx @@ -69,6 +69,7 @@ keywords: ["告警集成", "Semgrep", "Webhook", "SAST", "SCA", "代码安全", 1. 点击该 Webhook 集成旁的 **Test** 按钮,确认 Flashduty 返回成功。测试请求的内容为 `[{"text":"Test Notification","username":"Semgrep"}]`,Flashduty 返回成功,并创建一条标题为 "Semgrep test notification" 的独立 Info 告警,请手动关闭。该测试只证明连通性 2. 提交一段会命中规则的代码并触发扫描,确认 Flashduty 收到新的告警 + {/* console: 接入清单中的「收到第一个事件」同时变为已完成。 */} diff --git a/zh/on-call/integration/alert-integration/alert-sources/standard-alert.mdx b/zh/on-call/integration/alert-integration/alert-sources/standard-alert.mdx index 6f2c885c..f8ff343d 100644 --- a/zh/on-call/integration/alert-integration/alert-sources/standard-alert.mdx +++ b/zh/on-call/integration/alert-integration/alert-sources/standard-alert.mdx @@ -67,7 +67,7 @@ Flashduty 已经适配了大部分常用告警系统的 webhook 协议,对于 **操作路径**:Flashduty 控制台 › 集成中心 › 告警事件(专属集成:Flashduty 控制台 › 协作空间 › 配置 › 集成数据 › 专属集成) -在右侧集成列表中点开你的标准告警事件集成,进入 **接收** › **映射配置** 卡片。该卡片的开关位于标题行右侧,默认关闭,开启后才显示映射编辑器,在其中配置 **字段映射**。 +在右侧集成列表中点开您的标准告警事件集成,进入 **接收** › **映射配置** 卡片。该卡片的开关位于标题行右侧,默认关闭,开启后才显示映射编辑器,在其中配置 **字段映射**。 您的系统能直接按上文 Payload 推送时,跳过本步。否则在 **字段映射** 中用 `{{变量路径}}` 把原始 JSON 的字段映射到标准字段,需要转换取值时再配置 **字段值映射**(仅在配置字段映射后显示)。语法和示例见下文「字段映射与值映射」。 @@ -127,15 +127,15 @@ POST, Content-Type:"application/json" | alert_key | 否 | string | 告警标识,用于对已经存在的告警进行更新或自动恢复。您可以自定义此值,长度不超过 `255` 字节;超过时系统以该值的 MD5(32 位十六进制字符串)代替,相同的值总是得到相同的 MD5,告警的合并与恢复不受影响。您也可以依赖系统自动生成,该值会在响应中返回。如果您上报的是恢复事件,则此值必须存在。 | description | 否 | string | 告警描述,不超过`2048`个字符,超出后将自动截断。 | labels | 否 | map | 告警标签集合,key 为标签名称,value 为标签值。1. 标签的 key 和 value 均为 string 类型,区分大小写。2. 标签的 key 不要超过`128`个字符,遵循 Prometheus 标签命名规范。value 不超过`8192`字节(即 8 KB),超出后将自动截断,截断会回退到 UTF-8 字符边界,不会截出半个汉字。3. 至多传入`50`个标签。`标签内容参考`[最佳实践](#最佳实践)。示例:"resource": "171.26.23.22", "check": "api latency > 500ms" -| images | 否 | [][image](#image) | 图片数组,可用于前端或飞书和钉钉应用通知的图片展示。系统根据 alt 进行合并覆盖,相同(包括空字符)的 alt 只保留一条 +| images | 否 | [][image](#image) | 图片数组,可用于前端或飞书和钉钉应用通知的图片展示。系统根据 alt 进行合并覆盖,相同(包括空字符)的 alt 只保留一条。每个事件最多保留 5 张图片,超出的按顺序丢弃 #### image 结构体 字段|必含|类型|释义 :-:|:-:|:-:|:--- | alt | 否 | string | 图片的替代文本,长度限制 128 字符,超长截断。 -| src | 是 | string | 图片来源,值:http/https 开头的图片链接地址 或 [图片上传接口](/zh/on-call/integration/alert-integration/alert-sources/image-upload)返回的 image_key,长度限制 256 字符,超长会被丢弃 -| href | 否 | string | 超链接引用路径,长度限制 256 字符,超长截断 +| src | 是 | string | 图片来源,值:http/https 开头的图片链接地址 或 [图片上传接口](/zh/on-call/integration/alert-integration/alert-sources/image-upload)返回的 image_key,长度限制 512 字符,超长会被丢弃 +| href | 否 | string | 超链接引用路径,长度限制 512 字符,超长截断 @@ -246,7 +246,7 @@ curl -X POST '{api_host}/event/push/alert/standard?integration_key={integration_ | alert_key | 告警标识 | | labels | 告警标签 | -以上为集成设置中字段映射编辑器支持的目标字段白名单。`images` 字段在控制台字段映射编辑器中不可选(底层 `field_mapping` API 本身支持该字段),请在请求 Payload 中直接上报。 +以上为集成设置中字段映射编辑器支持的目标字段白名单。`images` 字段在控制台字段映射编辑器中不可选,请在请求 Payload 中直接上报。 **变量语法:** diff --git a/zh/on-call/integration/alert-integration/alert-sources/sysdig.mdx b/zh/on-call/integration/alert-integration/alert-sources/sysdig.mdx index 654b19e9..4d9d6d6b 100644 --- a/zh/on-call/integration/alert-integration/alert-sources/sysdig.mdx +++ b/zh/on-call/integration/alert-integration/alert-sources/sysdig.mdx @@ -70,6 +70,7 @@ keywords: ["告警集成", "Sysdig", "Sysdig Monitor", "Webhook", "通知渠道" 1. 在上述表单中开启 **Test notification** 后,保存通知渠道时 Sysdig 会发送一条名称为 `TEST ALERT: Testing Notification Channel <渠道名>` 的测试通知,Flashduty 收到后返回成功,但不会创建告警;它只证明地址可达 2. 让一条使用该渠道的告警规则进入触发状态,确认 Flashduty 收到活动告警 3. 等待告警条件恢复,确认原告警变为已恢复 + {/* console: 接入清单中的「收到第一个事件」同时变为已完成。 */} diff --git a/zh/on-call/integration/alert-integration/alert-sources/tactical-rmm.mdx b/zh/on-call/integration/alert-integration/alert-sources/tactical-rmm.mdx index 4a3c6430..9fa03b0e 100644 --- a/zh/on-call/integration/alert-integration/alert-sources/tactical-rmm.mdx +++ b/zh/on-call/integration/alert-integration/alert-sources/tactical-rmm.mdx @@ -110,6 +110,7 @@ Tactical RMM 默认只对 Error 级别(如代理离线)和 Warning 级别的 1. 在 Webhook 编辑页点击 **Test**,测试对象类型选 **None**(不选择代理、站点或客户)。Flashduty 会创建一条 Info 级别的测试告警,标题为 `Tactical RMM test notification`,它不会自动恢复,验证后请手动关闭。Tactical RMM 的文档说明测试模式下 `{{alert.XXX}}` 变量不可用;选择了测试对象时变量可能被替换成其他值,Flashduty 会因 `alert_type` 无效返回参数错误。因此 **Test** 只能证明地址可达,请用真实告警验证 2. 让一个告警真实触发(例如停止一台测试代理),确认 Flashduty 收到活动告警 3. 告警恢复后,确认 Flashduty 中对应的告警恢复 + {/* console: 接入清单中的「收到第一个事件」同时变为已完成。 */} diff --git a/zh/on-call/integration/alert-integration/alert-sources/thousandeyes.mdx b/zh/on-call/integration/alert-integration/alert-sources/thousandeyes.mdx index 412e8d2c..a08a7bed 100644 --- a/zh/on-call/integration/alert-integration/alert-sources/thousandeyes.mdx +++ b/zh/on-call/integration/alert-integration/alert-sources/thousandeyes.mdx @@ -74,6 +74,7 @@ keywords: ["告警集成", "ThousandEyes", "Cisco ThousandEyes", "Webhook", "Cla 1. 点击 **Test** 时 ThousandEyes 会发送 `WEBHOOK_TEST` 事件,Flashduty 返回成功,但不会创建告警,因此 **Test** 只能证明地址可达 2. 让一条选择了该 Webhook 的告警规则触发(例如临时把阈值调低),确认 Flashduty 收到活动告警 3. 等待告警清除(或把阈值改回),确认原告警变为已恢复 + {/* console: 接入清单中的「收到第一个事件」同时变为已完成。 */} diff --git a/zh/on-call/integration/alert-integration/alert-sources/uptrends.mdx b/zh/on-call/integration/alert-integration/alert-sources/uptrends.mdx index 94dc9484..02ba5115 100644 --- a/zh/on-call/integration/alert-integration/alert-sources/uptrends.mdx +++ b/zh/on-call/integration/alert-integration/alert-sources/uptrends.mdx @@ -31,7 +31,9 @@ Uptrends 通过**自定义集成**(Uptrends integration)推送告警:监 ## 在 Uptrends 中配置 -以下操作 +以下操作需要具备 **Integrations** 和 **Alert definitions** 管理权限的 Uptrends 用户。 + + **操作路径**:Uptrends › Alerting › Integrations › +(新版导航:Configure › Alerting channels › +) diff --git a/zh/on-call/integration/alert-integration/alert-sources/wazuh.mdx b/zh/on-call/integration/alert-integration/alert-sources/wazuh.mdx index 72068ce5..4b75d4d9 100644 --- a/zh/on-call/integration/alert-integration/alert-sources/wazuh.mdx +++ b/zh/on-call/integration/alert-integration/alert-sources/wazuh.mdx @@ -82,6 +82,7 @@ Docker 部署时重启 manager 容器。 1. 在被监控主机上触发一条不低于 `` 的告警,例如对 SSH 服务连续输入错误密码(规则 5763,等级 10) 2. 在 Flashduty 中确认收到告警,集成显示 **最新事件时间** 3. 没有收到时查看管理节点的 `/var/ossec/logs/integrations.log` 和 `/var/ossec/logs/ossec.log` + {/* console: 接入清单中的「收到第一个事件」同时变为已完成。 */} diff --git a/zh/on-call/integration/alert-integration/alert-sources/wecom-alert.mdx b/zh/on-call/integration/alert-integration/alert-sources/wecom-alert.mdx index 35652a35..86c33f91 100644 --- a/zh/on-call/integration/alert-integration/alert-sources/wecom-alert.mdx +++ b/zh/on-call/integration/alert-integration/alert-sources/wecom-alert.mdx @@ -122,7 +122,7 @@ Flashduty 生成企业微信群机器人格式的 Webhook 地址。已在向企 **操作路径**:Flashduty › 集成中心 › 告警事件 -在右侧集成列表中点开你的集成(类型为 企微机器人兼容),进入 **接收**,找到 **无事件检测** 卡片。 +在右侧集成列表中点开您的集成(类型为 企微机器人兼容),进入 **接收**,找到 **无事件检测** 卡片。 **无事件检测** 卡片在指定时间内未收到有效事件时,生成一条 Warning 告警。开关位于卡片标题行右侧,默认关闭;关闭时卡片只有一行,不显示其他选项。 diff --git a/zh/on-call/integration/alert-integration/label-enhancement.mdx b/zh/on-call/integration/alert-integration/label-enhancement.mdx index 520696bb..33e23571 100644 --- a/zh/on-call/integration/alert-integration/label-enhancement.mdx +++ b/zh/on-call/integration/alert-integration/label-enhancement.mdx @@ -12,7 +12,7 @@ keywords: ["标签增强", "自动标签", "数据提取", "字段映射", "告 ## 配置标签增强 -进入 集成中心 → 告警事件,在右侧集成列表中点开你的集成,进入 **标签增强** → **添加标签规则**。 +进入 集成中心 → 告警事件,在右侧集成列表中点开您的集成,进入 **标签增强** → **添加标签规则**。 删除全部规则并保存,即可关闭该集成的标签增强(对告警事件和变更事件均生效)。此时编辑页显示 **暂无标签规则**,点击 **添加标签规则** 可重新配置。 @@ -240,7 +240,7 @@ keywords: ["标签增强", "自动标签", "数据提取", "字段映射", "告 ## 映射数据管理 -每个账户最多可创建 20 个映射表和 50 个映射服务(API),超出限制时创建将失败并提示数量超限。 +每个账户最多可创建 20 个映射表和 50 个映射服务(API),每个映射表默认最多 10000 条数据,超出限制时创建或上传将失败并提示数量超限。 ### 映射表数据管理 diff --git a/zh/on-call/integration/alert-integration/overview.mdx b/zh/on-call/integration/alert-integration/overview.mdx index aa88fe6f..3786953b 100644 --- a/zh/on-call/integration/alert-integration/overview.mdx +++ b/zh/on-call/integration/alert-integration/overview.mdx @@ -42,12 +42,12 @@ Flashduty On-call 通过告警集成接收外部系统推送或拉取的告警 收到事件就说明推送地址已经配好,所以第 2、3 步同时变成已完成,清单从 **已完成 1/5** 起算。清单有三种状态: - **等待第一个事件**:还没收到事件、清单展开时,第 3 步显示 **正在等待… 已等待 mm:ss。**,计时从打开这个页面开始。上游的告警、恢复、测试通知都算,被告警处理丢弃的也算。 -- **已配好,等真实告警**:点第 3 步的 **已配好,等真实告警** 后,清单收成一行 **等待第一个事件**,集成配置重新显示;点 **展开接入清单** 可以重新打开。收起状态按集成记在当前浏览器里,下次打开这条集成仍然收起。 +- **已配好,等真实告警**:点第 3 步的 **已配好,等真实告警** 后,清单收成一行 **等待第一个事件**,集成配置重新显示;点 **展开接入清单** 可以重新打开。 - **已接入**:收到第一个事件后,清单收成一行 **已接入**,留在集成配置上方,后面是 **最新事件** 的时间和还剩几项可选(两个可选步骤都配好时显示 **全部完成**)。点 **展开** 看全部五步,再点 **收起清单** 收回。 第 2 步给出的是这条集成自己的推送地址,复制到上游即可。[标准告警事件](/zh/on-call/integration/alert-integration/alert-sources/standard-alert) 和 [Prometheus Alertmanager](/zh/on-call/integration/alert-integration/alert-sources/prometheus) 集成还在第 3 步提供 **复制 curl 命令**:示例请求已经填好这条集成的推送地址,在上游所在的机器上执行,就能同时验证推送地址和网络是否通,不必等上游真的发出告警。 -接入期间,右侧栏显示这条集成的接入文档。收到第一个事件后,右侧栏换成 **第一条告警**,列出这条事件的时间、严重程度、标题、描述和全部标签,点 **查看接入文档** 切回文档。清单自动刷新:等待第一个事件时每 5 秒查一次,收到事件后每 30 秒更新一次 **最新事件** 时间,不需要手动刷新页面。 +接入期间,右侧栏显示这条集成的接入文档。收到第一个事件后,右侧栏换成 **第一条告警**,列出这条事件的时间、严重程度、标题、描述和全部标签,点 **查看接入文档** 切回文档。清单会自动刷新,无需手动刷新页面。 ## 全部告警集成(按名称排序) diff --git a/zh/on-call/integration/alert-integration/routing-rules.mdx b/zh/on-call/integration/alert-integration/routing-rules.mdx index 8c187e2c..03c3bb58 100644 --- a/zh/on-call/integration/alert-integration/routing-rules.mdx +++ b/zh/on-call/integration/alert-integration/routing-rules.mdx @@ -7,7 +7,7 @@ keywords: ["路由规则", "告警路由", "分发策略", "协作空间", "分 ## 配置路由规则 -进入 集成中心 → 告警事件,在右侧集成列表中点开你的集成,进入 **路由** → **添加路由**。 +进入 集成中心 → 告警事件,在右侧集成列表中点开您的集成,进入 **路由** → **添加路由**。 ### 配置说明 @@ -56,7 +56,7 @@ keywords: ["路由规则", "告警路由", "分发策略", "协作空间", "分 | 筛选规则 | 按协作空间筛选,快速定位投递到某个空间的所有规则,适合规则数量较多的场景 | | 编辑历史 | 查看历史配置版本,对比差异并快速恢复(详见下方说明) | | 路由预览 | 编辑路由规则后,点击预览按钮,选择最多 20 条真实告警,查看修改后的路由匹配结果。系统将展示每条告警在新旧规则下的路由差异,包括新增、移除和不变的协作空间 | -| 复制规则 | 点击复制按钮,从其他集成中复制路由规则到当前集成。支持三种模式:**前置添加**(在现有规则前插入)、**追加**(在现有规则后追加)和 **覆盖**(替换全部现有规则) | +| 复制规则 | 点击复制按钮,把当前集成的路由规则复制到其它集成。在 **选择规则** 中勾选要复制的规则(默认全选),在 **目标集成** 中选择一个或多个您有编辑权限的集成,再选复制模式:**插入到现有规则后**(默认)、**插入到现有规则前**、**替换所有规则**。目标集成的默认路由不变 | ### 编辑历史 diff --git a/zh/on-call/integration/instant-messaging/lark.mdx b/zh/on-call/integration/instant-messaging/lark.mdx index 8c818307..d8511cec 100644 --- a/zh/on-call/integration/instant-messaging/lark.mdx +++ b/zh/on-call/integration/instant-messaging/lark.mdx @@ -20,7 +20,7 @@ keywords: ["飞书", "Lark", "即时消息", "告警通知", "IM集成"] | 接入方式 | 适用场景 | 需要做什么 | | :--- | :--- | :--- | -| **创建新应用(推荐)** | 大多数情况。Flashduty 在你的飞书企业里创建应用并完成全部配置,不需要打开飞书开发者后台 | 用飞书扫码确认,飞书管理员审批两次 | +| **创建新应用(推荐)** | 大多数情况。Flashduty 在您的飞书企业里创建应用并完成全部配置,不需要打开飞书开发者后台 | 用飞书扫码确认,飞书管理员审批两次 | | **使用已有应用** | 企业里已经有这个应用(例如同事先建过),或想继续用原来的应用 | 用应用所有者或协作者的飞书账号扫码授权,飞书管理员审批 | | **手动填写凭证** | 飞书私有化部署、Lark 国际版,或不愿把应用交给 Flashduty 托管 | 在 Flashduty 填凭证,再在飞书开发者后台逐项配置 | @@ -32,7 +32,7 @@ keywords: ["飞书", "Lark", "即时消息", "告警通知", "IM集成"] 2. 用飞书扫一扫确认:飞书确认页会列出要申请的权限,点 **创建** 即可。确认之前 Flashduty 不保存任何记录。 -3. 扫码确认后,Flashduty 在你的飞书企业里创建应用(默认名称 Flashduty),并提交第一次审批。应用要收发消息、读群消息,飞书规定由企业管理员审核通过后才能使用。 +3. 扫码确认后,Flashduty 在您的飞书企业里创建应用(默认名称 Flashduty),并提交第一次审批。应用要收发消息、读群消息,飞书规定由企业管理员审核通过后才能使用。 4. 第一次审批通过后,Flashduty 自动完成全部配置:生成事件与回调加密策略用的 `Encrypt Key` 和 `Verification Token`;添加网页端和移动端的登录重定向 URL;把可用范围设为全部成员(仅首次配置时设置,后续版本保留管理员改过的范围);补齐已开启功能需要的权限,以及 `application:application:self_manage`、`application:application:patch` 两项自管理权限(让 Flashduty 之后能自己更新配置、发布版本,不用再扫码);把事件和回调都指向 Flashduty 的请求地址(事件 `im.message.receive_v1`,回调 `card.action.trigger`);开启 **网页应用** 与 **机器人** 能力,工作台默认打开 Flashduty 网页应用。配置完发布一个新版本,等管理员审批配置版本。 diff --git a/zh/on-call/integration/instant-messaging/slack.mdx b/zh/on-call/integration/instant-messaging/slack.mdx index 83a4aef0..1cb903be 100644 --- a/zh/on-call/integration/instant-messaging/slack.mdx +++ b/zh/on-call/integration/instant-messaging/slack.mdx @@ -82,9 +82,8 @@ Slack 的接入以**工作区**为单位:完成 [安装应用](#install-app) | `reactions:read` | 读取消息表情反应,用于 AI SRE 处理状态确认 | | `reactions:write` | 添加或删除消息表情反应,用于 AI SRE 处理状态确认 | | `files:write` | 上传文件,用于发送复盘报告等附件 | -| `files:read` | 下载用户上传的私有文件;AI SRE 读取 Slack 会话中上传的文件、图片等附件需要该权限 | -控制台的**缺少必要权限**检查只覆盖上表中除 `files:read` 外的 scope。检查通过,不代表已授予 `files:read`。如果 AI SRE 无法读取会话中上传的文件或图片,请确认 Slack 应用已授予 `files:read`。 +OAuth 授权请求不包含 `files:read`,控制台的**缺少必要权限**检查也不检查它。AI SRE 要读取 Slack 会话中上传的文件和图片,需要您在 Slack 应用后台的 OAuth & Permissions 中为 Bot Token 添加 `files:read` 并重新安装应用;重新授权不会补上这一项。 **允许 AI 主动接话** 依赖应用能读到没有被 @ 的频道消息:公开频道靠 `channels:history`,私有频道靠 `groups:history`。在 AI 主动接话上线之前完成授权的 Slack 应用没有这两项权限,频道里的非 @ 消息不会送到 Flashduty,AI 也就无从接话。集成详情页顶部会提示「我们更新了 Slack 应用,请重新授权。」并给出 **重新授权** 按钮,点它重新走一次 Slack 授权即可,已有的集成配置和用户关联不受影响。 diff --git a/zh/on-call/integration/instant-messaging/wecom.mdx b/zh/on-call/integration/instant-messaging/wecom.mdx index 3033d91c..ffbdb931 100644 --- a/zh/on-call/integration/instant-messaging/wecom.mdx +++ b/zh/on-call/integration/instant-messaging/wecom.mdx @@ -77,7 +77,6 @@ Flashduty 作为企业微信服务商,为您提供 Flashduty 应用的长期 - **企业 ID** 变为只读,并提示「已通过企业微信确认,不能修改」。换企业只能重新扫码,没有直接改 ID 的入口。 - 绑定会话 30 分钟内有效,且只能用一次。过期后窗口提示「链接已过期,请重新生成」,点 **重新生成** 后重新扫码。 - 绑定失败时窗口给出原因:`该企业还没有安装 Flashduty 应用,请关闭后改选「还没有安装」,先完成授权安装。`(企业其实没装应用,却选了「已安装」)、`已在企业微信页面上取消绑定。`(在确认页点了取消)、`企业微信没有完成确认,请重新生成后再试。`(其他情况)。 -- 只在表单里提交企业 ID 不再生效:没有经过确认的绑定会话,通过 API 提交时,保存会提示 `scan with WeCom to bind your enterprise first`;控制台的流程不会出现这条提示。 @@ -105,7 +104,7 @@ Flashduty 作为企业微信服务商,为您提供 Flashduty 应用的长期 **访问域名** 只填一个域名:不带 `https://`、不带路径,由 Flashduty 托管时也不带端口,例如 `flashduty.example.com`。 - 保存后在详情页第 1 步接入这个域名:添加 CNAME 记录由 Flashduty 签发证书并转发,或用你们自己的 Nginx 转发。企业微信要求可信域名和回调地址都使用这个域名。 + 保存后在详情页第 1 步接入这个域名:添加 CNAME 记录由 Flashduty 签发证书并转发,或用您自己的 Nginx 转发。企业微信要求可信域名和回调地址都使用这个域名。 私有化部署没有托管这一步:访问域名就是贵司 Flashduty 的访问域名,企业微信要能从公网访问它。 @@ -131,7 +130,7 @@ Flashduty 作为企业微信服务商,为您提供 Flashduty 应用的长期 访问域名有两种接入方式,选一种即可: - **CNAME 托管(推荐)**:在 DNS 服务商添加 CNAME 记录,Flashduty 签发证书并转发,不用自己维护服务器。 -- **自己转发**:用你们自己的 Nginx 或负载均衡配证书,把这个域名的请求全部转发到 Flashduty。域名已被占用、不能托管时只能用这种方式。 +- **自己转发**:用您自己的 Nginx 或负载均衡配证书,把这个域名的请求全部转发到 Flashduty。域名已被占用、不能托管时只能用这种方式。 详情页第 1 步默认选中 CNAME 托管;检测到自己转发已连通时会自动选中自己转发。 @@ -145,14 +144,14 @@ Flashduty 作为企业微信服务商,为您提供 Flashduty 应用的长期 | 大陆访问入口 | CNAME | `<访问域名>` | `cn.wecom.flashduty.com` | | 国际访问入口 | CNAME | `<访问域名>` | `wecom.flashduty.com` | -记录值以页面显示的为准。**证书托管** 这条用来证明域名归你们所有,Flashduty 据此通过 DNS-01 方式签发 HTTPS 证书;**访问入口** 这两条把访问转到 Flashduty,配其中一条即可。 +记录值以页面显示的为准。**证书托管** 这条用来证明域名归您所有,Flashduty 据此通过 DNS-01 方式签发 HTTPS 证书;**访问入口** 这两条把访问转到 Flashduty,配其中一条即可。 入口选哪个:默认用国际访问入口 `wecom.flashduty.com`(香港),任何域名都能用;域名已在阿里云完成接入备案的,可以改用大陆访问入口 `cn.wecom.flashduty.com`,国内访问更快;DNS 服务商支持按地区解析的,两个都配。没在阿里云接入备案的域名指向大陆入口会被阿里云拦截。 记录生效且证书签发后,第 1 步自动打勾,显示「已生效 · 证书已签发」。有记录没生效时显示「N 条记录未生效」,记录都已生效但证书还在签发时显示「证书签发中」;可以点 **重新检测** 重新读一次。 -这个域名如果已被某个状态页或另一个 Flashduty 账户占用,Flashduty 不能为这个集成托管它,第 1 步会显示「域名已被占用」,并直接给出自己转发的配置。不想自己转发就编辑集成换一个访问域名;域名确实属于你们的,联系 Flashduty 支持。 +这个域名如果已被某个状态页或另一个 Flashduty 账户占用,Flashduty 不能为这个集成托管它,第 1 步会显示「域名已被占用」,并直接给出自己转发的配置。不想自己转发就编辑集成换一个访问域名;域名确实属于您的,联系 Flashduty 支持。 #### 自己转发 @@ -160,7 +159,7 @@ Flashduty 作为企业微信服务商,为您提供 Flashduty 应用的长期 自己转发的要求: - 证书由受信任的 CA 签发。 -- 这个域名下的**所有路径**都转发到 `wecom.flashduty.com`,保留原来的 `Host` 头。Flashduty 按 `Host` 识别是哪个集成;以后 Flashduty 新增或调整路径时,你们的配置不用改。 +- 这个域名下的**所有路径**都转发到 `wecom.flashduty.com`,保留原来的 `Host` 头。Flashduty 按 `Host` 识别是哪个集成;以后 Flashduty 新增或调整路径时,您的配置不用改。 - http 和 https 都要转发,不能跳转:企业微信会用 http 取域名校验文件。 - 域名已在阿里云完成接入备案的,可以改为转发到 `cn.wecom.flashduty.com`,国内访问更快。 diff --git a/zh/on-call/post-mortem/create-edit-post-mortem.mdx b/zh/on-call/post-mortem/create-edit-post-mortem.mdx index 97f01df7..37353f07 100644 --- a/zh/on-call/post-mortem/create-edit-post-mortem.mdx +++ b/zh/on-call/post-mortem/create-edit-post-mortem.mdx @@ -12,7 +12,7 @@ keywords: ["创建复盘", "编辑复盘", "协作编辑", "发布复盘", "删 -在故障列表或故障详情页中,选择需要复盘的故障。 +打开已关闭故障的详情页,切换到 **故障复盘** 页签。 @@ -20,7 +20,7 @@ keywords: ["创建复盘", "编辑复盘", "协作编辑", "发布复盘", "删 -点击“创建复盘报告”,系统会自动从故障中提取严重程度、处理时间、响应人员等信息,生成一份草稿状态的报告,并跳转到编辑器页面。 +点击“创建复盘报告”,系统会自动从故障中提取严重程度、处理时间、响应人员等信息,生成一份编辑中状态的报告,并跳转到编辑器页面。 @@ -56,35 +56,27 @@ keywords: ["创建复盘", "编辑复盘", "协作编辑", "发布复盘", "删 ### 基本信息 -基本信息面板展示了这次故障的关键指标,您可以根据实际情况调整: +报告右侧的 **报告信息** 面板展示状态、编辑人、创建时间、更新时间、协作空间、所属团队和访问级别,均为只读,协作空间、所属团队和访问级别继承自关联故障。关联故障卡片展示严重程度、处理阶段、故障状态时间线和处理人员。 -| 字段 | 说明 | -| :--- | :--- | -| 最高严重程度 | 这次故障最严重到什么程度 | -| 最早开始时间 | 故障最早触发的时间 | -| 最晚关闭时间 | 故障最晚关闭的时间 | -| 总持续时间 | 所有关联故障的持续时间之和 | -| 响应人员 | 参与故障处理的人员 | - -### 待办事项 +### 跟进项 -待办事项用来记录后续的改进行动,比如“优化数据库连接池配置”或“增加缓存熔断机制”,与故障详情中的[跟进项](/zh/on-call/incident/work-items)是同一批条目。待办事项在草稿和已发布状态下都可以随时编辑更新。 +跟进项用来记录后续的改进行动,比如“优化数据库连接池配置”或“增加缓存熔断机制”,与故障详情中的[跟进项](/zh/on-call/incident/work-items)是同一批条目。跟进项在编辑中和已发布状态下都可以随时编辑更新;故障处理中,跟进项暂不可编辑,故障关闭后自动解锁。 -为待办事项添加 **负责人** 时,系统会向该成员发送一条个人通知,提醒其跟进处理;移除负责人则不会发送通知。 +为跟进项添加 **负责人** 时,系统会向该成员发送一条个人通知,提醒其跟进处理;移除负责人则不会发送通知。 ## 发布与管理 ### 发布报告 -当团队确认内容无误后,点击“发布”按钮将报告状态从草稿切换为已发布。 +当团队确认内容无误后,点击“发布”按钮将报告状态从编辑中切换为已发布。 -发布不是编写的终点。如果后续有新的发现或需要修正,切回草稿修改后重新发布即可。 +发布不是编写的终点。如果后续有新的发现或需要修正,点击 **重新编辑** 修改后重新发布即可。 ### 查找报告 -在复盘报告列表中,您可以按状态、团队、协作空间和创建时间范围来筛选报告,支持按创建时间或更新时间排序。 +在复盘报告列表中,您可以按时间范围、报告状态、团队和协作空间来筛选报告。 ### 删除报告 diff --git a/zh/on-call/post-mortem/manage-templates.mdx b/zh/on-call/post-mortem/manage-templates.mdx index 3bbcb25b..500ffe4c 100644 --- a/zh/on-call/post-mortem/manage-templates.mdx +++ b/zh/on-call/post-mortem/manage-templates.mdx @@ -16,7 +16,7 @@ keywords: ["复盘模板", "模板管理", "自定义模板", "内置模板", " | 模板 | 语言 | 包含章节 | | :--- | :--- | :--- | -| 默认故障复盘报告模板 | 中文 | 综述、根因分析、影响范围、处理时间线、改进措施、经验教训 | +| 默认故障复盘报告模板 | 中文 | 综述、时间线、影响范围、促成因素、根本原因、缓解措施、经验教训 | | Default Post Mortem Report Template | 英文 | Summary, Root Cause, Impact, Timeline, Corrective Actions, Lessons Learned | 这两个模板覆盖了故障复盘中最常见的章节,适用于大多数场景。如果您的团队有特殊需求,可以在此基础上创建自定义模板。 @@ -31,7 +31,7 @@ keywords: ["复盘模板", "模板管理", "自定义模板", "内置模板", " -在复盘报告页面,点击"模板管理"。 +在故障复盘页面,点击右上角 **复盘模板**,再点击 **创建**。 @@ -39,8 +39,7 @@ keywords: ["复盘模板", "模板管理", "自定义模板", "内置模板", " | 字段 | 必填 | 说明 | | :--- | :---: | :--- | | 模板名称 | 是 | 起一个一目了然的名字,比如"支付业务线复盘模板" | -| 模板描述 | 否 | 简要说明这个模板适用于什么场景 | -| 所属团队 | 是 | 选择负责维护此模板的团队 | +| 管理团队 | 是 | 选择负责维护此模板的团队 | | 模板内容 | 是 | 在编辑器中定义章节结构 | @@ -59,7 +58,7 @@ keywords: ["复盘模板", "模板管理", "自定义模板", "内置模板", " ## 编辑和删除模板 -在模板列表中点击自定义模板即可编辑名称、描述、所属团队和内容。不再需要的模板可以删除。 +在模板列表中点击自定义模板即可编辑名称、管理团队和内容。不再需要的模板可以删除。 删除模板不会影响已经使用该模板创建的复盘报告。 diff --git a/zh/on-call/post-mortem/what-is-post-mortem.mdx b/zh/on-call/post-mortem/what-is-post-mortem.mdx index 5f463e00..d7ef9577 100644 --- a/zh/on-call/post-mortem/what-is-post-mortem.mdx +++ b/zh/on-call/post-mortem/what-is-post-mortem.mdx @@ -17,9 +17,9 @@ Flashduty 将故障复盘融入了故障处理流程——从故障详情页一 一份典型的复盘报告包含以下内容: - **关联故障**:这份报告是针对哪个故障写的 -- **基本信息**:严重程度、故障时间范围、持续时长、响应人员 -- **报告正文**:按照模板章节组织的详细分析,通常包括综述、根因分析、影响范围、处理时间线、改进措施和经验教训 -- **待办事项**:后续需要落实的改进行动 +- **基本信息**:关联故障的严重程度、处理阶段、处理人员 +- **报告正文**:按照模板章节组织的详细分析,通常包括综述、时间线、影响范围、促成因素、根本原因、缓解措施和经验教训 +- **跟进项**:后续需要落实的改进行动 - **作者列表**:所有参与编写的人员 ### 报告状态 @@ -28,11 +28,11 @@ Flashduty 将故障复盘融入了故障处理流程——从故障详情页一 | 状态 | 含义 | | :--- | :--- | -| **草稿** | 报告还在编写中,团队可以随时修改 | +| **编辑中** | 报告还在编写中,团队可以随时修改 | | **已发布** | 报告已定稿,可供团队查阅和归档 | -状态可以随时来回切换。即使发布后发现需要补充内容,切回草稿修改后重新发布即可。 +状态可以随时来回切换。即使发布后发现需要补充内容,点击 **重新编辑** 修改后重新发布即可。 ### 归属关系 diff --git a/zh/on-call/quickstart/faq.mdx b/zh/on-call/quickstart/faq.mdx index 8d951a0e..f5d1875e 100644 --- a/zh/on-call/quickstart/faq.mdx +++ b/zh/on-call/quickstart/faq.mdx @@ -175,8 +175,8 @@ keywords: ["常见问题", "FAQ", "On-call", "故障排查", "使用帮助"] **SLA 承诺**: - - **功能可用**:核心功能 99.95% 的时间可用 - - **投递时效**:99.95% 的告警在触发后 5 分钟内完成投递 + - **功能可用**:核心功能 99.9% 的时间可用 + - **投递时效**:99.9% 的告警在触发后 5 分钟内完成投递 **如何保证**: diff --git a/zh/on-call/quickstart/mobile-app.mdx b/zh/on-call/quickstart/mobile-app.mdx index a3082b0d..7e7e831a 100644 --- a/zh/on-call/quickstart/mobile-app.mdx +++ b/zh/on-call/quickstart/mobile-app.mdx @@ -57,7 +57,7 @@ App 首页即故障列表,分为 **分派给我**(带故障数量角标) ### 故障详情与操作 -点击故障进入详情页,包含 **故障详情**(标题、严重程度、描述、标签、自定义字段、关联告警、作战室入口等)和 **时间线**(处理过程与评论记录)两个页签,页面底部提供常驻操作: +点击故障进入详情页,包含 **概览**(标题、严重程度、描述、标签、自定义字段、作战室入口等)、**动态**(处理过程与评论记录)和 **告警**(有关联告警时显示,带数量角标)三个页签,页面底部提供常驻操作: | 操作 | 说明 | | --- | --- | diff --git a/zh/on-call/statuspage/comparison.mdx b/zh/on-call/statuspage/comparison.mdx index 33353a70..e2c8ef48 100644 --- a/zh/on-call/statuspage/comparison.mdx +++ b/zh/on-call/statuspage/comparison.mdx @@ -136,7 +136,7 @@ Atlassian Statuspage 作为独立产品收费,价格随订阅者、组件、 ## Flashduty 状态页的可靠性 -Flashduty 状态页的功能可用性 SLA 为 **99.9%**,未达标时按[服务等级协议(SLA)](/zh/compliance/service-sla)赔偿。 +付费版 Flashduty 服务的核心功能可用性与告警投递时效适用[服务等级协议(SLA)](/zh/compliance/service-sla),免费版和私有化部署不适用。 --- diff --git a/zh/on-call/statuspage/components-sections.mdx b/zh/on-call/statuspage/components-sections.mdx index 023d1e89..126a50ae 100644 --- a/zh/on-call/statuspage/components-sections.mdx +++ b/zh/on-call/statuspage/components-sections.mdx @@ -11,22 +11,20 @@ description: "了解如何在状态页中创建和管理服务组件与分组, ### 创建组件 -在状态页的 **组件管理** 中添加新组件,填写以下字段: +在状态页 **设置 → 组件和分组** 中点击 **添加组件**,填写以下字段: | 字段 | 必填 | 说明 | | --- | --- | --- | | **名称** | 是 | 组件的显示名称,在同一状态页内不能重复 | | **描述** | 否 | 组件的简要说明 | -| **分组** | 否 | 将组件归入指定分组 | -| **排序** | 否 | 控制组件在状态页中的显示顺序 | -新创建的组件从创建时刻开始计算可用性。 +拖动组件调整显示顺序,把组件拖进分组即可归组。新创建的组件从创建时刻开始计算可用性。 ### 编辑组件 -您可以随时修改组件的名称、描述、分组归属和排序。修改名称时需确保在同一状态页内不与其他组件重名。 +您可以随时修改组件的名称和描述,或通过拖动调整分组归属和排序。修改名称时需确保在同一状态页内不与其他组件重名。 ### 删除组件 @@ -38,8 +36,8 @@ description: "了解如何在状态页中创建和管理服务组件与分组, | 选项 | 效果 | | --- | --- | -| **隐藏可用性** | 组件在状态页上正常展示,但不显示可用性统计数据 | -| **完全隐藏** | 组件不在状态页上展示,也不参与可用性统计 | +| **隐藏历史数据**(隐藏可用性) | 组件在状态页上正常展示,但不显示可用性统计数据 | +| **隐藏组件**(完全隐藏) | 组件不在状态页上展示,也不参与可用性统计 | 如果您有仅供内部参考的服务组件,不希望在状态页上暴露给访客,可以使用"完全隐藏"选项。隐藏后,该组件仍然可以在事件中被关联。 @@ -53,17 +51,16 @@ description: "了解如何在状态页中创建和管理服务组件与分组, ### 创建分组 -在状态页的 **分组管理** 中添加新分组,填写以下字段: +在状态页 **设置 → 组件和分组** 中点击 **添加分组**,填写以下字段: | 字段 | 必填 | 说明 | | --- | --- | --- | | **名称** | 是 | 分组的显示名称,在同一状态页内不能重复 | | **描述** | 否 | 分组的简要说明 | -| **排序** | 否 | 控制分组在状态页中的显示顺序 | ### 编辑分组 -您可以随时修改分组的名称、描述和排序。 +您可以随时修改分组的名称和描述,拖动分组可调整显示顺序。 ### 删除分组 @@ -75,8 +72,8 @@ description: "了解如何在状态页中创建和管理服务组件与分组, | 选项 | 效果 | | --- | --- | -| **隐藏可用性** | 分组在状态页上正常展示,但不显示该分组的可用性统计数据 | -| **完全隐藏** | 分组及其下的所有组件不在状态页上展示,也不参与可用性统计 | +| **隐藏历史数据**(隐藏可用性) | 分组在状态页上正常展示,但不显示该分组的可用性统计数据 | +| **隐藏分组**(完全隐藏) | 分组及其下的所有组件不在状态页上展示,也不参与可用性统计 | 将分组设为"完全隐藏"会同时隐藏其下的所有组件,即使这些组件自身未被设为隐藏。 diff --git a/zh/on-call/statuspage/create-manage-page.mdx b/zh/on-call/statuspage/create-manage-page.mdx index 48f1dc75..001c444c 100644 --- a/zh/on-call/statuspage/create-manage-page.mdx +++ b/zh/on-call/statuspage/create-manage-page.mdx @@ -11,16 +11,16 @@ description: "了解如何配置状态页的品牌、自定义域名、显示设 ## 基础信息 -您可以随时编辑状态页名称、URL 标识和基础说明。状态页名称通常使用公司名、产品名或服务名,方便访客识别当前页面代表的服务范围。 +您可以在 **设置 → 基础配置** 中随时编辑页面标题和状态页 URL。页面标题通常使用公司名、产品名或服务名,方便访客识别当前页面代表的服务范围。 -### URL 标识 +### 状态页 URL -URL 标识是状态页访问地址中的唯一路径段。创建后可以修改,但同一账户内同类型状态页的 URL 标识不能重复。 +状态页 URL 是状态页访问地址中的唯一路径段。创建后可以修改,但同一账户内同类型状态页的 URL 不能重复。 -系统会将名称自动转换为 URL 安全格式(小写化、非字母数字字符替换为连字符)。您也可以手动指定。 +系统会将页面标题自动转换为 URL 安全格式(小写化、非字母数字字符替换为连字符)。您也可以手动指定。 -修改 URL 标识后,原访问地址将失效。正式对外发布的状态页建议提前规划 URL 标识,避免后续变更影响外部链接。 +修改状态页 URL 后,原访问地址将失效。正式对外发布的状态页建议提前规划状态页 URL,避免后续变更影响外部链接。 --- @@ -51,7 +51,7 @@ URL 标识是状态页访问地址中的唯一路径段。创建后可以修改 ## 自定义域名 -默认情况下,状态页通过 Flashduty 提供的子域名访问。如果您希望使用自有域名(如 `status.yourcompany.com`),可以配置自定义域名。 +默认情况下,状态页通过 Flashduty 提供的子域名访问。如果您希望使用自有域名(如 `status.yourcompany.com`),可以配置自定义域名。自定义域名仅适用于**公开状态页**,内部状态页的基础配置页不提供该选项。 @@ -121,6 +121,6 @@ URL 标识是状态页访问地址中的唯一路径段。创建后可以修改 ## 编辑与删除 -您可以随时编辑状态页的名称、URL 标识、外观设置和显示配置。 +您可以随时编辑状态页的页面标题、状态页 URL、外观设置和显示配置。 删除状态页将同时清除其下的关联数据,此操作不可恢复。 diff --git a/zh/on-call/statuspage/get-started.mdx b/zh/on-call/statuspage/get-started.mdx index 1e24ae0f..628bfe5e 100644 --- a/zh/on-call/statuspage/get-started.mdx +++ b/zh/on-call/statuspage/get-started.mdx @@ -25,15 +25,11 @@ keywords: ["状态页接入", "状态页入门", "Atlassian Statuspage 迁移", ## 从零创建状态页 -从零创建只需要先建立一个状态页实体,并确认页面名称、访问标识和页面类型。创建后的品牌、域名、组件、订阅和事件发布配置,请在后续文档中完成。 +从零创建只需要先建立一个状态页实体,并确认页面标题、访问地址和页面类型。创建后的品牌、域名、组件、订阅和事件发布配置,请在后续文档中完成。 - - 选择创建**公开状态页**或**内部状态页**。公开状态页面向客户、合作伙伴和外部访客;内部状态页面向组织成员,需要登录 Flashduty 后访问。 - - - - 登录 [Flashduty 控制台](https://console.flashcat.cloud),在左侧导航进入 **On-call → 状态页面**,点击 **创建状态页**。 + + 登录 [Flashduty 控制台](https://console.flashcat.cloud),在左侧导航进入 **On-call → 状态页面**,点击 **创建公开页面** 或 **创建内部页面**。公开状态页面向客户、合作伙伴和外部访客;内部状态页面向组织成员,需要登录 Flashduty 后访问。 @@ -41,13 +37,13 @@ keywords: ["状态页接入", "状态页入门", "Atlassian Statuspage 迁移", | 字段 | 说明 | | --- | --- | - | **名称** | 状态页的显示名称,通常使用公司名、产品名或服务名 | - | **URL 标识** | 用于生成状态页访问地址的唯一标识,仅允许小写字母、数字、连字符和下划线 | - | **类型** | 选择 **公开** 或 **内部** | + | **页面标题** | 显示在状态页顶部,通常使用公司名、产品名或服务名;未配置 Logo 时作为替代显示 | + | **状态页 URL** | 访问地址中的唯一标识,仅允许小写字母、数字、连字符和下划线 | + | **组件和分组** | 可选,创建时直接添加初始组件和分组 | - 点击 **确认** 完成创建。页面创建后,再按实际需要配置基础信息、组件、订阅、模板和事件发布流程。 + 点击 **创建** 完成创建。页面创建后,再按实际需要配置基础信息、组件、订阅、模板和事件发布流程。 diff --git a/zh/on-call/statuspage/subscriptions.mdx b/zh/on-call/statuspage/subscriptions.mdx index 3333e8b3..a858cf1c 100644 --- a/zh/on-call/statuspage/subscriptions.mdx +++ b/zh/on-call/statuspage/subscriptions.mdx @@ -112,7 +112,7 @@ Feed 仅对**公开状态页**开放。对内部状态页或不存在的状态 **版本要求**:批量导入订阅者需要 Flashduty **专业版**。 -管理员可以批量导入订阅者,适用于迁移场景或需要为特定用户群体预先设置订阅的情况。导入时需提供: +管理员可以批量导入订阅者,适用于迁移场景或需要为特定用户群体预先设置订阅的情况。控制台没有导入入口,请调用 API 导入(见[批量导入订阅者 API](/zh/api-reference/on-call/status-pages/status-page-subscriber-import))。导入时需提供: | 字段 | 说明 | | --- | --- | @@ -130,7 +130,7 @@ Feed 仅对**公开状态页**开放。对内部状态页或不存在的状态 **版本要求**:导出订阅者需要 Flashduty **标准版**及以上。 -管理员可以导出订阅者列表,包括每位订阅者的接收地址、订阅方式、订阅的组件等信息。 +管理员可以在**订阅者列表**中点击 **导出 CSV**,导出包括每位订阅者的接收地址、订阅方式、订阅的组件等信息。 --- diff --git a/zh/on-call/statuspage/templates.mdx b/zh/on-call/statuspage/templates.mdx index 0cec4341..21bd6e7f 100644 --- a/zh/on-call/statuspage/templates.mdx +++ b/zh/on-call/statuspage/templates.mdx @@ -15,10 +15,9 @@ description: "了解如何使用完整状态更新和状态描述模板快速发 | 字段 | 说明 | | --- | --- | -| **标题** | 事件的标题 | -| **类型** | 事件类型,故障(Incident)或维护(Maintenance) | -| **状态** | 事件的初始状态 | -| **描述** | 事件的详细说明 | +| **模板名称** | 模板的名称 | +| **故障状态** / **维护状态** | 事件的初始状态;模板属于故障还是维护,取决于在 **故障模板** 或 **维护模板** 分组下创建 | +| **更新消息** | 事件的详细说明 | ### 使用场景 @@ -31,13 +30,13 @@ description: "了解如何使用完整状态更新和状态描述模板快速发 - 在状态页设置的 **事件模板** 页签中,选择 **完整状态更新**,点击 **创建模板**,填写标题、类型、状态和描述。 + 在状态页设置的 **事件模板** 页签中,选择 **完整状态更新**,在 **故障模板** 或 **维护模板** 分组下点击 **创建模板**,填写模板名称、状态和更新消息。 在发布事件时,选择一个完整状态更新模板。系统会自动填充模板中的字段,您可以在此基础上进行调整。 - 您可以随时修改模板的标题、描述和状态,或删除不再使用的模板。 + 您可以随时修改模板的名称、状态和更新消息,或删除不再使用的模板。 @@ -47,13 +46,7 @@ description: "了解如何使用完整状态更新和状态描述模板快速发 状态描述(Message Template)用于在事件的不同状态阶段预设更新消息。与完整状态更新关注"事件初始化"不同,状态描述关注的是"事件推进过程中的通知措辞"。 -每个状态描述模板包含以下字段: - -| 字段 | 说明 | -| --- | --- | -| **标题** | 模板名称 | -| **类型** | 事件类型,故障(Incident)或维护(Maintenance) | -| **消息** | 针对每个事件状态预设的更新文本 | +页面固定提供 **故障模板** 和 **维护模板** 两个状态描述模板,每个模板为各事件状态预设一段更新文本。 ### 消息映射 @@ -84,15 +77,12 @@ description: "了解如何使用完整状态更新和状态描述模板快速发 ### 管理状态描述模板 - - 在状态页设置的 **事件模板** 页签中,选择 **状态描述**,点击 **创建模板**,填写标题、类型和各状态对应的消息内容。 + + 在状态页设置的 **事件模板** 页签中,选择 **状态描述**,点击 **故障模板** 或 **维护模板** 卡片上的 **编辑模板**,为每个状态填写更新消息后点击 **保存**。这两个模板只能编辑,不能新建或删除。 在添加事件时间线更新时,选择一个状态描述模板。系统会根据当前的事件状态自动填充对应的消息文本。 - - 您可以随时更新模板的标题、类型和消息内容,或删除不再使用的模板。 - --- diff --git a/zh/on-call/statuspage/widgets.mdx b/zh/on-call/statuspage/widgets.mdx index fecdfb27..c58cdcc9 100644 --- a/zh/on-call/statuspage/widgets.mdx +++ b/zh/on-call/statuspage/widgets.mdx @@ -1,6 +1,6 @@ --- title: "嵌入组件(Widget)" -description: "将状态页的实时状态以状态徽标或事件横幅嵌入你的网站,或通过公开 JSON 接口自行集成" +description: "将状态页的实时状态以状态徽标或事件横幅嵌入您的网站,或通过公开 JSON 接口自行集成" --- Flashduty 状态页提供**嵌入组件(Widget)**:一段可以直接粘贴到任意网站 HTML 中的代码,把状态页的实时状态展示在您的官网、帮助中心或内部系统里。Widget 以 Web Component 形式运行(``),样式与宿主页面隔离,不会相互影响。 @@ -10,7 +10,7 @@ Flashduty 状态页提供**嵌入组件(Widget)**:一段可以直接粘贴 -Widget 功能默认开启,您无需任何配置即可使用。私有化部署环境中,部署管理员可通过 `deploy.widgetEnabled` 开关整体关闭该功能(关闭后接口返回 404)。 +Widget 功能默认开启,无需额外配置。 ## 两种形态 diff --git a/zh/openapi/api-catalog.mdx b/zh/openapi/api-catalog.mdx index fdc974ea..5c16f27b 100644 --- a/zh/openapi/api-catalog.mdx +++ b/zh/openapi/api-catalog.mdx @@ -6,7 +6,7 @@ description: "Flashduty Open API 接口完整列表,按产品模块组织并 Flashduty Open API 提供 **392** 个接口,覆盖 On-call、Monitors、RUM、AI SRE 和平台五个主要模块。所有接口使用统一认证方式和请求规范。详情参见[快速开始](/zh/openapi/introduction)。 -所有接口 URL 均以 `https://api.flashcat.cloud` 为 base,通过 query string 中的 APP Key 认证。 +所有接口 URL 均以 `https://api.flashcat.cloud` 为 base,用 APP Key 认证(query 参数 `app_key` 或请求头 `Fd-App-Key`,见[快速入门](/zh/openapi/introduction#传递-app-key))。 diff --git a/zh/platform/audit-log.mdx b/zh/platform/audit-log.mdx index 60ba73da..dc9ad347 100644 --- a/zh/platform/audit-log.mdx +++ b/zh/platform/audit-log.mdx @@ -28,7 +28,7 @@ keywords: ["审计日志", "操作审计", "安全合规", "操作记录"] | 筛选条件 | 说明 | | --- | --- | -| **时间范围** | 选择查询的时间区间,默认展示最近 7 天的日志,最大可查询最近 30 天 | +| **时间范围** | 默认展示最近 7 天;可选最近 7 / 30 / 90 天或自定义区间,单次查询跨度最长 90 天,实际可查范围受订阅版本的保留时长限制 | | **用户** | 按操作人筛选,支持搜索成员名称或邮箱 | | **事件** | 按事件类型筛选,支持多选和关键词搜索 | | **事件 ID** | 输入事件 ID 精确匹配特定操作记录 | @@ -43,7 +43,7 @@ keywords: ["审计日志", "操作审计", "安全合规", "操作记录"] 审计日志每页展示 10 条记录,通过页面底部的翻页按钮浏览更多记录。页面底部会显示当前页码和总页数。 -审计日志最多保留 30 天,超过 30 天的日志将被自动清理。 +审计日志的保留时长取决于订阅版本,超出的日志将被自动清理,具体时长见[产品定价](/zh/platform/pricing#资源限制)。 ## 常见问题 diff --git a/zh/platform/configure-sso.mdx b/zh/platform/configure-sso.mdx index 0cb5b0f3..56958611 100644 --- a/zh/platform/configure-sso.mdx +++ b/zh/platform/configure-sso.mdx @@ -273,18 +273,18 @@ This account requires SSO login. Password/code login is disabled. 3. 若身份提供商配置可能临时不可用,请先关闭该选项,待修复后再启用。 -### 与「禁止编辑外部成员」的区别 +### 与「禁用 SSO 成员编辑功能」的区别 -`force_sso` 控制**登录方式**,即是否允许密码或验证码登录。`sso_user_non_editable`([禁止编辑外部成员](#外部成员管理))控制**编辑权限**,即能否在控制台中修改 SSO 外部成员的资料与角色。两者作用层面不同,可独立开启或关闭。 +`force_sso` 控制**登录方式**,即是否允许密码或验证码登录。`sso_user_non_editable`([禁用 SSO 成员编辑功能](#外部成员管理))控制**编辑权限**,即能否在控制台中修改 SSO 外部成员的资料与角色。两者作用层面不同,可独立开启或关闭。 ## 外部成员管理 -当您启用单点登录后,通过 SSO 首次登录并自动创建的成员会被标记为**外部成员**。您可以在 SSO 设置中开启**禁止编辑外部成员**(默认关闭)。开启后,外部成员在 Flashduty 中为只读:不能修改外部成员的角色,也不能删除外部成员,成员信息只能在身份提供商中管理。 +当您启用单点登录后,通过 SSO 首次登录并自动创建的成员会被标记为**外部成员**。您可以在 SSO 设置中开启**禁用 SSO 成员编辑功能**(默认关闭)。开启后,外部成员在 Flashduty 中为只读:不能修改外部成员的角色,也不能删除外部成员,成员信息只能在身份提供商中管理。 -**禁止编辑外部成员** 适用于在身份提供商中统一管理用户权限的场景,可以让 Flashduty 中的成员信息与身份提供商保持一致。 +**禁用 SSO 成员编辑功能** 适用于在身份提供商中统一管理用户权限的场景,可以让 Flashduty 中的成员信息与身份提供商保持一致。 -- **禁止编辑外部成员** 仅影响通过 SSO 创建的外部成员,手动邀请的成员不受影响 +- **禁用 SSO 成员编辑功能** 仅影响通过 SSO 创建的外部成员,手动邀请的成员不受影响 - 如果 SSO 配置被删除,已存在的外部成员将默认保持只读状态 diff --git a/zh/platform/permission-design.mdx b/zh/platform/permission-design.mdx index 0f06085d..dfc8c55d 100644 --- a/zh/platform/permission-design.mdx +++ b/zh/platform/permission-design.mdx @@ -25,7 +25,7 @@ Flashduty **基于角色(RBAC)来控制功能权限**,按模块划分权 拥有所有权限,适用于需要完整管理能力的核心成员。自动拥有所有自定义菜单的访问权限。 - 拥有除「费用中心」「成员管理」「角色管理」「单点登录管理」外的全部**系统权限**,适用于处理日常运维工作的成员。自动拥有所有自定义菜单的访问权限。 + 拥有除「费用中心」「成员管理」「角色管理」「单点登录管理」「评论类型管理」以及 AI SRE 的 Apps 启停、GitHub App 撤销、GitLab App 断开外的全部**系统权限**,适用于处理日常运维工作的成员。自动拥有所有自定义菜单的访问权限。 拥有除「审计」「快速开始」外的绝大部分只读**系统权限**,适用于仅需查看数据的成员。自动拥有所有自定义菜单的访问权限。 @@ -44,6 +44,7 @@ Flashduty **基于角色(RBAC)来控制功能权限**,按模块划分权 - **On-call**:告警响应、配置管理、状态页等值班相关权限 - **RUM**:前端监控相关权限 - **Monitors**:监控告警相关权限 +- **AI SRE**:对话、Skill、MCP、Agent、知识、环境、Apps、Automation 等权限,开通 AI SRE 的账户才显示 - **自定义菜单(Custom menu)**:账户级动态权限组,每个已配置的自定义菜单对应一个权限点 @@ -104,6 +105,7 @@ Flashduty 的权限点分为两类: | **集成查看** | 只读 | 查看已配置的集成列表和集成详情 | | **集成管理** | 管理 | 添加、配置、测试和删除集成(需同时拥有数据权限) | | **数据分析查看** | 只读 | 查看故障响应、系统健康等分析报告和统计数据 | + | **评论类型管理** | 管理 | 创建、修改、排序和删除故障评论类型(仅 Admin 默认拥有) | | 权限点 | 类型 | 说明 | @@ -151,6 +153,13 @@ Flashduty 的权限点分为两类: | **会话浏览器查看** | 只读 | 查看事件详情等 | | **会话回放查看** | 只读 | 查看前端监控会话回放等 | + + | 权限点 | 类型 | 说明 | + | --- | --- | --- | + | **对话查看** | 只读 | 查看并发送 AI SRE 对话消息 | + | **查看类权限** | 只读 | 分别控制 Skill、MCP、Agent、知识、环境、Apps、Automation 的查看 | + | **管理类权限** | 管理 | 分别控制 Skill、MCP、Agent、知识、环境、Apps、Automation 的创建、编辑、启停和删除;另有 GitHub App 授权、Kubernetes App 管理 | + | 权限点 | 类型 | 说明 | | --- | --- | --- | diff --git a/zh/platform/pricing.mdx b/zh/platform/pricing.mdx index 80705ce8..2783757d 100644 --- a/zh/platform/pricing.mdx +++ b/zh/platform/pricing.mdx @@ -142,10 +142,6 @@ Flashduty 采用 **License(活跃用户)** 计费模式——只有需要** - -一个账户在一个计费周期内可执行的 License **释放**次数有上限,释放**固定**和**临时** License 都计入该上限;额度用完后,要等到下一个计费周期才能再释放。**删除成员不算作释放**,不占用该额度,成员的 License 随成员一起释放。 - - #### 无 License 成员权限 @@ -349,7 +345,7 @@ On-call 订阅**已过期或被停用**后,平台会做两件事:**停止接 - 临时 License 自动释放 - 成员被删除时,其 License 自动释放 - License 按当月活跃成员计费,不支持在成员之间轮换使用。每个计费周期的释放次数有上限,删除成员不受此限制。如需更多成员同时处理故障,请增购 License。 + License 按当月活跃成员计费。如需更多成员同时处理故障,请增购 License。 diff --git a/zh/platform/team-members.mdx b/zh/platform/team-members.mdx index c92a5de6..0fafa1c1 100644 --- a/zh/platform/team-members.mdx +++ b/zh/platform/team-members.mdx @@ -124,10 +124,10 @@ License 决定了成员是否可以查看和处理故障。在成员管理列表 您可以在成员列表的 License 列中执行以下操作: - **授予固定 License**:为成员分配一个固定 License,前提是当前仍有可用 License 额度 -- **取消 License**:释放成员的 License,释放后该成员将无法查看和处理故障。释放次数每个计费周期有上限,见[版本与计费](/zh/platform/pricing);额度用完后**取消 License** 会置灰,悬停可见额度恢复时间 +- **取消 License**:释放成员的 License,释放后该成员将无法查看和处理故障 -License 总数取决于您的订阅版本。当所有 License 已分配完毕时,需要先释放其他成员的 License 或升级订阅才能为新成员分配。删除成员不受释放次数上限约束,其 License 会随之释放。 +License 总数取决于您的订阅版本。当所有 License 已分配完毕时,需要先释放其他成员的 License 或升级订阅才能为新成员分配。删除成员时,其 License 会随之释放。 ### 成员详情 diff --git a/zh/rum/best-practices/alert-noise-reduction.mdx b/zh/rum/best-practices/alert-noise-reduction.mdx index 7827acde..df8f563d 100644 --- a/zh/rum/best-practices/alert-noise-reduction.mdx +++ b/zh/rum/best-practices/alert-noise-reduction.mdx @@ -37,22 +37,22 @@ RUM 告警从 Error 产生到通知到人,经过以下四层处理: 浏览器扩展或第三方广告/分析脚本产生的错误与您的业务无关,建议排除: - - 错误堆栈 包含 `chrome-extension://` - - 错误堆栈 包含 `moz-extension://` - - 错误堆栈 包含 `cdn.third-party.com` + - 错误堆栈 匹配 `*chrome-extension://*` + - 错误堆栈 匹配 `*moz-extension://*` + - 错误堆栈 匹配 `*cdn.third-party.com*` 某些错误频繁出现但不影响用户体验: - - 错误消息 包含 `ResizeObserver loop` - - 错误消息 包含 `Script error` + - 错误消息 匹配 `*ResizeObserver loop*` + - 错误消息 匹配 `*Script error*` 如果您只关注生产环境的告警,可以过滤其他环境的错误: - - 环境 不包含 `production` + - 环境 不匹配 `production` @@ -82,21 +82,21 @@ RUM 告警从 Error 产生到通知到人,经过以下四层处理: 崩溃意味着应用完全不可用,需要最高优先级响应。 - - 条件:环境 包含 `production`,且 是否崩溃 包含 `true` + - 条件:环境 匹配 `production`,且 是否崩溃 匹配 `true` - 告警级别:P0 VIP 用户的体验直接关系到商业价值。 - - 条件:用户 ID 包含 `vip`(或通过自定义字段 `context.user.level` 包含 `vip` 来匹配) + - 条件:用户 ID 匹配 `*vip*`(或通过自定义字段 `context.user.level` 匹配 `vip`) - 告警级别:P0 支付、登录、结算等核心业务页面的错误需要优先处理。 - - 条件:页面 URL 包含 `/payment` + - 条件:页面 URL 匹配 `*/payment*` - 告警级别:P1 可以为每个核心页面创建单独的规则,或在同一规则中使用多个匹配值。 diff --git a/zh/rum/error-tracking/error-reporting/android.mdx b/zh/rum/error-tracking/error-reporting/android.mdx index a0bdb146..fc8e4158 100644 --- a/zh/rum/error-tracking/error-reporting/android.mdx +++ b/zh/rum/error-tracking/error-reporting/android.mdx @@ -171,7 +171,7 @@ plugins { ```groovy build.gradle flashcat { - site = "CN" // 可选,可选值:CN、STAGING,默认 CN + site = "CN" // 可选,默认 CN serviceName = "" // 可选,默认使用应用包名 versionName = "1.0.0" // 可选,默认读取 android.defaultConfig.versionName } @@ -211,7 +211,7 @@ flashcat { | ------ | ---- | | `versionName` | 应用版本名称,默认读取 Android 构建配置中的 `versionName` | | `serviceName` | 服务名称,默认使用应用包名 | -| `site` | 上传站点,可选值:`CN`、`STAGING`,默认 `CN` | +| `site` | 上传站点,默认 `CN` | | `mappingFilePath` | 自定义 ProGuard/R8 mapping 文件路径,默认使用当前 variant 的 Android 构建产物 | | `nonDefaultObfuscation` | 使用 DexGuard 等非默认混淆工具时设为 `true`,插件会为所有 variant 创建上传任务 | | `additionalSymbolFilesLocations` | 额外 NDK 符号目录,目录结构需类似 `/path/to/location/obj/{arch}/libname.so` | diff --git a/zh/rum/error-tracking/error-reporting/ios.mdx b/zh/rum/error-tracking/error-reporting/ios.mdx index 7ce09553..8963430f 100644 --- a/zh/rum/error-tracking/error-reporting/ios.mdx +++ b/zh/rum/error-tracking/error-reporting/ios.mdx @@ -263,25 +263,7 @@ lane :upload_dsyms do end ``` -### Bitcode 应用的 dSYM - -如果您的应用启用了 Bitcode,Apple 会在 App Store 处理时重新编译应用,生成新的 dSYM 文件。您需要从 App Store Connect 下载这些 dSYM 并上传。 - -#### 下载 Bitcode dSYM - - - - 访问 [App Store Connect](https://appstoreconnect.apple.com) 并登录您的账号。 - - - - 进入您的应用 → 活动 → 选择需要下载 dSYM 的构建版本。 - - - - 点击「下载 dSYM」按钮,下载完成后使用 Flashduty CLI 上传。 - - +通过 App Store Connect 分发的构建,如需符号文件,可在 App Store Connect 的构建版本页下载 dSYM 后上传。 ### dSYM 文件限制 @@ -304,7 +286,6 @@ end - 仅真实设备上的崩溃支持符号化,模拟器生成的崩溃不支持。 - 每个发布版本都需要上传对应的 dSYM 文件。 -- 如果使用 Bitcode,需要从 App Store Connect 下载并上传重新生成的 dSYM。 ### App Hang 检测限制 @@ -370,7 +351,6 @@ end - 为每个发布版本上传对应的 dSYM 文件 - 在 CI/CD 流程中集成 dSYM 上传 - - 如果使用 Bitcode,及时从 App Store Connect 下载并上传 dSYM 3. **合理设置 App Hang 阈值**:根据应用性能要求设置合适的阈值,避免过多误报。 diff --git a/zh/rum/error-tracking/issue-alerts.mdx b/zh/rum/error-tracking/issue-alerts.mdx index 4652f94a..cdeb4493 100644 --- a/zh/rum/error-tracking/issue-alerts.mdx +++ b/zh/rum/error-tracking/issue-alerts.mdx @@ -111,10 +111,10 @@ Webhook 配置区提供「发送测试事件」按钮。测试会向当前填写 | --------------------------------------- | -------------------------- | --------------------------- | | 用户 ID(`error.usr_id`) | 上报错误的用户标识 | `vip_001` | | 用户邮箱(`error.usr_email`) | 用户邮箱地址 | `*@vip.com` | -| 页面 URL(`error.view_url`) | 错误发生的页面完整地址 | 包含 `/payment` | +| 页面 URL(`error.view_url`) | 错误发生的页面完整地址 | 匹配 `*/payment*` | | 错误类型(`error.error_type`) | 错误的类型分类 | `TypeError`、`SyntaxError` | -| 错误消息(`error.error_message`) | 错误的描述文本 | 包含 `Cannot read property` | -| 堆栈(`error.error_stack`) | 错误的堆栈信息 | 包含 `at handleClick` | +| 错误消息(`error.error_message`) | 错误的描述文本 | 匹配 `*Cannot read property*` | +| 堆栈(`error.error_stack`) | 错误的堆栈信息 | 匹配 `*at handleClick*` | | 环境(`error.env`) | 错误发生的环境 | `production`、`staging` | | 服务(`error.service`) | 错误所属的服务 | `payment` | | 版本(`error.version`) | 应用版本号 | `1.2.0` | @@ -122,7 +122,7 @@ Webhook 配置区提供「发送测试事件」按钮。测试会向当前填写 | 浏览器版本(`error.browser_version`) | 浏览器版本号 | `120.0` | | 是否崩溃(`error.is_crash`) | 是否为崩溃错误 | `true` | -匹配方式支持「包含」和「不包含」两种操作。 +操作符为「匹配」和「不匹配」。匹配值默认整值相等,支持通配符 `*`(如 `*vip*` 表示包含 vip)和正则表达式(如 `/^TypeError/i`);同一条件可填最多 8 个值,命中任一即匹配。 #### 配置示例 @@ -130,21 +130,21 @@ Webhook 配置区提供「发送测试事件」按钮。测试会向当前填写 为 VIP 用户的错误设置最高优先级,确保第一时间响应: - - 匹配条件:用户 ID 包含 `vip` + - 匹配条件:用户 ID 匹配 `*vip*` - 告警级别:P0(Critical) 支付页面是核心业务流程,相关错误需要优先处理: - - 匹配条件:页面 URL 包含 `/payment` + - 匹配条件:页面 URL 匹配 `*/payment*` - 告警级别:P1(Warning) 生产环境的崩溃需要立即响应: - - 匹配条件:环境 包含 `production`,且 是否崩溃 包含 `true` + - 匹配条件:环境 匹配 `production`,且 是否崩溃 匹配 `true` - 告警级别:P0(Critical) @@ -163,9 +163,9 @@ Webhook 配置区提供「发送测试事件」按钮。测试会向当前填写 | 场景 | 示例规则 | | ------------------ | ----------------------------------- | -| 排除第三方脚本错误 | 错误堆栈 包含 `cdn.third-party.com` | -| 排除已知无害错误 | 错误消息 包含 `ResizeObserver loop` | -| 排除调试页面错误 | 页面 URL 包含 `/debug` | +| 排除第三方脚本错误 | 错误堆栈 匹配 `*cdn.third-party.com*` | +| 排除已知无害错误 | 错误消息 匹配 `*ResizeObserver loop*` | +| 排除调试页面错误 | 页面 URL 匹配 `*/debug*` | - 被过滤的 Error 不参与 Issue 聚合和告警,但数据仍然保留,可在查看器中通过筛选条件查看 diff --git a/zh/rum/error-tracking/source-mapping.mdx b/zh/rum/error-tracking/source-mapping.mdx index 800e6597..ff2ed880 100644 --- a/zh/rum/error-tracking/source-mapping.mdx +++ b/zh/rum/error-tracking/source-mapping.mdx @@ -302,7 +302,7 @@ Android 应用使用 ProGuard/R8 进行代码混淆后,错误堆栈中的类 flashcat { versionName = "1.3.0" // 可选,默认读取 Android 配置中的 versionName serviceName = "my-service" // 可选,默认使用应用包名 - site = "CN" // 可选,可选值:CN、STAGING,默认 CN + site = "CN" // 可选,默认 CN sourcemapEndpoint = "https://rum.example.com" // 可选,私有化自定义上传入口;未带 /sourcemap/upload 时会自动补全 checkProjectDependencies = "none" // 可选:none、warn、fail;默认不检查 mappingFilePath = "path/to/mapping.txt" // 可选,自定义 mapping 文件路径 @@ -313,7 +313,7 @@ Android 应用使用 ProGuard/R8 进行代码混淆后,错误堆栈中的类 ``` - 默认情况下插件会根据 `site` 选择上传入口:`CN` 对应 `ci.flashcat.cloud`,`STAGING` 对应 `ci-dev.flashcat.cloud`。私有化部署可通过 `sourcemapEndpoint` 指定自定义上传入口(自 `1.2.0` 起支持);该值未带 `/sourcemap/upload` 路径时会自动补全。三种配置方式的优先级为:`flashcat {}` 扩展配置 > `flashcat-ci.json` > `FLASHCAT_SOURCEMAP_INTAKE_URL` 环境变量。配置自定义入口后,`site` 仅用于回退,不再影响实际上传地址。 + 默认情况下插件会根据 `site` 选择上传入口:`CN` 对应 `ci.flashcat.cloud`。私有化部署可通过 `sourcemapEndpoint` 指定自定义上传入口(自 `1.2.0` 起支持);该值未带 `/sourcemap/upload` 路径时会自动补全。三种配置方式的优先级为:`flashcat {}` 扩展配置 > `flashcat-ci.json` > `FLASHCAT_SOURCEMAP_INTAKE_URL` 环境变量。配置自定义入口后,`site` 仅用于回退,不再影响实际上传地址。 diff --git a/zh/rum/others/compliance-guide.mdx b/zh/rum/others/compliance-guide.mdx index 549a3820..220c56fd 100644 --- a/zh/rum/others/compliance-guide.mdx +++ b/zh/rum/others/compliance-guide.mdx @@ -98,7 +98,7 @@ keywords: ["RUM", "SDK", "合规", "隐私", "个人信息保护", "隐私政策 详见 RUM《[数据安全](/zh/rum/others/data-security)》。 - 可在应用的"用户数据收集"设置中关闭 IP 地址与地理位置(国家/城市)数据的收集,关闭后立即在服务端生效。 + 可在应用详情的**隐私设置**页签中关闭 IP 地址与地理位置(国家/城市)数据的收集,关闭后立即在服务端生效。 支持通过您自有的代理服务器转发全部 RUM 事件,使终端设备不直接与 Flashduty 通信,便于您统一管控外发流量。 diff --git a/zh/rum/others/data-security.mdx b/zh/rum/others/data-security.mdx index 6a4a160e..6a0edec6 100644 --- a/zh/rum/others/data-security.mdx +++ b/zh/rum/others/data-security.mdx @@ -64,7 +64,7 @@ RUM 中可能出现 PII 的场景包括: 此设置还设计为与现有的 HTML 覆盖属性兼容。 - 初始化 RUM 应用程序后,您可以在**用户数据收集**选项卡中选择是否要包含 IP 或地理位置数据。 + 初始化 RUM 应用程序后,您可以在应用详情的**隐私设置**页签中,通过 **收集用户 IP 地址** 和 **收集用户的地理位置信息** 开关选择是否包含 IP 或地理位置数据。 禁用 IP 数据收集后,更改将立即生效。在禁用之前收集的任何事件不会删除 IP 数据。浏览器 SDK 仍会上报数据,IP 地址会在 Flashduty 服务端处理时被丢弃。 @@ -74,7 +74,7 @@ RUM 中可能出现 PII 的场景包括: 除了删除客户端 IP 外,您还可以选择禁用从所有未来收集的数据中收集地理位置(国家、城市、县)或 GeoIP 信息。 - 如果取消选中**收集地理位置数据**框,更改将立即生效。在禁用之前收集的任何事件不会删除相应的地理位置数据。地理位置数据会在 Flashduty 服务端处理时被丢弃。 + 如果关闭 **收集用户的地理位置信息** 开关,更改将立即生效。在禁用之前收集的任何事件不会删除相应的地理位置数据。地理位置数据会在 Flashduty 服务端处理时被丢弃。 diff --git a/zh/rum/performance/diagnosis-optimization.mdx b/zh/rum/performance/diagnosis-optimization.mdx index 6e2a32c9..28cf3d58 100644 --- a/zh/rum/performance/diagnosis-optimization.mdx +++ b/zh/rum/performance/diagnosis-optimization.mdx @@ -43,6 +43,12 @@ keywords: ["RUM", "性能监控", "用户监控", "前端监控"] 问题诊断 + 页面还会展示: + + - **诊断结论**:根据下方数据判断拖慢当前指标的主要来源,点击 **查看证据** 跳到对应区块。 + - **LCP 元素 / 交互元素 / 位移元素**:分别对应 LCP、INP、CLS,按元素列出视图占比与 P75。 + - **阻塞主线程的脚本**:汇总最近若干含长任务的视图里执行最久的脚本。脚本归因仅 Chromium 内核浏览器上报。 + 例如,对于最大内容绘制(LCP),您可以查看在触发 LCP 之前加载的资源。由于 LCP 是最大元素在页面上加载所需时间的指标,您可以从资源加载和解决错误两个方面进行问题诊断。 diff --git a/zh/rum/quickstart/app-management.mdx b/zh/rum/quickstart/app-management.mdx index d98e0563..f2ea5993 100644 --- a/zh/rum/quickstart/app-management.mdx +++ b/zh/rum/quickstart/app-management.mdx @@ -21,7 +21,7 @@ RUM 应用是承载前端性能监控数据的容器,用于采集、存储和 | 访问级别 | 可见范围 | 适用场景 | |----------|----------|----------| | **公开** | 账户内所有用户可见,可查看数据和处理 Issue | 通用业务应用 | -| **私有** | 仅创建者、账户管理员和主体账户可见 | 敏感业务数据 | +| **私有** | 仅管理团队成员、创建者和账户管理员(含主体账户)可见 | 敏感业务数据 | 私有应用中,其他成员若需查看内容,可以通过分享故障链接的方式临时授权访问。 @@ -424,7 +424,7 @@ Android、Flutter 与微信小程序应用同样展示「远程配置」页签 ## 删除应用 -如果您不再需要某个应用,可以在应用详情的「基础信息」页签底部找到删除按钮。 +如果您不再需要某个应用,可以在应用详情的「基本信息」页签底部找到删除按钮。 删除应用后: diff --git a/zh/rum/sdk/flutter/sdk-integration.mdx b/zh/rum/sdk/flutter/sdk-integration.mdx index e8482026..f85e7c6b 100644 --- a/zh/rum/sdk/flutter/sdk-integration.mdx +++ b/zh/rum/sdk/flutter/sdk-integration.mdx @@ -28,10 +28,6 @@ dependencies: flashcat_flutter_plugin: ^0.2.0 ``` - -请使用 `0.1.3` 或更高版本。低于该版本时,`flutter build apk --release`(包括崩溃符号化所需的 `--obfuscate` 构建)会失败于 R8,报 `Missing class org.bouncycastle.jsse.BCSSLParameters`。`0.1.3` 起所需的 ProGuard 规则随包下发,应用侧无需额外配置。 - - ## 初始化 SDK 建议在 `main()` 中、`runApp` 之前完成初始化。使用 `DatadogSdk.runApp` 启动应用时,SDK 会自动接管 `FlutterError.onError` 与 `PlatformDispatcher.instance.onError`,无需手动接线即可采集未处理异常。 diff --git a/zh/rum/sdk/harmony/advanced-config.mdx b/zh/rum/sdk/harmony/advanced-config.mdx index c0ad4887..7b02b35b 100644 --- a/zh/rum/sdk/harmony/advanced-config.mdx +++ b/zh/rum/sdk/harmony/advanced-config.mdx @@ -492,7 +492,7 @@ npm install -D @flashcatcloud/hvigor-plugin ``` -请使用 **0.1.5 及以上**版本(0.1.4 已从 npm 撤回,装不到)。0.1.3 在注册上传任务时同时声明了 `assembleHap` 和 `assembleHar` 两个依赖,而一个模块最多只有其中一个,会导致构建直接失败:`Cannot find hvigor task 'assembleHar' in module 'entry'`。 +请使用 **0.1.5 及以上**版本。 然后在模块的 `hvigorfile.ts` 中注册插件: @@ -514,7 +514,7 @@ export default { ``` -公有云省略 `endpoint` 时,**hvigor-plugin ≥ 0.1.3** 默认上传到 `https://ci.flashcat.cloud`(**不是** RUM 上报用的 `browser.flashcat.cloud`)。私有化部署请设置环境变量 `FLASHCAT_SOURCEMAP_INTAKE_URL`(协议 + 域名,不带路径;同样需要 ≥ 0.1.3),或传 `endpoint: 'https://rum.example.com'`。旧版 0.1.2 不认 `FLASHCAT_SOURCEMAP_INTAKE_URL`,可显式写 `endpoint`,或设置旧环境变量 `FLASHCAT_ENDPOINT`(0.1.3 起弃用,但仍生效)。`flashcatSymbolUploadPlugin()` 还接受两个可选参数:`buildDir` 和 `pluginVersion`(写入上传请求头 `DD-EVP-ORIGIN-VERSION` 的版本号,默认与插件版本一致)。**0.1.5 起产物目录会自动跟随构建的 product**(`-p product=beta` → `build/beta`),只有产物不在该位置时才需要传 `buildDir`;0.1.3 及更早固定使用 `build/default`,构建非 default product 时会静默扫描到错误的目录。 +公有云省略 `endpoint` 时,**hvigor-plugin ≥ 0.1.3** 默认上传到 `https://ci.flashcat.cloud`(**不是** RUM 上报用的 `browser.flashcat.cloud`)。私有化部署请设置环境变量 `FLASHCAT_SOURCEMAP_INTAKE_URL`(协议 + 域名,不带路径;同样需要 ≥ 0.1.3),或传 `endpoint: 'https://rum.example.com'`。`flashcatSymbolUploadPlugin()` 还接受可选参数 `buildDir`。**0.1.5 起产物目录会自动跟随构建的 product**(`-p product=beta` → `build/beta`),只有产物不在该位置时才需要传 `buildDir`。 发布构建完成后,把上传任务作为一次独立的 hvigor 调用执行: @@ -526,26 +526,9 @@ FLASHCAT_API_KEY=*** \ ``` -用环境变量配置插件时,`--no-daemon` 不是可选项。hvigor 默认通过常驻的守护进程构建,该进程**只在创建时拷贝一次环境变量**,之后仅刷新固定白名单(`DEVECO_SDK_HOME`、`OHOS_BASE_SDK_HOME` 及两个增量构建开关)。因此复用守护进程时,插件读到的是**启动那个守护进程的人**的环境变量——可能来自 IDE 构建,也可能来自您上一条命令——而不是您刚敲进去的这份。 - -失败是静默的:`FLASHCAT_API_KEY` 读不到就跳过上传(只打一行日志),旧的 Key 则会以 401 结束——两种情况构建都照样成功。直接写在 `hvigorfile.ts` 里的值不受影响。 +用环境变量配置插件时必须加 `--no-daemon`:hvigor 守护进程不会重新读取环境变量,否则会静默跳过上传(`FLASHCAT_API_KEY` 读不到)或使用旧 Key(401),两种情况构建都显示成功。直接写在 `hvigorfile.ts` 里的值不受影响。 -插件会向 `{endpoint}/sourcemap/upload` 发送 `multipart/form-data`: - -| Header | 值 | -|--------|----| -| `DD-API-KEY` | Flashduty API Key,用于解析账号 | -| `DD-EVP-ORIGIN` | `flashcat-hvigor-plugin` | -| `DD-EVP-ORIGIN-VERSION` | 插件版本 | - -上传事件类型: - -| 事件类型 | 表单字段 | -|----------|----------| -| `harmony_sourcemap` | `event`、`source_map`、可选 `name_cache` | -| `harmony_symbol_file` | `event`、`symbol_file` | - Native 符号依赖 `.so` 的 GNU build-id。HarmonyOS NDK 默认会生成 build-id;如果您的构建链路关闭了该能力,请为 `.so` 增加 `-Wl,--build-id`。 diff --git a/zh/rum/sdk/react-native/advanced-config.mdx b/zh/rum/sdk/react-native/advanced-config.mdx index 7e171119..d79dbc4b 100644 --- a/zh/rum/sdk/react-native/advanced-config.mdx +++ b/zh/rum/sdk/react-native/advanced-config.mdx @@ -171,10 +171,6 @@ FLASHCAT_API_KEY= ./gradlew assembleRelease | 未设置 `FLASHCAT_API_KEY` | 打印警告并跳过上传,release 构建照常成功 | | 上传失败(网络、key 无效等) | 打印警告,不影响构建结果 | | `FLASHCAT_SOURCEMAPS_DRY_RUN=true` | 只生成 source map,不上传 | - - -`0.1.0` 在缺少 `FLASHCAT_API_KEY` 时会让 `assembleRelease` 整体失败,APK 停留在旧版本。请升级到 `0.1.1` 或更高版本。 - 先让 release 构建产出 source map:在 Xcode 的 **Bundle React Native code and images** 构建阶段脚本中,于 `react-native-xcode.sh` 之前设置 `SOURCEMAP_FILE`。 diff --git a/zh/rum/sdk/react-native/sdk-integration.mdx b/zh/rum/sdk/react-native/sdk-integration.mdx index ef538c49..04ef23be 100644 --- a/zh/rum/sdk/react-native/sdk-integration.mdx +++ b/zh/rum/sdk/react-native/sdk-integration.mdx @@ -35,10 +35,6 @@ npm install @flashcatcloud/mobile-react-native-navigation # react-native-navig cd ios && pod install ``` - -请使用 `0.1.1` 或更高版本。缺少 `FLASHCAT_API_KEY` 时,上传只打印警告并跳过,不会中断 release 构建。详见 高级配置 中的 Source map 上传。 - - ## 配置 Metro(可选) 用 `withDatadogMetroConfig` 包装 Metro 配置,让 release 构建产出的 bundle 与其 sourcemap 都带上 Debug ID。此步骤可选:服务端按 service + 版本号 + bundle 文件名匹配 source map,不依赖 Debug ID。 diff --git a/zh/rum/sdk/web/advanced-config.mdx b/zh/rum/sdk/web/advanced-config.mdx index 4dee09ba..738cd5b3 100644 --- a/zh/rum/sdk/web/advanced-config.mdx +++ b/zh/rum/sdk/web/advanced-config.mdx @@ -370,6 +370,17 @@ flashcatRum.init({ 两个开关也可以通过[远程配置](/zh/rum/quickstart/app-management#远程配置)调整。 +## 远程配置 + +Web SDK 0.4.0 及以上,初始化时设置 `remoteConfigurationEnabled: true`(默认 `false`)后,SDK 会读取应用在控制台 **远程配置** 页签发布的会话采样率、会话回放采样率、Trace 采样率、回放脱敏级别、错误会话补充采集、错误会话补充回放和自定义配置项,覆盖 `init()` 中的对应值。发布后的配置对下一个新会话生效。各项含义与发布流程见[应用管理](/zh/rum/quickstart/app-management#远程配置)。 + +```javascript +flashcatRum.init({ + // ... 其他配置 + remoteConfigurationEnabled: true +}); +``` + ## 用户跟踪同意 为遵守 GDPR、CCPA 等隐私法规,RUM 允许在初始化时设置用户跟踪同意状态: diff --git a/zh/rum/sdk/web/faq.mdx b/zh/rum/sdk/web/faq.mdx index e59c7013..3805b73d 100644 --- a/zh/rum/sdk/web/faq.mdx +++ b/zh/rum/sdk/web/faq.mdx @@ -305,7 +305,7 @@ flashcatRum.init({ ``` -请勿在生产环境使用 100% 采样率,以避免产生过多数据和费用。 +100% 适合测试。`sessionSampleRate` 的 SDK 默认值就是 100,生产环境请按流量和预算调低;控制台生成的接入代码默认为 10。 ### 控制台调试命令 diff --git a/zh/rum/sdk/web/sdk-integration.mdx b/zh/rum/sdk/web/sdk-integration.mdx index 02b0fece..1540622e 100644 --- a/zh/rum/sdk/web/sdk-integration.mdx +++ b/zh/rum/sdk/web/sdk-integration.mdx @@ -152,6 +152,10 @@ flashcatRum.init({ 要跟踪的会话百分比:100 为全部,0 为不采集 + +是否读取控制台发布的[远程配置](/zh/rum/sdk/web/advanced-config#远程配置),需要 Web SDK 0.4.0 及以上 + + 启用[会话重放](/zh/rum/session-replay/overview)功能的会话百分比 diff --git a/zh/rum/sdk/wechat-miniprogram/advanced-config.mdx b/zh/rum/sdk/wechat-miniprogram/advanced-config.mdx index bf417924..81647296 100644 --- a/zh/rum/sdk/wechat-miniprogram/advanced-config.mdx +++ b/zh/rum/sdk/wechat-miniprogram/advanced-config.mdx @@ -186,6 +186,17 @@ flashcatRum.addCustomEvent("coupon_selected", { | `addError(message, source?, stack?)` | `error` | 记录一次业务错误;公开 API 会把未传入的来源设置为 `custom` | | `addCustomEvent(name, context?)` | `custom` | 记录自定义业务事件和上下文 | +## 远程配置 + +`@flashcatcloud/miniprogram-rum` 0.2.0 及以上,初始化时设置 `remoteConfigurationEnabled: true`(默认 `false`)后,SDK 会读取应用在控制台 **远程配置** 页签发布的会话采样率和自定义配置项,覆盖 `init()` 中的会话采样率;其余配置项不生效。发布后的配置对下一个新会话生效。发布流程见[应用管理](/zh/rum/quickstart/app-management#远程配置)。 + +```javascript app.js +flashcatRum.init({ + // ... 其他配置 + remoteConfigurationEnabled: true +}); +``` + ## 相关页面 diff --git a/zh/rum/sdk/wechat-miniprogram/sdk-integration.mdx b/zh/rum/sdk/wechat-miniprogram/sdk-integration.mdx index fda95dc8..4cfee499 100644 --- a/zh/rum/sdk/wechat-miniprogram/sdk-integration.mdx +++ b/zh/rum/sdk/wechat-miniprogram/sdk-integration.mdx @@ -88,6 +88,10 @@ RUM 数据接收站点。未配置 `proxy` 时,SDK 会将事件发送到 `http + +是否读取控制台发布的[远程配置](/zh/rum/sdk/wechat-miniprogram/advanced-config#远程配置),需要 `@flashcatcloud/miniprogram-rum` 0.2.0 及以上。 + + 批量上报间隔,单位为毫秒。SDK 默认每 15 秒尝试刷新一次事件批次,也会在小程序进入后台时触发刷新。 diff --git a/zh/rum/session-replay/session-viewing.mdx b/zh/rum/session-replay/session-viewing.mdx index 1a05aeb4..113a6cbe 100644 --- a/zh/rum/session-replay/session-viewing.mdx +++ b/zh/rum/session-replay/session-viewing.mdx @@ -60,7 +60,7 @@ Flashduty RUM 的会话重放功能通过直观地重现用户操作路径,帮 - 按事件类型筛选(如点击、页面跳转等) - 点击具体事件,播放器将自动跳转至对应时间戳 - 开启「错误会话补充采集」后,**异常采集会话**只保留报错前的一小段明细(Browser 应用在 **远程配置 → 数据采集** 中开启)。上方的事件计数覆盖整条会话,所以列表条数会少于该数字。 + 开启「错误会话补充采集」后,**异常采集会话**只保留报错前的一小段明细(在应用详情的 **远程配置** 页签中开启 **错误会话补充采集**,见[远程配置](/zh/rum/quickstart/app-management#远程配置))。上方的事件计数覆盖整条会话,所以列表条数会少于该数字。 时间线起点会多一行以「⋯」标记的说明,写明明细从何时开始,或「只保留了报错前的一小段明细」。该行不可点击,也不会出现在单个事件的下钻窗口中。