Prometheus运维七 详解可视化Grafana工具

海阔凭鱼跃,天高任鸟飞

文章目录

  • 1.Grafana基本概念
    • 1.1数据源(Data Source)
    • 1.2仪表盘(Dashboard)
    • 1.3组织和用户
    • 1.4 Grafana插件
  • 2.Prometheus集成Grafana
    • 2.1 配置 Grafana 添加数据源
    • 2.2导入 Dashboard 模板
  • 3.Grafana和数据可视化的概念
    • 3.1认识面板(Panel)
    • 3.2认识Graph面板
    • 3.3认识Heatmap面板
    • 3.4认识SingleStat面板
  • 4.Dashboard变量
    • 4.1什么是变量(Variables)?
    • 4.2模板介绍
    • 4.3案例

1.Grafana基本概念

Grafana是一个通用的可视化工具。‘通用’意味着Grafana不仅仅适用于展示Prometheus下的监控数据,也同样适用于一些其他的数据可视化需求。

使用Grafana前,了解一些Grafana的基本概念。

1.1数据源(Data Source)

对于Grafana而言,Prometheus这类为其提供数据的对象均称为数据源(Data Source)。
目前,Grafana官方提供了对:Graphite, InfluxDB, OpenTSDB, Prometheus, Elasticsearch, CloudWatch的支持。
对于Grafana管理员而言,只需要将这些对象以数据源的形式添加到Grafana中,Grafana便可以轻松的实现对这些数据的可视化工作。

