Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 11 additions & 11 deletions src/content/docs/docs/alerts/expressions.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ Alert expressions support three operations:

A math expression takes the time series or numbers returned by a query or expression and transforms them with mathematical operations or functions.

![image](./images/writing-expressions-for-kloudmate-alarms-1.png)
![image](./images/expressions-1.png)

**Input:** any mathematical operation to apply to the data returned from other queries or expressions. Reference queries and expressions by their letter, prefixed with a dollar sign, for example `$A`.

Expand Down Expand Up @@ -96,11 +96,11 @@ Reduce takes the time series or numbers returned by a query or expression and tu

- **Reduction function:** select the function to apply: `mean()`, `max()`, `min()`, `sum()`, `last()`, or `count()`.

![image](./images/writing-expressions-for-kloudmate-alarms-2.png)
![image](./images/expressions-2.png)

- **Input:** select the query or expression to reduce by its letter.

![image](./images/writing-expressions-for-kloudmate-alarms-3.png)
![image](./images/expressions-3.png)

The reduction function aggregates the values of the query or expression into a single value.

Expand All @@ -110,19 +110,19 @@ A condition expression takes the time series or numbers returned by queries or e

- **WHEN:** select the reduction function: `last()`, `mean()`, `max()`, `min()`, `sum()`, or `count()`.

![image](./images/writing-expressions-for-kloudmate-alarms-4.png)
![image](./images/expressions-4.png)

- **OF:** select the query or expression by its letter (for example, A or C).

![image](./images/writing-expressions-for-kloudmate-alarms-5.png)
![image](./images/expressions-5.png)

- **Condition string:** select the comparison: `IS ABOVE`, `IS SAME OR ABOVE`, `IS BELOW`, or `IS SAME OR BELOW`.

![image](./images/writing-expressions-for-kloudmate-alarms-6.png)
![image](./images/expressions-6.png)

- **Threshold:** enter the numeric value to evaluate the condition against.

![image](./images/writing-expressions-for-kloudmate-alarms-7.png)
![image](./images/expressions-7.png)

The reduction function is applied to the query or expression to produce a single value, which is then compared against the threshold using the condition you chose. When the input is a collection of time series or numbers, the reduction function is applied to each element individually, each reduced output is evaluated against the condition, and the outputs are combined with AND.

Expand All @@ -132,16 +132,16 @@ Add more conditions with the **Add condition** button, and choose how they combi

Nodes represent the individual queries or expressions used to build alerts and dashboards. KloudMate assigns each node a letter by default (for example, A, B, or C), based on the order it was created.

![image](./images/writing-expressions-for-kloudmate-alarms-1.jpeg)
![image](./images/expressions-8.png)

Nodes serve as reference points, so you can identify and evaluate specific queries or expressions during analysis.

![image](./images/writing-expressions-for-kloudmate-alarms-2.jpeg)
![image](./images/expressions-9.png)

KloudMate names nodes alphabetically by default, but you can rename them for clarity.

![image](./images/writing-expressions-for-kloudmate-alarms-3.jpeg)
![image](./images/expressions-10.png)

If a custom node name includes spaces, enclose it in **${}**. For example: `${CPU usage}`

![image](./images/writing-expressions-for-kloudmate-alarms-4.jpeg)
![image](./images/expressions-11.png)
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Diff not rendered.
Diff not rendered.
Diff not rendered.
Diff not rendered.
17 changes: 9 additions & 8 deletions src/content/docs/docs/alerts/maintenance-windows.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -20,21 +20,20 @@ Use a maintenance window when you have a calendar-driven quiet period: a planned
The overview page lists every maintenance window with these details:

- **Name:** name of the maintenance window.
- **Description:** description of the maintenance window.
- **Type:** whether the window is **One Time** or **Recurring**.
- **Alert rule targeted:** the alert rule the maintenance window applies to.
- **Matching label:** labels assigned to the maintenance window.
- **Matching labels:** labels assigned to the maintenance window.
- **Schedule:** start and end time for the maintenance window.
- **Status:** whether the maintenance window is active or paused.

![Maintenance window overview](./images/alarm-maintenance-window-1.png)
Each row also has an **Actions** menu for further row-level controls.

![Maintenance window overview](./images/maintenance-window-1.png)

## Creating a maintenance window

1. Open the **Maintenance Windows** page in the Alerts module.
2. Click **Create Maintenance Window**.

![Create Maintenance Window](./images/alarm-maintenance-window-1.jpeg)

3. Configure these details:

- **Name:** a name for the maintenance window.
Expand All @@ -43,7 +42,7 @@ The overview page lists every maintenance window with these details:
- **One time:** schedules the maintenance period once, for a specific date and time.
- **Recurring:** repeats automatically on a regular cycle, so you don't reconfigure it each time.

