From 69aa9decd3c55bc3264c5d1bda8534315f2f5778 Mon Sep 17 00:00:00 2001 From: Moshe Immerman Date: Tue, 6 May 2025 10:21:44 +0300 Subject: [PATCH] WIP: state based alerting --- common/src/components/TerminalOutput.jsx | 13 +- .../blog/state-based-alerting/canary.yaml | 16 + .../blog/state-based-alerting/index.md | 500 +++++++++++++++++ .../blog/state-based-alerting/index.mdx | 502 ++++++++++++++++++ .../blog/state-based-alerting/nginx.yaml | 8 + .../static/img/PodCrashLooping.png | Bin 0 -> 128682 bytes prompts/blog.md | 55 ++ prompts/style.md | 56 ++ styles/Flanksource/Acronyms.yml | 41 +- .../CaseSensitiveSpellingSuggestions.yml | 8 +- styles/Flanksource/ComplexWords.yml | 1 - 11 files changed, 1176 insertions(+), 24 deletions(-) create mode 100644 mission-control/blog/state-based-alerting/canary.yaml create mode 100644 mission-control/blog/state-based-alerting/index.md create mode 100644 mission-control/blog/state-based-alerting/index.mdx create mode 100644 mission-control/blog/state-based-alerting/nginx.yaml create mode 100644 mission-control/static/img/PodCrashLooping.png create mode 100644 prompts/blog.md create mode 100644 prompts/style.md diff --git a/common/src/components/TerminalOutput.jsx b/common/src/components/TerminalOutput.jsx index fd64b281..20b7dca8 100644 --- a/common/src/components/TerminalOutput.jsx +++ b/common/src/components/TerminalOutput.jsx @@ -35,8 +35,19 @@ function ansi2HTML(str, command) { export default function Ansi({ command, children }) { + let txt = "" + try { - let txt = `❯ ${command}
` + children.props.children.replaceAll("\n", "
") + + if (children?.props?.children) { + txt = `❯ ${command}
` + children.props.children.replaceAll("\n", "
") + } else { + txt = `❯ ${command}` + } + } catch (e) { + console.error(e) + txt = "" + } let html = new Convert().toHtml(txt, command) return ( diff --git a/mission-control/blog/state-based-alerting/canary.yaml b/mission-control/blog/state-based-alerting/canary.yaml new file mode 100644 index 00000000..bbc884cd --- /dev/null +++ b/mission-control/blog/state-based-alerting/canary.yaml @@ -0,0 +1,16 @@ +apiVersion: canaries.flanksource.com/v1 +kind: Canary +metadata: + name: kubernetes-checks + annotations: + trace: "true" +spec: + schedule: "@every 5m" + kubernetes: + - name: pods + kind: Pod + namespaceSelector: + name: default + resource: + name: test-pod + healthy: true # use the is-healthy library to check the health of pods diff --git a/mission-control/blog/state-based-alerting/index.md b/mission-control/blog/state-based-alerting/index.md new file mode 100644 index 00000000..88e65bf3 --- /dev/null +++ b/mission-control/blog/state-based-alerting/index.md @@ -0,0 +1,500 @@ +# State-Based Alerting: Understanding Why Kubernetes Deployments Fail + + +## Application vs Infrastructure + +Application and infrastucture normally have very different failure scenarios, Application errors are normally due to bugs (that produce exceptions) or performance related problems. When there are problems it becomes immiedatly obvious - page fails to load or starts timing out. Infrastructure health is more often related to configuration errors, drift, permissions and unhealthy dependencies problems can lay latent and be influenced by drift and dependences. + +Common application health methodologies include **USE** (**u**tilization, **s**aturation,**e**rrors) and **RED** (**r**quests, **e**rrors, **d**uration) that primarily use metrics (and log/trace derived metrics) that define thresholds for known health states. It is fairly straightforard to define healthy, unhealthy and warning states. These methodoligies struggle with unknown states i.e. we are not receiving any traffic so we don't if there are any errors. Synthetic testing helps to surface problems by creating artificial transactions + +## Metric (Thresholds and Anomalies) + + +## State Based + +## Synthetic Testing + + +Infrastructure errors tend be more state oreinted + +## Alerting Types and Examples + +There are various types of alerting methods, and choosing the right one can be challenging. + +| Alerting Type | Example(s) | Use Cases | +| :---- | :---- | :---- | +| **Metrics (Threshold)** | \- CPU \> 90% for 5 minutes.
\- Available disk space \< 10GB. | Best for USE (**u**tilization, **s**aturation,**e**rrors) and known errors. | +| **Anomaly Detection** | \- Website traffic drops 50% compared to the same time last week.
\- Login attempts spike far beyond the normal range. | Useful for detecting unusual patterns and behavior that deviate from historical norms. Suitable for security monitoring and business metrics. | +| **Log-Based** | \- More than 10 "HTTP 500" errors in web server logs within 1 minute.
\- Any log containing `OutOfMemoryError`. | Ideal for error detection, security events, and application-specific issues that are captured in logs. Good for detailed troubleshooting context. | +| **State Based** | \- Kubernetes Node condition `Ready` \= False for 10 minutes.
\- Pod status is `CrashLoopBackOff`.
\- Deployment condition `Progressing = False` with reason: `ProgressDeadlineExceeded`. | Suitable for infrastructure and platform monitoring where resources have defined states. Good for Kubernetes and cloud resource health monitoring. | +| **Synthetic** | \- Simulated user login journey fails from an external testing location.
\- Critical API endpoint response time exceeds 2 seconds from an external check.
\- Website homepage fails to load correctly from an external probe. | Best for end-to-end monitoring and user experience validation. Ideal for critical business flows and external service dependency checks. | + + +This article compares Metric vs State Based alerts needed by platform teams managing infrastructure and deployments. + +Traditional monitoring relies on metrics. Tools like Prometheus collect numerical data and trigger alerts when values cross thresholds. For example, a `PodCrashLooping` rule in Prometheus might fire when the container restart count increases. + +State-based alerting takes a different approach. It monitors the actual state that objects report about themselves (in Kubernetes, this includes conditions and status fields), which often contain human-readable explanations. These states often follow RAG (Red-Amber-Green) patterns, making them intuitive to understand. + +## Metrics + +Using the example of a crashing pod, kubelet does not expose a native metric for this purpose. You need to use `kube-state-metrics`, which exposes the number of container restarts under `kube_pod_container_status_restarts_total`. You can then write a Prometheus Rule (alert): + +```yaml +alert: KubernetesPodCrashLooping +expr: increase(kube_pod_container_status_restarts_total[1m]) > 3 +for: 2m +labels: + severity: warning +annotations: + summary: Kubernetes pod crash looping (instance {{ $labels.instance }}) + description: "Pod {{ $labels.namespace }}/{{ $labels.pod }} is crash looping" +``` + +And would produce an alert similar to this: + + + +There are some drawbacks with this approach: + +* **Limited Details** - The alert tells you **_what_** happened, but not **_why_**. +* **Limited Context** - You know the name of the pod and namespace, but not much else. If you want to restrict alerts to only pods labelled `env: production`, `kube-state-metrics` needs to be updated to whitelist the label. +* **Cardinality Challenges** - Whitelisting is required, as without it, you risk a cardinality explosion. Ingesting large amounts of metrics can be expensive and inefficient. +* **Configuration Overhead** - Each failure scenario requires configuration, first with the extraction of metrics and then by creating and fine-tuning alerts. + +These challenges are due to how TSDBs handle textual vs numerical data - the details and context you need is all in the text. + + +## State-Based Alerting + + +The first step to "configuration-less" alerts is some standardization on what it means for something to be unhealthy. This is still an unsolved problem outside of Pod Probes. Kubernetes has taken some early steps with Conditions - which is an interface for reporting the state of a resource as either `unhealthy` or `healthy`. + +If you run the following command to get the YAML definition of a Pod: + + + +apiVersion: v1 +kind: Pod +metadata: + creationTimestamp: "2025-03-26T10:17:16Z" + generateName: nginx-744c4cb859- + labels: + app: nginx + pod-template-hash: 744c4cb859 + name: nginx-744c4cb859-5p5hk + namespace: default + ownerReferences: + - apiVersion: apps/v1 + blockOwnerDeletion: true + controller: true + kind: ReplicaSet + name: nginx-744c4cb859 + uid: ae5213f5-988b-4d00-9101-bf6779dc17e4 + resourceVersion: "471187955" + uid: 138dd15f-2433-479c-9ef9-8fe5034dfb9c +spec: + containers: + - image: nginx:invalid + imagePullPolicy: Always + name: nginx + resources: {} + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + volumeMounts: + - mountPath: /var/run/secrets/kubernetes.io/serviceaccount + name: kube-api-access-9pnfj + readOnly: true + dnsPolicy: ClusterFirst + enableServiceLinks: true + imagePullSecrets: + - name: dockerhub + nodeName: ip-10-0-5-138.eu-west-1.compute.internal + preemptionPolicy: PreemptLowerPriority + priority: 0 + restartPolicy: Always + schedulerName: default-scheduler + securityContext: {} + serviceAccount: default + serviceAccountName: default + terminationGracePeriodSeconds: 30 + tolerations: + - effect: NoExecute + key: node.kubernetes.io/not-ready + operator: Exists + tolerationSeconds: 300 + - effect: NoExecute + key: node.kubernetes.io/unreachable + operator: Exists + tolerationSeconds: 300 + volumes: + - name: kube-api-access-9pnfj + projected: + defaultMode: 420 + sources: + - serviceAccountToken: + expirationSeconds: 3607 + path: token + - configMap: + items: + - key: ca.crt + path: ca.crt + name: kube-root-ca.crt + - downwardAPI: + items: + - fieldRef: + apiVersion: v1 + fieldPath: metadata.namespace + path: namespace +status: + conditions: + - lastProbeTime: null + lastTransitionTime: "2025-03-26T10:17:18Z" + status: "True" + type: PodReadyToStartContainers + - lastProbeTime: null + lastTransitionTime: "2025-03-26T10:17:16Z" + status: "True" + type: Initialized + - lastProbeTime: null + lastTransitionTime: "2025-03-26T10:17:16Z" + message: 'containers with unready status: [nginx]' + reason: ContainersNotReady + status: "False" + type: Ready + - lastProbeTime: null + lastTransitionTime: "2025-03-26T10:17:16Z" + message: 'containers with unready status: [nginx]' + reason: ContainersNotReady + status: "False" + type: ContainersReady + - lastProbeTime: null + lastTransitionTime: "2025-03-26T10:17:16Z" + status: "True" + type: PodScheduled + containerStatuses: + - image: nginx:invalid + imageID: "" + lastState: {} + name: nginx + ready: false + restartCount: 0 + started: false + state: + waiting: + message: Back-off pulling image "nginx:invalid" + reason: ImagePullBackOff + hostIP: 10.0.5.138 + hostIPs: + - ip: 10.0.5.138 + phase: Pending + podIP: 10.0.5.78 + podIPs: + - ip: 10.0.5.78 + qosClass: BestEffort + startTime: "2025-03-26T10:17:16Z" + + + + +While standards exist for exposing metrics, there's no equivalent standard for exposing the thresholds or conditions that trigger alerts. This leads to fragmentation and complexity in monitoring setups. + +[is-healthy](https://github.com/flanksource/is-healthy) is a tool designed to assess and report the health status of Kubernetes and other cloud resources (such as AWS) without the limitations of metric-based approaches. + +You can use `is-healthy` to check the status of a resource. For example, to check a pod and output the health status as JSON: + + + +```yaml +ready: false +health: unhealthy +status: ImagePullBackOff +message: Back-off pulling image "nginx:invalid" +lastUpdated: "2025-03-26T10:17:18Z" +``` + + +This example output shows: +* **ready**: Whether the resource is reconciling or provisioning. Note: `ready` indicates if the resource's desired state matches its actual state, which is different from its health. A pod in a failure state can be `ready` if its state is stable (not changing). +* **health**: One of `healthy`, `unhealthy`, `warning`, `unknown`. This indicates the overall health assessment. +* **status**: A text description of the state of the resource, for example, `Running` or `ImagePullBackOff`. +* **message**: A reason providing more detail for the current status. +* **lastUpdated**: The timestamp when the resource was lastUpdated or reconciled. + +This is example isn't really thay useful, as it needs to be run continously, [canary-checker](https://canarychecker.io/) is a kubernetes health-check platform with support for 30+ check types, The [`kubernetes`](https://canarychecker.io/reference/kubernetes) check uses the `is-healthy` library: + +```yaml title=kubernetes.yaml file=./canary.yaml +``` + +This can be run locally: + + + + + +## Step-by-Step Guide to State-Based Alerting for Deployments + +### Understanding Deployment States + +Kubernetes Deployments have a `status` field that contains critical information about rollout progress. Examine what a healthy Deployment status looks like. + +Open your terminal and create a simple Nginx deployment, waiting for it to become ready: + + +deployment.apps/nginx created + + +Retrieve the status and it will look like this for a healthy object. + + +availableReplicas: 1 +conditions: + - lastTransitionTime: "2025-03-26T10:11:23Z" + lastUpdateTime: "2025-03-26T10:11:23Z" + message: Deployment has minimum availability. + reason: MinimumReplicasAvailable + status: "True" + type: Available + - lastTransitionTime: "2025-03-26T10:11:18Z" + lastUpdateTime: "2025-03-26T10:11:23Z" + message: ReplicaSet "nginx-7584b6f84c" has successfully progressed. + reason: NewReplicaSetAvailable + status: "True" + type: Progressing +observedGeneration: 1 +readyReplicas: 1 +replicas: 1 +updatedReplicas: 1 + + +Simulating a failure: + + +deployment.apps/nginx image updated + +And then checking on the status: + +availableReplicas: 1 +conditions: + - lastTransitionTime: "2025-03-26T10:11:23Z" + lastUpdateTime: "2025-03-26T10:11:23Z" + message: Deployment has minimum availability. + reason: MinimumReplicasAvailable + status: "True" + type: Available + - lastTransitionTime: "2025-03-26T10:11:18Z" + lastUpdateTime: "2025-03-26T10:17:16Z" + message: ReplicaSet "nginx-744c4cb859" is progressing. + reason: ReplicaSetUpdated + status: "True" + type: Progressing +observedGeneration: 2 +readyReplicas: 1 +replicas: 2 +unavailableReplicas: 1 +updatedReplicas: 1 + + + + +### Setting Up State-Based Alerting with Mission Control + +Mission Control can monitor these states and alert when they indicate problems. Let's create a check to monitor deployment rollout status. + +Create a new file named `deployment-state-check.yaml`: + +```yaml +apiVersion: canaries.flanksource.com/v1 +kind: Canary +metadata: + name: deployment-state-check +spec: + interval: 30 + kubernetes: + - name: check-deployment-rollout + description: "Monitor deployment rollout state" + resource: + apiVersion: apps/v1 + kind: Deployment + name: nginx-deployment + namespace: default + results: + - name: Available + selector: $.status.conditions[?(@.type=="Available")].status + condition: Equal + error: "False" + - name: Progressing + selector: $.status.conditions[?(@.type=="Progressing")].status + condition: Equal + error: "False" + - name: ProgressingReason + selector: $.status.conditions[?(@.type=="Progressing")].reason + condition: Equal + error: "ProgressDeadlineExceeded" + - name: ErrorMessage + selector: $.status.conditions[?(@.type=="Progressing")].message + display: true +``` +This Canary check: +1. Runs every 30 seconds (`interval: 30`). +2. Targets the `Deployment` named `nginx-deployment` in the `default` namespace. +3. Defines results based on JSONPath selectors applied to the Deployment's status: + - Checks if the `Available` condition status is `False`. + - Checks if the `Progressing` condition status is `False`. + - Checks if the `Progressing` condition reason is `ProgressDeadlineExceeded`. + - Captures the `Progressing` condition message for display (`display: true`). + An alert is triggered if any condition marked with `error:` is met. + +Use `kubectl` to apply the Canary resource definition to your cluster: + +```bash +kubectl apply -f deployment-state-check.yaml +``` + +This command registers your state-based check in Mission Control, which will now monitor your Deployment's state. + +### Simulating a Failed Deployment + +Create a problematic Deployment to see state-based alerting in action. + +Create a file named `failing-deployment.yaml`. This YAML defines a Deployment named `failing-deployment`: + +```yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: failing-deployment + namespace: default +spec: + replicas: 3 + selector: + matchLabels: + app: failing-app + strategy: + rollingUpdate: + maxSurge: 1 + maxUnavailable: 1 + type: RollingUpdate + template: + metadata: + labels: + app: failing-app + spec: + containers: + - name: container + image: nginx:latest + resources: + limits: + memory: "10Mi" # Intentionally too small + requests: + memory: "10Mi" + ports: + - containerPort: 80 +``` +This Deployment requests 3 replicas but sets a very low memory limit (`10Mi`), which is likely to cause Pods to be terminated with Out Of Memory (OOM) errors. + +Use `kubectl` to apply the failing Deployment definition to your cluster: + +```bash +kubectl apply -f failing-deployment.yaml +``` + +This command creates the Deployment, which will likely fail because the Pods require more memory than the specified limit. + +### Comparing Alerts: State-Based vs. Prometheus + +Now, compare how different monitoring approaches handle this failure. + +#### Prometheus Alert (Metric-Based) + +With Prometheus, a common alert rule for deployment issues checks for generation mismatches: + +```yaml title=KubernetesDeploymentGenerationMismatch + - alert: KubernetesDeploymentGenerationMismatch + expr: kube_deployment_status_observed_generation != kube_deployment_metadata_generation + for: 10m + labels: + severity: critical + annotations: + summary: Kubernetes Deployment generation mismatch (instance {{ $labels.instance }}) + description: "Deployment {{ $labels.namespace }}/{{ $labels.deployment }} has failed but has not been rolled back.\n VALUE = {{ $value }}\n LABELS = {{ $labels }}" +``` + +This alert fires when there is a mismatch between the observed and expected generation numbers of a Kubernetes Deployment. The generation number increments whenever the Deployment spec changes. A mismatch indicates that the latest configuration change has not been successfully rolled out by the controller. While useful, it doesn't explain *why* the rollout failed. See [KubernetesDeploymentGenerationMismatch](https://samber.github.io/awesome-prometheus-alerts/rules#rule-kubernetes-1-24) for more details on this type of alert. + + +#### Mission Control State-Based Alert + +Use `kubectl` and `jq` to inspect the `conditions` within the status of the `failing-deployment`: + +```bash +kubectl get deployment failing-deployment -o json | jq '.status.conditions' +``` + +The output might resemble the following: + +```json +[ + { + "lastTransitionTime": "2023-06-15T15:10:23Z", + "lastUpdateTime": "2023-06-15T15:10:23Z", + "message": "Deployment does not have minimum availability.", + "reason": "MinimumReplicasUnavailable", + "status": "False", + "type": "Available" + }, + { + "lastTransitionTime": "2023-06-15T15:15:45Z", + "lastUpdateTime": "2023-06-15T15:15:45Z", + "message": "ReplicaSet \"failing-deployment-75d55d96c\" has timed out progressing. 0/3 replicas available. Pods are being killed due to memory limit exceeded.", + "reason": "ProgressDeadlineExceeded", + "status": "False", + "type": "Progressing" + } +] +``` +This output shows two conditions: +1. `Available` is `False` because the deployment does not have the minimum required replicas ready (`MinimumReplicasUnavailable`). +2. `Progressing` is `False` because the rollout timed out (`ProgressDeadlineExceeded`). The message provides specific details about the failure, potentially including reasons like OOM killing if the system surfaces that information here. + +Mission Control captures this state and provides an alert with the error message from the `Progressing` condition (e.g., "ReplicaSet ... has timed out progressing..."). This points more directly to the root cause or the symptom reported by Kubernetes. + +## Common Pitfalls of State-Based Alerting + +### When State-Based Alerting Works Best (and When It Doesn't) + +State-based alerting excels when: +- Resources self-report meaningful status +- Problems have descriptive error messages +- You need context for troubleshooting + +It's less effective when: +- Resources don't update status fields +- You need to alert on trends over time +- Complex conditions require correlation between multiple resources + +### Avoiding Alert Storms + +State changes can trigger multiple alerts. To avoid this: + +- Group related states into single alerts +- Add debounce periods for flapping states +- Use a severity hierarchy based on states + +### Combining with Metric-Based Monitoring + +The best approach is often a combination: +- Use state-based alerts for detailed diagnostics +- Use metric-based alerts for performance issues and trends +- Create correlation between the two for complete visibility + +## Conclusion + +State-based alerting transforms monitoring from "something is wrong" to "this is why it's wrong." By capturing the actual state of resources rather than only metrics, Mission Control helps DevOps teams troubleshoot faster and understand failures better. + +The ability to extract human-readable error messages directly from Kubernetes resources provides context that metrics alone cannot. As systems become more complex, this context becomes critical for effective incident management. + +For Kubernetes operators, combining state-based alerting with traditional metrics creates a complete view of your system's health and gives you the power to resolve issues faster. +``` + +- [KubernetesDeploymentGenerationMismatch](https://samber.github.io/awesome-prometheus-alerts/rules#rule-kubernetes-1-24) diff --git a/mission-control/blog/state-based-alerting/index.mdx b/mission-control/blog/state-based-alerting/index.mdx new file mode 100644 index 00000000..bf6eb3e0 --- /dev/null +++ b/mission-control/blog/state-based-alerting/index.mdx @@ -0,0 +1,502 @@ +# State-Based Alerting: Understanding Why Kubernetes Deployments Fail + + +## Application vs Infrastructure + +Application and infrastucture normally have very different failure scenarios, Application errors are normally due to bugs (that produce exceptions) or performance related problems. When there are problems it becomes immiedatly obvious - page fails to load or starts timing out. Infrastructure health is more often related to configuration errors, drift, permissions and unhealthy dependencies problems can lay latent and be influenced by drift and dependences. + +Common application health methodologies include USE (**u**tilization, **s**aturation,**e**rrors) and RED (**r**quests, **e**rrors, **d**uration) that primarily use metrics (and log/trace derived metrics) that define thresholds for known health states. It is fairly straightforard to define healthy, unhealthy and warning states. These methodoligies struggle with unknown states i.e. we are not receiving any traffic so we don't if there are any errors. Synthetic testing helps to surface problems by creating artificial transactions + +## Metric (Thresholds and Anomalies) + + +## State Based + +State-based alerting takes a different approach. It monitors the actual state that objects report about themselves (in Kubernetes, this includes `conditions` and `status`fields), which often contain human-readable explanations. These states often follow RAG (Red-Amber-Green) patterns, making them intuitive to understand. + +## Synthetic Testing + + +Infrastructure errors tend be more state oreinted + +## Alerting Types and Examples + +There are various types of alerting methods, and choosing the right one can be challenging. + +| Alerting Type | Example(s) | Use Cases | +| :---- | :---- | :---- | +| **Metrics (Threshold)** | \- CPU \> 90% for 5 minutes.
\- Available disk space \< 10GB. | Best for USE (**u**tilization, **s**aturation,**e**rrors) and known errors. | +| **Anomaly Detection** | \- Website traffic drops 50% compared to the same time last week.
\- Login attempts spike far beyond the normal range. | Useful for detecting unusual patterns and behavior that deviate from historical norms. Suitable for security monitoring and business metrics. | +| **Log-Based** | \- More than 10 "HTTP 500" errors in web server logs within 1 minute.
\- Any log containing `OutOfMemoryError`. | Ideal for error detection, security events, and application-specific issues that are captured in logs. Good for detailed troubleshooting context. | +| **State Based** | \- Kubernetes Node condition `Ready` \= False for 10 minutes.
\- Pod status is `CrashLoopBackOff`.
\- Deployment condition `Progressing = False` with reason: `ProgressDeadlineExceeded`. | Suitable for infrastructure and platform monitoring where resources have defined states. Good for Kubernetes and cloud resource health monitoring. | +| **Synthetic** | \- Simulated user login journey fails from an external testing location.
\- Critical API endpoint response time exceeds 2 seconds from an external check.
\- Website homepage fails to load correctly from an external probe. | Best for end-to-end monitoring and user experience validation. Ideal for critical business flows and external service dependency checks. | + + +This article compares Metric vs State Based alerts needed by platform teams managing infrastructure and deployments. + +Traditional monitoring relies on metrics. Tools like Prometheus collect numerical data and trigger alerts when values cross thresholds. For example, a `PodCrashLooping` rule in Prometheus might fire when the container restart count increases. + + + +## Metrics + +Using the example of a crashing pod, kubelet does not expose a native metric for this purpose. You need to use `kube-state-metrics`, which exposes the number of container restarts under `kube_pod_container_status_restarts_total`. You can then write a Prometheus Rule (alert): + +```yaml +alert: KubernetesPodCrashLooping +expr: increase(kube_pod_container_status_restarts_total[1m]) > 3 +for: 2m +labels: + severity: warning +annotations: + summary: Kubernetes pod crash looping (instance {{ $labels.instance }}) + description: "Pod {{ $labels.namespace }}/{{ $labels.pod }} is crash looping" +``` + +And would produce an alert similar to this: + + + +There are some drawbacks with this approach: + +* **Limited Details** - The alert tells you **_what_** happened, but not **_why_**. +* **Limited Context** - You know the name of the pod and namespace, but not much else. If you want to restrict alerts to only pods labelled `env: production`, `kube-state-metrics` needs to be updated to whitelist the label. +* **Cardinality Challenges** - Whitelisting is required, as without it, you risk a cardinality explosion. Ingesting large amounts of metrics can be expensive and inefficient. +* **Configuration Overhead** - Each failure scenario requires configuration, first with the extraction of metrics and then by creating and fine-tuning alerts. + +These challenges are due to how TSDBs handle textual vs numerical data - the details and context you need is all in the text. + + +## State-Based Alerting + + +The first step to "configuration-less" alerts is some standardization on what it means for something to be unhealthy. This is still an unsolved problem outside of Pod Probes. Kubernetes has taken some early steps with Conditions - which is an interface for reporting the state of a resource as either `unhealthy` or `healthy`. + +If you run the following command to get the YAML definition of a Pod: + + + +apiVersion: v1 +kind: Pod +metadata: + creationTimestamp: "2025-03-26T10:17:16Z" + generateName: nginx-744c4cb859- + labels: + app: nginx + pod-template-hash: 744c4cb859 + name: nginx-744c4cb859-5p5hk + namespace: default + ownerReferences: + - apiVersion: apps/v1 + blockOwnerDeletion: true + controller: true + kind: ReplicaSet + name: nginx-744c4cb859 + uid: ae5213f5-988b-4d00-9101-bf6779dc17e4 + resourceVersion: "471187955" + uid: 138dd15f-2433-479c-9ef9-8fe5034dfb9c +spec: + containers: + - image: nginx:invalid + imagePullPolicy: Always + name: nginx + resources: {} + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + volumeMounts: + - mountPath: /var/run/secrets/kubernetes.io/serviceaccount + name: kube-api-access-9pnfj + readOnly: true + dnsPolicy: ClusterFirst + enableServiceLinks: true + imagePullSecrets: + - name: dockerhub + nodeName: ip-10-0-5-138.eu-west-1.compute.internal + preemptionPolicy: PreemptLowerPriority + priority: 0 + restartPolicy: Always + schedulerName: default-scheduler + securityContext: {} + serviceAccount: default + serviceAccountName: default + terminationGracePeriodSeconds: 30 + tolerations: + - effect: NoExecute + key: node.kubernetes.io/not-ready + operator: Exists + tolerationSeconds: 300 + - effect: NoExecute + key: node.kubernetes.io/unreachable + operator: Exists + tolerationSeconds: 300 + volumes: + - name: kube-api-access-9pnfj + projected: + defaultMode: 420 + sources: + - serviceAccountToken: + expirationSeconds: 3607 + path: token + - configMap: + items: + - key: ca.crt + path: ca.crt + name: kube-root-ca.crt + - downwardAPI: + items: + - fieldRef: + apiVersion: v1 + fieldPath: metadata.namespace + path: namespace +status: + conditions: + - lastProbeTime: null + lastTransitionTime: "2025-03-26T10:17:18Z" + status: "True" + type: PodReadyToStartContainers + - lastProbeTime: null + lastTransitionTime: "2025-03-26T10:17:16Z" + status: "True" + type: Initialized + - lastProbeTime: null + lastTransitionTime: "2025-03-26T10:17:16Z" + message: 'containers with unready status: [nginx]' + reason: ContainersNotReady + status: "False" + type: Ready + - lastProbeTime: null + lastTransitionTime: "2025-03-26T10:17:16Z" + message: 'containers with unready status: [nginx]' + reason: ContainersNotReady + status: "False" + type: ContainersReady + - lastProbeTime: null + lastTransitionTime: "2025-03-26T10:17:16Z" + status: "True" + type: PodScheduled + containerStatuses: + - image: nginx:invalid + imageID: "" + lastState: {} + name: nginx + ready: false + restartCount: 0 + started: false + state: + waiting: + message: Back-off pulling image "nginx:invalid" + reason: ImagePullBackOff + hostIP: 10.0.5.138 + hostIPs: + - ip: 10.0.5.138 + phase: Pending + podIP: 10.0.5.78 + podIPs: + - ip: 10.0.5.78 + qosClass: BestEffort + startTime: "2025-03-26T10:17:16Z" + + + + +While standards exist for exposing metrics, there's no equivalent standard for exposing the thresholds or conditions that trigger alerts. This leads to fragmentation and complexity in monitoring setups. + +[is-healthy](https://github.com/flanksource/is-healthy) is a tool designed to assess and report the health status of Kubernetes and other cloud resources (such as AWS) without the limitations of metric-based approaches. + +You can use `is-healthy` to check the status of a resource. For example, to check a pod and output the health status as JSON: + + + +```yaml +ready: false +health: unhealthy +status: ImagePullBackOff +message: Back-off pulling image "nginx:invalid" +lastUpdated: "2025-03-26T10:17:18Z" +``` + + +This example output shows: +* **ready**: Whether the resource is reconciling or provisioning. Note: `ready` indicates if the resource's desired state matches its actual state, which is different from its health. A pod in a failure state can be `ready` if its state is stable (not changing). +* **health**: One of `healthy`, `unhealthy`, `warning`, `unknown`. This indicates the overall health assessment. +* **status**: A text description of the state of the resource, for example, `Running` or `ImagePullBackOff`. +* **message**: A reason providing more detail for the current status. +* **lastUpdated**: The timestamp when the resource was lastUpdated or reconciled. + +This is example isn't really thay useful, as it needs to be run continously, [canary-checker](https://canarychecker.io/) is a kubernetes health-check platform with support for 30+ check types, The [`kubernetes`](https://canarychecker.io/reference/kubernetes) check uses the `is-healthy` library: + +```yaml title=kubernetes.yaml file=./canary.yaml +``` + +This can be run locally: + + + + + +## Step-by-Step Guide to State-Based Alerting for Deployments + +### Understanding Deployment States + +Kubernetes Deployments have a `status` field that contains critical information about rollout progress. Examine what a healthy Deployment status looks like. + +Open your terminal and create a simple Nginx deployment, waiting for it to become ready: + + +deployment.apps/nginx created + + +Retrieve the status and it will look like this for a healthy object. + + +availableReplicas: 1 +conditions: + - lastTransitionTime: "2025-03-26T10:11:23Z" + lastUpdateTime: "2025-03-26T10:11:23Z" + message: Deployment has minimum availability. + reason: MinimumReplicasAvailable + status: "True" + type: Available + - lastTransitionTime: "2025-03-26T10:11:18Z" + lastUpdateTime: "2025-03-26T10:11:23Z" + message: ReplicaSet "nginx-7584b6f84c" has successfully progressed. + reason: NewReplicaSetAvailable + status: "True" + type: Progressing +observedGeneration: 1 +readyReplicas: 1 +replicas: 1 +updatedReplicas: 1 + + +Simulating a failure: + + +deployment.apps/nginx image updated + +And then checking on the status: + +availableReplicas: 1 +conditions: + - lastTransitionTime: "2025-03-26T10:11:23Z" + lastUpdateTime: "2025-03-26T10:11:23Z" + message: Deployment has minimum availability. + reason: MinimumReplicasAvailable + status: "True" + type: Available + - lastTransitionTime: "2025-03-26T10:11:18Z" + lastUpdateTime: "2025-03-26T10:17:16Z" + message: ReplicaSet "nginx-744c4cb859" is progressing. + reason: ReplicaSetUpdated + status: "True" + type: Progressing +observedGeneration: 2 +readyReplicas: 1 +replicas: 2 +unavailableReplicas: 1 +updatedReplicas: 1 + + + + +### Setting Up State-Based Alerting with Mission Control + +Mission Control can monitor these states and alert when they indicate problems. Let's create a check to monitor deployment rollout status. + +Create a new file named `deployment-state-check.yaml`: + +```yaml +apiVersion: canaries.flanksource.com/v1 +kind: Canary +metadata: + name: deployment-state-check +spec: + interval: 30 + kubernetes: + - name: check-deployment-rollout + description: "Monitor deployment rollout state" + resource: + apiVersion: apps/v1 + kind: Deployment + name: nginx-deployment + namespace: default + results: + - name: Available + selector: $.status.conditions[?(@.type=="Available")].status + condition: Equal + error: "False" + - name: Progressing + selector: $.status.conditions[?(@.type=="Progressing")].status + condition: Equal + error: "False" + - name: ProgressingReason + selector: $.status.conditions[?(@.type=="Progressing")].reason + condition: Equal + error: "ProgressDeadlineExceeded" + - name: ErrorMessage + selector: $.status.conditions[?(@.type=="Progressing")].message + display: true +``` +This Canary check: +1. Runs every 30 seconds (`interval: 30`). +2. Targets the `Deployment` named `nginx-deployment` in the `default` namespace. +3. Defines results based on JSONPath selectors applied to the Deployment's status: + - Checks if the `Available` condition status is `False`. + - Checks if the `Progressing` condition status is `False`. + - Checks if the `Progressing` condition reason is `ProgressDeadlineExceeded`. + - Captures the `Progressing` condition message for display (`display: true`). +An alert is triggered if any condition marked with `error:` is met. + +Use `kubectl` to apply the Canary resource definition to your cluster: + +```bash +kubectl apply -f deployment-state-check.yaml +``` + +This command registers your state-based check in Mission Control, which will now monitor your Deployment's state. + +### Simulating a Failed Deployment + +Create a problematic Deployment to see state-based alerting in action. + +Create a file named `failing-deployment.yaml`. This YAML defines a Deployment named `failing-deployment`: + +```yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: failing-deployment + namespace: default +spec: + replicas: 3 + selector: + matchLabels: + app: failing-app + strategy: + rollingUpdate: + maxSurge: 1 + maxUnavailable: 1 + type: RollingUpdate + template: + metadata: + labels: + app: failing-app + spec: + containers: + - name: container + image: nginx:latest + resources: + limits: + memory: "10Mi" # Intentionally too small + requests: + memory: "10Mi" + ports: + - containerPort: 80 +``` +This Deployment requests 3 replicas but sets a very low memory limit (`10Mi`), which is likely to cause Pods to be terminated with Out Of Memory (OOM) errors. + +Use `kubectl` to apply the failing Deployment definition to your cluster: + +```bash +kubectl apply -f failing-deployment.yaml +``` + +This command creates the Deployment, which will likely fail because the Pods require more memory than the specified limit. + +### Comparing Alerts: State-Based vs. Prometheus + +Now, compare how different monitoring approaches handle this failure. + +#### Prometheus Alert (Metric-Based) + +With Prometheus, a common alert rule for deployment issues checks for generation mismatches: + +```yaml title=KubernetesDeploymentGenerationMismatch + - alert: KubernetesDeploymentGenerationMismatch + expr: kube_deployment_status_observed_generation != kube_deployment_metadata_generation + for: 10m + labels: + severity: critical + annotations: + summary: Kubernetes Deployment generation mismatch (instance {{ $labels.instance }}) + description: "Deployment {{ $labels.namespace }}/{{ $labels.deployment }} has failed but has not been rolled back.\n VALUE = {{ $value }}\n LABELS = {{ $labels }}" +``` + +This alert fires when there is a mismatch between the observed and expected generation numbers of a Kubernetes Deployment. The generation number increments whenever the Deployment spec changes. A mismatch indicates that the latest configuration change has not been successfully rolled out by the controller. While useful, it doesn't explain *why* the rollout failed. See [KubernetesDeploymentGenerationMismatch](https://samber.github.io/awesome-prometheus-alerts/rules#rule-kubernetes-1-24) for more details on this type of alert. + + +#### Mission Control State-Based Alert + +Use `kubectl` and `jq` to inspect the `conditions` within the status of the `failing-deployment`: + +```bash +kubectl get deployment failing-deployment -o json | jq '.status.conditions' +``` + +The output might resemble the following: + +```json +[ + { + "lastTransitionTime": "2023-06-15T15:10:23Z", + "lastUpdateTime": "2023-06-15T15:10:23Z", + "message": "Deployment does not have minimum availability.", + "reason": "MinimumReplicasUnavailable", + "status": "False", + "type": "Available" + }, + { + "lastTransitionTime": "2023-06-15T15:15:45Z", + "lastUpdateTime": "2023-06-15T15:15:45Z", + "message": "ReplicaSet \"failing-deployment-75d55d96c\" has timed out progressing. 0/3 replicas available. Pods are being killed due to memory limit exceeded.", + "reason": "ProgressDeadlineExceeded", + "status": "False", + "type": "Progressing" + } +] +``` +This output shows two conditions: +1. `Available` is `False` because the deployment does not have the minimum required replicas ready (`MinimumReplicasUnavailable`). +2. `Progressing` is `False` because the rollout timed out (`ProgressDeadlineExceeded`). The message provides specific details about the failure, potentially including reasons like OOM killing if the system surfaces that information here. + +Mission Control captures this state and provides an alert with the error message from the `Progressing` condition (e.g., "ReplicaSet ... has timed out progressing..."). This points more directly to the root cause or the symptom reported by Kubernetes. + +## Common Pitfalls of State-Based Alerting + +### When State-Based Alerting Works Best (and When It Doesn't) + +State-based alerting excels when: +- Resources self-report meaningful status +- Problems have descriptive error messages +- You need context for troubleshooting + +It's less effective when: +- Resources don't update status fields +- You need to alert on trends over time +- Complex conditions require correlation between multiple resources + +### Avoiding Alert Storms + +State changes can trigger multiple alerts. To avoid this: + +- Group related states into single alerts +- Add debounce periods for flapping states +- Use a severity hierarchy based on states + +### Combining with Metric-Based Monitoring + +The best approach is often a combination: +- Use state-based alerts for detailed diagnostics +- Use metric-based alerts for performance issues and trends +- Create correlation between the two for complete visibility + +## Conclusion + +State-based alerting transforms monitoring from "something is wrong" to "this is why it's wrong." By capturing the actual state of resources rather than only metrics, Mission Control helps DevOps teams troubleshoot faster and understand failures better. + +The ability to extract human-readable error messages directly from Kubernetes resources provides context that metrics alone cannot. As systems become more complex, this context becomes critical for effective incident management. + +For Kubernetes operators, combining state-based alerting with traditional metrics creates a complete view of your system's health and gives you the power to resolve issues faster. +``` + +- [KubernetesDeploymentGenerationMismatch](https://samber.github.io/awesome-prometheus-alerts/rules#rule-kubernetes-1-24) diff --git a/mission-control/blog/state-based-alerting/nginx.yaml b/mission-control/blog/state-based-alerting/nginx.yaml new file mode 100644 index 00000000..2445e68f --- /dev/null +++ b/mission-control/blog/state-based-alerting/nginx.yaml @@ -0,0 +1,8 @@ +apiVersion: v1 +kind: Pod +metadata: + name: test-pod +spec: + containers: + - image: nginx:invalid + name: nginx diff --git a/mission-control/static/img/PodCrashLooping.png b/mission-control/static/img/PodCrashLooping.png new file mode 100644 index 0000000000000000000000000000000000000000..c59590ece8b6d44bf01d27cfdb11cca33f17b7a4 GIT binary patch literal 128682 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 Ik|u%w2mMMQod5s; literal 0 HcmV?d00001 diff --git a/prompts/blog.md b/prompts/blog.md new file mode 100644 index 00000000..b817d0aa --- /dev/null +++ b/prompts/blog.md @@ -0,0 +1,55 @@ +Write a 1250-1500 introductor blog post for a DevOps / Platform Engineering focused product or feature. + +The tone should be developer-friendly, technical and informative without sounding salesy or promotional. + +The writing should have no fluff, use short punchy sentences, avoid buzzwords and speak like a senior engineer would. + +The purpose of this copy is to generate interest in a new approach to a feature, educate DevOps engineers, increase awareness and reduce friction to trial + +Speak directly to platform engineers, SREs and DevOps leads and address their pain points of change and tool fatigue. + +Avoid generic language. Favor clarity over cleverness. Highlight real-world outcomes and developer-first thinking. + +Including working code examples / snippets and links were appropriate. + +Format the output in raw markdown suitable for copy and pasting into vscode. + +Write a blog post on Flanksource MIssion Control approach to AIops, primarily building a real-time and update to mirror state of cloud resources that can be queried rapidly, plus an advanced graph that builds relationships between resources e.g. Cloudformation -> Auto Scaling Group > EC2 instance and then layers on soft relationsyhips like ebs volumes, subnets, IAM poilcies - For Kubernetes it understands Flux and Gitops being able to build a graph of a Flux Kustomization object creating a HelmRelease CRD, which then creates a deployment -> replicset -> pod and then layeying relationships like services, nodes, PVC, ingress, etc.. + +State based alerting (i.e. whene resource self-report failure) and traditioanl alerts from APM tools trigger playbooks that can then proactively collect infomation in a distrubuted fashion from agents deployed closest to the data, the graph, changes to the graph resources, events and pro-acrtive playboks are then fed into the model which tan the recommend futher playbooks to execute. + +This is advantage as acess to systems is pushed down to agents who can use secrets like pod identity and service accounts to collect duta, new agent actions are use to create with YAML based playbooks. + +Write a blog post on the benefits of GitOps and the challenges of adoption - especially with mixed maturity teams (some prefer working in git and others like clickops) - Highlight the mission control approach to gitops (tracking resources and building a graph on how they map to git repository and sources), which enables "editing" kubernetes objects with the changes being submitted back to git. The benefits include a + +contrasting metrics vs state driven alerting, store with concepts such as RED and USE and how they are more apropriate for monitoring transactions and staady state workloads and fall short for more platform engineering tasks such as monitoring the rollout of a new application or checking if a cluster is healthy after an upgrade. and then use examples of Prometheus and the canary-checker kubernetes check (https://flanksource.com/docs/guide/canary-checker/reference/kubernetes) which used the underlying https://github.com/flanksource/is-healthy library + +Highlight the drawbacks of the canary-checker approach that is poll-based and does not scale very well and demononstrate how https://github.com/flanksource/config-db takes this one step further by using a state driven approach that watches for changes to cloud resources, and then fires events when the state becomes unhealthy. + + + is more scalable and can be used to monitor the health of a cluster or application in real-time. + +Optionally, include {optional elements} (e.g. a strong CTA, technical example, code snippet, customer proof, comparison table). + + +Act as a technical blog writer targeting devops and platform engineers working with Kubernetes, GitOps, Helm and Flux, when editing and rewriting content follow these instructions strictly: + +1. Use the following outline for the blog: + * Introduction - introduce the topic of the blog with a pain point or teaser + * Background - Describe the context and initial challenges. + * Step by step guide + * Common Pitfalls - Highlight common mistakes and how to avoid them and add use-cases that are not a good fiit + * Conclustion - Offer final thoughts and potential future implications. +2. Write at a Grade 10 level +3. Use clear, concise simple language, even when explaining complex topics. +4. Bias toward short sentences. +5. Mix and match lists and paragraphs +6. Do not use any salesy or marketing terms, Do not use adverbs +7. Use MDX formatting +8. Precede every command with an explanation of what the command does. After the command, provide additional details about the command, such as what the arguments do and why your reader is using them. +9. Explicitly tell the user to create or open each file you’ll have them use. +10. Like commands, always introduce a file or script by describing its general purpose, then explain any changes that the reader will be making in the file. Without these explanations, readers won’t be able to customize, update, or troubleshoot issues in the long run. +11. If you’re asking the reader to write code, follow the same approach for commands: introduce the code block with a high-level explanation of what it does. Then show the code, and then call out any important details. +12. Do not use the term "this document", when referring to the system or product being documented always use "Mission Control" +13. Ensure all examples and use cases are relevant + diff --git a/prompts/style.md b/prompts/style.md new file mode 100644 index 00000000..e95a2c4c --- /dev/null +++ b/prompts/style.md @@ -0,0 +1,56 @@ +# Writing Style Guidelines + +Follow these strict rules: + +1. Avoid adverbs and complex language + +## Formating +- Format all output using MDX (markdowon) +- Format code and examples using this example: + + ```yaml title=some-title.yaml + ``` +- Do not remove any "```" or "//highlight-next-line" text +- Follow standard markdown rules provided by markdownlint + + +## Verb Tense +- Use present tense verbs instead of future tense. +- Say "this happens" rather than "this will happen." +- Avoid words like "will," "shall," "won't," "shan't," and contractions with "'ll." + +## Voice +- Do not use first person (I, me, my, mine, we, our). +- Avoid phrases like "I'd," "I'll," "I'm," and "I've." +- Use passive voice sparingly. Active voice is generally clearer. + +## Inclusive Language +- Use considerate language that respects all readers. +- Use "they" as a singular pronoun instead of "he/she" or "s/he." +- Avoid terms that might be insensitive: + - Replace "sane" with "correct," "adequate," "sensible," etc. + - Replace "crazy/insane" with "extremely," "very," "illogical," etc. + - Replace "dummy" with "placeholder" or "test" + - Replace "hang" with "freeze" or "become unresponsive" + - Avoid phrases like "fall on deaf ears" or "blind spot" + +## Tone +- Don't assume success with statements like "congratulations," "that's it," or "you did it." +- Avoid condescending terms like "obvious," "obviously," "simple," "simply," "easy," "easily," "of course," "clearly," or "everyone knows." +- Don't add "-ly" to ordinal numbers (avoid "firstly," "secondly," etc.) + +## Clarity and Brevity +- Use simple words instead of complex ones. +- Avoid foreign phrases like "i.e.," "viz.," or "ergo." +- Eliminate wordiness and redundant phrases: + - "in order to" → "to" + - "due to the fact that" → "because" + - "at this point in time" → "now" + - "in the event that" → "if" +- Remove phrases that don't add clarity: + - "note that" + - "it is important to note" + - "keep in mind" + - "as you can see" + +Remember that clear, direct language helps readers understand your content more easily. diff --git a/styles/Flanksource/Acronyms.yml b/styles/Flanksource/Acronyms.yml index 150db768..2c85cb77 100644 --- a/styles/Flanksource/Acronyms.yml +++ b/styles/Flanksource/Acronyms.yml @@ -19,25 +19,24 @@ exceptions: - CRUD - CSS - CSV - - RDS - - SQS - - Subnet - - IAMRole - - ECSTask - - ECSCluster - - EBSVolume - - EBSVolume - - DNSZone + - DEBUG - DHCP - - ECS - DNS - - EKS - - IAM - - IRSA - - VPC - - DEBUG + - DNSZone - DOM - DPI + - EBS + - EBSVolume + - ECR + - ECS + - ECSCluster + - ECSService + - ECSTask + - ECSTask + - EFS + - EKS + - EKSCluster + - EKSCluster - FAQ - GCC - GDB @@ -48,7 +47,11 @@ exceptions: - HTML - HTTP - HTTPS + - IAM + - IAMRole + - IAMUser - IDE + - IRSA - JAR - JPG - JSON @@ -65,14 +68,21 @@ exceptions: - POST - RAM - RBAC + - RDS + - RDSInstance - REPL - RSA - SCM - SCSS - SDK + - SNS + - SNSTopic - SQL + - SQS + - SQSQueue - SSH - SSL + - Subnet - SVG - TBD - TCP @@ -82,6 +92,7 @@ exceptions: - USB - UTF - UUID + - VPC - XML - XSS - YAML diff --git a/styles/Flanksource/CaseSensitiveSpellingSuggestions.yml b/styles/Flanksource/CaseSensitiveSpellingSuggestions.yml index 61391c4e..f6995126 100644 --- a/styles/Flanksource/CaseSensitiveSpellingSuggestions.yml +++ b/styles/Flanksource/CaseSensitiveSpellingSuggestions.yml @@ -5,10 +5,4 @@ level: error action: name: replace swap: - "[Ii]ngress.NGINX": Ingress-NGINX - ".ngress.[Nn]ginx": Ingress-NGINX - "[Nn]ginx [Ii]ngress [Cc]ontroller": NGINX Ingress Controller - "NGINX ingress [Cc]ontroller": NGINX Ingress Controller - "NGINX [Ii]ngress controller": NGINX Ingress Controller - "(?