Whizard Telemetry Ruler logo

Whizard Telemetry Ruler

OrganizationPopular
kubesphere
whizard-telemetry-ruler

Use when working with WizTelemetry Ruler extension for KubeSphere, including installation, configuration, alerting rules management

Overview

Publisherkubesphere
Repositorykubesphere
Skill namewhizard-telemetry-ruler
Stars
17.1K
Forks
2.8K
Bundled files
Instructions only
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • Self-contained

    Everything the model needs lives in the instructions — no extra files to sync.

  • Open source

    Published by kubesphere on GitHub. Read the source before you install it.

Installation

Install the Whizard Telemetry Ruler AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/kubesphere/kubesphere.git /tmp/kubesphere
mkdir -p .claude/skills
cp -r /tmp/kubesphere/skills/whizard-telemetry-ruler .claude/skills/whizard-telemetry-ruler
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Whizard Telemetry Ruler in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Whizard Telemetry Ruler on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Whizard Telemetry Ruler is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

WizTelemetry Ruler

Overview

WizTelemetry Ruler is an extension component in the KubeSphere Observability Platform that provides event alerting and log alerting capabilities. It can define alerting rules for K8s native events, K8s/KubeSphere auditing events, and K8s logs, evaluate incoming event data and log data, and send alerts to specified receivers such as alertmanager, etc.

When to Use

  • Installing or configuring the WizTelemetry Ruler extension
  • Creating, updating, or deleting alerting rules (RuleGroup/ClusterRuleGroup)
  • Managing alerting configurations
  • Using the ruler API to manage alerting rules

Components

ComponentDescriptionDefault Enabled
whizard-telemetry-rulerCore ruler component for alertingtrue

Dependencies

  • WizTelemetry Platform Service (whizard-telemetry): Required
  • WizTelemetry Events (whizard-events): Required if event alerting is enabled
  • WizTelemetry Auditing (whizard-auditing): Required if auditing alerting is enabled
  • WizTelemetry Logging (whizard-logging): Required if logging alerting is enabled
  • WizTelemetry Notification (whizard-notification): Optional (for alert notification)
  • WizTelemetry Data Pipeline (vector): Required if alerting persistence is enabled
  • OpenSearch (opensearch): Required if alerting persistence is enabled

Installation

Prerequisites

REQUIRED: Complete all steps in order before generating InstallPlan.

Step 1: Get Available Clusters and Confirm Target

⚠️ CRITICAL: DO NOT proceed until target clusters are determined.

Step 1.1: Get available clusters

bash
kubectl get clusters -o jsonpath='{.items[*].metadata.name}'

Step 1.2: Determine target clusters

  • If user explicitly specified target clusters in the request → Use those clusters directly, proceed to Step 2
  • If user did NOT specify target clusters → Ask user to confirm which clusters to deploy to, then proceed to Step 2

Ask user (if not specified):

Available clusters: host, dev
Which clusters do you want to deploy WizTelemetry Ruler to?
Step 2: Get Latest Version (if not provided by user)

MUST do this to get the latest version:

bash
kubectl get extensionversions -n kubesphere-system -l kubesphere.io/extension-ref=whizard-telemetry-ruler -o jsonpath='{range .items[*]}{.spec.version}{"\n"}{end}' | sort -V | tail -1

This outputs the latest version (e.g., 1.5.0). Note this down - you'll use it in the InstallPlan.

Step 3: Get AlertManager Host (if configuring sink)

Only perform this step if you need to configure sink for alert notifications.

The AlertManager proxy service (alertmanager-proxy) is deployed in the host cluster and exposed via NodePort (default port: 31093).

Step 3.1: Get a host node IP

bash
kubectl get nodes -o jsonpath='{.items[0].status.addresses[?(@.type=="InternalIP")].address}'

Step 3.2: Confirm with user

Ask user to confirm the AlertManager host IP:

Detected AlertManager host: <NODE_IP>
Detected AlertManager port: 31093
Alert URL: http://<NODE_IP>:31093/api/v1/alerts

Do you want to use this URL for alert notifications?
  • If user confirms → Use http://<NODE_IP>:31093/api/v1/alerts as the sink URL
  • If user provides different URL → Use the user-specified URL

Note: If using WizTelemetry Notification extension, ensure it is installed before installing WizTelemetry Ruler.

Install WizTelemetry Ruler

⚠️ IMPORTANT: Complete prerequisite steps BEFORE this step.