![Maintenance window timing options](./images/alarm-maintenance-window-2.jpeg)
![Maintenance window Name, Description, Timezone, and One time/Recurring fields](./images/maintenance-window-2.png)

Additional settings:

Expand All @@ -52,6 +51,8 @@ Additional settings:
- **Frequency:** available only for recurring windows; select a daily, weekly, or monthly schedule.
- **Label Matchers:** target the window to specific alerts by their labels (for example, service name, host, or region). Each matcher is a label key, an operator, and a value, combined with AND. The operators are the same four used across the alert module (**Equals**, **Not equals**, **Matches regex**, **Doesn't match regex**), matched against alert rule labels and alert instance labels.

As you add matchers, an **Affected Alert Instances** preview lists the alert rules and instances the window currently matches, so you can confirm its scope before saving.

4. Click **Save** to create the new maintenance window.

![Maintenance window saved](./images/alarm-maintenance-window-3.jpeg)
![Maintenance window additional settings, Affected Alert Instances preview, and Save button](./images/maintenance-window-3.png)
2 changes: 2 additions & 0 deletions src/content/docs/docs/apm-and-tracing/trace-explorer.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,8 @@ This view is best when you need the most granular look at tracing activity. To i

Select a trace or span from any result view to open it in [Trace Detail](../trace-detail/), where you inspect the timeline waterfall, per-span attributes, and the Service List, Request Flow, and AI Flow views.

![image](./images/trace-detail-open.png)

## Related Paths

- [Trace Detail](../trace-detail/)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,6 @@ Already have an account and just want to send data? Jump to [Sending Data to Klo

3. Check your inbox for a verification code from `noreply@kloudmate.com`. Check your spam folder if it doesn't arrive.
4. Enter the code on the next screen and click **Next**.

![Verification code](../images/setting-up-kloudmate-2.png)
</Steps>

## 2. Walk through the onboarding wizard
Expand Down
Binary file modified src/content/docs/docs/images/setting-up-kloudmate-1.png
Diff not rendered.
Original file line number Diff line number Diff line change
Expand Up @@ -10,18 +10,18 @@ Use the steps below to create an incident manually.

1. Click **Create Incident** in the top-right corner of the Incidents screen.

![image](./images/creating-an-incident-1.jpeg)
![image](./images/creating-an-incident-1.png)

2. Enter the incident **Title** and **Incident Details**.
3. Select a severity level: **Critical** , **High** , **Medium** , or **Low**.

![image](./images/creating-an-incident-1.png)
![image](./images/creating-an-incident-2.png)

4. Select the integration the incident belongs to.
5. Optionally choose an escalation policy to override the integration default.
6. Click **Create**.

![image](./images/creating-an-incident-2.png)
![image](./images/creating-an-incident-3.png)

:::note
Selecting an integration is required. If you do not have an integration yet, create one first in [Adding Integrations](../../integrations/adding-integrations/).
Expand Down
Diff not rendered.
35 changes: 29 additions & 6 deletions src/content/docs/docs/infrastructure/kubernetes/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -53,12 +53,35 @@ Use these guides when you need deeper service-level visibility:

KloudMate provides visibility into all major Kubernetes components:

- **Clusters:** overall health, capacity, and scale
- **Nodes:** infrastructure-level resource usage and node health
- **Namespaces:** resource distribution across teams, applications, or environments
- **Pods:** pod performance, restarts, and resource consumption
- **Storage:** Persistent Volume Claims (PVCs) across clusters — status, claim, storage class, and capacity
- **Workloads:** health and availability of deployments, daemonsets, and statefulsets
### Clusters

The **Clusters** tab lists every connected cluster, with overall health, capacity, and scale at a glance. Use it as the starting point before drilling into a specific node, namespace, or workload.

### Nodes

The **Nodes** tab lists every node across your clusters, showing node health and infrastructure-level resource usage: allocatable CPU and memory alongside current usage for each. Use it to spot nodes running hot before they affect scheduling.

![Nodes tab in Kubernetes Monitoring, showing CPU and memory allocatable capacity and usage per node](./images/kubernetes-nodes-tab.png)

### Namespaces

The **Namespaces** tab breaks resource distribution down by namespace, so you can see how CPU, memory, and workload counts spread across the teams, applications, or environments sharing a cluster.

### Pods

The **Pods** tab lists every pod across your clusters, with its performance, restart count, and resource consumption. Use it to find pods that are restarting frequently or running hot before they affect the workloads they belong to.

### Storage

The **Storage** tab lists Persistent Volume Claims (PVCs) across your clusters, with their status, claim, storage class, and capacity. Use it to see what's provisioned and bound without checking each cluster individually.

![Storage tab in Kubernetes Monitoring, listing Persistent Volumes with their cluster, status, claim, storage class, and capacity](./images/kubernetes-storage-tab.png)

### Workloads

The **Workloads** tab lists deployments, daemonsets, statefulsets, and other workload types across your clusters, showing their health and availability alongside pod counts and CPU and memory requests and limits. Filter by workload type, namespace, or cluster to narrow the list.

![Workloads tab in Kubernetes Monitoring, listing deployments with pod counts and CPU/memory request and limit values](./images/kubernetes-workloads-tab.png)

## Validation Checklist

Expand Down
42 changes: 25 additions & 17 deletions src/content/docs/docs/kloudmate-assistant/mcp-server.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -16,30 +16,32 @@ Once you're connected, your agent can chain KloudMate's query tools to investiga

## Connection details

The server is a single remote endpoint. You authenticate with a KloudMate [User Key](../../platform/settings/api-keys/#user-key) passed as a bearer token.
The server is a single remote endpoint. You authenticate with a KloudMate [Personal API Key](../../platform/settings/api-keys/#personal-api-keys) passed as a bearer token, and name the workspace you want to read with an `x-workspace-id` header.

| Setting | Value |
|---|---|
| **Endpoint** | `https://api.kloudmate.com/mcp` |
| **Transport** | Streamable HTTP |
| **Authentication** | `Authorization: Bearer YOUR_API_KEY` |
| **Workspace** | `x-workspace-id: YOUR_WORKSPACE_ID` |

The API key determines which workspace the connection reads from, so you never specify a workspace ID the key already scopes it. To connect a different workspace, use a key that belongs to that workspace.
A personal key carries your access to every workspace you belong to, so the connection needs the `x-workspace-id` header to know which one to read. Find the workspace ID in the workspace's URL in the KloudMate app. To point the same key at a different workspace, change that header. One key works for all of them.

## Before you start

You'll need two things:
You'll need:

- **A KloudMate User Key.** Under **Settings → API Keys**, click **Add New** and choose the **User Key** type — it's tied to your account's permissions and reads whatever you can read. Copy it when it's shown (it's shown only once) and keep it handy for your client's config. See [API Keys](../../platform/settings/api-keys/#user-key) for the full walkthrough. Creating a key requires the Admin role.
- **A KloudMate Personal API Key.** From the account menu (top-right), open **API keys** and click **Create Key**. It's tied to your account and reads whatever you can read. Copy it when it's shown (it's shown only once) and keep it handy for your client's config. Any signed-in user can create one; no admin role needed. See [API Keys](../../platform/settings/api-keys/#personal-api-keys) for the full walkthrough.
- **The workspace ID** you want to query. Find it in the workspace's URL in the KloudMate app; it goes in the `x-workspace-id` header.
- **An MCP-capable client.** Any tool that supports remote MCP servers over Streamable HTTP with custom headers works. The steps below cover Claude Code, Cursor, VS Code, and Claude Desktop.

:::caution
Your API key carries your access to the workspace. Treat it like a password: don't paste it into shared files or commit it to version control. The client configs below show how to keep it in an environment variable or a prompted secret instead of hardcoding it. If a key leaks, revoke it from **Settings → API Keys**.
Your API key carries your KloudMate access. Treat it like a password: don't paste it into shared files or commit it to version control. The client configs below show how to keep it in an environment variable or a prompted secret instead of hardcoding it. If a key leaks, delete it from the **Personal API Keys** screen in your account menu.
:::

## Connect your client

Pick your tool and follow the steps. Swap `YOUR_API_KEY` for the key you just created.
Pick your tool and follow the steps. Swap `YOUR_API_KEY` for the key you just created, and `YOUR_WORKSPACE_ID` for the workspace you want to query.

<Tabs>
<TabItem label="Claude Code">
Expand All @@ -48,14 +50,16 @@ Add the server from your terminal with the `claude mcp add` command:

```bash
claude mcp add --transport http kloudmate https://api.kloudmate.com/mcp \
--header "Authorization: Bearer YOUR_API_KEY"
--header "Authorization: Bearer YOUR_API_KEY" \
--header "x-workspace-id: YOUR_WORKSPACE_ID"
```

By default the server is available in the current project only. Add `--scope user` before the server name to make it available across all your projects:

```bash
claude mcp add --transport http --scope user kloudmate https://api.kloudmate.com/mcp \
--header "Authorization: Bearer YOUR_API_KEY"
--header "Authorization: Bearer YOUR_API_KEY" \
--header "x-workspace-id: YOUR_WORKSPACE_ID"
```

Run `/mcp` inside Claude Code to confirm `kloudmate` shows as connected and to see the tools it exposes.
Expand All @@ -71,7 +75,8 @@ Create or edit `~/.cursor/mcp.json` (global, all projects) or `.cursor/mcp.json`
"kloudmate": {
"url": "https://api.kloudmate.com/mcp",
"headers": {
"Authorization": "Bearer ${env:KLOUDMATE_API_KEY}"
"Authorization": "Bearer ${env:KLOUDMATE_API_KEY}",
"x-workspace-id": "YOUR_WORKSPACE_ID"
}
}
}
Expand All @@ -91,7 +96,7 @@ Create `.vscode/mcp.json` in your workspace. The `inputs` block prompts you for
{
"type": "promptString",
"id": "kloudmate-api-key",
"description": "KloudMate User API Key",
"description": "KloudMate Personal API Key",
"password": true
}
],
Expand All @@ -100,7 +105,8 @@ Create `.vscode/mcp.json` in your workspace. The `inputs` block prompts you for
"type": "http",
"url": "https://api.kloudmate.com/mcp",
"headers": {
"Authorization": "Bearer ${input:kloudmate-api-key}"
"Authorization": "Bearer ${input:kloudmate-api-key}",
"x-workspace-id": "YOUR_WORKSPACE_ID"
}
}
}
Expand All @@ -126,7 +132,9 @@ Open `claude_desktop_config.json` (**Settings → Developer → Edit Config**) a
"mcp-remote",
"https://api.kloudmate.com/mcp",
"--header",
"Authorization:${AUTH_HEADER}"
"Authorization:${AUTH_HEADER}",
"--header",
"x-workspace-id:YOUR_WORKSPACE_ID"
],
"env": {
"AUTH_HEADER": "Bearer YOUR_API_KEY"
Expand All @@ -146,15 +154,15 @@ The config file lives at:
</TabItem>
</Tabs>

Using a different client? Point it at `https://api.kloudmate.com/mcp` with an `Authorization: Bearer YOUR_API_KEY` header. Any client that speaks Streamable HTTP and lets you set request headers can connect.
Using a different client? Point it at `https://api.kloudmate.com/mcp` with an `Authorization: Bearer YOUR_API_KEY` header and an `x-workspace-id: YOUR_WORKSPACE_ID` header. Any client that speaks Streamable HTTP and lets you set request headers can connect.

## Verify the connection

Once the server is connected, your client lists the KloudMate tools and your agent can call them. The quickest check is to ask a question that needs live data:

> Which alerts are firing in KloudMate right now?

If the connection is healthy, the agent calls a KloudMate tool and answers from your workspace. If it reports an authentication failure, the key is likely wrong, revoked, or missing the `Bearer ` prefix — recheck the header and try again.
If the connection is healthy, the agent calls a KloudMate tool and answers from your workspace. If it reports an authentication failure, the key is likely wrong, deleted, or missing the `Bearer ` prefix. Recheck the header and try again.

## Available tools

Expand Down Expand Up @@ -218,14 +226,14 @@ A triage workflow, for example, might pull the currently firing alerts, scope th
A few things worth keeping in mind:

- **Read-only.** The server can't change anything in your workspace. Connecting it can't cause an outage or alter a dashboard.
- **Workspace-scoped.** The key binds the connection to one workspace. Use separate keys for separate workspaces.
- **Scoped to you.** The key carries your own account's permissions, and the `x-workspace-id` header picks which workspace each request reads. It can't reach a workspace you can't.
- **Keep the key secret.** Prefer the environment-variable or prompted-secret options above over pasting the key into a file. Add config files that contain a key to `.gitignore`.
- **Revoke when needed.** If a key is exposed or no longer used, revoke it from **Settings → API Keys**. Any client using it stops working immediately.
- **Delete when needed.** If a key is exposed or no longer used, delete it from the **Personal API Keys** screen in your account menu. Any client using it stops working immediately.

## Related

<CardGrid>
<LinkCard title="API Keys" description="Create the User Key the MCP server authenticates with, and manage ingest keys." href="../../platform/settings/api-keys/#user-key" />
<LinkCard title="API Keys" description="Create the personal key the MCP server authenticates with, and manage ingest keys." href="../../platform/settings/api-keys/#personal-api-keys" />
<LinkCard title="Assistant Settings" description="Connect external MCP servers and tools into the KloudMate Assistant." href="../settings/#mcp-integrations" />
<LinkCard title="Investigations" description="Run AI-assisted root cause analysis inside KloudMate." href="../investigations/" />
<LinkCard title="KloudMate Assistant" description="The in-app AI assistant for monitoring, dashboards, and RCA." href="../" />
Expand Down
Loading
Loading