1.2仪表盘(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也是非常方便进行共享的。Grafana还专门为Dashboard提供了一个共享服务:https://grafana.com/dashboards,通过该服务用户可以轻松实现Dashboard的共享,同时我们也能快速的从中找到我们希望的Dashboard实现,并导入到自己的Grafana中。

1.3组织和用户

作为一个通用可视化工具,Grafana除了提供灵活的可视化定制能力以外,还提供了面向企业的组织级管理能力。在Grafana中Dashboard是属于一个Organization(组织),通过Organization,可以在更大规模上使用Grafana,例如对于一个企业而言,我们可以创建多个Organization,其中User(用户)可以属于一个或多个不同的Organization。 并且在不同的Organization下,可以为User赋予不同的权限。 从而可以有效的根据企业的组织架构定义整个管理模型。

1.3.1添加用户
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
选项解释:
Email or Username:输入用户邮箱
Name:输入用户名
Role:配置用户权限(只读Viewer 编辑Editor 管理员Admin)
Send invite email:勾选时,会将新用户的设置密码的链接发到邮箱
Skip send invite email:勾选时,会跳过发送邮件这一步

设置用户密码
复制链接到浏览器的地址栏中访问,也可从邮件中收到链接。
注意:使用邮件来设置的话,需要配置grafana.ini配置文件的[smtp]部分。
在这里插入图片描述
web UI 修改当前自身密码
在这里插入图片描述
点击Change Password,修改密码

Old Password:输入旧密码
New Password:输入新密码
Confirm Password:再次输入新密码

1.3.2 修改用户权限和配置用户组
在这里插入图片描述
1.创建组
在这里插入图片描述
在这里插入图片描述
2.添加用户进组
在这里插入图片描述

1.4 Grafana插件

官方插件地址
1.添加插件
1.单击顶部标题中的Grafana图标,以打开侧面菜单。
2.在该Dashboards链接下的侧面菜单中,您应该找到一个名为的链接Data Sources。
3.单击+ Add data source顶部标题中的按钮。
4.从类型下拉列表中选择需要添加的插件。
在这里插入图片描述
插件类型:
在这里插入图片描述

2.Prometheus集成Grafana

Grafana 官网:https://grafana.com/
下载链接:https://grafana.com/grafana/download

Prometheus UI提供了快速验证PromQL以及临时可视化支持的能力,而在大多数场景下引入监控系统通常还需要构建可以长期使用的监控数据可视化面板(Dashboard)。这时用户可以考虑使用第三方的可视化工具如Grafana,Grafana是一个开源的可视化平台,并且提供了对Prometheus的完整支持。

#容器方法安装
docker run -d -p 3000:3000 grafana/grafana
#软件包方法安装,RPM方式
wget https://dl.grafana.com/oss/release/grafana-6.5.1-1.x86_64.rpm 
yum localinstall grafana-6.5.1-1.x86_64.rpm
#软件包方法安装,tar包
wget https://dl.grafana.com/oss/release/grafana-6.5.1.linux-amd64.tar.gz 
tar -zxvf grafana-6.5.1.linux-amd64.tar.gz 
#Ubuntu方式安装
sudo apt-get install -y adduser libfontconfig1
wget https://dl.grafana.com/oss/release/grafana_6.5.1_amd64.deb
sudo dpkg -i grafana_6.5.1_amd64.deb

grafana配置文件解释
使用deb或者rpm安装的,则默认的配置文件是/etc/grafana/grafana.ini
所有在配置文件中的配置都可以通过环境变量来覆盖,使用的语法如下

GF_<SectionName>_<KeyName>
1、paths
[paths]
data = /var/lib/grafana  # 用来存储sqlite3、临时文件、会话等路径
logs = /var/log/grafana  # 日志路径
plugins = /var/lib/grafana/plugins  # 插件路径2、server
[server]
protocol = http  # 访问协议,默认http
http_addr =   # 监听的ip地址,,默认是0.0.0.0 
http_port = 3000  # 监听的端口,默认是3000
domain = localhost  # 这个设置是root_url的一部分,当你通过浏览器访问grafana时的公开的domian名称,默认是localhost
enforce_domain = false  # 如果主机的header不匹配domian,则跳转到一个正确的domain上,默认是false
root_url = http://localhost:3000  # 这是一个web上访问grafana的全路径url,默认是%(protocol)s://%(domain)s:%(http_port)s/
router_logging = false  # 是否记录web请求日志,默认是false
static_root_path = public  # 前端文件(HTML,JS和CSS文件)的目录路径。 默认为public
enable_gzip = false
cert_file =  # 如果使用https则需要设置
cert_key =  # 如果使用https则需要设置3、database
[database]
type = sqlite3  # 数据库可以是mysql、postgres、sqlite3,默认是sqlite3
host = 127.0.0.1:3306  # 只是mysql、postgres需要,默认是127.0.0.1:3306
name = grafana  # grafana的数据库名称,默认是grafana 
user = root  # 数据库用户名
password =  # 数据库密码
url =  # 使用URL配置数据库
ssl_mode = disable  # mysql、postgres使用
path = grafana.db  # 只是sqlite3需要,定义sqlite3的存储路径4、session
[session]
provider = file  # 默认是file,值还可以是memory、mysql、postgres、redis、memcache
provider_config = sessions  #  这个值的配置由provider的设置来确定,可参考官网配置用例
cookie_name = grafana_sess  # grafana的cookie名称
cookie_secure = false  # 如果设置为true,则grafana依赖https,默认是false
session_life_time = 86400  # session过期时间,默认是86400秒,24小时5、logging
[log]
mode = console file  # 可以是console、file、syslog,默认是console、file
level = info  # 日志级别
filters =  # 可选设置为特定的记录设置不同的级别
[log.console]
level =  # 日志级别
format = console  # 日志格式,支持console、text、json
[log.file]
level =  # 日志级别
format = text  # 日志格式,支持console、text、json
log_rotate = true  # 是否开启自动轮转
max_lines = 1000000  # 单个日志文件的最大行数,默认是1000000
max_size_shift = 28  # 单个日志文件的最大大小,默认是28,表示256MB
daily_rotate = true  # 每天是否进行日志轮转,默认是true
max_days = 7  # 日志过期时间,默认是7,7天后删除6、users
[users]
allow_sign_up = true  # 是否允许普通用户登录,如果设置为false,则禁止用户登录,默认是true,则admin可以创建用户,并登录grafana
allow_org_create = true  # 如果设置为false,则禁止用户创建新组织,默认是true
auto_assign_org = true  # 当设置为true的时候,会自动的把新增用户增加到id为1的组织中,当设置为false的时候,新建用户的时候会新增一个组织 
auto_assign_org_role = Viewer  # 新建用户附加的规则,默认是Viewer
login_hint = email or username  # 首页user框中的背景文字
default_theme = dark  # 默认页面的背景
[auth]
disable_login_form = false  # true隐藏登陆框,默认false7、auth.basic
[auth.basic]
enabled = true  # 当设置为true,则http api开启基本认证8、smtp
[smtp]  # 邮件服务器设置
enabled = false  # 是否开启
host = localhost:25  # ip和端口
user =
password =
cert_file =
key_file =
skip_verify = false
from_address = admin@grafana.localhost  # 发送邮箱名
from_name = Grafana  # 发送人9、dashboards.json
[dashboards.json]  # 自定义dashboards放入这个路径中,可以在页面上直接显示并使用它
enabled = true  # 是否开启
path = /var/lib/grafana/dashboards  #  路径10、Alerting
[alerting]
enabled = true  # 设置为false以禁用警报引擎,并从UI中隐藏警报
execute_alerts = true  # 是否执行报警规则11、auth.proxy
[auth.proxy]  # 允许你在一个HTTP反向代理上进行认证设置
enabled = false
header_name = X-WEBAUTH-USER
header_property = username
auto_sign_up = true  # 默认是true。开启自动注册,如果用户在grafana DB中不存在
ldap_sync_ttl = 60
whitelist = 192.168.1.1, 192.168.2.1  # 白名单12、analytics
[analytics]
reporting_enabled = true  # 如果设置为true,则会发送匿名使用分析到stats.grafana.org,主要用于跟踪允许实例、版本、dashboard、错误统计。默认是true
check_for_updates = true  # 更新检查设置
google_analytics_ua_id =  # 使用GA进行分析,填写你的GA ID即可 

grafana使用mysql做数据源

1、创建库名和账号
create database grafana DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
GRANT ALL ON grafana.* TO grafana@'%' IDENTIFIED BY 'grafana' WITH GRANT OPTION;
2、修改配置文件
[database]
type = mysql
host = 127.0.0.1:3306
name = grafana
user = grafana
password = grafana

grafana使用mysql存储session

1、确保session表已存在,如果没有创建session表
CREATE TABLE `session` (`key`       CHAR(16) NOT NULL,`data`      BLOB,`expiry`    INT(11) UNSIGNED NOT NULL,PRIMARY KEY (`key`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
2、修改配置文件
[session]
provider = mysql
provider_config = grafana:grafana@tcp(127.0.0.1:3306)/grafana
cookie_name = grafana_sess
cookie_secure = false
session_life_time = 86400
systemctl start grafana-server
systemctl enable grafana-server

访问http://localhost:3000就可以进入到Grafana的界面中,默认情况下使用账户admin/admin进行登录。
在Grafana首页中显示默认的使用向导,包括:安装、添加数据源、创建Dashboard、邀请成员、以及安装应用和插件等主要流程:
在这里插入图片描述

2.1 配置 Grafana 添加数据源

这里将添加Prometheus作为默认的数据源,如下图所示,指定数据源类型为Prometheus并且设置Prometheus的访问地址即可,在配置正确的情况下点击“save&test”按钮,会提示连接成功的信息:
在这里插入图片描述

2.2导入 Dashboard 模板

官网图形模板地址:https://grafana.com/dashboards
官方提供了众多的 Dashboard 模板根据自己的需要下载一个模板导入就行,这里直接就导入node_exporter模板.
地址:https://grafana.com/dashboards/1860
其中1860是ID号,可以在Grafana中Import,直接输入ID号会自动找到该模板。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意localhost处选择Prometheus。
导入模板之后,仅修改 Name 和 localhost 选择为我们添加的数据源 Prometheus 即可,导入完成后就可以看到图形啦:
在这里插入图片描述
Grafana提供了对PromQL的完整支持,如下所示,通过Grafana添加Dashboard并且为该Dashboard添加一个类型为“Graph”的面板。 并在该面板的“Metrics”选项下通过PromQL查询需要可视化的数据:
在这里插入图片描述

3.Grafana和数据可视化的概念

3.1认识面板(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类型:
在这里插入图片描述
选择Graph面板创建Panel之后,并切换到编辑模式,就可以进入Panel的配置页面。
对于一个Panel而言,一般来说会包含2个主要的配置选项:General(通用设置)、Metrics(度量指标)。其余的配置则根据Panel类型的不同而不同。
在这里插入图片描述
在通用设置中,除了一些Panel的基本信息以外,最主要的能力就是定义动态Panel的能力。
对于使用Prometheus作为数据源的用户,最主要的需要了解的就是Metrics设置的使用。在Metric选项中可以定义了Grafana从哪些数据源中查询样本数据。

Data Source中指定当前查询的数据源,Grafana会加载当前组织中添加的所有数据源。其中还会包含两个特殊的数据源:Mixed和Grafana。
Mixed用于需要从多个数据源中查询和渲染数据的场景,Grafana则用于需要查询Grafana自身状态时使用。
在这里插入图片描述
当选中数据源时,Panel会根据当前数据源类型加载不同的Query Editor界面。
在这里插入图片描述
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可以展开相关的调试面板:
在这里插入图片描述
在面板中,可以查看当前Prometheus返回的样本数据,用户也可以提供Mock数据渲染图像。

3.2认识Graph面板

Graph面板是最常用的一种可视化面板,其通过折线图或者柱状图的形式显示监控样本随时间而变化的趋势。

Graph面板与Prometheus
Graph面板通过折线图或者柱状图的形式,能够展示监控样本数据在一段时间内的变化趋势,因此其天生适合Prometheus中的Counter和Gauge类型的监控指标的可视化,对于Histogram类型的指标也可以支持,不过可视化效果不如Heatmap Panel来的直观。

使用Graph面板可视化Counter/Gauge
以主机为例,CPU使用率的变化趋势天然适用于使用Grapn面板来进行展示:
在这里插入图片描述
在Metrics选项中,我们使用以下PromQL定义如何从Prometheus中读取数据:

1 - (avg(irate(node_cpu{mode='idle'}[5m])) without (cpu))

根据当前Prometheus的数据采集情况,该PromQL会返回多条时间序列,raph面板会从时间序列中获取样本数据,并绘制到图表中。 为了让折线图有更好的可读性,我们可以通过定义Legend format为{{ instance }}控制每条线的图例名称:
在这里插入图片描述
由于当前使用的PromQL的数据范围为0~1表示CPU的使用率,为了能够更有效的表达出度量单位的概念,需要对Graph图表的坐标轴显示进行优化。
在Axes选项中可以控制图标的X轴和Y轴相关的行为.

Axes(坐标轴)
用于坐标轴和网格的显示方式,包括单位,比例,标签等。

默认情况下,Y轴会直接显示当前样本的值,通过Left Y的Unit可以让Graph面板自动格式化样本值。当前表达式返回的当前主机CPU使用率的小数表示,因此,这里选择单位为percent(0.0.-1.0)。
在这里插入图片描述
除了百分比以外,Graph面板支持如日期、货币、重量、面积等各种类型单位的自动换算,用户根据自己当前样本的值含义选择即可。
在这里插入图片描述
Options中可以设置图例的显示方式以及展示位置,
Values中可以设置是否显示当前时间序列的最小值,平均值等。
Decimals用于配置这些值显示时保留的小数位

图例的参数:
Total:返回所有度量查询值的总和
Current:返回度量查询的最后一个值
Min:返回最小的度量查询值
Max:返回最大的度量查询值
Avg:返回所有度量查询的平均值
Decimals:控制Legend值的多少,以小数显示悬浮工具提示

PS:Legend值取决于你使用的度量查询方式和什么样类型的聚合来作为基础标准

还可以对图表进行一些更高级的定制化,以便能够更直观的从可视化图表中获取信息。在Graph面板中Display(显示样式)选项可以帮助我们实现更多的可视化定制的能力,其中包含三个部分:Draw options、Series overrides和Thresholds。
在这里插入图片描述
Draw options
Draw Options用于设置当前图标的展示形式、样式以及交互提示行为。
其中,Draw Modes用于控制图形展示形式:
Bar(柱状)、Lines(线条)、Points(点),可以根据自己的需求同时启用多种模式。

Mode Options则设置各个展示模式下的相关样式。
Fill:系列的颜色填充,0是没有。
Line Width:线的宽度。
Staircase:楼梯状显示。
如果有多个选择项,它们可以作为一个群体显示。

Hover tooltip用于控制当鼠标移动到图形时,显示提示框中的内容。

叠加和空值(Stacking & Null value)
Stack:每个系列是叠在另一个之上
Null value:空值
如果你启用了堆栈可以选择应该显示鼠标悬停功能。
Time range(时间范围)
在这里插入图片描述

Series overrides
如果希望当前图表中的时间序列以不同的形式展示,则可以通过Series overrides控制,顾名思义,**可以为指定的时间序列指定自定义的Draw Options配置,从而让其以不同的样式展示。**例如:
在这里插入图片描述
这里定义了一条自定义规则,其匹配图例名称满足/localhost/的时间序列,并定义其以点的形式显示在图表中。

Thresholds
**Display选项中的最后一个是Thresholds,Threshold主要用于一些自定义一些样本的阈值,**例如,定义一个Threshold规则,如果CPU超过50%的区域显示为warning状态,可以添加如下配置:
在这里插入图片描述
Graph面板则会在图表中显示一条阈值,并且将所有高于该阈值的区域显示为warining状态,通过可视化的方式直观的在图表中显示一些可能出现异常的区域。

需要注意的是,如果用户为该图表自定义了Alert(告警)配置,Thresholds将会被警用,并且根据Alert中定义的Threshold在图形中显示阈值内容。

使用Graph面板可视化Histogram
以Prometheus自身的监控指标prometheus_tsdb_compaction_duration为例,该监控指标记录了Prometheus进行数据压缩任务的运行耗时的分布统计情况。如下所示,是Prometheus返回的样本数据:

# HELP prometheus_tsdb_compaction_duration Duration of compaction runs.
# TYPE prometheus_tsdb_compaction_duration histogram
prometheus_tsdb_compaction_duration_bucket{le="1"} 2
prometheus_tsdb_compaction_duration_bucket{le="2"} 36
prometheus_tsdb_compaction_duration_bucket{le="4"} 36
prometheus_tsdb_compaction_duration_bucket{le="8"} 36
prometheus_tsdb_compaction_duration_bucket{le="16"} 36
prometheus_tsdb_compaction_duration_bucket{le="32"} 36
prometheus_tsdb_compaction_duration_bucket{le="64"} 36
prometheus_tsdb_compaction_duration_bucket{le="128"} 36
prometheus_tsdb_compaction_duration_bucket{le="256"} 36
prometheus_tsdb_compaction_duration_bucket{le="512"} 36
prometheus_tsdb_compaction_duration_bucket{le="+Inf"} 36
prometheus_tsdb_compaction_duration_sum 51.31017077500001
prometheus_tsdb_compaction_duration_count 36

istogram用于统计样本数据的分布情况,其中标签le定义了分布桶Bucket的边界,如上所示,表示当前Prometheus共进行了36次数据压缩,总耗时为51.31017077500001ms。其中任务耗时在0到1ms区间内的为2次、在0~2ms区间范围内为36次,以此类推。
在这里插入图片描述
Graph面板重新计算了Bucket边界,如下所示,在0到1ms范围内的任务次数为2,在1~2ms范围内的运行任务次数为34。通过图形的面积,可以反映出各个Bucket下的大致数据分布情况:
在这里插入图片描述

3.3认识Heatmap面板

在前面我们尝试了使用Graph面板来可视化Histogram类型的监控指标prometheus_tsdb_compaction_duration_bucket。虽然能展示各个Bucket区间内的样本分布,但是无论是以线图还是柱状图的形式展示,都不够直观,对于Histogram类型的监控指标来说,更好的选择是采用Heatmap Panel。

在Grafana中使用Heatmap Panel也非常简单,在Dashboard页面右上角菜单中点击“add panel”按钮,并选择Heatmap Panel即可。
在这里插入图片描述
Heapmap Panel的编辑页面中,主要包含5类配置选项,分别是:General、Metrics、Axes、Display、Time range。

使用Heatmap可视化Histogram类型的监控指标时,**需要设置Format as选项为Heatmap。**当使用Heatmap格式化数据后,Grafana会自动根据样本的中的le标签,计算各个Bucket桶内的分布,并且按照Bucket对数据进行重新排序。Legend format模板则将会控制Y轴中的显示内容。
在这里插入图片描述
默认情况下,Heatmap Panel会自行对PromQL查询出的数据进行分布情况统计,而在Prometheus中Histogram类型的监控指标其实是已经自带了分布的Bucket信息的,因此为了直接使用这些Bucket信息,我们需要在Axes选项中定义数据的Date format需要定义为Time series buckets。该选项表示Heatmap Panel不需要自身对数据的分布情况进行计算,直接使用时间序列中返回的Bucket即可。
在这里插入图片描述

使用Heatmap可视化其它类型样本分布情况
对于非Histogram类型,由于其监控样本中并不包含Bucket相关信息,因此在Metrics选项中需要定义Format as为Time series。
在这里插入图片描述
并且通过Axes选项中选择Data format方式为Time series。设置该选项后Heatmap Panel会要求用户提供Bucket分布范围的设置.

在Y轴(Y Axis)中需要通过Scale定义Bucket桶的分布范围,默认的Bucket范围支持包括:liner(线性分布)、log(base 10)(10的对数)、log(base 32)(32的对数)、log(base 1024)(1024的对数)等。
在这里插入图片描述
上图中设置的Scale为log(base 2),那么在Bucket范围将2的对数的形式进行分布,即[1,2,4,8,…].

3.4认识SingleStat面板

Singlem Panel侧重于展示系统的当前状态而非变化趋势。
适用于一下场景:
1.当前系统中所有服务的运行状态;
2.当前基础设施资源的使用量;
3.当前系统中某些事件发生的次数或者资源数量等。

使用SingleStat Panel
从Dashboardc创建Singlestat Panel,并进入编辑页面,对于SingleStat Panel而言,其只能处理一条时间序列,否则页面中会提示“Multiple Series Error”错误信息。这里使用如下PromQL查询当前主机负载:

node_load1{instance="localhost:9100"}

在这里插入图片描述
默认情况下,当前面板中会显示当前时间序列中所有样本的平均值,而实际情况下,我们需要显示的是当前主机当前的负载情况,因此需要通过SingleStat Panel的Options选项控制当前面板的显示模式:
在这里插入图片描述
如上所示,通过Value配置项组可以控制当前面板中显示的值,以及字体大小等。对于主机负载而言,我们希望能够显示当前的最新值,因此修改Stat为Current即可。

如果希望面板能够根据不同的值显示不同的颜色的话,则可以定义Thresholds与Colors的映射关系,例如,定义Thresholds的分割区间值为“0,1”,则当Value的值落到不同的范围内时,将显示不同的颜色。

如果希望能够显示当前时间序列的样本值变化情况,则可以启用Spark lines配置。启用之后,Singlestat面板中除了会显示当前的最新样本值以外,也会同时将时间序列中的数据已趋势图的形式进行展示。

除了通过数字大小反应当前状态以外,在某些场景下我们可能更关心的是这些数字表示的意义。例如,在Promthues监控服务的健康状态时,在样本数据中会通过0表示不健康,1表示健康。 但是如果直接将0或1显示在面板中,那么可视化效果将缺乏一定的可读性。

为了提升数字的可读性,可以在Singlestat Panel中可以通过Value Mappings定义值的映射关系。Siglesta支持值映射(value to text)和区间映射(range to text)两种方式。 如下所示:
在这里插入图片描述
当面板中Value的值在0~0.99范围内则显示为Health,否则显示为Unhealth。这种模式特别适合于展示服务的健康状态。 当然你也可以将Value映射为任意的字符,甚至是直接使用Emoji(http://www.iemoji.com/)表情.

4.Dashboard变量

4.1什么是变量(Variables)?

变量(Variables)一般包含一个或多个可选择的值。
使用变量我们可以创建出交互式的动态仪表盘!原本查看某些主机时,需要每次手动修改Panel中的PromQL表达式,或者给这些主机创建单独的Panel。这样的硬编码方式会导致Dashboard配置频繁修改,使用变量后,同一个仪表盘可以显示不同变量值(主机和实例)的数据。有变量的仪表盘就是一个模板,变量给模板注入了灵魂。

例如:
当用户只想关注其中某些主机时,基于当前我们已经学习到的知识只有两种方式,要么每次手动修改Panel中的PromQL表达式,要么直接为这些主机创建单独的Panel。主机有很多时,需要新建无数的仪表盘来展示不同的主机状态,好在grafana中有Variables,可以动态修改仪表盘中的参数,这样仪表盘的内容也会随参数的值改变而改变。

4.2模板介绍

变量定义
通过Dashboard页面的Settings选项,可以进入Dashboard的配置页面并且选择Variables子菜单:
在这里插入图片描述
在这里插入图片描述
1.General(常用)
Name(定义变量名);Label(标签),在仪表盘上显示的标签名字;Hide(隐藏),用于隐藏label(标签)或者暂时不用variable(变量);Type(变量的类型)

需要指定变量的名称,然后就可以通过$variable_name的形式引用该变量。
Grafana目前支持6种不同的Type变量类型,而能和Prometheus一起工作的主要包含以下5种类型:
在这里插入图片描述
1.1、Interval(间隔),此变量可以表示查询的时间跨度,这样在查询的SQL中不用硬编码时间间隔,而是使用Interval变量来定义时间间隔。

1.2、Query(查询),此变量用于编写数据源查询,与Query Options中的设置配合使用,通常返回度量名称、标签值等。例如,返回主机或主机组的名称。

1.3、Datasource(数据源),此变量用于指定数据源,例如有多个zabbix源时,就可以使用此类型变量,方便在Dashboard中交互式切换数据源,快速显示不同数据源中的数据。

1.4、**Custom(自定义),**用户自定义设置的变量。

1.5、Constant(常量),定义可以隐藏的常量。对于要共享的仪表盘中包括路径或者前缀很有用。在仪表盘导入过程中,常量变量将成为导入时的选项。在导入Dashboard时,会要求用户设置该常量的值。

1.6、Ad hoc filters(Ad hoc过滤器),这是一种非常特殊的变量,目前只适用于某些数据源,如influxDB、Prometheus、Elasticsearch。使用指定数据源时将自动添加所有度量查询出的键/值。

1.7、Text box(文本框),此变量用于提供一个可自由输入的文本框。

2.Query Options(查询选项)
在这里插入图片描述
2.1 可以指定数据源(Data source)

2.2 刷新方式(Refresh),即何时Dashboard中的数据会被刷新.
1、从不(Never);
2、仪表盘加载时(On Dashboard Load);
3、时间范围发生变化(On time range changed),通常会选择On Dashboard Load;

3.3 Regex(正则),使用正则表达式来匹配对应的值;

4.4 Sort(排序)
1.Disabled禁用,
2.Alphabetical (asc)按字母升序,
3.Alphabetical (desc)按字母降序,
4.Numerical (asc)按数字升序,
5.Numerical (desc)按数字降序,
6.Alphabetical (case-insensitive,asc) 按字母不区分大小写升序,
7.Alphabetical (case-insensitive,desc) 按字母不区分大小写升序。

3.Selection Options(选择项)
在这里插入图片描述
1.Multi-value允许多选,即在Dashboard中可以同时勾选多个。
2.Include All option 允许选择All(所有),即在Dashboard中可以有一个All的选项,允许勾选。

4.Value groups/tags (Experimental feature),
在这里插入图片描述
Grafana还处在验证性的特征。

4.3案例

1.变量定义
通过Dashboard页面的Settings选项,可以进入Dashboard的配置页面并且选择Variables子菜单:
用户需要指定变量的名称,后续用户就可以通过$variable_name的形式引用该变量。
当Prometheus同时采集了多个主机节点的监控样本数据时,用户希望能够手动选择并查看其中特定主机的监控数据。这时我们需要使用Query类型的变量。
在这里插入图片描述
这里我们为Dashboard创建了一个名为node的变量,并且指定其类型为Query。Query类型的变量,允许用户指定数据源以及查询表达式,并通过正则匹配(Regex)的方式对查询结果进行处理,从而动态生成变量的可选值。在这里指定了数据源为Prometheus。
通过使用node_load1我们得到了两条时间序列:

node_load1{instance="localhost:9100",job="prometheus"}
node_load1{instance="xxx.xxx.xxx.xxx:9100",job="xxx.xxx.xxx.xxx"}

通过指定正则匹配表达式为/.instance="([^"]).*/从而匹配出标签instance的值作为node变量的所有可选项,即:

foo:9100
localhost:9100

Selection Options选项中可以指定该变量的下拉框是否支持多选,以及是否包含全选(All)选项。

保存变量后,可以在Panel的General或者Metrics中通过$node的方式使用该变量
在这里插入图片描述
这里需要注意的是,如果允许用户多选在PromQL表达式中应该使用标签的正则匹配模式,因为Grafana会自动将多个选项格式化为如“foo:9100|localhost:9100”的形式。

使用Query类型的变量能够根据允许用户能够根据时间序列的特征维度对数据进行过滤。在定义Query类型变量时,除了使用PromQL查询时间序列以过滤标签的方式以外,Grafana还提供了几个有用的函数:

函数作用
label_values(label)返回Promthues所有监控指标中,标签名为label的所有可选值
label_values(metric, label)返回Promthues所有监控指标metric中,标签名为label的所有可选值
metrics(metric)返回所有指标名称满足metric定义正则表达式的指标名称
query_result(query)返回prometheus查询语句的查询结果

参考文献:
https://blog.csdn.net/bbwangj/article/details/81109615
https://yunlzheng.gitbook.io/prometheus-book/part-ii-prometheus-jin-jie/grafana/grafana-panels/use_graph_panel
https://prometheus.io/docs/operating/security/
https://www.qedev.com/linux/208542.html
https://www.cnblogs.com/shhnwangjian/p/6911415.html


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部