Based on your selections:

  • Target clusters: User-confirmed cluster names
  • AlertManager URL: From Step 3 (if configuring sink)

⚠️ CRITICAL: InstallPlan metadata.name MUST be whizard-telemetry-ruler. DO NOT use any other name.

⚠️ CRITICAL: config field is YAML format. You MUST:

  • Use the config structure exactly as shown in the template
  • DO NOT add configuration fields that are not shown in the template
  • DO NOT modify the structure or hierarchy

⚠️ CRITICAL: All placeholders MUST be replaced with actual values. DO NOT leave them as placeholders.

Basic Installation Template (with AlertManager)
yaml
apiVersion: kubesphere.io/v1alpha1
kind: InstallPlan
metadata:
  name: whizard-telemetry-ruler
  namespace: kubesphere-system
spec:
  extension:
    name: whizard-telemetry-ruler
    version: <VERSION>  # From Step 2
  enabled: true
  upgradeStrategy: Manual
  config: |
    whizard-telemetry-ruler:
      config:
        sinks:
          - name: alertmanager
            type: webhook
            config:
              url: http://<ALERT_MANAGER_HOST>:31093/api/v1/alerts  # From Step 3
  clusterScheduling:
    placement:
      clusters:
        - <TARGET_CLUSTERS>
Installation with Custom Configuration Template (with all alerting types)
yaml
apiVersion: kubesphere.io/v1alpha1
kind: InstallPlan
metadata:
  name: whizard-telemetry-ruler
  namespace: kubesphere-system
spec:
  extension:
    name: whizard-telemetry-ruler
    version: <VERSION>  # From Step 2
  enabled: true
  upgradeStrategy: Manual
  config: |
    whizard-telemetry-ruler:
      auditingAlerting:
        enabled: true
      eventsAlerting:
        enabled: true
      loggingAlerting:
        enabled: false
      config:
        sinks:
        - name: alertmanager
          type: webhook
          config:
            url: http://<ALERT_MANAGER_HOST>:31093/api/v1/alerts  # From Step 3
  clusterScheduling:
    placement:
      clusters:
        - <TARGET_CLUSTERS>

Replace placeholders:

  • <VERSION>: From Step 2 (e.g., 1.5.0)
  • <TARGET_CLUSTERS>: User-confirmed cluster names
  • <ALERT_MANAGER_HOST>: From Step 3 (auto-detected or user-confirmed node IP)
Enable Log Alerting Template
yaml
apiVersion: kubesphere.io/v1alpha1
kind: InstallPlan
metadata:
  name: whizard-telemetry-ruler
  namespace: kubesphere-system
spec:
  extension:
    name: whizard-telemetry-ruler
    version: <VERSION>  # From Step 2
  enabled: true
  upgradeStrategy: Manual
  config: |
    whizard-telemetry-ruler:
      auditingAlerting:
        enabled: true
      eventsAlerting:
        enabled: true
      loggingAlerting:
        enabled: true
      config:
        sinks:
        - name: alertmanager
          type: webhook
          config:
            url: http://<ALERT_MANAGER_HOST>:31093/api/v1/alerts  # From Step 3
  clusterScheduling:
    placement:
      clusters:
        - <TARGET_CLUSTERS>
Enable Alerting Persistence Template
yaml
apiVersion: kubesphere.io/v1alpha1
kind: InstallPlan
metadata:
  name: whizard-telemetry-ruler
  namespace: kubesphere-system
spec:
  extension:
    name: whizard-telemetry-ruler
    version: <VERSION>  # From Step 2
  enabled: true
  upgradeStrategy: Manual
  config: |
    global:
       alertingPersistence:
         enabled: true
    whizard-telemetry-ruler:
      config:
        sinks:
        - name: alertmanager
          type: webhook
          config:
            url: http://<ALERT_MANAGER_HOST>:31093/api/v1/alerts  # From Step 3
    alerting-persistence:
      sinks:
        opensearch:
          enabled: true
  clusterScheduling:
    placement:
      clusters:
        - <TARGET_CLUSTERS>

Configuration Parameters

Alerting Type Parameters

ParameterTypeDefaultDescription
whizard-telemetry-ruler.auditingAlerting.enabledbooltrueEnable auditing alert
whizard-telemetry-ruler.eventsAlerting.enabledbooltrueEnable events alert
whizard-telemetry-ruler.loggingAlerting.enabledboolfalseEnable log alert

