tutorial

How to Monitor Flux Operator (GitOps Bootstrap Automation) with Vigilmon

Flux Operator is a Kubernetes operator that declaratively manages Flux CD instances. Instead of running `flux bootstrap` manually, you create a `FluxInstance...

Flux Operator is a Kubernetes operator that declaratively manages Flux CD instances. Instead of running flux bootstrap manually, you create a FluxInstance custom resource describing your desired Flux configuration, and the operator handles installation, upgrades, and reconciliation — continuously ensuring your Flux CD deployment matches the spec.

This GitOps-on-GitOps approach is elegant. It also introduces new failure modes: if Flux Operator itself is degraded, your entire GitOps bootstrap pipeline stalls silently. Workloads that depend on Flux CD for deployment can fall behind without triggering any Kubernetes alert.

This tutorial covers how to monitor Flux Operator-managed environments with Vigilmon — free tier, no credit card required.


Why Flux Operator environments need external monitoring

Flux Operator ensures Flux CD runs and stays configured. But neither the operator nor Flux CD monitors whether the applications Flux deploys are actually reachable and healthy:

  • Flux Operator reconciliation loop fails — a FluxInstance update is rejected; your Flux CD configuration drifts from the desired state
  • Flux CD falls behind on GitOps sync — source controller loses connectivity to your Git repository; resources stop reconciling but existing deployments still look healthy
  • Kustomization or HelmRelease fails to apply — a broken manifest is pushed to Git; Flux applies it, breaks the deployment, and reports Applied revision: main/abc123 even while the service is down
  • Flux Operator upgrade causes Flux CD restart — during upgrade, Flux stops reconciling briefly; any Git changes during that window don't get applied
  • Network policy pushed via Flux blocks ingress — a Flux-managed NetworkPolicy change cuts off external access; Kubernetes probes (running inside the cluster) still pass

The only way to catch these failures is to probe your services from outside the cluster the same way users do. Vigilmon does exactly that.


What you'll need

  • A Kubernetes cluster with Flux Operator and Flux CD installed
  • At least one Flux-managed workload exposed via HTTP/HTTPS externally
  • A free Vigilmon account

Step 1: Verify your Flux-managed service is reachable

Check Flux Operator status:

kubectl get fluxinstance -A
# NAMESPACE    NAME   READY   STATUS        AGE
# flux-system  flux   True    Reconciled    7d

Check that Flux CD is running:

kubectl get pods -n flux-system
# NAME                                      READY   STATUS    RESTARTS   AGE
# source-controller-5d8f7c9b4-xkp2m        1/1     Running   0          7d
# kustomize-controller-6c9b8d5c4-jrt8l     1/1     Running   0          7d
# helm-controller-7d9c5e4f3-lnp3q          1/1     Running   0          7d
# notification-controller-8e0d6f5g4-mnr4t  1/1     Running   0          7d

Verify a Flux-managed application is reachable:

# Get the service endpoint
kubectl get svc my-app -n production
# NAME     TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)
# my-app   LoadBalancer   10.100.0.20    203.0.113.40    80:30080/TCP

curl http://203.0.113.40/health
# {"status":"ok","git_revision":"main/abc123"}

Step 2: Add HTTP monitoring in Vigilmon

  1. Log in to vigilmon.online and go to Monitors → New Monitor
  2. Select HTTP / HTTPS
  3. Enter your service URL: https://app.example.com/health
  4. Set check interval to 1 minute
  5. Configure Expected response:
    • Status code: 200
    • (Optional) Body contains: "status":"ok"
  6. Save the monitor

Vigilmon now probes your Flux-managed application from multiple geographic regions. If a bad GitOps commit breaks the app and Flux applies it to the cluster, Vigilmon catches the downtime — even if flux get kustomizations shows the revision was applied successfully.

Why "Applied" ≠ "Healthy"

This is the core gap in GitOps observability. Flux can report:

✔ applied revision: main/abc1234

…while the deployment is actually crashing because the new image tag doesn't exist, a secret was deleted, or a config change broke the app. Vigilmon's HTTP monitor is the only check that verifies the application is actually serving traffic after a GitOps update.


Step 3: Monitor Flux Operator and Flux CD health

Flux Operator's FluxInstance exposes a Ready condition. You can check this programmatically:

kubectl get fluxinstance flux -n flux-system -o jsonpath='{.status.conditions[?(@.type=="Ready")].status}'
# True

For Flux CD's source controller, kustomize controller, and helm controller — they all expose a /healthz endpoint. To reach these from outside the cluster, you'd need to expose them via a Service. Alternatively, monitor them indirectly:

Monitoring Flux indirectly via your workloads is the most practical approach. When Flux stops reconciling, new commits don't get applied. You can detect this by including the current Git revision in your health endpoint response:

{
  "status": "ok",
  "git_revision": "main/abc1234",
  "reconciled_at": "2026-07-12T03:00:00Z"
}

If Flux stops reconciling, this revision stops updating even as Git advances. Your Vigilmon monitor's response body check will catch this drift if you update the expected revision hash.

For a simpler approach, use Vigilmon's body contains check to assert the timestamp isn't stale — though this requires your app to embed reconciliation timestamps.


Step 4: Add a TCP monitor for Flux CD API access

If your cluster exposes the Flux notification controller webhook endpoint, add a TCP monitor to verify it's reachable:

kubectl get svc -n flux-system
# notification-controller   ClusterIP   10.100.0.30   <none>   9292/TCP

If exposed via NodePort or LoadBalancer, add it to Vigilmon:

  1. Go to Monitors → New Monitor → TCP Port
  2. Enter the host and port
  3. Save the monitor

A down notification controller means Flux won't receive Git push webhooks, causing sync delays.


Step 5: Track GitOps deployment outcomes with monitoring

Structure your CI/CD pipeline to verify Vigilmon shows green after each Flux reconciliation:

# After pushing a commit, wait for Flux to reconcile
flux reconcile kustomization my-app --with-source --timeout=5m

# Then verify the service is up
curl -f https://app.example.com/health || echo "ALERT: health check failed after reconciliation"

For automated pipelines, you can also poll Vigilmon's public status page or use the Vigilmon API to confirm your monitor shows green before marking a deployment complete.


Step 6: Configure alert channels for GitOps failures

  1. In Vigilmon, go to Alert Channels → Add Channel
  2. Choose Webhook to integrate with Slack, PagerDuty, or your incident management system
  3. Assign channels to your Flux-related monitors

When a Vigilmon alert fires immediately after a GitOps commit, the correlation is clear: check the commit, check Flux reconciliation status, and roll back if needed:

# See what Flux applied
flux get kustomizations
flux get helmreleases -A

# Check for reconciliation errors
kubectl get events -n flux-system --sort-by='.lastTimestamp' | grep -i error

# If needed, suspend reconciliation while you investigate
flux suspend kustomization my-app

Step 7: Create a GitOps deployment status page

  1. In Vigilmon, go to Status Pages → New Status Page
  2. Name it "GitOps Fleet" or your environment name
  3. Add all monitors for Flux-managed workloads, grouped by environment (staging, production)
  4. Publish the page

When your team is pushing GitOps changes, the status page gives real-time visibility into whether deployed services are healthy across environments.


Monitoring summary

| Monitor | Type | What it catches | |---------|------|-----------------| | https://app.example.com/health | HTTP | App health after Flux reconciliation | | Per-service HTTP monitors | HTTP | Independent service health | | Flux notification controller | TCP | Webhook receiver reachability | | Response body revision check | HTTP | Flux reconciliation lag detection |


What's next

  • Heartbeat monitoring — use Vigilmon heartbeats for Flux-managed CronJob workloads; detect when batch jobs stop running without error
  • SSL certificate monitoring — track TLS cert expiry for services managed by Flux; especially important if cert-manager is itself a Flux HelmRelease
  • Multi-environment monitoring — create separate monitors for staging and production Flux environments and use response body checks to verify the correct commit is deployed in each

Start monitoring your Flux Operator-managed fleet today at vigilmon.online — free tier, no credit card required.

Monitor your app with Vigilmon

Free plan — 5 monitors, no credit card required. Up and running in 60 seconds.

Start free →