{
  "tags": [],
  "title": "Kubernetes / System / API Server",
  "widgets": [
    {
      "layout": {
        "x": 0,
        "y": 0,
        "width": 6,
        "height": 2
      },
      "definition": {
        "type": "note",
        "content": "**API Server - Health Status**\n\nUnsupported panel (stat)\n\n- Prometheus `up` has no Datadog metric; use the openmetrics.health service check\n\nOriginal PromQL:\n```\nA: up{cluster=~\"$cluster\", job=~\"$job\"}\n```",
        "tick_pos": "50%",
        "font_size": "14",
        "show_tick": false,
        "tick_edge": "left",
        "text_align": "left",
        "has_padding": true,
        "vertical_align": "top",
        "background_color": "white"
      }
    },
    {
      "layout": {
        "x": 6,
        "y": 0,
        "width": 6,
        "height": 2
      },
      "definition": {
        "type": "query_table",
        "title": "Deprecated Kubernetes Resources",
        "requests": [
          {
            "queries": [
              {
                "name": "query1",
                "query": "avg:apiserver_requested_deprecated_apis{$cluster}",
                "aggregator": "last",
                "data_source": "metrics"
              }
            ],
            "formulas": [
              {
                "limit": {
                  "count": 50,
                  "order": "desc"
                },
                "formula": "query1"
              }
            ],
            "response_format": "scalar"
          }
        ],
        "has_search_bar": "auto"
      }
    },
    {
      "layout": {
        "x": 0,
        "y": 2,
        "width": 6,
        "height": 2
      },
      "definition": {
        "type": "timeseries",
        "title": "API Server - HTTP Requests by code",
        "yaxis": {
          "max": "auto",
          "min": "auto",
          "label": "",
          "scale": "linear",
          "include_zero": true
        },
        "markers": [
          {
            "value": "y = 80",
            "display_type": "error dashed"
          }
        ],
        "requests": [
          {
            "style": {
              "palette": "dog_classic",
              "line_type": "solid",
              "line_width": "normal"
            },
            "queries": [
              {
                "name": "query1",
                "query": "sum:kube_apiserver.apiserver_request_total.count{$cluster} by {code}.as_rate()",
                "data_source": "metrics"
              }
            ],
            "formulas": [
              {
                "formula": "query1"
              }
            ],
            "display_type": "area",
            "response_format": "timeseries"
          }
        ],
        "show_legend": true,
        "legend_layout": "auto",
        "legend_columns": [
          "avg",
          "min",
          "max",
          "value",
          "sum"
        ]
      }
    },
    {
      "layout": {
        "x": 6,
        "y": 2,
        "width": 6,
        "height": 2
      },
      "definition": {
        "type": "timeseries",
        "title": "API Server - HTTP Requests by verb",
        "yaxis": {
          "max": "auto",
          "min": "auto",
          "label": "",
          "scale": "linear",
          "include_zero": true
        },
        "markers": [
          {
            "value": "y = 80",
            "display_type": "error dashed"
          }
        ],
        "requests": [
          {
            "style": {
              "palette": "dog_classic",
              "line_type": "solid",
              "line_width": "normal"
            },
            "queries": [
              {
                "name": "query1",
                "query": "sum:kube_apiserver.apiserver_request_total.count{$cluster} by {verb}.as_rate()",
                "data_source": "metrics"
              }
            ],
            "formulas": [
              {
                "formula": "query1"
              }
            ],
            "display_type": "area",
            "response_format": "timeseries"
          }
        ],
        "show_legend": true,
        "legend_layout": "auto",
        "legend_columns": [
          "avg",
          "min",
          "max",
          "value",
          "sum"
        ]
      }
    },
    {
      "layout": {
        "x": 0,
        "y": 4,
        "width": 6,
        "height": 2
      },
      "definition": {
        "type": "timeseries",
        "title": "API Server - HTTP Requests Latency by instance",
        "yaxis": {
          "max": "auto",
          "min": "auto",
          "label": "",
          "scale": "linear",
          "include_zero": true
        },
        "markers": [
          {
            "value": "y = 80",
            "display_type": "error dashed"
          }
        ],
        "requests": [
          {
            "style": {
              "palette": "dog_classic",
              "line_type": "solid",
              "line_width": "normal"
            },
            "queries": [
              {
                "name": "query1",
                "query": "sum:kube_apiserver.apiserver_request_duration_seconds.sum{$cluster} by {host}.as_rate()",
                "data_source": "metrics"
              },
              {
                "name": "query2",
                "query": "sum:kube_apiserver.apiserver_request_duration_seconds.count{$cluster} by {host}.as_rate()",
                "data_source": "metrics"
              }
            ],
            "formulas": [
              {
                "formula": "query1 / query2"
              }
            ],
            "display_type": "area",
            "response_format": "timeseries"
          }
        ],
        "show_legend": true,
        "legend_layout": "auto",
        "legend_columns": [
          "avg",
          "min",
          "max",
          "value",
          "sum"
        ]
      }
    },
    {
      "layout": {
        "x": 6,
        "y": 4,
        "width": 6,
        "height": 2
      },
      "definition": {
        "type": "timeseries",
        "title": "API Server - HTTP Requests Latency by verb",
        "yaxis": {
          "max": "auto",
          "min": "auto",
          "label": "",
          "scale": "linear",
          "include_zero": true
        },
        "markers": [
          {
            "value": "y = 80",
            "display_type": "error dashed"
          }
        ],
        "requests": [
          {
            "style": {
              "palette": "dog_classic",
              "line_type": "solid",
              "line_width": "normal"
            },
            "queries": [
              {
                "name": "query1",
                "query": "sum:kube_apiserver.apiserver_request_duration_seconds.sum{$cluster} by {verb}.as_rate()",
                "data_source": "metrics"
              },
              {
                "name": "query2",
                "query": "sum:kube_apiserver.apiserver_request_duration_seconds.count{$cluster} by {verb}.as_rate()",
                "data_source": "metrics"
              }
            ],
            "formulas": [
              {
                "formula": "query1 / query2"
              }
            ],
            "display_type": "area",
            "response_format": "timeseries"
          }
        ],
        "show_legend": true,
        "legend_layout": "auto",
        "legend_columns": [
          "avg",
          "min",
          "max",
          "value",
          "sum"
        ]
      }
    },
    {
      "layout": {
        "x": 0,
        "y": 6,
        "width": 6,
        "height": 2
      },
      "definition": {
        "type": "timeseries",
        "title": "API Server - Errors by Instance",
        "yaxis": {
          "max": "auto",
          "min": "auto",
          "label": "",
          "scale": "linear",
          "include_zero": true
        },
        "markers": [
          {
            "value": "y = 80",
            "display_type": "error dashed"
          }
        ],
        "requests": [
          {
            "style": {
              "palette": "dog_classic",
              "line_type": "solid",
              "line_width": "normal"
            },
            "queries": [
              {
                "name": "query1",
                "query": "sum:kube_apiserver.apiserver_request_total.count{$cluster,code:5*} by {host}.as_rate()",
                "data_source": "metrics"
              },
              {
                "name": "query2",
                "query": "sum:kube_apiserver.apiserver_request_total.count{$cluster} by {host}.as_rate()",
                "data_source": "metrics"
              }
            ],
            "formulas": [
              {
                "formula": "query1 / query2"
              }
            ],
            "display_type": "area",
            "response_format": "timeseries"
          }
        ],
        "show_legend": true,
        "legend_layout": "auto",
        "legend_columns": [
          "avg",
          "min",
          "max",
          "value",
          "sum"
        ]
      }
    },
    {
      "layout": {
        "x": 6,
        "y": 6,
        "width": 6,
        "height": 2
      },
      "definition": {
        "type": "timeseries",
        "title": "API Server - Errors by verb",
        "yaxis": {
          "max": "auto",
          "min": "auto",
          "label": "",
          "scale": "linear",
          "include_zero": true
        },
        "markers": [
          {
            "value": "y = 80",
            "display_type": "error dashed"
          }
        ],
        "requests": [
          {
            "style": {
              "palette": "dog_classic",
              "line_type": "solid",
              "line_width": "normal"
            },
            "queries": [
              {
                "name": "query1",
                "query": "sum:kube_apiserver.apiserver_request_total.count{$cluster,code:5*} by {verb}.as_rate()",
                "data_source": "metrics"
              },
              {
                "name": "query2",
                "query": "sum:kube_apiserver.apiserver_request_total.count{$cluster} by {verb}.as_rate()",
                "data_source": "metrics"
              }
            ],
            "formulas": [
              {
                "formula": "query1 / query2"
              }
            ],
            "display_type": "area",
            "response_format": "timeseries"
          }
        ],
        "show_legend": true,
        "legend_layout": "auto",
        "legend_columns": [
          "avg",
          "min",
          "max",
          "value",
          "sum"
        ]
      }
    },
    {
      "layout": {
        "x": 0,
        "y": 8,
        "width": 6,
        "height": 2
      },
      "definition": {
        "type": "timeseries",
        "title": "API Server - Stacked HTTP Requests by instance",
        "yaxis": {
          "max": "auto",
          "min": "auto",
          "label": "",
          "scale": "linear",
          "include_zero": true
        },
        "markers": [
          {
            "value": "y = 80",
            "display_type": "error dashed"
          }
        ],
        "requests": [
          {
            "style": {
              "palette": "dog_classic",
              "line_type": "solid",
              "line_width": "normal"
            },
            "queries": [
              {
                "name": "query1",
                "query": "sum:kube_apiserver.apiserver_request_total.count{$cluster} by {host}.as_rate()",
                "data_source": "metrics"
              }
            ],
            "formulas": [
              {
                "formula": "query1"
              }
            ],
            "display_type": "area",
            "response_format": "timeseries"
          }
        ],
        "show_legend": true,
        "legend_layout": "auto",
        "legend_columns": [
          "avg",
          "min",
          "max",
          "value",
          "sum"
        ]
      }
    },
    {
      "layout": {
        "x": 6,
        "y": 8,
        "width": 6,
        "height": 2
      },
      "definition": {
        "type": "timeseries",
        "title": "API Server - Work Queue by instance",
        "yaxis": {
          "max": "auto",
          "min": "auto",
          "label": "",
          "scale": "linear",
          "include_zero": true
        },
        "markers": [
          {
            "value": "y = 80",
            "display_type": "error dashed"
          }
        ],
        "requests": [
          {
            "style": {
              "palette": "dog_classic",
              "line_type": "solid",
              "line_width": "normal"
            },
            "queries": [
              {
                "name": "query1",
                "query": "sum:workqueue_depth{$cluster,$job} by {instance}",
                "data_source": "metrics"
              }
            ],
            "formulas": [
              {
                "formula": "query1"
              }
            ],
            "display_type": "area",
            "response_format": "timeseries"
          }
        ],
        "show_legend": true,
        "legend_layout": "auto",
        "legend_columns": [
          "avg",
          "min",
          "max",
          "value",
          "sum"
        ]
      }
    },
    {
      "layout": {
        "x": 0,
        "y": 10,
        "width": 6,
        "height": 2
      },
      "definition": {
        "type": "timeseries",
        "title": "API Server - CPU Usage by instance",
        "yaxis": {
          "max": "auto",
          "min": "auto",
          "label": "",
          "scale": "linear",
          "include_zero": true
        },
        "markers": [
          {
            "value": "y = 80",
            "display_type": "error dashed"
          }
        ],
        "requests": [
          {
            "style": {
              "palette": "dog_classic",
              "line_type": "solid",
              "line_width": "normal"
            },
            "queries": [
              {
                "name": "query1",
                "query": "avg:process_cpu_seconds.count{$cluster,$job} by {instance}.as_rate()",
                "data_source": "metrics"
              }
            ],
            "formulas": [
              {
                "formula": "query1"
              }
            ],
            "display_type": "area",
            "response_format": "timeseries"
          }
        ],
        "show_legend": true,
        "legend_layout": "auto",
        "legend_columns": [
          "avg",
          "min",
          "max",
          "value",
          "sum"
        ]
      }
    },
    {
      "layout": {
        "x": 6,
        "y": 10,
        "width": 6,
        "height": 2
      },
      "definition": {
        "type": "timeseries",
        "title": "API Server - Memory Usage by instance",
        "yaxis": {
          "max": "auto",
          "min": "auto",
          "label": "",
          "scale": "linear",
          "include_zero": true
        },
        "markers": [
          {
            "value": "y = 80",
            "display_type": "error dashed"
          }
        ],
        "requests": [
          {
            "style": {
              "palette": "dog_classic",
              "line_type": "solid",
              "line_width": "normal"
            },
            "queries": [
              {
                "name": "query1",
                "query": "avg:process_resident_memory_bytes{$cluster,$job} by {instance}",
                "data_source": "metrics"
              }
            ],
            "formulas": [
              {
                "formula": "query1"
              }
            ],
            "display_type": "area",
            "response_format": "timeseries"
          }
        ],
        "show_legend": true,
        "legend_layout": "auto",
        "legend_columns": [
          "avg",
          "min",
          "max",
          "value",
          "sum"
        ]
      }
    }
  ],
  "description": "Converted from Grafana dashboard https://grafana.com/grafana/dashboards/15761 (by dotdc). This is a modern API Server dashboard for your Kubernetes cluster(s). Made for kube-prometheus-stack and take advantage of the latest Grafana features. GitHub repository: https://github.com/dotdc/grafana-dashboards-kubernetes",
  "layout_type": "ordered",
  "reflow_type": "fixed",
  "template_variables": [
    {
      "name": "cluster",
      "prefix": "cluster",
      "default": "*",
      "available_values": []
    },
    {
      "name": "resolution",
      "prefix": "resolution",
      "default": "30s",
      "available_values": [
        "1s",
        "15s",
        "30s",
        "1m",
        "3m",
        "5m"
      ]
    },
    {
      "name": "job",
      "prefix": "job",
      "default": "*",
      "available_values": []
    }
  ]
}