- Updated: March 24, 2026
- 3 min read
Extending the OpenClaw Rating API Go CLI to Handle Alertmanager Webhooks and Automate Remediation
Extending the OpenClaw Rating API Go CLI to Listen for Alertmanager Webhook Events
In modern cloud‑native environments, Alertmanager is the de‑facto standard for aggregating alerts from Prometheus and routing them to the right responders. When you combine Alertmanager with the OpenClaw Rating API Go CLI, you can build powerful automation that reacts to incidents in real time – scaling services, restarting containers, or notifying external systems such as Moltbook.
What We’ll Build
- A Go program that runs the OpenClaw Rating API CLI.
- A lightweight HTTP server that receives Alertmanager webhook payloads.
- Logic that parses the alert, decides which remediation action to take, and invokes the appropriate CLI command.
Prerequisites
- Go 1.22+ installed.
- OpenClaw Rating API Go CLI compiled (see the host‑openclaw guide for deployment details).
- Access to an Alertmanager instance with a webhook receiver configured.
Step 1 – Set Up the Project
mkdir openclaw‑alertmanager && cd openclaw‑alertmanager
go mod init openclaw‑alertmanager
go get github.com/gin-gonic/gin
Step 2 – Create the HTTP Receiver
package main
import (
"encoding/json"
"log"
"net/http"
"os/exec"
"github.com/gin-gonic/gin"
)
type Alert struct {
Status string `json:"status"`
Alerts []struct {
Labels map[string]string `json:"labels"`
Annotations map[string]string `json:"annotations"`
} `json:"alerts"`
}
func handleAlert(c *gin.Context) {
var a Alert
if err := c.ShouldBindJSON(&a); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
// For simplicity we react only to the first alert
if len(a.Alerts) == 0 {
c.JSON(http.StatusOK, gin.H{"msg": "no alerts"})
return
}
alert := a.Alerts[0]
// Decide remediation based on a label, e.g. "severity"
severity := alert.Labels["severity"]
switch severity {
case "critical":
// Scale up a service using the OpenClaw CLI
exec.Command("./openclaw-cli", "scale", "--service", "api", "--replicas", "5").Run()
case "warning":
// Restart a service
exec.Command("./openclaw-cli", "restart", "--service", "worker").Run()
default:
// Notify Moltbook (example HTTP POST)
go notifyMoltbook(alert)
}
c.JSON(http.StatusOK, gin.H{"status": "processed"})
}
func notifyMoltbook(alert interface{}) {
// Placeholder – replace with real Moltbook webhook URL & payload
payload, _ := json.Marshal(map[string]string{"text": "Alert received: " + fmt.Sprintf("%v", alert)})
http.Post("https://moltbook.example.com/webhook", "application/json", bytes.NewReader(payload))
}
func main() {
r := gin.Default()
r.POST("/alertmanager", handleAlert)
log.Println("Listening on :8080 …")
r.Run(":8080")
}
Step 3 – Build and Deploy
# Build the binary
go build -o openclaw-alertmanager
# Run (or add to systemd, Docker, etc.)
./openclaw-alertmanager &
Step 4 – Wire Alertmanager to the Receiver
Add a webhook receiver to your alertmanager.yml:
receivers:
- name: "openclaw-webhook"
webhook_configs:
- url: "http://your‑host:8080/alertmanager"
Reload Alertmanager and test by firing a test alert. The CLI will now automatically scale, restart, or notify Moltbook based on the alert severity.
Conclusion
By embedding the OpenClaw Rating API Go CLI inside a small webhook server, you gain a flexible, code‑first way to react to operational incidents. The same pattern can be extended to other actions – updating DNS records, posting to Slack, or triggering CI pipelines.
For a full end‑to‑end guide on hosting OpenClaw on UBOS, see our Host OpenClaw on a Dedicated Server article.