Sink Configuration Parameters

ParameterTypeDefaultDescription
whizard-telemetry-ruler.config.sinks[].namestringSink name
whizard-telemetry-ruler.config.sinks[].typestringSink type (webhook, etc.)
whizard-telemetry-ruler.config.sinks[].config.urlstringWebhook URL

Alert Persistence Parameters (Optional)

ParameterTypeDefaultDescription
global.alertingPersistence.enabledboolfalseEnable alert persistence
alerting-persistence.sinks.opensearch.enabledboolfalseEnable OpenSearch sink for alerts
alerting-persistence.sinks.opensearch.ism_policy.enablebooltrueEnable ISM policy
alerting-persistence.sinks.opensearch.ism_policy.min_index_agestring"7d"Minimum index retention period

Resource Parameters

ParameterTypeDefaultDescription
whizard-telemetry-ruler.resources.limits.cpustring2ruler CPU limit
whizard-telemetry-ruler.resources.limits.memorystring4Giruler memory limit
whizard-telemetry-ruler.resources.requests.cpustring100mruler CPU request
whizard-telemetry-ruler.resources.requests.memorystring20Miruler memory request
whizard-telemetry-ruler.kubectl.resources.limits.cpustring100mkubectl CPU limit
whizard-telemetry-ruler.kubectl.resources.limits.memorystring256Mikubectl memory limit
whizard-telemetry-ruler.kubectl.resources.requests.cpustring100mkubectl CPU request
whizard-telemetry-ruler.kubectl.resources.requests.memorystring256Mikubectl memory request

Node Scheduling Parameters

ParameterTypeDefaultDescription
whizard-telemetry-ruler.nodeSelectormap{}Node selector
whizard-telemetry-ruler.tolerationslist[]Tolerations
whizard-telemetry-ruler.affinitymap{}Affinity

Alerting Rule API

RuleGroup API (Namespaced)

List RuleGroups
bash
curl -X GET "http://whizard-telemetry-apiserver.extension-whizard-telemetry.svc:80/kapis/logging.whizard.io/v1alpha1/namespaces/<namespace>/rulegroups?clusterName=host" \
  -H "X-Remote-User: admin"
Get RuleGroup
bash
curl -X GET "http://whizard-telemetry-apiserver.extension-whizard-telemetry.svc:80/kapis/logging.whizard.io/v1alpha1/namespaces/<namespace>/rulegroups/<name>?clusterName=host" \
  -H "X-Remote-User: admin"
Create RuleGroup
bash
curl -X POST "http://whizard-telemetry-apiserver.extension-whizard-telemetry.svc:80/kapis/logging.whizard.io/v1alpha1/namespaces/<namespace>/rulegroups?clusterName=host" \
  -H "X-Remote-User: admin" \
  -H "Content-Type: application/json" \
  -d '{
    "apiVersion": "logging.whizard.io/v1alpha1",
    "kind": "RuleGroup",
    "metadata": {
      "name": "<rulegroup-name>",
      "namespace": "<namespace>"
    },
    "spec": {
      "type": "events",
      "rules": [
        {
          "name": "test-rule",
          "desc": "Test rule",
          "enable": true,
          "expr": {
            "kind": "rule",
            "condition": "reason == \"FailedCreatePodSandBox\""
          },
          "alerts": {
            "severity": "warning",
            "message": "Pod sandbox creation failed",
            "labels": {
              "alert": "test"
            },
            "annotations": {
              "summary": "Pod sandbox creation failed"
            }
          }
        }
      ]
    }
  }'
Update RuleGroup
bash
curl -X PUT "http://whizard-telemetry-apiserver.extension-whizard-telemetry.svc:80/kapis/logging.whizard.io/v1alpha1/namespaces/<namespace>/rulegroups/<name>?clusterName=host" \
  -H "X-Remote-User: admin" \
  -H "Content-Type: application/json" \
  -d '<UPDATED_RULEGROUP>'
Delete RuleGroup
bash
curl -X DELETE "http://whizard-telemetry-apiserver.extension-whizard-telemetry.svc:80/kapis/logging.whizard.io/v1alpha1/namespaces/<namespace>/rulegroups/<name>?clusterName=host" \
  -H "X-Remote-User: admin"

ClusterRuleGroup API (Cluster-scoped)

