Skip to content

tomwilkie/kube-api-exporter

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

39 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Kubernetes API Exporter for Prometheus

This project is deprecated, you should use kubernetes/kube-state-metrics instead.

Kubernetes API Exporter - a Python job, delivered as a Docker image, that automatically exposes various numbers from the Kubernetes API as Prometheus metrics, such that you can alert on them.

This is useful when you are continually deploying changes from a CI pipeline to a Kubernetes cluster, and you want to generate alerts when a deployments fails.

For instance, the following deployment:

$ kubectl get deployment helloworld -o json
{
    "kind": "Deployment",
    "apiVersion": "extensions/v1beta1",
    "metadata": {
        "name": "helloworld",
        "namespace": "default",
        "generation": 2,
        ...
    },
    "spec": {
        "replicas": 1,
        ...
    },
    "status": {
        "observedGeneration": 2,
        "replicas": 1,
        "updatedReplicas": 1,
        "availableReplicas": 1
    }
}

Is translated into the following Prometheus metrics:

k8s_deployment_metadata_generation{name="helloworld",namespace="default"} 2.0
k8s_deployment_spec_replicas{name="helloworld",namespace="default"} 1.0
k8s_deployment_spec_strategy_rollingUpdate_maxSurge{name="helloworld",namespace="default"} 1.0
k8s_deployment_spec_template_spec_terminationGracePeriodSeconds{name="helloworld",namespace="default"} 30.0
k8s_deployment_status_availableReplicas{name="helloworld",namespace="default"} 1.0
k8s_deployment_status_observedGeneration{name="helloworld",namespace="default"} 2.0
k8s_deployment_status_replicas{name="helloworld",namespace="default"} 1.0
k8s_deployment_status_updatedReplicas{name="helloworld",namespace="default"} 1.0

With this, you can configure the following rules to generate alerts when deployments fails:

ALERT DeploymentGenerationMismatch
  IF          k8s_deployment_status_observedGeneration{job="kube-api-exporter"} != k8s_deployment_metadata_generation{job="kube-api-exporter"}
  FOR         5m
  LABELS      { severity="critical" }
  ANNOTATIONS {
    summary = "Deployment of {{$labels.exported_namespace}}/{{$labels.name}} failed",
    description = "Deployment of {{$labels.exported_namespace}}/{{$labels.name}} failed - observed generation != intended generation.",
  }

ALERT DeploymentReplicasMismatch
  IF          (k8s_deployment_spec_replicas{job="kube-api-exporter"} != k8s_deployment_status_availableReplicas{job="kube-api-exporter"}) or (k8s_deployment_spec_replicas{job="kube-api-exporter"} unless k8s_deployment_status_availableReplicas{job="kube-api-exporter"})
  FOR         5m
  LABELS      { severity="critical" }
  ANNOTATIONS {
    summary = "Deployment of {{$labels.exported_namespace}}/{{$labels.name}} failed",
    description = "Deployment of {{$labels.exported_namespace}}/{{$labels.name}} failed - observed replicas != intended replicas.",
  }

Installation

To run kube-api-exporter on your own cluster, clone this repo and run:

$ kubectl create -f kube-api-exporter/k8s

About

A Prometheus exporter for Kubernetes API numbers

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published