15 分钟带你入门 Grafana

2022-08-01 20:09:45 浏览数 (1)

本篇文章采用的演示数据源是 ElasticSearch,ElasticSearch 版本是 7.x。Grafana 版本是 8.0.5。

简介

Grafana 是一款用 GO 语言开发的开源数据可视化工具,可以做数据监控和数据统计,带有告警功能。

特点:

  • 可视化。Grafana 拥有快速灵活的客户端图表,面板插件有许多不同方式的可视化指标和日志,官方库中具有丰富的仪表盘插件,比如热图、折线图、图表等多种展示方式,让我们复杂的数据展示的美观而优雅。
  • 报警和通知。可视化地为最重要的指标定义警报规则。Grafana 将持续评估它们,并发送通知。
  • 动态仪表盘:使用模板变量创建动态和可重用的仪表板,这些模板变量作为下拉菜单出现在仪表板顶部。
  • 混合数据源:在同一个图中混合不同的数据源!可以根据每个查询指定数据源。这甚至适用于自定义数据源。
  • 注释:注释来自不同数据源图表。将鼠标悬停在事件上可以显示完整的事件元数据和标记。
  • 过滤器:Grafana 使用 Ad-hoc 过滤器允许动态创建新的键/值过滤器,这些过滤器会自动应用于使用该数据源的所有查询。

安装

Mac 下需要首先安装 brew 这个包管理工具,再安装 Grafana 就方便多了:

代码语言:javascript复制
brew update
brew install grafana

启停命令。通过下面命令可以后台启动/停止 Grafana,默认端口 3000。

代码语言:javascript复制
// start
brew services start grafana
// stop
brew services stop grafana

查看 Grafana 版本:

代码语言:javascript复制
grafana-server -v

浏览器登录:http://127.0.0.1:3000/

默认的用户名和密码是:admin/admin

下载安装特定版本

mac 环境如下:

  • 第一步,下载
代码语言:javascript复制
curl -O https://dl.grafana.com/enterprise/release/grafana-enterprise-8.4.6.darwin-amd64.tar.gz
  • 第二步,解压
代码语言:javascript复制
tar -zxvf grafana-enterprise-8.4.6.darwin-amd64.tar.gz
  • 第三步,启动。进入解压目录,./bin/grafana-server web

基础概念

组织与用户

Organization(组织) 是一个很大的概念,每个用户可以拥有多个 Organization,Grafana 有一个默认的组织。用户登录后可以在不同的 Organization 之间切换,前提是该用户拥有多个 Organization。不同的 Organization 之间完全不一样,包括 datasource,dashboard 等都不一样。创建一个 Organization 就相当于开了一个全新的视图,所有的 datasource,dashboard 等都要再重新开始创建。

User(用户),这个概念应该很简单,不用多说。Grafana 里面用户有三种角色 admin,editor,viewer。在2.1版本及之后新增了一种角色read only editor(只读编辑模式),这种模式允许用户修改 DashBoard,但是不允许保存。每个 user 可以拥有多个 Organization。

  • admin 权限最高,可以执行任何操作,包括创建用户,新增 Datasource,创建DashBoard。
  • editor 角色不可以创建用户,不可以新增 Datasource,可以创建 DashBoard。
  • viewer 角色仅可以查看 DashBoard。

数据源

前文说过,Grafana 支持多种数据源。

可以执行多种简单或复杂 Elasticsearch 查询,以可视化存储在 Elasticsearch 中的日志。

右侧设置 -- 数据源 -- Add data source -- ElasticSearch。

其中 Index name 是为时间字段指定默认值,并指定 Elasticsearch 索引的名称。您可以使用索引名称或通配符的时间模式。

Access

这里对 Access 进行解释一下,它设置了如何处理对数据源的请求。如果没有其他说明,服务器应该是首选的方式。

  • 服务器访问模式(默认)

所有请求都将从浏览器发出到 Grafana 后端/服务器,后者再将请求转发到数据源,从而避免可能的跨源资源共享(CORS)要求。如果选择此访问方式,则需要可以从 Grafana 后端/服务器访问该 URL。

  • 浏览器(直接)访问(将会被废除)

所有请求都将从浏览器直接向数据源发出,并且可能要遵守跨域资源共享(CORS)的要求。如果选择此访问方式,则需要可以从浏览器访问URL。

如果选择浏览器访问,则必须更新您的 Elasticsearch 配置,以允许其他域从浏览器访问 Elasticsearch。您可以通过在 elasticsearch.yml 配置文件中为选项指定这些来实现。

这个版本会在未来的版本中废除,假如选中这个模式会有如下提示:

Browser access mode in the Elasticsearch datasource is deprecated and will be removed in a future release.