List ClusterRuleGroups
bash
curl -X GET "http://whizard-telemetry-apiserver.extension-whizard-telemetry.svc:80/kapis/logging.whizard.io/v1alpha1/clusterrulegroups?clusterName=host" \
  -H "X-Remote-User: admin"
Get ClusterRuleGroup
bash
curl -X GET "http://whizard-telemetry-apiserver.extension-whizard-telemetry.svc:80/kapis/logging.whizard.io/v1alpha1/clusterrulegroups/<name>?clusterName=host" \
  -H "X-Remote-User: admin"
Create ClusterRuleGroup
bash
curl -X POST "http://whizard-telemetry-apiserver.extension-whizard-telemetry.svc:80/kapis/logging.whizard.io/v1alpha1/clusterrulegroups?clusterName=host" \
  -H "X-Remote-User: admin" \
  -H "Content-Type: application/json" \
  -d '{
    "apiVersion": "logging.whizard.io/v1alpha1",
    "kind": "ClusterRuleGroup",
    "metadata": {
      "name": "<clusterrulegroup-name>"
    },
    "spec": {
      "type": "auditing",
      "rules": [
        {
          "name": "audit-rule",
          "desc": "Audit rule",
          "enable": true,
          "expr": {
            "kind": "rule",
            "condition": "verb == \"delete\""
          },
          "alerts": {
            "severity": "error",
            "message": "Delete operation detected",
            "labels": {
              "type": "audit"
            }
          }
        }
      ]
    }
  }'
Delete ClusterRuleGroup
bash
curl -X DELETE "http://whizard-telemetry-apiserver.extension-whizard-telemetry.svc:80/kapis/logging.whizard.io/v1alpha1/clusterrulegroups/<name>?clusterName=host" \
  -H "X-Remote-User: admin"

Alert Query API

Query Alerts

Query alerts with filters and time range:

bash
curl -X POST "http://whizard-telemetry-apiserver.extension-whizard-telemetry.svc:80/kapis/events.alerting.wiztelemetry.io/v1alpha1/query" \
  -H "X-Remote-User: admin" \
  -H "Content-Type: application/json" \
  -d '{
    "cluster": "host",
    "startTime": 1704067200,
    "endTime": 1704153600,
    "from": 0,
    "size": 10,
    "order": "descending",
    "parameters": [
      {
        "field": "severity",
        "operator": "=",
        "value": "error"
      },
      {
        "field": "alertname",
        "operator": "?",
        "values": ["pod*"]
      }
    ]
  }'

Query Statistics

Get alert statistics (overview, histogram, by severity, etc.):

bash
curl -X POST "http://whizard-telemetry-apiserver.extension-whizard-telemetry.svc:80/kapis/events.alerting.wiztelemetry.io/v1alpha1/statistics" \
  -H "X-Remote-User: admin" \
  -H "Content-Type: application/json" \
  -d '{
    "cluster": "host",
    "statisticsType": 501,
    "startTime": 1704067200,
    "endTime": 1704153600
  }'

Alert Query Parameters

ParameterTypeRequiredDescription
clusterstringYesCluster name (e.g., host, member-1)
startTimeint64NoStart time (Unix timestamp), default: 30 days ago
endTimeint64NoEnd time (Unix timestamp), default: now
fromint64NoOffset for pagination, default: 0
sizeint64NoNumber of results, default: 10
orderstringNoSort order: "ascending" or "descending", default: descending
statisticsTypeintNoStatistics type (see Statistics Type Values)
parametersarrayNoFilter parameters

Filter Parameter Structure

FieldTypeDescription
fieldstringField name to filter on
operatorstringOperator (see Filter Operators)
valueinterface{}Single value for =, !=, >, >=, <, <=
valuesarrayMultiple values for In, NotIn, ?, !?, , !

Filter Operators

OperatorSymbolDescription
Equals=Exact match
NotEquals!=Not equal
Greater>Greater than
GreaterOrEqual>=Greater or equal
Less<Less than
LessOrEqual<=Less or equal
InInIn list
NotInNotInNot in list
MatchesFuzzy?Fuzzy match (supports * and ?)
NotMatchesFuzzy!?Not fuzzy match
MatchesRegex~Regex match
NotMatchesRegex!~Not regex match
ExistsExistsField exists
NotExistsNotExistsField does not exist

Statistics Type Values

