Monitoring APIRequestCount in OpenShift

OpenShift APIRequestCount monitoring API usage

2 min read | by Jordi Prats

Openshift provides an object that tracks the number of requests made to the Kubernetes API server. It provides insights into the load on the cluster, the performance of applications, and helps in capacity planning. By monitoring APIRequestCount, you can identify potential bottlenecks, detect unusual spikes in traffic, and optimize resource allocation.

$ kubectl get apirequestcounts
NAME                                                                           REMOVEDINRELEASE   REQUESTSINCURRENTHOUR   REQUESTSINLAST24H
alertmanagerconfigs.v1alpha1.monitoring.coreos.com                                                6                       1706
alertmanagers.v1.monitoring.coreos.com                                                            20                      2891
apiservices.v1.apiregistration.k8s.io                                                             994                     99521
(...)

We can get the details for each of the available APIs. For example, we can use the following command to get stats about the calls issued to Pod. It will fetch the APIRequestCount data for Pods from the Kubernetes API server and display the results. The output will include information such as the API group, resource (Pods), version, namespace, and the number of requests made for each specific Pod:

$ kubectl get apirequestcounts pods.v1
NAME      REMOVEDINRELEASE   REQUESTSINCURRENTHOUR   REQUESTSINLAST24H
pods.v1                      2161                    137560

We can get an even more detailed response by retrieving the whole object using -o yaml:

$ kubectl get apirequestcounts pods.v1 -o yaml
apiVersion: apiserver.openshift.io/v1
kind: APIRequestCount
metadata:
  creationTimestamp: "2022-07-08T19:56:30Z"
  generation: 1
  name: pods.v1
  resourceVersion: "108979491"
  uid: 041cb88b-9d93-a411-dead-72a5bf79fa94
spec:
  numberOfUsersToReport: 10
status:
  currentHour:
    byNode:
    - byUser:
      - byVerb:
        - requestCount: 87
          verb: get
        - requestCount: 21
          verb: list
        - requestCount: 2
          verb: watch
        requestCount: 110
        userAgent: Go-http-client/2.0
        username: system:serviceaccount:openshift-etcd-operator:etcd-operator
      - byVerb:
        - requestCount: 109
          verb: watch
        requestCount: 109
        userAgent: Prometheus/2.32.1
        username: system:serviceaccount:openshift-monitoring:prometheus-k8s
      - byVerb:
        - requestCount: 34
          verb: get
        requestCount: 34
        userAgent: Mozilla/5.0
        username: cluster-admin
      - byVerb:
        - requestCount: 26
          verb: get
        - requestCount: 6
          verb: update
        requestCount: 32
        userAgent: multus/v0.0.0
        username: system:serviceaccount:openshift-multus:multus
      - byVerb:
        - requestCount: 7
          verb: create
        - requestCount: 14
          verb: delete
        - requestCount: 6
          verb: watch
        requestCount: 27
        userAgent: catalog/v0.0.0
        username: system:serviceaccount:openshift-operator-lifecycle-manager:olm-operator-serviceaccount

By regularly monitoring APIRequestCount, setting up alerts, and analyzing the data over time, you can ensure the smooth operation of your applications and make informed decisions about resource allocation


Posted on 11/07/2023