{"id":"9945f511-1ca7-49f6-a754-2111609fdfe6","shortId":"kyC8nJ","kind":"skill","title":"whizard-notification","tagline":"Use when working with WizTelemetry Notification extension for KubeSphere, including installation, configuration, troubleshooting, notification channel setup, alert routing, and silence management.","description":"# WizTelemetry Notification\n\n## Overview\n\nWizTelemetry Notification is the notification component of the KubeSphere observability platform. It receives alerts, cloud events, and audit logs in a multi-tenant Kubernetes environment and distributes notifications to different channels based on tenant labels (e.g., namespace).\n\n\n## Architecture\n\n```\n┌──────────────────────────────────────────────────────────────────────────────┐\n│                             Alertmanager                                     │\n│      Prometheus  ──▶ metrics alert  ──▶ notification-manager-svc:19093       │\n│      K8s Events  ──▶ events alert   ──▶ notification-manager-svc:19093       │\n│      Auditing    ──▶ auditing alert ──▶ notification-manager-svc:19093       │\n│      Logging     ──▶ logging alert  ──▶ notification-manager-svc:19093       │\n└──────────────────────────────────────────────────────────────────────────────┘\n                                    │\n                    notification-manager (:19093)\n                                    │\n         ┌──────────────────────────┼──────────────────────────┐\n         │                          │                          │\n    [Silence Stage]          [Route Stage]             [Filter Stage]\n         │                          │                          │\n         ▼                          ▼                          ▼\n [Match Silence CRs]         [Match Router CRs]      [alertSelector filtering]\n                                 │\n                          [Aggregation Stage]\n                                 │\n                          [Notify Stage]\n                                 │\n         ┌────────────────────────┼────────────────────────────┐\n         │                        │                            │\n    Email/Slack              DingTalk/Feishu            WeChat/Webhook\n         │\n         ▼\n  [History Webhook]\n         │\n         ▼\n┌─────────────────────┐\n│  Vector Aggregator  │\n└────────┬────────────┘\n         │\n         │\n         ▼\n     OpenSearch\n```\n\n## Components\n\n| Component | Description | Default |\n|-----------|-------------|---------|\n| **notification-manager** | Core notification management, receives alerts, dispatches to channels | true |\n| **alertmanager** (v0.27.0) | Alert routing, deduplication, aggregation, silencing | true |\n| **alertmanager-proxy** | Alertmanager API proxy, NodePort 31093 | true |\n| **notification-history** | Stores sent notifications via Vector to OpenSearch | true |\n\n## Dependencies\n\n| Dependency | Type | Required |\n|------------|------|----------|\n| **whizard-telemetry** | extension | Required |\n| **vector** (WizTelemetry Data Pipeline) | extension | Required only notification history is enabled |\n| **opensearch** | extension | Required only notification history is enabled |\n\n## CRDs\n\nAll CRDs belong to `notification.kubesphere.io/v2beta2`, scope is Cluster.\n\n| CRD | Kind | Description |\n|-----|------|-------------|\n| `notificationmanagers.notification.kubesphere.io` | NotificationManager | Notification manager deployment spec (image, replicas, resources, sidecar, receiver config) |\n| `receivers.notification.kubesphere.io` | Receiver | Tenant-level notification receiver, references Config |\n| `configs.notification.kubesphere.io` | Config | Credential references (via Secret selectors), independent per channel |\n| `routers.notification.kubesphere.io` | Router | Route alerts to receivers based on label matchers |\n| `silences.notification.kubesphere.io` | Silence | Time-bounded silencing, supports matchers |\n\n### Supported Notification Channels (11 channels)\n\n| Channel | Receiver Field | Config Field | Description |\n|---------|---------------|--------------|-------------|\n| Email | `spec.email` | `spec.email` | SMTP with TLS/STARTTLS support |\n| Slack | `spec.slack` | `spec.slack` | Slack webhook + token |\n| DingTalk | `spec.dingtalk` | `spec.dingtalk` | ChatBot + group conversation |\n| WeChat | `spec.wechat` | `spec.wechat` | ChatBot + group conversation |\n| Feishu | `spec.feishu` | `spec.feishu` | ChatBot + group conversation |\n| Webhook | `spec.webhook` | `spec.webhook` | Generic HTTP / HTTPS POST |\n\n### Config → Receiver Association Mechanism\n\n```\nConfig (credentials) --labels--> Receiver (via label selector) --labels--> Router (route matching)\n                        │\n                        └── namespace for multi-tenant isolation\n```\n\nConfig's `labels` are used by Receiver's `*ConfigSelector`. Receiver's `labels` are used by Router's `receiverSelector`.\n\n## Installation\n\n### Prerequisites\n\n**REQUIRED: Complete all steps in order before generating InstallPlan.**\n\n#### Step 1: Get Latest Version (if not provided by user)\n\n```bash\nkubectl get extensionversions -l kubesphere.io/extension-ref=whizard-notification -o jsonpath='{range .items[*]}{.spec.version}{\"\\n\"}{end}' | sort -V | tail -1\n```\n\nThis outputs the latest version (e.g., `2.7.0`). Note this down.\n\n\n#### Step 2: Create InstallPlan\n\n**CRITICAL:**\n- `metadata.name` MUST be `whizard-notification`\n- `config` field is YAML format\n- DO NOT add fields not shown in the template\n- Replace all placeholders with actual values\n\n**Basic installation:**\n\n```yaml\napiVersion: kubesphere.io/v1alpha1\nkind: InstallPlan\nmetadata:\n  name: whizard-notification\nspec:\n  extension:\n    name: whizard-notification\n    version: <VERSION>  # From Step 1\n  enabled: true\n  upgradeStrategy: Manual\n```\n\n**Disable notification history:**\n\n```yaml\napiVersion: kubesphere.io/v1alpha1\nkind: InstallPlan\nmetadata:\n  name: whizard-notification\nspec:\n  extension:\n    name: whizard-notification\n    version: <VERSION>\n  enabled: true\n  upgradeStrategy: Manual\n  config: |\n    notification-history:\n      enabled: false\n```\n\n**Custom index format (monthly):**\n\n```yaml\nnotification-history:\n  sinks:\n    opensearch:\n      index:\n        prefix: \"{{ .cluster }}-notification-history\"\n        timestring: \"%Y.%m\"\n```\n\n## Configuration Parameters\n\n### Notification History\n\n| Parameter | Type | Default | Description |\n|-----------|------|---------|-------------|\n| `notification-history.enabled` | bool | true | Enable notification history storage |\n| `notification-history.sinks.opensearch.enabled` | bool | true | Enable OpenSearch sink |\n| `notification-history.sinks.opensearch.index.prefix` | string | `{{ .cluster }}-notification-history` | Index prefix, supports template |\n| `notification-history.sinks.opensearch.index.timestring` | string | `%Y.%m.%d` | strftime format |\n| `notification-history.ism_policy.enable` | bool | false | Enable ISM policy |\n| `notification-history.ism_policy.min_index_age` | string | `7d` | Minimum index retention |\n\n### Alertmanager\n\n| Parameter | Type | Default | Description |\n|-----------|------|---------|-------------|\n| `alertmanager.replicaCount` | int | 1 | Replica count |\n| `alertmanager.replicaAutoSet` | bool | true | Auto set replicas by node count (<3=1, >=3=3) |\n| `alertmanager.service.nodePort` | int | 31093 | NodePort (alertmanager-proxy) |\n| `alertmanager.config.group_wait` | string | 30s | Alert aggregation wait time |\n| `alertmanager.config.repeat_interval` | string | 12h | Repeat alert interval |\n| `alertmanager.config.route.receiver` | string | Default | Default receiver |\n| `alertmanager.config.inhibit_rules` | list | see below | Inhibition rules (critical→warning→info) |\n\n**Default inhibit_rules:**\n- `critical` alerts silence `warning` and `info` with same labels\n- `warning` alerts silence `info` with same labels\n- `InfoInhibitor` silences all `info` level alerts\n\n### Notification Manager\n\n| Parameter | Type | Default | Description |\n|-----------|------|---------|-------------|\n| `notification-manager.notificationmanager.sidecar.tenant.resources.limits.cpu` | string | 200m | Sidecar CPU limit |\n| `notification-manager.notificationmanager.sidecar.tenant.resources.limits.memory` | string | 512Mi | Sidecar memory limit |\n| `notification-manager.notificationmanager.sidecar.tenant.resources.requests.cpu` | string | 200m | Sidecar CPU request |\n| `notification-manager.notificationmanager.sidecar.tenant.resources.requests.memory` | string | 256Mi | Sidecar memory request |\n| `notification-manager.operator.containers.operator.resources.limits.cpu` | string | 50m | notification manager operator CPU limit |\n| `notification-manager.operator.containers.operator.resources.limits.memory` | string | 50Mi | notification manager operator memory limit |\n| `notification-manager.operator.containers.operator.resources.requests.cpu` | string | 5m | notification manager operator CPU request |\n| `notification-manager.operator.containers.operator.resources.requests.memory` | string | 20Mi | notification manager operator memory request |\n| `notification-manager.notificationmanager.resources.limits.cpu` | string | 500m | notification manager CPU limit |\n| `notification-manager.notificationmanager.resources.limits.memory` | string | 500Mi | notification manager memory limit |\n| `notification-manager.notificationmanager.resources.requests.cpu` | string | 5m | notification manager CPU request |\n| `notification-manager.notificationmanager.resources.requests.memory` | string | 20Mi | notification manager memory request |\n| `notification-manager.notificationmanager.replicas` | int | 1 | notification manager replicas |\n\n### Alertmanager-Proxy\n\n| Parameter | Type | Default | Description |\n|-----------|------|---------|-------------|\n| `alertmanager-proxy.service.nodePort` | int | 31093 | NodePort |\n| `alertmanager-proxy.resources.limits.cpu` | string | 500m | CPU limit |\n| `alertmanager-proxy.resources.limits.memory` | string | 500Mi | Memory limit |\n| `alertmanager-proxy.resources.requests.cpu` | string | 100m | CPU request |\n| `alertmanager-proxy.resources.requests.memory` | string | 100Mi | Memory request |\n\n## Notification API\n\nAll APIs are at `/kapis/notification.kubesphere.io/v2beta2/`, routed through `whizard-telemetry-apiserver.extension-whizard-telemetry.svc:80`. No authentication token is required.\n\n### API Patterns\n\nThe API supports two levels of resources:\n\n| Level | URL Pattern | Resources |\n|-------|-------------|-----------|\n| **Global** | `/{resources}` | `notificationmanagers`, `configs`, `receivers`, `routers`, `silences`, `secrets`, `configmaps` |\n| **Tenant** | `/users/{user}/{resources}` | `configs`, `receivers`, `silences`, `secrets`, `configmaps` (NOT `notificationmanagers` or `routers`) |\n\nSupported HTTP methods: `GET` (list/detail), `POST` (create), `PUT` (update), `PATCH` (patch), `DELETE` (delete).\n\nQuery parameters for list endpoints: `name`, `labelSelector`, `type`, `page`, `limit`, `ascending`, `orderBy`.\n\n\n### List Global Receivers\n\n```bash\ncurl -X GET \"http://whizard-telemetry-apiserver.extension-whizard-telemetry.svc:80/kapis/notification.kubesphere.io/v2beta2/receivers\" \\\n```\n\n### List Global Receivers (filtered by type)\n\n```bash\ncurl -X GET \"http://whizard-telemetry-apiserver.extension-whizard-telemetry.svc:80/kapis/notification.kubesphere.io/v2beta2/receivers?type=email\" \\\n```\n\n### List Tenant Receivers\n\n```bash\ncurl -X GET \"http://whizard-telemetry-apiserver.extension-whizard-telemetry.svc:80/kapis/notification.kubesphere.io/v2beta2/users/admin/receivers\" \\\n```\n\n### Create Receiver — Email (Global)\n\n```bash\ncurl -X POST \"http://whizard-telemetry-apiserver.extension-whizard-telemetry.svc:80/kapis/notification.kubesphere.io/v2beta2/receivers\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"apiVersion\": \"notification.kubesphere.io/v2beta2\",\n    \"kind\": \"Receiver\",\n    \"metadata\": {\n      \"name\": \"email-receiver\",\n      \"labels\": {\n        \"type\": \"default\"\n      }\n    },\n    \"spec\": {\n      \"email\": {\n        \"emailConfigSelector\": {\n          \"matchLabels\": { \"type\": \"default\" }\n        },\n        \"to\": [\"user@example.com\"],\n        \"tmplType\": \"html\"\n      }\n    }\n  }'\n```\n\n### Create Receiver — Email (Tenant)\n\n```bash\ncurl -X POST \"http://whizard-telemetry-apiserver.extension-whizard-telemetry.svc:80/kapis/notification.kubesphere.io/v2beta2/users/admin/receivers\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"apiVersion\": \"notification.kubesphere.io/v2beta2\",\n    \"kind\": \"Receiver\",\n    \"metadata\": {\n      \"name\": \"email-receiver\",\n      \"labels\": {\n        \"type\": \"tenant\",\n        \"user\": \"admin\"\n      }\n    },\n    \"spec\": {\n      \"email\": {\n        \"emailConfigSelector\": {\n          \"matchLabels\": { \"type\": \"default\" }\n        },\n        \"to\": [\"user@example.com\"],\n        \"tmplType\": \"html\"\n      }\n    }\n  }'\n```\n\n### Create Receiver — Slack (Tenant)\n\n```bash\ncurl -X POST \"http://whizard-telemetry-apiserver.extension-whizard-telemetry.svc:80/kapis/notification.kubesphere.io/v2beta2/users/admin/receivers\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"apiVersion\": \"notification.kubesphere.io/v2beta2\",\n    \"kind\": \"Receiver\",\n    \"metadata\": {\n      \"name\": \"slack-receiver\",\n      \"labels\": { \"type\": \"tenant\", \"user\": \"admin\" }\n    },\n    \"spec\": {\n      \"slack\": {\n        \"slackConfigSelector\": {\n          \"matchLabels\": { \"type\": \"default\" }\n        },\n        \"channels\": [\"#alerts\"],\n        \"alertSelector\": {\n          \"matchLabels\": { \"severity\": \"critical\" }\n        }\n      }\n    }\n  }'\n```\n\n### Create Receiver — DingTalk ChatBot (Global)\n\n```bash\ncurl -X POST \"http://whizard-telemetry-apiserver.extension-whizard-telemetry.svc:80/kapis/notification.kubesphere.io/v2beta2/receivers\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"apiVersion\": \"notification.kubesphere.io/v2beta2\",\n    \"kind\": \"Receiver\",\n    \"metadata\": {\n      \"name\": \"dingtalk-receiver\",\n      \"labels\": { \"type\": \"global\" }\n    },\n    \"spec\": {\n      \"dingtalk\": {\n        \"dingtalkConfigSelector\": {\n          \"matchLabels\": { \"type\": \"default\" }\n        },\n        \"chatbot\": {\n          \"webhook\": {\n            \"value\": \"<CHATBOT_WEBHOOK>\"\n          },\n          \"secret\": {\n            \"valueFrom\": {\n              \"secretKeyRef\": {\n                \"name\": \"dingtalk-secret\",\n                \"key\": \"secret\"\n              }\n            }\n          },\n          \"keywords\": [\"Alert\", \"alert\"],\n          \"atAll\": false\n        },\n        \"alertSelector\": {}\n      }\n    }\n  }'\n```\n\n### Create Receiver — Feishu (Global)\n\n```bash\ncurl -X POST \"http://whizard-telemetry-apiserver.extension-whizard-telemetry.svc:80/kapis/notification.kubesphere.io/v2beta2/receivers\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"apiVersion\": \"notification.kubesphere.io/v2beta2\",\n    \"kind\": \"Receiver\",\n    \"metadata\": {\n      \"name\": \"feishu-receiver\",\n      \"labels\": { \"type\": \"global\" }\n    },\n    \"spec\": {\n      \"feishu\": {\n        \"feishuConfigSelector\": {\n          \"matchLabels\": { \"type\": \"default\" }\n        },\n        \"chatbot\": {\n          \"webhook\": {\n            \"value\": \"<FEISHU_WEBHOOK>\"\n          },\n          \"secret\": {\n            \"valueFrom\": {\n              \"secretKeyRef\": {\n                \"name\": \"feishu-secret\",\n                \"key\": \"secret\"\n              }\n            }\n          },\n          \"keywords\": [\"Alert\"]\n        },\n        \"user\": [\"<USER_ID>\"],\n        \"department\": [\"<DEPT_ID>\"]\n      }\n    }\n  }'\n```\n\n### Create Receiver — Webhook (Tenant)\n\n```bash\ncurl -X POST \"http://whizard-telemetry-apiserver.extension-whizard-telemetry.svc:80/kapis/notification.kubesphere.io/v2beta2/users/admin/receivers\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"apiVersion\": \"notification.kubesphere.io/v2beta2\",\n    \"kind\": \"Receiver\",\n    \"metadata\": {\n      \"name\": \"webhook-receiver\",\n      \"labels\": { \"type\": \"tenant\", \"user\": \"admin\" }\n    },\n    \"spec\": {\n      \"webhook\": {\n        \"webhookConfigSelector\": {\n          \"matchLabels\": { \"type\": \"default\" }\n        },\n        \"url\": {\n          \"value\": \"https://example.com/webhook\"\n        },\n        \"tmplType\": \"json\"\n      }\n    }\n  }'\n```\n\n### Update Receiver\n\n```bash\ncurl -X PUT \"http://whizard-telemetry-apiserver.extension-whizard-telemetry.svc:80/kapis/notification.kubesphere.io/v2beta2/receivers/email-receiver\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"apiVersion\": \"notification.kubesphere.io/v2beta2\",\n    \"kind\": \"Receiver\",\n    \"metadata\": {\n      \"name\": \"email-receiver\",\n      \"labels\": { \"type\": \"default\" }\n    },\n    \"spec\": {\n      \"email\": {\n        \"emailConfigSelector\": {\n          \"matchLabels\": { \"type\": \"default\" }\n        },\n        \"to\": [\"user@example.com\", \"admin@example.com\"],\n        \"tmplType\": \"html\"\n      }\n    }\n  }'\n```\n\n### Patch Receiver\n\n```bash\ncurl -X PATCH \"http://whizard-telemetry-apiserver.extension-whizard-telemetry.svc:80/kapis/notification.kubesphere.io/v2beta2/receivers/email-receiver\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"spec\": {\"email\": {\"to\": [\"new@example.com\"]}}}'\n```\n\n### Delete Receiver\n\n```bash\ncurl -X DELETE \"http://whizard-telemetry-apiserver.extension-whizard-telemetry.svc:80/kapis/notification.kubesphere.io/v2beta2/receivers/email-receiver\"\n```\n\n### List Silences (Global)\n\n```bash\ncurl -X GET \"http://whizard-telemetry-apiserver.extension-whizard-telemetry.svc:80/kapis/notification.kubesphere.io/v2beta2/silences\"\n```\n\n### Create Silence (Global)\n\n```bash\ncurl -X POST \"http://whizard-telemetry-apiserver.extension-whizard-telemetry.svc:80/kapis/notification.kubesphere.io/v2beta2/silences\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"apiVersion\": \"notification.kubesphere.io/v2beta2\",\n    \"kind\": \"Silence\",\n    \"metadata\": {\n      \"name\": \"maintenance-window\"\n    },\n    \"spec\": {\n      \"matchers\": [\n        {\"name\": \"alertname\", \"value\": \"KubeNodeReady\"},\n        {\"name\": \"namespace\", \"value\": \"default\", \"operator\": \"Equal\"}\n      ],\n      \"startAt\": \"2024-01-01T00:00:00Z\",\n      \"endAt\": \"2024-01-02T00:00:00Z\",\n      \"createdBy\": \"admin\",\n      \"comment\": \"Scheduled maintenance\"\n    }\n  }'\n```\n\n### Create Silence (Tenant)\n\n```bash\ncurl -X POST \"http://whizard-telemetry-apiserver.extension-whizard-telemetry.svc:80/kapis/notification.kubesphere.io/v2beta2/users/admin/silences\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"apiVersion\": \"notification.kubesphere.io/v2beta2\",\n    \"kind\": \"Silence\",\n    \"metadata\": {\n      \"name\": \"tenant-maintenance\",\n      \"labels\": { \"type\": \"tenant\", \"user\": \"admin\" }\n    },\n    \"spec\": {\n      \"matchers\": [\n        {\"name\": \"alertname\", \"value\": \".*\"}\n      ],\n      \"startAt\": \"2024-01-01T00:00:00Z\",\n      \"endAt\": \"2024-01-02T00:00:00Z\",\n      \"createdBy\": \"admin\",\n      \"comment\": \"Tenant maintenance window\"\n    }\n  }'\n```\n\n### Delete Silence\n\n```bash\ncurl -X DELETE \"http://whizard-telemetry-apiserver.extension-whizard-telemetry.svc:80/kapis/notification.kubesphere.io/v2beta2/silences/maintenance-window\"\n```\n\n### Create Router (Global only)\n\n```bash\ncurl -X POST \"http://whizard-telemetry-apiserver.extension-whizard-telemetry.svc:80/kapis/notification.kubesphere.io/v2beta2/routers\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"apiVersion\": \"notification.kubesphere.io/v2beta2\",\n    \"kind\": \"Router\",\n    \"metadata\": {\n      \"name\": \"critical-alerts-router\"\n    },\n    \"spec\": {\n      \"receivers\": [\"email-receiver\", \"slack-receiver\"],\n      \"alertSelector\": {\n        \"matchLabels\": { \"severity\": \"critical\" }\n      }\n    }\n  }'\n```\n\n### Search Notification History\n\n```bash\n# Basic search\ncurl -X GET \"http://whizard-telemetry-apiserver.extension-whizard-telemetry.svc:80/kapis/notification.kubesphere.io/v2beta2/notifications/search?size=10\"\n\n# Search with filters\ncurl -X GET \"http://whizard-telemetry-apiserver.extension-whizard-telemetry.svc:80/kapis/notification.kubesphere.io/v2beta2/notifications/search?alertname=KubeNodeReady&severity=critical&namespace=default&size=20&sort=startTime&order=desc\"\n\n# Search with time range\ncurl -X GET \"http://whizard-telemetry-apiserver.extension-whizard-telemetry.svc:80/kapis/notification.kubesphere.io/v2beta2/notifications/search?start_time=1704067200&end_time=1704153600&size=50\"\n```\n\n**Notification Search Query Parameters:**\n\n| Parameter | Description |\n|-----------|-------------|\n| `status` | Alert status: `firing`, `resolved` (comma-separated) |\n| `alertname` | Alert name (comma-separated, exact match) |\n| `alertname_fuzzy` | Alert name fuzzy match |\n| `alerttype` | Alert type (comma-separated) |\n| `alerttype_fuzzy` | Alert type fuzzy match |\n| `severity` | Severity level (comma-separated) |\n| `severity_fuzzy` | Severity level fuzzy match |\n| `namespace` | Namespace (comma-separated) |\n| `namespace_fuzzy` | Namespace fuzzy match |\n| `message_fuzzy` | Alert message fuzzy match |\n| `start_time` | Start time (Unix timestamp, seconds) |\n| `end_time` | End time (Unix timestamp, seconds) |\n| `sort` | Sort field (e.g., `startTime`) |\n| `order` | Sort order: `asc` or `desc` (default: desc) |\n| `from` | Offset from result set (default: 0) |\n| `size` | Number of results (default: 10, max: 100) |\n| `cluster` | Cluster name |\n\n## Extension Operations\n\n### Check Extension Status\n\n```bash\nkubectl get installplan whizard-notification\nkubectl get extension whizard-notification\nkubectl get extensionversion -l kubesphere.io/extension-ref=whizard-notification\n```\n\n### Check Pod Status\n\n```bash\n# notification-manager operator + deployment\nkubectl get pods -n kubesphere-monitoring-system -l notification-manager=notification-manager\n\n# alertmanager\nkubectl get pods -n kubesphere-monitoring-system -l app.kubernetes.io/name=alertmanager\n\n# alertmanager-proxy\nkubectl get pods -n kubesphere-monitoring-system -l name=alertmanager-proxy\n```\n\n### View Logs\n\n```bash\n# notification-manager main process\nkubectl logs -n kubesphere-monitoring-system -l notification-manager=notification-manager -c notification-manager --tail=100\n\n# tenant sidecar\nkubectl logs -n kubesphere-monitoring-system -l notification-manager=notification-manager -c tenant --tail=100\n\n# operator\nkubectl logs -n kubesphere-monitoring-system -l control-plane=controller-manager --tail=100\n\n# alertmanager\nkubectl logs -n kubesphere-monitoring-system -l app.kubernetes.io/name=alertmanager --tail=100\n```\n\n### Uninstall Extension\n\n```bash\nkubectl delete installplan whizard-notification\n```\n\n## Troubleshooting\n\n### Issue 1: Notifications Not Sent\n\n**Diagnosis steps:**\n\n```bash\n# 1. Check if notification-manager is running\nkubectl get pods -n kubesphere-monitoring-system -l notification-manager=notification-manager\n\n# 2. Check if alertmanager receives alerts\nkubectl logs -n kubesphere-monitoring-system -l app.kubernetes.io/name=alertmanager --tail=50\n\n# 3. Check notification-manager logs\nkubectl logs -n kubesphere-monitoring-system -l notification-manager=notification-manager -c notification-manager --tail=100 | grep -i error\n\n# 4. Check if Receiver and Config exist\nkubectl get receivers,configs -n kubesphere-monitoring-system\n\n# 5. Check if silenced by Silence CR\nkubectl get silences\n```\n\n### Issue 2: Notification History Empty\n\n```bash\n# 1. Check if vector aggregator is running\nkubectl get pods -n kubesphere-logging-system -l app.kubernetes.io/name=vector-aggregator\n\n# 2. Check if vector-sinks secret exists\nkubectl get secret vector-sinks -n kubesphere-logging-system\n\n# 3. Check OpenSearch indices exist\n# (requires OpenSearch API or Kibana)\n```\n\n### Issue 3: Tenant Sidecar Not Responding\n\n```bash\n# Check sidecar logs\nkubectl logs -n kubesphere-monitoring-system -l notification-manager=notification-manager -c tenant --tail=50\n\n# Test sidecar API\nkubectl exec -n kubesphere-monitoring-system deploy/notification-manager -- \\\n  curl -s \"http://localhost:19094/api/v2/tenant?namespace=default\"\n```\n\n### Issue 4: Upgrade Still Using Old Images\n\n```bash\n# Check image tag config; manually set old tags block upgrades\nkubectl get installplan whizard-notification -n kubesphere-system -o yaml | grep -i image\n\n# Remove or update manually set image.tag in InstallPlan config\n```\n\n## Important Notes\n\n1. **Dependency order**: Install `vector`, and `opensearch` first if notification history is enabled\n2. **OpenSearch**: Notification history sink credentials are auto-loaded from `vector-sinks` Secret\n3. **Multi-tenancy**: Tenant sidecar (port 19094) resolves namespace → authorized user mappings\n4. **Image tags**: Before upgrading, check and remove manually set `image.tag` to avoid pulling stale images","tags":["whizard","notification","kubesphere","agent-skills","cloud-native","cncf","devops","ebpf","hacktoberfest","kubernetes","llm","multi-cluster"],"capabilities":["skill","source-kubesphere","skill-whizard-notification","topic-agent-skills","topic-cloud-native","topic-cncf","topic-devops","topic-ebpf","topic-hacktoberfest","topic-kubernetes","topic-kubesphere","topic-llm","topic-multi-cluster","topic-multi-tenancy","topic-observability"],"categories":["kubesphere"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/kubesphere/kubesphere/whizard-notification","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add kubesphere/kubesphere","source_repo":"https://github.com/kubesphere/kubesphere","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 16934 github stars · SKILL.md body (24,238 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T18:52:40.711Z","embedding":null,"createdAt":"2026-04-27T06:52:20.158Z","updatedAt":"2026-05-18T18:52:40.711Z","lastSeenAt":"2026-05-18T18:52:40.711Z","tsv":"'-01':1289,1290,1296,1345,1346,1352 '-02':1297,1353 '-1':393 '/extension-ref=whizard-notification':382,1581 '/kapis/notification.kubesphere.io/v2beta2':784 '/kapis/notification.kubesphere.io/v2beta2/notifications/search?alertname=kubenodeready&severity=critical&namespace=default&size=20&sort=starttime&order=desc':1433 '/kapis/notification.kubesphere.io/v2beta2/notifications/search?size=10':1424 '/kapis/notification.kubesphere.io/v2beta2/notifications/search?start_time=1704067200&end_time=1704153600&size=50':1443 '/kapis/notification.kubesphere.io/v2beta2/receivers':862,896,1026,1081 '/kapis/notification.kubesphere.io/v2beta2/receivers/email-receiver':1178,1218,1237 '/kapis/notification.kubesphere.io/v2beta2/receivers?type=email':875 '/kapis/notification.kubesphere.io/v2beta2/routers':1382 '/kapis/notification.kubesphere.io/v2beta2/silences':1247,1257 '/kapis/notification.kubesphere.io/v2beta2/silences/maintenance-window':1371 '/kapis/notification.kubesphere.io/v2beta2/users/admin/receivers':885,937,980,1134 '/kapis/notification.kubesphere.io/v2beta2/users/admin/silences':1315 '/name=alertmanager':1618,1711,1771 '/name=vector-aggregator':1853 '/users':816 '/v1alpha1':441,470 '/v2beta2':210,906,947,990,1036,1091,1144,1188,1267,1325,1392 '/webhook':1167 '0':1545 '00':1292,1299,1348,1355 '00z':1293,1300,1349,1356 '1':366,458,573,586,743,1725,1732,1835,1972 '10':1551 '100':1553,1662,1682,1699,1713,1799 '100m':770 '100mi':775 '11':269 '12h':607 '19093':75,84,92,100,104 '19094':2007 '19094/api/v2/tenant':1925 '2':405,1755,1830,1854,1985 '2.7.0':400 '200m':659,671 '2024':1288,1295,1344,1351 '20mi':707,736 '256mi':677 '3':585,587,588,1774,1873,1884,2000 '30s':599 '31093':162,591,756 '4':1803,1929,2013 '5':1819 '50':1773,1910 '500m':715,760 '500mi':722,765 '50m':683 '50mi':691 '512mi':665 '5m':699,729 '7d':562 'actual':433 'add':422 'admin':959,1002,1156,1302,1337,1358 'admin@example.com':1207 'age':560 'aggreg':119,129,152,601,1839 'alert':20,41,70,79,87,95,142,149,251,600,609,630,639,650,1010,1066,1067,1121,1399,1451,1459,1468,1473,1480,1508,1760 'alertmanag':67,147,156,158,566,594,748,1606,1620,1633,1700,1758 'alertmanager-proxi':155,593,747,1619,1632 'alertmanager-proxy.resources.limits.cpu':758 'alertmanager-proxy.resources.limits.memory':763 'alertmanager-proxy.resources.requests.cpu':768 'alertmanager-proxy.resources.requests.memory':773 'alertmanager-proxy.service.nodeport':754 'alertmanager.config.group':596 'alertmanager.config.inhibit':616 'alertmanager.config.repeat':604 'alertmanager.config.route.receiver':611 'alertmanager.replicaautoset':576 'alertmanager.replicacount':571 'alertmanager.service.nodeport':589 'alertnam':1278,1341,1458,1466 'alertselector':117,1011,1070,1409 'alerttyp':1472,1478 'api':159,779,781,793,796,1880,1913 'apivers':438,467,903,944,987,1033,1088,1141,1185,1264,1322,1389 'app.kubernetes.io':1617,1710,1770,1852 'app.kubernetes.io/name=alertmanager':1616,1709,1769 'app.kubernetes.io/name=vector-aggregator':1851 'application/json':901,942,985,1031,1086,1139,1183,1223,1262,1320,1387 'architectur':66 'asc':1534 'ascend':851 'associ':317 'atal':1068 'audit':45,85,86 'authent':789 'author':2010 'auto':579,1993 'auto-load':1992 'avoid':2025 'base':60,254 'bash':375,856,869,879,890,931,974,1020,1075,1128,1172,1212,1231,1241,1251,1309,1365,1376,1416,1562,1585,1637,1716,1731,1834,1889,1935 'basic':435,1417 'belong':206 'block':1944 'bool':523,530,553,577 'bound':262 'c':1657,1679,1794,1907 'channel':18,59,145,247,268,270,271,1009 'chatbot':293,299,305,1018,1053,1108 'check':1559,1582,1733,1756,1775,1804,1820,1836,1855,1874,1890,1936,2018 'cloud':42 'cluster':213,507,537,1554,1555 'comma':1456,1462,1476,1488,1499 'comma-separ':1455,1461,1475,1487,1498 'comment':1303,1359 'complet':357 'compon':33,131,132 'config':228,237,239,274,315,319,336,415,489,809,819,1808,1813,1939,1969 'configmap':814,823 'configs.notification.kubesphere.io':238 'configselector':344 'configur':15,514 'content':899,940,983,1029,1084,1137,1181,1221,1260,1318,1385 'content-typ':898,939,982,1028,1083,1136,1180,1220,1259,1317,1384 'control':1693,1696 'control-plan':1692 'controller-manag':1695 'convers':295,301,307 'core':138 'count':575,584 'cpu':661,673,687,703,718,732,761,771 'cr':1825 'crd':214 'crds':203,205 'creat':406,834,886,927,970,1015,1071,1124,1248,1306,1372 'createdbi':1301,1357 'credenti':240,320,1990 'critic':408,623,629,1014,1398,1412 'critical-alerts-rout':1397 'crs':113,116 'curl':857,870,880,891,932,975,1021,1076,1129,1173,1213,1232,1242,1252,1310,1366,1377,1419,1428,1438,1922 'custom':495 'd':549,902,943,986,1032,1087,1140,1184,1224,1263,1321,1388 'data':186 'dedupl':151 'default':134,520,569,613,614,626,655,752,916,922,965,1008,1052,1107,1162,1198,1204,1284,1537,1544,1550,1927 'delet':839,840,1229,1234,1363,1368,1718 'depart':1123 'depend':175,176,1973 'deploy':221,1590 'deploy/notification-manager':1921 'desc':1536,1538 'descript':133,216,276,521,570,656,753,1449 'diagnosi':1729 'differ':58 'dingtalk':290,1017,1042,1048,1061 'dingtalk-receiv':1041 'dingtalk-secret':1060 'dingtalk/feishu':124 'dingtalkconfigselector':1049 'disabl':463 'dispatch':143 'distribut':55 'e.g':64,399,1529 'email':277,888,912,918,929,953,961,1194,1200,1226,1404 'email-receiv':911,952,1193,1403 'email/slack':123 'emailconfigselector':919,962,1201 'empti':1833 'enabl':194,202,459,485,493,525,532,555,1984 'end':389,1519,1521 'endat':1294,1350 'endpoint':845 'environ':53 'equal':1286 'error':1802 'event':43,77,78 'exact':1464 'example.com':1166 'example.com/webhook':1165 'exec':1915 'exist':1809,1861,1877 'extens':10,182,188,196,450,479,1557,1560,1571,1715 'extensionvers':378,1577 'fals':494,554,1069 'feishu':302,1073,1097,1103,1116 'feishu-receiv':1096 'feishu-secret':1115 'feishuconfigselector':1104 'field':273,275,416,423,1528 'filter':109,118,866,1427 'fire':1453 'first':1979 'format':419,497,551 'fuzzi':1467,1470,1479,1482,1491,1494,1502,1504,1507,1510 'generat':363 'generic':311 'get':367,377,831,859,872,882,1244,1421,1430,1440,1564,1570,1576,1592,1608,1623,1741,1811,1827,1843,1863,1947 'global':806,854,864,889,1019,1046,1074,1101,1240,1250,1374 'grep':1800,1958 'group':294,300,306 'h':897,938,981,1027,1082,1135,1179,1219,1258,1316,1383 'histori':126,166,192,200,465,492,502,510,517,527,540,1415,1832,1982,1988 'html':926,969,1209 'http':312,829 'https':313 'imag':223,1934,1937,1960,2014,2028 'image.tag':1966,2023 'import':1970 'includ':13 'independ':245 'index':496,505,541,559,564 'indic':1876 'info':625,634,641,648 'infoinhibitor':645 'inhibit':621,627 'instal':14,354,436,1975 'installplan':364,407,443,472,1565,1719,1948,1968 'int':572,590,742,755 'interv':605,610 'ism':556 'isol':335 'issu':1724,1829,1883,1928 'item':386 'json':1169 'jsonpath':384 'k8s':76 'key':1063,1118 'keyword':1065,1120 'kibana':1882 'kind':215,442,471,907,948,991,1037,1092,1145,1189,1268,1326,1393 'kubectl':376,1563,1569,1575,1591,1607,1622,1643,1665,1684,1701,1717,1740,1761,1780,1810,1826,1842,1862,1893,1914,1946 'kubenodereadi':1280 'kubernet':52 'kubespher':12,36,1596,1612,1627,1647,1669,1688,1705,1745,1765,1784,1816,1847,1870,1897,1918,1954 'kubesphere-logging-system':1846,1869 'kubesphere-monitoring-system':1595,1611,1626,1646,1668,1687,1704,1744,1764,1783,1815,1896,1917 'kubesphere-system':1953 'kubesphere.io':381,440,469,1580 'kubesphere.io/extension-ref=whizard-notification':380,1579 'kubesphere.io/v1alpha1':439,468 'l':379,1578,1599,1615,1630,1650,1672,1691,1708,1748,1768,1787,1850,1900 'label':63,256,321,324,326,338,347,637,644,914,955,998,1044,1099,1152,1196,1333 'labelselector':847 'latest':368,397 'level':233,649,799,802,1486,1493 'limit':662,668,688,696,719,726,762,767,850 'list':618,844,853,863,876,1238 'list/detail':832 'load':1994 'localhost':1924 'log':46,93,94,1636,1644,1666,1685,1702,1762,1779,1781,1848,1871,1892,1894 'm':513,548 'main':1641 'mainten':1273,1305,1332,1361 'maintenance-window':1272 'manag':24,73,82,90,98,103,137,140,220,652,685,693,701,709,717,724,731,738,745,1588,1602,1605,1640,1653,1656,1660,1675,1678,1697,1737,1751,1754,1778,1790,1793,1797,1903,1906 'manual':462,488,1940,1964,2021 'map':2012 'match':111,114,329,1465,1471,1483,1495,1505,1511 'matcher':257,265,1276,1339 'matchlabel':920,963,1006,1012,1050,1105,1160,1202,1410 'max':1552 'mechan':318 'memori':667,679,695,711,725,739,766,776 'messag':1506,1509 'metadata':444,473,909,950,993,1039,1094,1147,1191,1270,1328,1395 'metadata.name':409 'method':830 'metric':69 'minimum':563 'monitor':1597,1613,1628,1648,1670,1689,1706,1746,1766,1785,1817,1898,1919 'month':498 'multi':50,333,2002 'multi-ten':49,332,2001 'must':410 'n':388,1594,1610,1625,1645,1667,1686,1703,1743,1763,1782,1814,1845,1868,1895,1916,1952 'name':445,451,474,480,846,910,951,994,1040,1059,1095,1114,1148,1192,1271,1277,1281,1329,1340,1396,1460,1469,1556,1631 'namespac':65,330,1282,1496,1497,1501,1503,1926,2009 'new@example.com':1228 'node':583 'nodeport':161,592,757 'note':401,1971 'notif':3,9,17,26,29,32,56,72,81,89,97,102,136,139,165,169,191,199,219,234,267,414,448,454,464,477,483,491,501,509,516,526,539,651,684,692,700,708,716,723,730,737,744,778,1414,1444,1568,1574,1587,1601,1604,1639,1652,1655,1659,1674,1677,1722,1726,1736,1750,1753,1777,1789,1792,1796,1831,1902,1905,1951,1981,1987 'notifi':121 'notification-histori':164,490,500,508,538 'notification-history.enabled':522 'notification-history.ism_policy.enable':552 'notification-history.ism_policy.min':558 'notification-history.sinks.opensearch.enabled':529 'notification-history.sinks.opensearch.index.prefix':535 'notification-history.sinks.opensearch.index.timestring':545 'notification-manag':101,135,1586,1600,1603,1638,1651,1654,1658,1673,1676,1735,1749,1752,1776,1788,1791,1795,1901,1904 'notification-manager-svc':71,80,88,96 'notification-manager.notificationmanager.replicas':741 'notification-manager.notificationmanager.resources.limits.cpu':713 'notification-manager.notificationmanager.resources.limits.memory':720 'notification-manager.notificationmanager.resources.requests.cpu':727 'notification-manager.notificationmanager.resources.requests.memory':734 'notification-manager.notificationmanager.sidecar.tenant.resources.limits.cpu':657 'notification-manager.notificationmanager.sidecar.tenant.resources.limits.memory':663 'notification-manager.notificationmanager.sidecar.tenant.resources.requests.cpu':669 'notification-manager.notificationmanager.sidecar.tenant.resources.requests.memory':675 'notification-manager.operator.containers.operator.resources.limits.cpu':681 'notification-manager.operator.containers.operator.resources.limits.memory':689 'notification-manager.operator.containers.operator.resources.requests.cpu':697 'notification-manager.operator.containers.operator.resources.requests.memory':705 'notification.kubesphere.io':209,905,946,989,1035,1090,1143,1187,1266,1324,1391 'notification.kubesphere.io/v2beta2':208,904,945,988,1034,1089,1142,1186,1265,1323,1390 'notificationmanag':218,808,825 'notificationmanagers.notification.kubesphere.io':217 'number':1547 'o':383,1956 'observ':37 'offset':1540 'old':1933,1942 'opensearch':130,173,195,504,533,1875,1879,1978,1986 'oper':686,694,702,710,1285,1558,1589,1683 'order':361,1531,1533,1974 'orderbi':852 'output':395 'overview':27 'page':849 'paramet':515,518,567,653,750,842,1447,1448 'patch':837,838,1210,1215 'pattern':794,804 'per':246 'pipelin':187 'placehold':431 'plane':1694 'platform':38 'pod':1583,1593,1609,1624,1742,1844 'polici':557 'port':2006 'post':314,833,893,934,977,1023,1078,1131,1254,1312,1379 'prefix':506,542 'prerequisit':355 'process':1642 'prometheus':68 'provid':372 'proxi':157,160,595,749,1621,1634 'pull':2026 'put':835,1175 'queri':841,1446 'rang':385,1437 'receiv':40,141,227,230,235,253,272,316,322,342,345,615,810,820,855,865,878,887,908,913,928,949,954,971,992,997,1016,1038,1043,1072,1093,1098,1125,1146,1151,1171,1190,1195,1211,1230,1402,1405,1408,1759,1806,1812 'receivers.notification.kubesphere.io':229 'receiverselector':353 'refer':236,241 'remov':1961,2020 'repeat':608 'replac':429 'replica':224,574,581,746 'request':674,680,704,712,733,740,772,777 'requir':178,183,189,197,356,792,1878 'resolv':1454,2008 'resourc':225,801,805,807,818 'respond':1888 'result':1542,1549 'retent':565 'rout':21,107,150,250,328,785 'router':115,249,327,351,811,827,1373,1394,1400 'routers.notification.kubesphere.io':248 'rule':617,622,628 'run':1739,1841 'schedul':1304 'scope':211 'search':1413,1418,1425,1434,1445 'second':1518,1525 'secret':243,813,822,1056,1062,1064,1111,1117,1119,1860,1864,1999 'secretkeyref':1058,1113 'see':619 'selector':244,325 'sent':168,1728 'separ':1457,1463,1477,1489,1500 'set':580,1543,1941,1965,2022 'setup':19 'sever':1013,1411,1484,1485,1490,1492 'shown':425 'sidecar':226,660,666,672,678,1664,1886,1891,1912,2005 'silenc':23,105,112,153,259,263,631,640,646,812,821,1239,1249,1269,1307,1327,1364,1822,1824,1828 'silences.notification.kubesphere.io':258 'sink':503,534,1859,1867,1989,1998 'size':1546 'skill' 'skill-whizard-notification' 'slack':284,287,972,996,1004,1407 'slack-receiv':995,1406 'slackconfigselector':1005 'smtp':280 'sort':390,1526,1527,1532 'source-kubesphere' 'spec':222,449,478,917,960,1003,1047,1102,1157,1199,1225,1275,1338,1401 'spec.dingtalk':291,292 'spec.email':278,279 'spec.feishu':303,304 'spec.slack':285,286 'spec.version':387 'spec.webhook':309,310 'spec.wechat':297,298 'stage':106,108,110,120,122 'stale':2027 'start':1512,1514 'startat':1287,1343 'starttim':1530 'status':1450,1452,1561,1584 'step':359,365,404,457,1730 'still':1931 'storag':528 'store':167 'strftime':550 'string':536,546,561,598,606,612,658,664,670,676,682,690,698,706,714,721,728,735,759,764,769,774 'support':264,266,283,543,797,828 'svc':74,83,91,99 'system':1598,1614,1629,1649,1671,1690,1707,1747,1767,1786,1818,1849,1872,1899,1920,1955 't00':1291,1298,1347,1354 'tag':1938,1943,2015 'tail':392,1661,1681,1698,1712,1772,1798,1909 'telemetri':181 'templat':428,544 'tenanc':2003 'tenant':51,62,232,334,815,877,930,957,973,1000,1127,1154,1308,1331,1335,1360,1663,1680,1885,1908,2004 'tenant-level':231 'tenant-mainten':1330 'test':1911 'time':261,603,1436,1513,1515,1520,1522 'time-bound':260 'timestamp':1517,1524 'timestr':511 'tls/starttls':282 'tmpltype':925,968,1168,1208 'token':289,790 'topic-agent-skills' 'topic-cloud-native' 'topic-cncf' 'topic-devops' 'topic-ebpf' 'topic-hacktoberfest' 'topic-kubernetes' 'topic-kubesphere' 'topic-llm' 'topic-multi-cluster' 'topic-multi-tenancy' 'topic-observability' 'troubleshoot':16,1723 'true':146,154,163,174,460,486,524,531,578 'two':798 'type':177,519,568,654,751,848,868,900,915,921,941,956,964,984,999,1007,1030,1045,1051,1085,1100,1106,1138,1153,1161,1182,1197,1203,1222,1261,1319,1334,1386,1474,1481 'uninstal':1714 'unix':1516,1523 'updat':836,1170,1963 'upgrad':1930,1945,2017 'upgradestrategi':461,487 'url':803,1163 'use':4,340,349,1932 'user':374,817,958,1001,1122,1155,1336,2011 'user@example.com':924,967,1206 'v':391 'v0.27.0':148 'valu':434,1055,1110,1164,1279,1283,1342 'valuefrom':1057,1112 'vector':128,171,184,1838,1858,1866,1976,1997 'vector-sink':1857,1865,1996 'version':369,398,455,484 'via':170,242,323 'view':1635 'wait':597,602 'warn':624,632,638 'webhook':127,288,308,1054,1109,1126,1150,1158 'webhook-receiv':1149 'webhookconfigselector':1159 'wechat':296 'wechat/webhook':125 'whizard':2,180,413,447,453,476,482,1567,1573,1721,1950 'whizard-notif':1,412,446,452,475,481,1566,1572,1720,1949 'whizard-telemetri':179 'whizard-telemetry-apiserver.extension-whizard-telemetry.svc:80':787,861,874,884,895,936,979,1025,1080,1133,1177,1217,1236,1246,1256,1314,1370,1381,1423,1432,1442 'whizard-telemetry-apiserver.extension-whizard-telemetry.svc:80/kapis/notification.kubesphere.io/v2beta2/notifications/search?alertname=kubenodeready&severity=critical&namespace=default&size=20&sort=starttime&order=desc':1431 'whizard-telemetry-apiserver.extension-whizard-telemetry.svc:80/kapis/notification.kubesphere.io/v2beta2/notifications/search?size=10':1422 'whizard-telemetry-apiserver.extension-whizard-telemetry.svc:80/kapis/notification.kubesphere.io/v2beta2/notifications/search?start_time=1704067200&end_time=1704153600&size=50':1441 'whizard-telemetry-apiserver.extension-whizard-telemetry.svc:80/kapis/notification.kubesphere.io/v2beta2/receivers':860,894,1024,1079 'whizard-telemetry-apiserver.extension-whizard-telemetry.svc:80/kapis/notification.kubesphere.io/v2beta2/receivers/email-receiver':1176,1216,1235 'whizard-telemetry-apiserver.extension-whizard-telemetry.svc:80/kapis/notification.kubesphere.io/v2beta2/receivers?type=email':873 'whizard-telemetry-apiserver.extension-whizard-telemetry.svc:80/kapis/notification.kubesphere.io/v2beta2/routers':1380 'whizard-telemetry-apiserver.extension-whizard-telemetry.svc:80/kapis/notification.kubesphere.io/v2beta2/silences':1245,1255 'whizard-telemetry-apiserver.extension-whizard-telemetry.svc:80/kapis/notification.kubesphere.io/v2beta2/silences/maintenance-window':1369 'whizard-telemetry-apiserver.extension-whizard-telemetry.svc:80/kapis/notification.kubesphere.io/v2beta2/users/admin/receivers':883,935,978,1132 'whizard-telemetry-apiserver.extension-whizard-telemetry.svc:80/kapis/notification.kubesphere.io/v2beta2/users/admin/silences':1313 'window':1274,1362 'wiztelemetri':8,25,28,185 'work':6 'x':858,871,881,892,933,976,1022,1077,1130,1174,1214,1233,1243,1253,1311,1367,1378,1420,1429,1439 'y':512,547 'yaml':418,437,466,499,1957","prices":[{"id":"4fd10e40-abd7-4497-92b8-c536b7dcd94a","listingId":"9945f511-1ca7-49f6-a754-2111609fdfe6","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"kubesphere","category":"kubesphere","install_from":"skills.sh"},"createdAt":"2026-04-27T06:52:20.158Z"}],"sources":[{"listingId":"9945f511-1ca7-49f6-a754-2111609fdfe6","source":"github","sourceId":"kubesphere/kubesphere/whizard-notification","sourceUrl":"https://github.com/kubesphere/kubesphere/tree/master/skills/whizard-notification","isPrimary":false,"firstSeenAt":"2026-04-27T06:52:20.158Z","lastSeenAt":"2026-05-18T18:52:40.711Z"}],"details":{"listingId":"9945f511-1ca7-49f6-a754-2111609fdfe6","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"kubesphere","slug":"whizard-notification","github":{"repo":"kubesphere/kubesphere","stars":16934,"topics":["agent-skills","ai","cloud-native","cncf","devops","ebpf","hacktoberfest","kubernetes","kubesphere","llm","multi-cluster","multi-tenancy","observability","servicemesh","skills","skills-sh","skillsmp"],"license":"other","html_url":"https://github.com/kubesphere/kubesphere","pushed_at":"2026-05-06T07:16:53Z","description":"The container platform tailored for Kubernetes multi-cloud, datacenter, and edge management ⎈ 🖥 ☁️","skill_md_sha":"49c539d3b1657d7fbdf85001509bdfaf9a9ea9f4","skill_md_path":"skills/whizard-notification/SKILL.md","default_branch":"master","skill_tree_url":"https://github.com/kubesphere/kubesphere/tree/master/skills/whizard-notification"},"layout":"multi","source":"github","category":"kubesphere","frontmatter":{"name":"whizard-notification","description":"Use when working with WizTelemetry Notification extension for KubeSphere, including installation, configuration, troubleshooting, notification channel setup, alert routing, and silence management."},"skills_sh_url":"https://skills.sh/kubesphere/kubesphere/whizard-notification"},"updatedAt":"2026-05-18T18:52:40.711Z"}}