TypeValueDescription
StatisticsEventsAlertingNone500No statistics
StatisticsEventsAlertingDateHistogram501Time histogram
StatisticsEventsAlertingOverview502Overview count
StatisticsEventsAlertingByNamespace503By namespace
StatisticsEventsAlertingByRuleGroup504By rule group
StatisticsEventsAlertingByAlertName505By alert name
StatisticsEventsAlertingByAlertType506By alert type
StatisticsEventsAlertingBySeverity507By severity

Available Alert Fields

FieldTypeDescription
alertnamestringAlert name
severitystringAlert severity (info, warning, error, critical)
namespacestringNamespace
rulegroupstringRule group name
clusterstringCluster name
rulekindstringRule kind (RuleGroup, ClusterRuleGroup)
ruletypestringRule type (events, auditing, logs)
alerttypestringAlert type
labelsstringAlert labels (JSON string)
annotationsstringAlert annotations (JSON string)
firingboolIs firing
pendingboolIs pending
inhibitedboolIs inhibited
silencedboolIs silenced
startsatint64Start timestamp
endsatint64End timestamp
updatedatint64Update timestamp

Alert Query Examples

Query by Severity
json
{
  "cluster": "host",
  "parameters": [
    {
      "field": "severity",
      "operator": "=",
      "value": "error"
    }
  ],
  "size": 20
}
Query by Time Range
json
{
  "cluster": "host",
  "startTime": 1704067200,
  "endTime": 1704153600,
  "size": 100
}
Query by Namespace and RuleGroup
json
{
  "cluster": "host",
  "parameters": [
    {
      "field": "namespace",
      "operator": "=",
      "value": "default"
    },
    {
      "field": "rulegroup",
      "operator": "=",
      "value": "my-rule-group"
    }
  ]
}
Fuzzy Match Alert Name
json
{
  "cluster": "host",
  "parameters": [
    {
      "field": "alertname",
      "operator": "?",
      "values": ["pod*", "container*"]
    }
  ]
}
Query with Statistics
json
{
  "cluster": "host",
  "startTime": 1704067200,
  "endTime": 1704153600,
  "statisticsType": 507
}

RuleGroup API Query Parameters

ParameterTypeDescription
clusterstringCluster name, empty means host cluster
namestringName used for filtering
labelSelectorstringLabel selector used for filtering
statusstringFilter by enabled status (true or false)
builtinstringFilter by builtin status (true or false)
typestringFilter by type (logs, events, auditing)
pageintPage number
limitintItems per page
orderBystringSort parameter (e.g., createTime)
ascendingboolSort order

Rule Type Values

TypeDescription
eventsK8s native events
auditingK8s/KubeSphere auditing events
logsK8s container logs

Alert Severity Values

SeverityDescription
infoInformational
warningWarning
errorError
criticalCritical

Rule Expression Kind Values

KindDescription
ruleRegular rule with condition
macroMacro rule
listList rule
aliasAlias rule

Condition Detailed Explanation

The condition field is used to filter events/logs/auditing that match specific criteria. It supports various operators and field references.

Operators
OperatorDescriptionExample
==Equalsreason == "FailedCreatePodSandBox"
!=Not equalsverb != "delete"
=~Regex matchmessage =~ "error.*failed"
!~Not regex matchmessage !~ "debug"
&&ANDreason == "Failed" && type == "Warning"
||ORreason == "Failed" || reason == "Error"
Available Fields by Type
Events Type (type: events)
FieldTypeDescription
reasonstringEvent reason (e.g., FailedCreatePodSandBox)
typestringEvent type (Normal, Warning)
involvedObject.kindstringObject kind (Pod, Deployment, etc.)
involvedObject.namestringObject name
involvedObject.namespacestringObject namespace
messagestringEvent message
sourcestringEvent source component
countintEvent count

Events Examples:

json
// Alert when pod sandbox creation fails
"condition": "reason == \"FailedCreatePodSandBox\""

// Alert on warning events for specific namespace
"condition": "type == \"Warning\" && involvedObject.namespace == \"default\""

// Alert when event count exceeds threshold
"condition": "count >= 5"
Auditing Type (type: auditing)
FieldTypeDescription
verbstringHTTP verb (get, post, put, delete, etc.)
userstringUsername
sourceIPsstringSource IP addresses
resource.groupstringResource API group
resource.versionstringResource API version
resource.resourcestringResource type (pods, deployments, etc.)
objectRef.namestringObject name
objectRef.namespacestringObject namespace
responseStatus.codeintHTTP response code
levelstringAudit level (None, Metadata, Request, RequestResponse)

