This is an automated email from the ASF dual-hosted git repository.
kvn pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/apisix-ingress-controller.git
The following commit(s) were added to refs/heads/master by this push:
new ae69cd3 docs: Grafana Dashboard Configuration (#731)
ae69cd3 is described below
commit ae69cd3ee42245100b1c559df4518a418f66f6bd
Author: Sindweller <[email protected]>
AuthorDate: Fri Dec 31 13:10:35 2021 +0800
docs: Grafana Dashboard Configuration (#731)
---
docs/assets/images/dashboard_view_1.png | Bin 0 -> 184051 bytes
docs/assets/images/dashboard_view_2.png | Bin 0 -> 513551 bytes
docs/assets/images/dashboard_view_3.png | Bin 0 -> 41542 bytes
docs/assets/images/datasource_1.png | Bin 0 -> 11759 bytes
docs/assets/images/datasource_2.png | Bin 0 -> 39480 bytes
docs/assets/images/grafana.png | Bin 0 -> 35260 bytes
docs/assets/images/img.png | Bin 0 -> 14548 bytes
docs/assets/images/import_via_panel_json.png | Bin 0 -> 33758 bytes
docs/assets/images/metrics_data.png | Bin 0 -> 266696 bytes
.../json/apisix-ingress-controller-grafana.json | 848 +++++++++++++++++++++
docs/en/latest/plugins/prometheus.md | 124 +++
11 files changed, 972 insertions(+)
diff --git a/docs/assets/images/dashboard_view_1.png
b/docs/assets/images/dashboard_view_1.png
new file mode 100644
index 0000000..030ab27
Binary files /dev/null and b/docs/assets/images/dashboard_view_1.png differ
diff --git a/docs/assets/images/dashboard_view_2.png
b/docs/assets/images/dashboard_view_2.png
new file mode 100644
index 0000000..96f9e46
Binary files /dev/null and b/docs/assets/images/dashboard_view_2.png differ
diff --git a/docs/assets/images/dashboard_view_3.png
b/docs/assets/images/dashboard_view_3.png
new file mode 100644
index 0000000..48a5ad3
Binary files /dev/null and b/docs/assets/images/dashboard_view_3.png differ
diff --git a/docs/assets/images/datasource_1.png
b/docs/assets/images/datasource_1.png
new file mode 100644
index 0000000..3bb7eb1
Binary files /dev/null and b/docs/assets/images/datasource_1.png differ
diff --git a/docs/assets/images/datasource_2.png
b/docs/assets/images/datasource_2.png
new file mode 100644
index 0000000..ef6958c
Binary files /dev/null and b/docs/assets/images/datasource_2.png differ
diff --git a/docs/assets/images/grafana.png b/docs/assets/images/grafana.png
new file mode 100644
index 0000000..f3ef338
Binary files /dev/null and b/docs/assets/images/grafana.png differ
diff --git a/docs/assets/images/img.png b/docs/assets/images/img.png
new file mode 100644
index 0000000..de412e9
Binary files /dev/null and b/docs/assets/images/img.png differ
diff --git a/docs/assets/images/import_via_panel_json.png
b/docs/assets/images/import_via_panel_json.png
new file mode 100644
index 0000000..16ff562
Binary files /dev/null and b/docs/assets/images/import_via_panel_json.png differ
diff --git a/docs/assets/images/metrics_data.png
b/docs/assets/images/metrics_data.png
new file mode 100644
index 0000000..65a3b98
Binary files /dev/null and b/docs/assets/images/metrics_data.png differ
diff --git a/docs/assets/other/json/apisix-ingress-controller-grafana.json
b/docs/assets/other/json/apisix-ingress-controller-grafana.json
new file mode 100644
index 0000000..77c27d2
--- /dev/null
+++ b/docs/assets/other/json/apisix-ingress-controller-grafana.json
@@ -0,0 +1,848 @@
+{
+ "annotations": {
+ "list": [
+ {
+ "builtIn": 1,
+ "datasource": "Prometheus",
+ "enable": true,
+ "hide": true,
+ "iconColor": "rgba(0, 211, 255, 1)",
+ "limit": 100,
+ "name": "Annotations & Alerts",
+ "showIn": 0,
+ "type": "dashboard"
+ }
+ ]
+ },
+ "description": "Ingress Controller of Apache APISIX",
+ "editable": true,
+ "gnetId": 11719,
+ "graphTooltip": 0,
+ "id": 9,
+ "iteration": 1632975622801,
+ "links": [],
+ "panels": [
+ {
+ "collapsed": false,
+ "datasource": "Prometheus",
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 0
+ },
+ "id": 10,
+ "panels": [],
+ "title": "APISIX Ingress controller",
+ "type": "row"
+ },
+ {
+ "datasource": null,
+ "description": "Whether the role of controller instance is leader",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "mappings": [
+ {
+ "from": "",
+ "id": 1,
+ "text": "Candidate",
+ "to": "",
+ "type": 1,
+ "value": "0"
+ },
+ {
+ "from": "",
+ "id": 2,
+ "text": "Leader",
+ "to": "",
+ "type": 1,
+ "value": "1"
+ }
+ ],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ }
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 5,
+ "w": 8,
+ "x": 0,
+ "y": 1
+ },
+ "id": 33,
+ "options": {
+ "colorMode": "value",
+ "graphMode": "area",
+ "justifyMode": "auto",
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "text": {},
+ "textMode": "auto"
+ },
+ "pluginVersion": "7.5.6",
+ "targets": [
+ {
+ "exemplar": true,
+ "expr": "apisix_ingress_controller_is_leader",
+ "instant": false,
+ "interval": "",
+ "legendFormat": "",
+ "refId": "A"
+ }
+ ],
+ "title": "Is Leader",
+ "type": "stat"
+ },
+ {
+ "cacheTimeout": null,
+ "datasource": "Prometheus",
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "none"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 5,
+ "w": 8,
+ "x": 8,
+ "y": 1
+ },
+ "id": 16,
+ "interval": null,
+ "links": [],
+ "maxDataPoints": 100,
+ "options": {
+ "colorMode": "value",
+ "graphMode": "area",
+ "justifyMode": "auto",
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "text": {},
+ "textMode": "auto"
+ },
+ "pluginVersion": "7.5.6",
+ "targets": [
+ {
+ "exemplar": true,
+ "expr": "irate(apisix_ingress_controller_cache_sync_total[5m])",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "{{result}}",
+ "refId": "A"
+ }
+ ],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Cache Sync Operations",
+ "type": "stat"
+ },
+ {
+ "cacheTimeout": null,
+ "datasource": "Prometheus",
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ },
+ "unit": "none"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 5,
+ "w": 8,
+ "x": 16,
+ "y": 1
+ },
+ "id": 11,
+ "interval": null,
+ "links": [],
+ "maxDataPoints": 100,
+ "options": {
+ "colorMode": "value",
+ "graphMode": "area",
+ "justifyMode": "auto",
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "text": {},
+ "textMode": "auto"
+ },
+ "pluginVersion": "7.5.6",
+ "targets": [
+ {
+ "exemplar": true,
+ "expr": "irate(apisix_ingress_controller_sync_operation_total[5m])",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "{{resource}}-{{result}}",
+ "refId": "A"
+ }
+ ],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Sync Operations",
+ "type": "stat"
+ },
+ {
+ "datasource": null,
+ "description": "Number of events handled by the controller",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ },
+ "unit": "none"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 8,
+ "x": 0,
+ "y": 6
+ },
+ "id": 35,
+ "options": {
+ "colorMode": "value",
+ "graphMode": "area",
+ "justifyMode": "auto",
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "text": {},
+ "textMode": "auto"
+ },
+ "pluginVersion": "7.5.6",
+ "targets": [
+ {
+ "exemplar": true,
+ "expr": "irate(apisix_ingress_controller_events_total[5m])",
+ "interval": "",
+ "legendFormat": "{{resource}}-{{operation}}",
+ "refId": "A"
+ }
+ ],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Total Events",
+ "type": "stat"
+ },
+ {
+ "datasource": null,
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ },
+ "unit": "none"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 8,
+ "x": 8,
+ "y": 6
+ },
+ "id": 29,
+ "options": {
+ "colorMode": "value",
+ "graphMode": "area",
+ "justifyMode": "auto",
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "text": {},
+ "textMode": "auto"
+ },
+ "pluginVersion": "7.5.6",
+ "targets": [
+ {
+ "exemplar": true,
+ "expr":
"irate(apisix_ingress_controller_check_cluster_health_total[5m])",
+ "interval": "",
+ "legendFormat": "{{result}}",
+ "refId": "A"
+ }
+ ],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Cluster Health Check",
+ "type": "stat"
+ },
+ {
+ "datasource": "Prometheus",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "percentunit"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 8,
+ "x": 16,
+ "y": 6
+ },
+ "id": 6,
+ "options": {
+ "colorMode": "value",
+ "graphMode": "area",
+ "justifyMode": "auto",
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "text": {},
+ "textMode": "auto"
+ },
+ "pluginVersion": "7.5.6",
+ "targets": [
+ {
+ "exemplar": true,
+ "expr":
"sum(apisix_ingress_controller_apisix_bad_status_codes{status_code =~
\"[4-5].*\"}) / sum(apisix_ingress_controller_apisix_requests)",
+ "hide": false,
+ "interval": "",
+ "legendFormat": "",
+ "refId": "A"
+ }
+ ],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Response Error Rate",
+ "type": "stat"
+ },
+ {
+ "collapsed": false,
+ "datasource": null,
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 13
+ },
+ "id": 31,
+ "panels": [],
+ "title": "Apisix Requests",
+ "type": "row"
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "cacheTimeout": null,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "Prometheus",
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "unit": "none"
+ },
+ "overrides": []
+ },
+ "fill": 1,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 6,
+ "w": 24,
+ "x": 0,
+ "y": 14
+ },
+ "hiddenSeries": false,
+ "id": 8,
+ "interval": null,
+ "legend": {
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "maxDataPoints": 100,
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "7.5.6",
+ "pointradius": 2,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "exemplar": true,
+ "expr": "apisix_ingress_controller_apisix_requests",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "{{resource}}",
+ "refId": "A"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeRegions": [],
+ "timeShift": null,
+ "title": "Total Requests",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "$$hashKey": "object:1442",
+ "format": "none",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": "0",
+ "show": true
+ },
+ {
+ "$$hashKey": "object:1443",
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ],
+ "yaxis": {
+ "align": false,
+ "alignLevel": null
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "Prometheus",
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 1,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 7,
+ "w": 24,
+ "x": 0,
+ "y": 20
+ },
+ "hiddenSeries": false,
+ "id": 17,
+ "legend": {
+ "alignAsTable": false,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "rightSide": false,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "7.5.6",
+ "pointradius": 2,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "exemplar": true,
+ "expr": "apisix_ingress_controller_apisix_bad_status_codes",
+ "instant": false,
+ "interval": "",
+ "intervalFactor": 1,
+ "legendFormat": "{{resource}}-{{status_code}}",
+ "refId": "A"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeRegions": [],
+ "timeShift": null,
+ "title": "Status Codes",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "$$hashKey": "object:567",
+ "decimals": null,
+ "format": "short",
+ "label": "",
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ },
+ {
+ "$$hashKey": "object:568",
+ "decimals": null,
+ "format": "Misc",
+ "label": "",
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ],
+ "yaxis": {
+ "align": false,
+ "alignLevel": null
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "cacheTimeout": null,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "Prometheus",
+ "description": "Request latencies with APISIX",
+ "fieldConfig": {
+ "defaults": {
+ "unit": "short"
+ },
+ "overrides": []
+ },
+ "fill": 1,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 6,
+ "w": 24,
+ "x": 0,
+ "y": 27
+ },
+ "hiddenSeries": false,
+ "id": 2,
+ "interval": "",
+ "legend": {
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "7.5.6",
+ "pointradius": 2,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "exemplar": true,
+ "expr": "sum (\n rate(\n
apisix_ingress_controller_apisix_request_latencies_sum{}[1m]\n)) / sum (\n
rate(\n apisix_ingress_controller_apisix_request_latencies_count{}[1m]\n
)\n)",
+ "instant": false,
+ "interval": "",
+ "intervalFactor": 1,
+ "legendFormat": "average",
+ "refId": "A"
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeRegions": [],
+ "timeShift": null,
+ "title": "Requests Latencies",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "$$hashKey": "object:439",
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ },
+ {
+ "$$hashKey": "object:440",
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ],
+ "yaxis": {
+ "align": false,
+ "alignLevel": null
+ }
+ }
+ ],
+ "refresh": "5m",
+ "schemaVersion": 27,
+ "style": "dark",
+ "tags": [],
+ "templating": {
+ "list": [
+ {
+ "allValue": ".*",
+ "current": {
+ "selected": false,
+ "text": "All",
+ "value": "$__all"
+ },
+ "datasource": "Prometheus",
+ "definition": "label_values(resource)",
+ "description": null,
+ "error": null,
+ "hide": 0,
+ "includeAll": true,
+ "label": null,
+ "multi": true,
+ "name": "resource",
+ "options": [],
+ "query": {
+ "query": "label_values(resource)",
+ "refId": "StandardVariableQuery"
+ },
+ "refresh": 2,
+ "regex": ".*",
+ "skipUrlSync": false,
+ "sort": 1,
+ "tagValuesQuery": "",
+ "tags": [],
+ "tagsQuery": "",
+ "type": "query",
+ "useTags": false
+ },
+ {
+ "allValue": ".*",
+ "current": {
+ "selected": false,
+ "text": "All",
+ "value": "$__all"
+ },
+ "datasource": "Prometheus",
+ "definition": "label_values(operation)",
+ "description": null,
+ "error": null,
+ "hide": 0,
+ "includeAll": true,
+ "label": null,
+ "multi": true,
+ "name": "operation",
+ "options": [],
+ "query": {
+ "query": "label_values(operation)",
+ "refId": "StandardVariableQuery"
+ },
+ "refresh": 2,
+ "regex": "",
+ "skipUrlSync": false,
+ "sort": 1,
+ "tagValuesQuery": "",
+ "tags": [],
+ "tagsQuery": "",
+ "type": "query",
+ "useTags": false
+ }
+ ]
+ },
+ "time": {
+ "from": "now-5m",
+ "to": "now"
+ },
+ "timepicker": {
+ "refresh_intervals": [
+ "5s",
+ "10s",
+ "30s",
+ "1m",
+ "5m",
+ "15m",
+ "30m",
+ "1h",
+ "2h",
+ "1d"
+ ]
+ },
+ "timezone": "",
+ "title": "Apache APISIX Ingress Controller",
+ "uid": "cJp7SjHnk",
+ "version": 1
+}
diff --git a/docs/en/latest/plugins/prometheus.md
b/docs/en/latest/plugins/prometheus.md
new file mode 100644
index 0000000..693698e
--- /dev/null
+++ b/docs/en/latest/plugins/prometheus.md
@@ -0,0 +1,124 @@
+---
+title: prometheus
+---
+
+<!--
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+-->
+
+This guide shows how to monitor Apache APISIX Ingress Controller using
Prometheus and Grafana.
+
+## Enable Prometheus
+
+Use CRD file to enable Prometheus in global configurations. The definition
file for custom resources is `ApisixClusterConfig`, so the configuration should
be:
+
+```yaml
+apiVersion: apisix.apache.org/v2beta3
+kind: ApisixClusterConfig
+metadata:
+ name: default
+spec:
+ monitoring:
+ prometheus:
+ enable: true
+```
+
+## Configure Prometheus Server
+
+The Prometheus server address should be `127.0.0.1:9090` by default. You can
set the target url for `apisix-ingress-controller` manually in `prometheus.yml`.
+For example:
+
+```yaml
+...
+scrape_configs:
+ - job_name: "apisix-ingress-controller"
+ static_configs:
+ - targets: ["localhost:9092"]
+```
+
+According to the above example, the metrics are exposed in
`http://localhost:9092/metrics` now.
+Visit `http://localhost:9090` in your browser, and select
`apisix-ingress-controller` in `targets`
+or visit `http://localhost:9092/metrics` to see the data.
+
+
+## Grafana Dashboard
+
+Grafana dashboard shows the metrics exposed in Prometheus graphically.
+[Installing
Grafana](https://grafana.com/docs/grafana/latest/#installing-grafana)
+Visit `http://localhost:3000/` in your browser to access Grafana. The default
username and password are `admin`.
+Then create a new dashboard for `apisix-ingress-controller`.
+
+Follow the steps to apply the configuration of Grafana Dashboard for
`apisix-ingress-controller`.
+
+- Add an empty panel, and import via panel json in
`apisix-ingress-controller/docs/assets/other/json/apisix-ingress-controller-grafana.json`.
+
+
+- Select `Prometheus database` as the datasource. Set the URL according to
your Prometheus server configuration.
+
+
+
+### Preview
+
+
+
+
+
+## Available metrics
+
+- `Is leader` A gauge type metric with value 0 or 1, indicates whether the
role of controller instance is leader, for leader is 1 and candidate is 0.
+Labels:
+ - controller_pod
+ - controller_namespace
+- `Status codes` status codes of requests to APISIX.
+Labels:
+ - controller_pod
+ - controller_namespace
+ - status_code: the HTTP status code returned by APISIX.
+ - resource
+- `Latency` Request latencies with APISIX.
+Labels:
+ - controller_pod
+ - controller_namespace
+- `Requests` Number of requests to APISIX.
+Labels:
+ - controller_pod
+ - controller_namespace
+ - resource
+- `Check cluster health` Number of cluster health check operations.
+Labels:
+ - controller_pod
+ - controller_namespace
+ - name: cluster name.
+- `Sync operation` Number of sync operations.
+Labels:
+ - controller_pod
+ - controller_namespace
+ - resource
+ - result: sync success or failure.
+- `Cache sync` Number of cache sync operations.
+Labels:
+ - controller_pod
+ - controller_namespace
+ - result: sync success or failure.
+- `Controller events` Number of events handled by the controller.
+Labels:
+ - controller_pod
+ - controller_namespace
+ - resource
+ - operation: includes `add`, `update`, `delete`.
+
\ No newline at end of file