Grafana
grafana 是一个非常酷的数据可视化平台,常常应用于显示监控数据。
配置数据源(Data Sources)
本篇主要介绍了 Grafana 基于 MySQL 数据源的安装及常用姿势,也支持其他数据源如 ElasticSearch、InfluxDB、Zabbix、Prometheus、Druid、influxDb、MySQL、graphite 等。
Supported data sources
The following data sources are officially supported:
- AWS CloudWatch
- Azure Monitor
- Elasticsearch
- Google Cloud Monitoring
- Graphite
- InfluxDB
- Loki
- Microsoft SQL Server (MSSQL)
- MySQL
- OpenTSDB
- PostgreSQL
- Prometheus
- Testdata
添加 Prometheus 作为数据源
这里将添加 Prometheus 作为默认的数据源,如下图所示,指定数据源类型为 Prometheus 并且设置 Prometheus 的访问地址即可,在配置正确的情况下点击 “Save & Test” 按钮,会提示连接成功的信息。
Troubleshooting
9090: connect: connection refused
如果出现这个错误,有可能是因为将 Grafana 安装在 Docker Container 中,而在这个 Container 中无法访问 Prometheus。
Debug 看看
$ curl http://localhost:9090/api/v1/query
{"status":"error","errorType":"bad_data","error":"invalid parameter \"query\": 1:1: parse error: no expression found in input"}%a
仪表盘(Dashboard)
通过数据源定义好可视化的数据来源之后,对于用户而言最重要的事情就是实现数据的可视化。在 Grafana 中,我们通过 Dashboard 来组织和管理我们的数据可视化图表:
如上所示,在一个 Dashboard 中一个最基本的可视化单元为一个 Panel(面板),Panel 通过如趋势图,热力图的形式展示可视化数据。 并且在 Dashboard 中每一个 Panel 是一个完全独立的部分,通过 Panel 的 **Query Editor(查询编辑器)** 我们可以为每一个 Panel 自己查询的数据源以及数据查询方式,例如,如果以 Prometheus 作为数据源,那在 Query Editor 中,我们实际上使用的是 PromQL,而 Panel 则会负责从特定的 Prometheus 中查询出相应的数据,并且将其可视化。由于每个 Panel 是完全独立的,因此在一个 Dashboard 中,往往可能会包含来自多个 Data Source 的数据。
Grafana 通过插件的形式提供了多种Panel 的实现,常用的如:Graph Panel,Heatmap Panel,SingleStat Panel 以及 Table Panel 等。用户还可通过插件安装更多类型的 Panel 面板。
除了 Panel 以外,在 Dashboard 页面中,我们还可以定义一个 Row(行),来组织和管理一组相关的 Panel。
除了 Panel, Row 这些对象以外,Grafana 还允许用户为 Dashboard 定义 Templating variables(模板参数),从而实现可以与用户动态交互的 Dashboard 页面。同时 Grafana 通过 JSON数据结构管理了整个 Dasboard 的定义,因此这些 Dashboard 也是非常方便进行共享的。
认识面板(Panel)
Panel 是 Grafana 中最基本的可视化单元。每一种类型的面板都提供了相应的查询编辑器 (Query Editor),让用户可以从不同的数据源(如 Prometheus)中查询出相应的监控数据,并且以可视化的方式展现。
Grafana 中所有的面板均以插件的形式进行使用,当前内置了 5 种类型的面板,分别是:Graph,Singlestat,Heatmap, Dashlist,Table 以及 Text。
其中像 Graph 这样的面板允许用户可视化任意多个监控指标以及多条时间序列。而 Siglestat 则必须要求查询结果为单个样本。Dashlist 和 Text 相对比较特殊,它们与特定的数据源无关。
通过 Grafana UI 用户可以在一个 Dashboard 下添加 Panel,点击 Dashboard 右上角的 “Add Panel” 按钮,如下所示,将会显示当前系统中所有可使用的 Panel 类型:
对于使用 Prometheus 作为数据源的用户,最主要的需要了解的就是 Metrics 设置的使用。在 Metric 选项中可以定义了 Grafana 从哪些数据源中查询样本数据。Data Source 中指定当前查询的数据源,Grafana 会加载当前组织中添加的所有数据源。其中还会包含两个特殊的数据源:Mixed 和 Grafana。 Mixed 用于需要从多个数据源中查询和渲染数据的场景,Grafana 则用于需要查询 Grafana 自身状态时使用。
当选中数据源时,Panel 会根据当前数据源类型加载不同的 Query Editor 界面。这里我们主要介绍 Prometheus Query Editor,如下所示,当选中的数据源类型为 Prometheus 时,会显示如下界面:
Grafana 提供了对 PromQL 的完整支持,在 Query Editor 中,可以添加任意个 Query,并且使用 PromQL 表达式从 Prometheus 中查询相应的样本数据。
avg (irate(node_cpu_seconds_total{mode='idle'}[2m])) without (cpu)
每个 PromQL 表达式都可能返回多条时间序列。Legend format 用于控制如何格式化每条时间序列的图例信息。Grafana 支持通过模板的方式,根据时间序列的标签动态生成图例名称,例如:使用表示使用当前时间序列中的 instance 标签的值作为图例名称:
{{instance}}-{{mode}}
当查询到的样本数据量非常大时可以导致 Grafana 渲染图标时出现一些性能问题,通过 Min Step 可以控制 Prometheus 查询数据时的最小步长(Step),从而减少从 Prometheus 返回的数据量。
Resolution 选项,则可以控制 Grafana 自身渲染的数据量。例如,如果 Resolution 的值为 1/10,Grafana 会将 Prometeus 返回的 10 个样本数据合并成一个点。因此 Resolution 越小可视化的精确性越高,反之,可视化的精度越低。
Format as 选项定义如何格式化 Prometheus 返回的样本数据。这里提供了 3 个选项:Table,Time Series 和 Heatmap,分别用于 Tabel 面板,Graph 面板和 Heatmap 面板的数据可视化。
除此以外,Query Editor 还提供了调试相关的功能,点击 Query Inspector 可以展开相关的调试面板:
Graph 面板
// TODO
使用其他 Dashboard
作为开源软件,Grafana 社区鼓励用户分享 Dashboard 通过 https://grafana.com/dashboards 网站,可以找到大量可直接使用的 Dashboard。
比如,当本机已经启动 Node Exporter 后,直接导入这两个 dashboard 即可直接查看本机数据:
https://grafana.com/docs/grafana/latest/reference/export_import/
Reference
- https://grafana.com/grafana/download
- https://grafana.com/docs/grafana/latest/installation/debian/
- https://docs.docker.com/config/daemon/prometheus/
- https://yunlzheng.gitbook.io/prometheus-book/parti-prometheus-ji-chu/quickstart/prometheus-quick-start/use-grafana-create-dashboard