Auditing Examples:

json
// Alert on delete operations
"condition": "verb == \"delete\""

// Alert on failed requests (4xx/5xx)
"condition": "responseStatus.code >= 400"

// Alert on specific user activity
"condition": "user == \"admin\" && verb == \"delete\""

// Alert on sensitive resources
"condition": "resource.resource == \"secrets\""
Logs Type (type: logs)
FieldTypeDescription
logstringLog message content
containerstringContainer name
podstringPod name
namespacestringNamespace name
clusterstringCluster name

Logs Examples:

json
// Alert on error keyword
"condition": "log contains \"error\""

// Alert on specific container
"condition": "container == \"nginx\""

// Alert on OOM kills
"condition": "log contains \"OOMKilled\""

// Alert on multiple keywords
"condition": "log contains \"failed\" && log contains \"connection\""

// Alert using regex
"condition": "log =~ \"error.*timeout|timeout.*error\""
Macro Usage

Macros allow reusable expressions:

json
{
  "expr": {
    "kind": "macro",
    "macro": "high_error_rate"
  }
}
List Usage

Lists allow grouping values:

json
{
  "expr": {
    "kind": "list",
    "list": ["error", "warning", "critical"]
  }
}
Alias Usage

Aliases provide descriptive names for complex expressions:

json
{
  "expr": {
    "kind": "alias",
    "alias": "Pod_Sandbox_Failure"
  }
}

Sliding Window Alert (Log Alerting)

For log alerting with sliding window:

json
{
  "name": "log-rate-rule",
  "desc": "Log rate alert",
  "enable": true,
  "expr": {
    "kind": "rule",
    "condition": "log contains \"error\""
  },
  "alerts": {
    "severity": "error",
    "message": "High error log rate"
  },
  "slidingWindow": {
    "windowSize": "5m",
    "slidingInterval": "1m",
    "count": 100
  }
}
ParameterTypeDescription
slidingWindow.windowSizestringWindow size (e.g., "300ms", "5m")
slidingWindow.slidingIntervalstringSlide step (must be less than windowSize)
slidingWindow.countintCount threshold to trigger alert

Extension Operations

Check Extension Status

bash
kubectl get installplan whizard-telemetry-ruler
kubectl get extensionversions -l kubesphere.io/extension-ref=whizard-telemetry-ruler

Uninstall Extension

Uninstall from all clusters:

bash
kubectl delete installplan whizard-telemetry-ruler

Uninstall from specific cluster:

To remove WizTelemetry Ruler from a specific cluster, update the InstallPlan by removing that cluster from clusterScheduling.placement.clusters:

yaml
apiVersion: kubesphere.io/v1alpha1
kind: InstallPlan
metadata:
  name: whizard-telemetry-ruler
  namespace: kubesphere-system
spec:
  extension:
    name: whizard-telemetry-ruler
    version: <VERSION>
  enabled: true
  upgradeStrategy: Manual
  clusterScheduling:
    placement:
      clusters:
        - <REMAINING_CLUSTERS>  # Remove the cluster you want to uninstall from

Alert Notification Configuration

To send alerts through WizTelemetry Notification extension, configure the sink URL to point to the alertmanager-proxy service.

Auto-detection (recommended): Use the command from Step 3 to get the host node IP automatically.

yaml
whizard-telemetry-ruler:
  config:
    sinks:
    - name: alertmanager
      type: webhook
      config:
        url: http://<ALERT_MANAGER_HOST>:31093/api/v1/alerts
  • <ALERT_MANAGER_HOST>: From Step 3 (auto-detected or user-confirmed)
  • Default NodePort: 31093
  • Service: alertmanager-proxy in kubesphere-system namespace

Frequently asked questions

What does the Whizard Telemetry Ruler AI skill do?

Use when working with WizTelemetry Ruler extension for KubeSphere, including installation, configuration, alerting rules management

Why use Whizard Telemetry Ruler on TypingMind?

Because you install it once and use it with any model. Whizard Telemetry Ruler is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Whizard Telemetry Ruler in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/kubesphere/kubesphere/tree/master/skills/whizard-telemetry-ruler. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Whizard Telemetry Ruler?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Whizard Telemetry Ruler?

As many as you like. As long as a model supports skills, you can use Whizard Telemetry Ruler with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Whizard Telemetry Ruler AI skill free?

It is published on GitHub by kubesphere. Check the repository for licensing terms. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