{
  "tags": [],
  "title": "Keycloak Metrics Dashboard New Visualizations",
  "widgets": [
    {
      "layout": {
        "x": 0,
        "y": 0,
        "width": 3,
        "height": 2
      },
      "definition": {
        "type": "query_value",
        "title": "Current Memory HEAP",
        "requests": [
          {
            "queries": [
              {
                "name": "query1",
                "query": "sum:jvm.heap_memory{pod_name:$instance.value}",
                "aggregator": "last",
                "data_source": "metrics"
              },
              {
                "name": "query2",
                "query": "sum:jvm.heap_memory_max{pod_name:$instance.value}",
                "aggregator": "last",
                "data_source": "metrics"
              }
            ],
            "formulas": [
              {
                "formula": "query1 * 100 / query2"
              }
            ],
            "response_format": "scalar",
            "conditional_formats": [
              {
                "value": 80,
                "palette": "white_on_red",
                "comparator": ">="
              },
              {
                "value": 90,
                "palette": "white_on_red",
                "comparator": ">="
              }
            ]
          }
        ],
        "autoscale": true,
        "precision": 2,
        "text_align": "center",
        "custom_unit": "%"
      }
    },
    {
      "layout": {
        "x": 3,
        "y": 0,
        "width": 3,
        "height": 2
      },
      "definition": {
        "type": "query_value",
        "title": "Current Memory nonHEAP",
        "requests": [
          {
            "queries": [
              {
                "name": "query1",
                "query": "sum:jvm.non_heap_memory{pod_name:$instance.value}",
                "aggregator": "last",
                "data_source": "metrics"
              },
              {
                "name": "query2",
                "query": "sum:jvm.non_heap_memory_max{pod_name:$instance.value}",
                "aggregator": "last",
                "data_source": "metrics"
              }
            ],
            "formulas": [
              {
                "formula": "query1 * 100 / query2"
              }
            ],
            "response_format": "scalar",
            "conditional_formats": [
              {
                "value": 80,
                "palette": "white_on_red",
                "comparator": ">="
              },
              {
                "value": 90,
                "palette": "white_on_red",
                "comparator": ">="
              }
            ]
          }
        ],
        "autoscale": true,
        "precision": 2,
        "text_align": "center",
        "custom_unit": "%"
      }
    },
    {
      "layout": {
        "x": 6,
        "y": 0,
        "width": 6,
        "height": 2
      },
      "definition": {
        "type": "timeseries",
        "title": "Memory Usage",
        "yaxis": {
          "max": "auto",
          "min": "auto",
          "label": "",
          "scale": "linear",
          "include_zero": true
        },
        "requests": [
          {
            "style": {
              "palette": "dog_classic",
              "line_type": "solid",
              "line_width": "normal"
            },
            "queries": [
              {
                "name": "query1",
                "query": "sum:jvm.heap_memory_max{pod_name:$instance.value}",
                "data_source": "metrics"
              },
              {
                "name": "query2",
                "query": "sum:jvm.non_heap_memory_max{pod_name:$instance.value}",
                "data_source": "metrics"
              },
              {
                "name": "query3",
                "query": "sum:jvm.heap_memory_committed{pod_name:$instance.value}",
                "data_source": "metrics"
              },
              {
                "name": "query4",
                "query": "sum:jvm.non_heap_memory_committed{pod_name:$instance.value}",
                "data_source": "metrics"
              },
              {
                "name": "query5",
                "query": "sum:jvm.heap_memory{pod_name:$instance.value}",
                "data_source": "metrics"
              },
              {
                "name": "query6",
                "query": "sum:jvm.non_heap_memory{pod_name:$instance.value}",
                "data_source": "metrics"
              }
            ],
            "formulas": [
              {
                "alias": "Max",
                "formula": "query1 + query2"
              },
              {
                "alias": "Comitted",
                "formula": "query3 + query4"
              },
              {
                "alias": "Used",
                "formula": "query5 + query6"
              }
            ],
            "display_type": "area",
            "response_format": "timeseries"
          }
        ],
        "show_legend": true,
        "legend_layout": "auto",
        "legend_columns": [
          "avg",
          "min",
          "max",
          "value",
          "sum"
        ]
      }
    },
    {
      "layout": {
        "x": 0,
        "y": 2,
        "width": 3,
        "height": 2
      },
      "definition": {
        "type": "note",
        "content": "**Logins Per REALM for past 24h**\n\nUnsupported panel (barchart)\n\n- no Datadog equivalent for plugin barchart\n\nOriginal PromQL:\n```\nA: sum by (realm)(increase(keycloak_logins[24h]))\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": 3,
        "y": 2,
        "width": 3,
        "height": 2
      },
      "definition": {
        "type": "note",
        "content": "**Registrations Per REALM for past 24h**\n\nUnsupported panel (barchart)\n\n- no Datadog equivalent for plugin barchart\n\nOriginal PromQL:\n```\nA: sum by (realm)(increase(keycloak_registrations[24h]))\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": 2,
        "width": 3,
        "height": 2
      },
      "definition": {
        "type": "note",
        "content": "**Logins Per CLIENT for past 24h**\n\nUnsupported panel (barchart)\n\n- no Datadog equivalent for plugin barchart\n\nOriginal PromQL:\n```\nA: sum by (client_id)(increase(keycloak_logins[24h]))\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": 9,
        "y": 2,
        "width": 3,
        "height": 2
      },
      "definition": {
        "type": "note",
        "content": "**Registrations Per CLIENT for past 24h**\n\nUnsupported panel (barchart)\n\n- no Datadog equivalent for plugin barchart\n\nOriginal PromQL:\n```\nA: sum by (client_id)(increase(keycloak_registrations[24h]))\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": 3,
        "y": 4,
        "width": 6,
        "height": 2
      },
      "definition": {
        "type": "timeseries",
        "title": "4xx and 5xx Responses",
        "yaxis": {
          "max": "auto",
          "min": "auto",
          "label": "",
          "scale": "linear",
          "include_zero": true
        },
        "requests": [
          {
            "style": {
              "palette": "dog_classic",
              "line_type": "solid",
              "line_width": "normal"
            },
            "queries": [
              {
                "name": "query1",
                "query": "sum:keycloak_response_errors.count{*} by {code}.as_count()",
                "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": 6,
        "width": 6,
        "height": 2
      },
      "definition": {
        "type": "timeseries",
        "title": "Logins per REALM",
        "yaxis": {
          "max": "auto",
          "min": "auto",
          "label": "",
          "scale": "linear",
          "include_zero": true
        },
        "requests": [
          {
            "style": {
              "palette": "dog_classic",
              "line_type": "solid",
              "line_width": "normal"
            },
            "queries": [
              {
                "name": "query1",
                "query": "sum:keycloak_logins.count{*} by {realm}.as_count()",
                "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": 6,
        "width": 6,
        "height": 2
      },
      "definition": {
        "type": "timeseries",
        "title": "Login Errors on realm $realm",
        "yaxis": {
          "max": "auto",
          "min": "auto",
          "label": "",
          "scale": "linear",
          "include_zero": true
        },
        "requests": [
          {
            "style": {
              "palette": "dog_classic",
              "line_type": "solid",
              "line_width": "normal"
            },
            "queries": [
              {
                "name": "query1",
                "query": "sum:keycloak_failed_login_attempts.count{provider:keycloak,$realm} by {error}.as_count()",
                "data_source": "metrics"
              },
              {
                "name": "query2",
                "query": "sum:keycloak_failed_login_attempts.count{provider:keycloak,realm:dialog-test} by {realm}.as_count()",
                "data_source": "metrics"
              }
            ],
            "formulas": [
              {
                "formula": "query1"
              },
              {
                "formula": "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": "Logins per CLIENT on realm $realm",
        "yaxis": {
          "max": "auto",
          "min": "auto",
          "label": "",
          "scale": "linear",
          "include_zero": true
        },
        "requests": [
          {
            "style": {
              "palette": "dog_classic",
              "line_type": "solid",
              "line_width": "normal"
            },
            "queries": [
              {
                "name": "query1",
                "query": "sum:keycloak_logins.count{$realm,provider:keycloak} by {client_id}.as_count()",
                "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": "Registration Errors on realm $realm",
        "yaxis": {
          "max": "auto",
          "min": "auto",
          "label": "",
          "scale": "linear",
          "include_zero": true
        },
        "requests": [
          {
            "style": {
              "palette": "dog_classic",
              "line_type": "solid",
              "line_width": "normal"
            },
            "queries": [
              {
                "name": "query1",
                "query": "sum:keycloak_registrations_errors.count{provider:keycloak,$realm} by {realm}.as_count()",
                "data_source": "metrics"
              },
              {
                "name": "query2",
                "query": "sum:keycloak_registrations_errors.count{provider:keycloak,$realm} by {error}.as_count()",
                "data_source": "metrics"
              }
            ],
            "formulas": [
              {
                "formula": "query1"
              },
              {
                "formula": "query2"
              }
            ],
            "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": "Registrations per REALM",
        "yaxis": {
          "max": "auto",
          "min": "auto",
          "label": "",
          "scale": "linear",
          "include_zero": true
        },
        "requests": [
          {
            "style": {
              "palette": "dog_classic",
              "line_type": "solid",
              "line_width": "normal"
            },
            "queries": [
              {
                "name": "query1",
                "query": "sum:keycloak_registrations.count{*} by {realm}.as_count()",
                "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": "Login Errors for $ClientId",
        "yaxis": {
          "max": "auto",
          "min": "auto",
          "label": "",
          "scale": "linear",
          "include_zero": true
        },
        "requests": [
          {
            "style": {
              "palette": "dog_classic",
              "line_type": "solid",
              "line_width": "normal"
            },
            "queries": [
              {
                "name": "query1",
                "query": "sum:keycloak_failed_login_attempts.count{provider:keycloak,$realm,$ClientId} by {error}.as_count()",
                "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": 12,
        "width": 6,
        "height": 2
      },
      "definition": {
        "type": "timeseries",
        "title": "Registrations per CLIENT on relm $realm",
        "yaxis": {
          "max": "auto",
          "min": "auto",
          "label": "",
          "scale": "linear",
          "include_zero": true
        },
        "requests": [
          {
            "style": {
              "palette": "dog_classic",
              "line_type": "solid",
              "line_width": "normal"
            },
            "queries": [
              {
                "name": "query1",
                "query": "sum:keycloak_registrations.count{$realm,provider:keycloak} by {client_id}.as_count()",
                "data_source": "metrics"
              },
              {
                "name": "query2",
                "query": "sum:keycloak_registrations.count{provider:keycloak,$realm} by {realm}.as_count()",
                "data_source": "metrics"
              }
            ],
            "formulas": [
              {
                "formula": "query1"
              },
              {
                "formula": "query2"
              }
            ],
            "display_type": "area",
            "response_format": "timeseries"
          }
        ],
        "show_legend": true,
        "legend_layout": "auto",
        "legend_columns": [
          "avg",
          "min",
          "max",
          "value",
          "sum"
        ]
      }
    },
    {
      "layout": {
        "x": 6,
        "y": 12,
        "width": 6,
        "height": 2
      },
      "definition": {
        "type": "timeseries",
        "title": "Registration Errors for $ClientId",
        "yaxis": {
          "max": "auto",
          "min": "auto",
          "label": "",
          "scale": "linear",
          "include_zero": true
        },
        "requests": [
          {
            "style": {
              "palette": "dog_classic",
              "line_type": "solid",
              "line_width": "normal"
            },
            "queries": [
              {
                "name": "query1",
                "query": "sum:keycloak_registrations_errors.count{provider:keycloak,$realm,$ClientId} by {error}.as_count()",
                "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": 14,
        "width": 6,
        "height": 2
      },
      "definition": {
        "type": "heatmap",
        "title": "Request duration method = \"GET\" Heatmap",
        "requests": [
          {
            "style": {
              "palette": "dog_classic"
            },
            "queries": [
              {
                "name": "query1",
                "query": "sum:keycloak_request_duration.bucket{method:get} by {le}.as_count()",
                "data_source": "metrics"
              }
            ],
            "formulas": [
              {
                "formula": "query1"
              }
            ],
            "response_format": "timeseries"
          }
        ],
        "show_legend": true
      }
    },
    {
      "layout": {
        "x": 6,
        "y": 14,
        "width": 6,
        "height": 2
      },
      "definition": {
        "type": "query_value",
        "title": "Percentage of requests \"GET\"  method  was served in 100ms or below",
        "requests": [
          {
            "queries": [
              {
                "name": "query1",
                "query": "sum:keycloak_request_duration.bucket{method:get,le:100.0}.as_rate()",
                "aggregator": "last",
                "data_source": "metrics"
              },
              {
                "name": "query2",
                "query": "sum:keycloak_request_duration.count{method:get}.as_rate()",
                "aggregator": "last",
                "data_source": "metrics"
              }
            ],
            "formulas": [
              {
                "formula": "query1 / query2 * 100"
              }
            ],
            "response_format": "scalar",
            "conditional_formats": [
              {
                "value": 80,
                "palette": "white_on_red",
                "comparator": ">="
              },
              {
                "value": 90,
                "palette": "white_on_red",
                "comparator": ">="
              },
              {
                "value": 98,
                "palette": "white_on_green",
                "comparator": ">="
              }
            ]
          }
        ],
        "autoscale": true,
        "precision": 2,
        "text_align": "center",
        "custom_unit": "%"
      }
    },
    {
      "layout": {
        "x": 0,
        "y": 16,
        "width": 6,
        "height": 2
      },
      "definition": {
        "type": "heatmap",
        "title": "Request duration method = \"POST\" Heatmap",
        "requests": [
          {
            "style": {
              "palette": "dog_classic"
            },
            "queries": [
              {
                "name": "query1",
                "query": "sum:keycloak_request_duration.bucket{method:post} by {le}.as_count()",
                "data_source": "metrics"
              }
            ],
            "formulas": [
              {
                "formula": "query1"
              }
            ],
            "response_format": "timeseries"
          }
        ],
        "show_legend": true
      }
    },
    {
      "layout": {
        "x": 6,
        "y": 16,
        "width": 6,
        "height": 2
      },
      "definition": {
        "type": "query_value",
        "title": "Percentage of requests \"POST\"  method  was served in 100ms or below",
        "requests": [
          {
            "queries": [
              {
                "name": "query1",
                "query": "sum:keycloak_request_duration.bucket{method:post,le:100.0}.as_rate()",
                "aggregator": "last",
                "data_source": "metrics"
              },
              {
                "name": "query2",
                "query": "sum:keycloak_request_duration.count{method:post}.as_rate()",
                "aggregator": "last",
                "data_source": "metrics"
              }
            ],
            "formulas": [
              {
                "formula": "query1 / query2 * 100"
              }
            ],
            "response_format": "scalar",
            "conditional_formats": [
              {
                "value": 80,
                "palette": "white_on_red",
                "comparator": ">="
              },
              {
                "value": 90,
                "palette": "white_on_red",
                "comparator": ">="
              },
              {
                "value": 98,
                "palette": "white_on_green",
                "comparator": ">="
              }
            ]
          }
        ],
        "autoscale": true,
        "precision": 2,
        "text_align": "center",
        "custom_unit": "%"
      }
    },
    {
      "layout": {
        "x": 0,
        "y": 18,
        "width": 6,
        "height": 2
      },
      "definition": {
        "type": "heatmap",
        "title": "Request duration method = \"HEAD\" Heatmap",
        "requests": [
          {
            "style": {
              "palette": "dog_classic"
            },
            "queries": [
              {
                "name": "query1",
                "query": "sum:keycloak_request_duration.bucket{method:head} by {le}.as_count()",
                "data_source": "metrics"
              }
            ],
            "formulas": [
              {
                "formula": "query1"
              }
            ],
            "response_format": "timeseries"
          }
        ],
        "show_legend": true
      }
    },
    {
      "layout": {
        "x": 6,
        "y": 18,
        "width": 6,
        "height": 2
      },
      "definition": {
        "type": "query_value",
        "title": "Percentage of requests \"HEAD\"  method  was served in 100ms or below",
        "requests": [
          {
            "queries": [
              {
                "name": "query1",
                "query": "sum:keycloak_request_duration.bucket{method:head,le:100.0}.as_rate()",
                "aggregator": "last",
                "data_source": "metrics"
              },
              {
                "name": "query2",
                "query": "sum:keycloak_request_duration.count{method:head}.as_rate()",
                "aggregator": "last",
                "data_source": "metrics"
              }
            ],
            "formulas": [
              {
                "formula": "query1 / query2 * 100"
              }
            ],
            "response_format": "scalar",
            "conditional_formats": [
              {
                "value": 80,
                "palette": "white_on_red",
                "comparator": ">="
              },
              {
                "value": 90,
                "palette": "white_on_red",
                "comparator": ">="
              },
              {
                "value": 98,
                "palette": "white_on_green",
                "comparator": ">="
              }
            ]
          }
        ],
        "autoscale": true,
        "precision": 2,
        "text_align": "center",
        "custom_unit": "%"
      }
    },
    {
      "layout": {
        "x": 0,
        "y": 20,
        "width": 6,
        "height": 2
      },
      "definition": {
        "type": "heatmap",
        "title": "Request duration method = \"PUT\" Heatmap",
        "requests": [
          {
            "style": {
              "palette": "dog_classic"
            },
            "queries": [
              {
                "name": "query1",
                "query": "sum:keycloak_request_duration.bucket{method:put} by {le}.as_count()",
                "data_source": "metrics"
              }
            ],
            "formulas": [
              {
                "formula": "query1"
              }
            ],
            "response_format": "timeseries"
          }
        ],
        "show_legend": true
      }
    },
    {
      "layout": {
        "x": 6,
        "y": 20,
        "width": 6,
        "height": 2
      },
      "definition": {
        "type": "query_value",
        "title": "Percentage of requests \"PUT\"  method  was served in 100ms or below",
        "requests": [
          {
            "queries": [
              {
                "name": "query1",
                "query": "sum:keycloak_request_duration.bucket{method:put,le:100.0}.as_rate()",
                "aggregator": "last",
                "data_source": "metrics"
              },
              {
                "name": "query2",
                "query": "sum:keycloak_request_duration.count{method:put}.as_rate()",
                "aggregator": "last",
                "data_source": "metrics"
              }
            ],
            "formulas": [
              {
                "formula": "query1 / query2 * 100"
              }
            ],
            "response_format": "scalar",
            "conditional_formats": [
              {
                "value": 80,
                "palette": "white_on_red",
                "comparator": ">="
              },
              {
                "value": 90,
                "palette": "white_on_red",
                "comparator": ">="
              },
              {
                "value": 98,
                "palette": "white_on_green",
                "comparator": ">="
              }
            ]
          }
        ],
        "autoscale": true,
        "precision": 2,
        "text_align": "center",
        "custom_unit": "%"
      }
    }
  ],
  "description": "Converted from Grafana dashboard https://grafana.com/grafana/dashboards/17878 (by mrdfx). Dashboard of Keycloak metrics exported with Keycloak Metrics SPI\r\n\r\nhttps://github.com/aerogear/keycloak-metrics-spi\r\nKeycloak dashboard with actual visualizations\r\n- is a copy of dashboard id 10441",
  "layout_type": "ordered",
  "reflow_type": "fixed",
  "template_variables": [
    {
      "name": "instance",
      "prefix": "pod_name",
      "default": "*",
      "available_values": []
    },
    {
      "name": "realm",
      "prefix": "realm",
      "default": "*",
      "available_values": []
    },
    {
      "name": "ClientId",
      "prefix": "client_id",
      "default": "*",
      "available_values": []
    }
  ]
}