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