代码语言:javascript复制
http.cors.enabled: true
http.cors.allow-origin: "*"

仪表盘(Dashboard)

我们接下来介绍一下 Grafana 中的重要 UI 界面——仪表盘。

  • Dashboard。通过数据源定义好可视化的数据来源之后,对于用户而言最重要的事情就是实现数据的可视化。在 Grafana 中,我们通过 Dashboard 来组织和管理我们的数据可视化图表。
  • Row。在 Dashboard 页面中,我们还可以定义一个 Row(行),来组织和管理一组相关的 Panel。
  • Panel。在一个 Dashboard 中一个最基本的可视化单元为一个 Panel(面板)。通过 Panel 的 Query Editor(查询编辑器)我们可以为每一个 Panel 添加查询的数据源以及数据查询方式。每一个 Panel 都是独立的,可以选择一种或者多种数据源进行查询。比如我们使用 ElasticSearch,那么我们可以使用 Lucene 语句进行查询。

最佳实践 - 编辑图表

Metric Query editor

指标查询编辑器。ElasticSearch 的 Metric Query editor 支持选择多种指标(Metrics)和分组(Group By)。可以通过添加或者删除的图标进行。

Query

使用 lucene 查询语句。lucene 语法可以参看传送门[1],语法中也可以使用变量。

我大概梳理了一下,常见的语法有以下:

Metrics指标

Metrics。指标配置,每种数据源提供不同的选项,我这里用的是Elasticsearch。

根据自己的需求选择,比如 Unique Count(根据某个字段去重,计算 UV 的时候)。比如我们需要计算百分位,就选择 Percentiles。

集成了 ElasticSearch 中很多聚合的方法,比如 Min/Max/Count 等。

Group by

聚合分组方式,每个指标属性不同。

Date Histogram,根据时间聚合。

Terms 根据某个字段进行聚合,一般用于生成表格。

Expression 计算

可以通过 Expression 计算出相应的结果。

较低版本不支持 Expression。可以通过 Transform 进行处理。在传递查询的结果集以进行可视化之前,对结果进行一层转换。可以支持命名过滤字段、跨查询进行计算等等。

别名使用

可以用固定值,也可以使用分组变量:

Templating(模板)

在指标查询除了硬编码的方式,Grafana 支持变量注入的方式。变量显示为仪表板顶部的下拉选择框。这些下拉框可以方便地更改仪表板中显示的数据。

设置变量

在 Dashboard 的设置中,我们找到 Variables 的设置,点击 New,进入设置页面,其中 Type 类型包含多种,我们常见的就是 Query。可以通过 JSON 字符串来自定义,它的语法如下:

默认大小限制为 500。你可以通过 size 进行设置。

你可以在 Query 中使用其他变量,当其他变量变化时,查询的结果也会随之变化。

代码语言:javascript复制
{"find": "terms", "field": "@hostname", "query": "@source:$source"}

adhoc Filter 是提供给用户可以自定义条件。官网提供的 demo[2]

使用变量

变量是值的占位符。您可以在指标查询和面板标题中使用变量。因此,当您使用仪表板顶部的下拉菜单更改值时,面板的指标查询将更改以反映新值。

可以使用以下两种语法:

  • <varname> eg: @hostname:
  • [[varname]] eg: @hostname:[[hostname]]

以上是官网的使用,个人发现,类似 ES 中模板字符串的写法也是可以的。

代码语言:javascript复制
name: ${name} AND env: test AND NOT a: ""

总结

本文结合 ElasticSearch 大致介绍了 Grafana 的基础概念以及最佳实践。Grafana 作为一个监控仪表盘系统,它的出现,不需要我们针对数据应用分析进行额外的开发,只需要通过配置就能得到我们想要的图表。

Grafana 的功能是强大而且灵活的,本文只是一个入门的介绍,更多的大家用到的时候还是得去看官网文档[3]

参考

  • Using Elasticsearch in Grafana[4]
  • 入门系列文章[5]
  • ES官方文档[6]
  • lucene 语法[7]

参考资料

[1]传送门: https://segmentfault.com/a/1190000002972420

[2]demo: https://play.grafana.org/d/CknOEXDMk/elasticsearch-templated?orgId=1d

[3]官网文档: https://grafana.com/docs/grafana/latest/

[4]Using Elasticsearch in Grafana: https://grafana.com/docs/grafana/latest/datasources/elasticsearch/#logs

[5]入门系列文章: https://juejin.cn/column/7023032795333132302

[6]ES官方文档: https://www.elastic.co/guide/en/kibana/current/lucene-query.html

[7]lucene 语法: https://www.elastic.co/guide/en/elasticsearch/reference/7.15/query-dsl-query-string-query.html#query-string-syntax

0 人点赞