BotKube is a Kubernetes alerting and ChatOps tool that routes cluster events, pod alerts, and resource notifications into Slack, Microsoft Teams, Discord, and other messaging platforms. It's the glue between your Kubernetes cluster and your team's communication channels.
When BotKube is healthy, your team gets real-time Kubernetes alerts in their chat tool. When BotKube is down — due to a pod restart, a misconfigured webhook, or a Slack API outage — alerts stop flowing silently. You might not notice until a serious cluster event goes unreported for hours.
This tutorial walks through monitoring BotKube with Vigilmon so you catch BotKube failures independently of BotKube itself.
Why you need external monitoring for BotKube
BotKube runs as a pod in your Kubernetes cluster. Like any pod, it can:
- Crash and restart — CrashLoopBackOff is possible if BotKube's config is invalid or its webhook receiver can't bind
- Lose connectivity to the Kubernetes API — BotKube relies on the K8s API server to watch events; a network partition or RBAC change breaks this silently
- Fail its Slack/Teams integration — bot token expiry, workspace changes, or API rate limiting can silently break the notification pipeline
- Run but stop processing events — a goroutine deadlock or memory pressure can cause BotKube to appear Running while delivering nothing
If BotKube is your primary Kubernetes alerting system, you need a completely independent external check to confirm it's alive and delivering.
What you'll need
- BotKube running in your Kubernetes cluster
- BotKube's API or webhook receiver exposed (via Service/Ingress or port-forward for testing)
- A free Vigilmon account — sign up takes 30 seconds
Step 1: Identify BotKube's health and API endpoints
BotKube exposes an HTTP metrics/health endpoint on port 2113 by default. Check your BotKube deployment:
kubectl get deployment -n botkube botkube -o yaml | grep -A5 "ports:"
Typical BotKube port configuration:
ports:
- name: metrics
containerPort: 2113
protocol: TCP
BotKube exposes Prometheus metrics at :2113/metrics and a liveness path at :2113/healthz. Expose the health endpoint externally via a Kubernetes Service:
# botkube-health-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: botkube-health
namespace: botkube
spec:
selector:
app.kubernetes.io/name: botkube
ports:
- name: metrics
port: 2113
targetPort: 2113
protocol: TCP
type: ClusterIP
Then expose it via an Ingress or LoadBalancer for external monitoring. If you use an Ingress:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: botkube-health
namespace: botkube
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: botkube-health.yourdomain.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: botkube-health
port:
number: 2113
Apply and verify:
kubectl apply -f botkube-health-svc.yaml
curl https://botkube-health.yourdomain.com/healthz
# Expected: HTTP 200 with "ok" body
Step 2: Monitor the BotKube health endpoint
Log in to vigilmon.online and go to Monitors → New Monitor.
| Field | Value |
|-------|-------|
| Type | HTTP / HTTPS |
| Name | BotKube Agent Health |
| URL | https://botkube-health.yourdomain.com/healthz |
| Check interval | 1 minute |
| Expected status code | 200 |
| Response body contains | ok |
Click Save. Vigilmon will start probing from multiple regions.
Step 3: Monitor the webhook receiver availability
BotKube can also act as a webhook receiver for external systems (like Alertmanager). If you use this feature, the receiver's HTTP endpoint must stay reachable. Check if yours is configured:
kubectl get svc -n botkube
If BotKube exposes an incoming webhook port (default: 2115), add a separate monitor:
| Field | Value |
|-------|-------|
| Type | HTTP / HTTPS |
| Name | BotKube Webhook Receiver |
| URL | https://botkube-webhook.yourdomain.com/ |
| Check interval | 2 minutes |
| Expected status code | 200 or 404 |
A 404 on the root path is acceptable — it confirms the HTTP server is listening even if the root path isn't mapped.
Step 4: Set up a heartbeat to verify alert delivery
The most important check isn't whether BotKube's HTTP server responds — it's whether BotKube is actually processing and delivering alerts. Use Vigilmon's heartbeat monitor to verify the full pipeline.
Create a heartbeat in Vigilmon
- Go to Monitors → New Monitor → Heartbeat
- Name it:
BotKube Alert Pipeline - Expected interval: 10 minutes
- Save — copy the ping URL (e.g.,
https://hb.vigilmon.online/ping/abc123xyz)
Configure a BotKube source to ping the heartbeat
BotKube supports Kubernetes event sources and can execute kubectl commands via the Slack/Teams integration. Configure a cron-based Kubernetes job that pings Vigilmon:
# botkube-heartbeat-cronjob.yaml
apiVersion: batch/v1
kind: CronJob
metadata:
name: botkube-heartbeat
namespace: botkube
spec:
schedule: "*/10 * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: ping
image: curlimages/curl:latest
command:
- curl
- -sf
- https://hb.vigilmon.online/ping/abc123xyz
restartPolicy: OnFailure
kubectl apply -f botkube-heartbeat-cronjob.yaml
Now the chain works: if BotKube's associated infrastructure stops running, the heartbeat pings stop, and Vigilmon alerts you after the expected interval passes.
Step 5: Monitor pod restart alerts with Vigilmon's webhook
Configure Vigilmon to receive BotKube's own pod restart notifications via a webhook. This creates a bi-directional monitoring relationship:
- In Vigilmon, go to Alert Channels → Add Channel → Webhook
- Copy your Vigilmon notification webhook URL
In BotKube's values.yaml (for Helm installs):
communications:
default-group:
webhook:
enabled: true
url: https://vigilmon.online/webhook/your-channel-id
bindings:
sources:
- k8s-pod-restarts
Now BotKube will notify Vigilmon directly when pods restart, and Vigilmon handles deduplication and alert routing. This supplements the external health checks with event-driven alerts.
Step 6: Configure alert channels
Connect Vigilmon to your notification stack for BotKube failures.
- Go to Alert Channels → Add Channel → Email
- Enter your platform team email
- Assign to: BotKube Agent Health, BotKube Webhook Receiver, BotKube Alert Pipeline
Slack (separate from BotKube)
Connect Vigilmon directly to Slack as a backup channel — this ensures you receive alerts even when BotKube itself is the one that's down:
- Go to Alert Channels → Add Channel → Webhook
- Enter your Slack incoming webhook URL (for a different channel than BotKube uses)
- Assign to BotKube monitors
When BotKube goes down, Vigilmon sends:
{
"monitor_name": "BotKube Agent Health",
"status": "down",
"url": "https://botkube-health.yourdomain.com/healthz",
"started_at": "2026-07-01T14:00:00Z",
"duration_seconds": 90
}
Step 7: Create a status page
For platform teams managing Kubernetes clusters, a status page covering your monitoring and alerting infrastructure is valuable during incident response.
- Go to Status Pages → New Status Page
- Name it:
Kubernetes Alerting Infrastructure - Add monitors: BotKube Agent Health, BotKube Webhook Receiver, BotKube Alert Pipeline
- Publish
During a cluster incident, your team can check this page to confirm BotKube itself is operational before assuming alerts are being routed correctly.
Monitor summary
| Monitor | Type | Catches |
|---------|------|---------|
| BotKube /healthz | HTTP | Pod crash, container restart, process hang |
| BotKube webhook receiver | HTTP | Webhook handler failure, port binding issues |
| BotKube alert pipeline | Heartbeat | Silent delivery failures, Slack token expiry |
| BotKube TCP port | TCP | Pod-level network reachability |
Key Kubernetes checks to add alongside BotKube monitoring
These Vigilmon checks complement BotKube and give you full K8s observability coverage:
# Verify BotKube pod is Running and not restarting
kubectl get pod -n botkube -l app.kubernetes.io/name=botkube
# Check BotKube logs for connection errors
kubectl logs -n botkube -l app.kubernetes.io/name=botkube --tail=50
# Confirm BotKube has proper RBAC to watch cluster events
kubectl auth can-i watch pods --as=system:serviceaccount:botkube:botkube -A
What's next
- SSL certificate monitoring — if your BotKube health endpoint is behind TLS, Vigilmon tracks the cert expiry automatically
- Multi-environment coverage — run separate BotKube monitors for each cluster (dev, staging, prod)
- Incident correlation — use Vigilmon's webhook alerts alongside BotKube's Slack messages to cross-reference when cluster events coincide with BotKube downtime
Keep your Kubernetes alerting pipeline reliable with vigilmon.online — free tier, no credit card required.