influxdb+Grafana+jmeter监控搭建

安装InfluxDB

InfluxDB的简介

InfluxDB 是用Go语言编写的一个开源分布式时序、事件和指标数据库,无需外部依赖。

类似的数据库有Elasticsearch、Graphite等。、

功能特点

基于时间序列,支持与时间有关的相关函数(如最大,最小,求和等)
可度量性:你可以实时对大量数据进行计算
基于事件:它支持任意的事件数据基于事件:它支持任意的事件数据

InfluxDB的主要特点

无结构(无模式):可以是任意数量的列
可拓展的
支持min, max, sum, count, mean, median 等一系列函数,方便统计支持min, max, sum, count, mean, median 等一系列函数,方便统计
原生的HTTP支持,内置HTTP API原生的HTTP支持,内置HTTP API
强大的类SQL语法强大的类SQL语法
自带管理界面,方便使用自带管理界面,方便使用

注意

自带管理界面在1.2版之后,将不再提供。
集群功能在1.2版之后,也不再提供。

InfluxDB与传统数据库的比较

InfluxDB的名词传统数据库的概念
database 数据库
measurement 数据库的表
points 表里的一行数据

InfluxDB的独特的特性

point

Point相当于传统数据库里的一行数据,如下表所示:

oint属性传统数据库中的概念
time(时间戳) 每个数据记录时间,是数据库中的主索引(会自动生成)
fields(字段、数据) 各种记录值(没有索引的属性)也就是记录的值:温度, 湿度
tags(标签) 各种有索引的属性:地区,海拔

注意

  • 在influxdb中,字段必须存在。因为字段是没有索引的。如果使用字段作为查询条件,会扫描符合查询条件的所有字段值,性能不及tag。类比一下,fields相当于SQL的没有索引的列。
  • tags是可选的,但是强烈建议你用上它,因为tag是有索引的,tags相当于SQL中的有索引的列。tag value只能是string类型。

series

相当于是 InfluxDB 中一些数据的集合,在同一个 database 中,retention policy、measurement、tag sets 完全相同的数据同属于一个 series,同一个 series 的数据在物理上会按照时间顺序排列存储在一起。

> select * from students
name: students
time                score stuid value
----                ----- ----- -----
1542848518465067760 89    s123
1542850528630385278 79    s123
1542850533581732431 69    s123
1542850536266169940 39    s123
1542850676477097687 99    s123
1542874869654197110       s124  100
1542874898710687064       s125  60
> show series from students
key
---
students,stuid=s123
students,stuid=s124
students,stuid=s125

shardshard 和 retention policy 相关联。每一个存储策略下会存在许多 shard,每一个 shard 存储一个指定时间段内的数据,并且不重复;
例如 7点-8点 的数据落入 shard0 中,8点-9点的数据则落入 shard1 中。
每一个 shard 都对应一个底层的 tsm 存储引擎,有独立的 cache、wal、tsm file。

组件

1.TSM 存储引擎主要由几个部分组成: cache、wal、tsm file、compactor。

Cache:cache 相当于是 LSM Tree 中的 memtabl。插入数据时,实际上是同时往 cache 与 wal 中写入数据,可以认为 cache 是 wal 文件中的数据在内存中的缓存。当 InfluxDB 启动时,会遍历所有的 wal 文件,重新构造 cache,这样即使系统出现故障,也不会导致数据的丢失。
cache 中的数据并不是无限增长的,有一个 maxSize 参数用于控制当 cache 中的数据占用多少内存后就会将数据写入 tsm 文件。如果不配置的话,默认上限为 25MB,每当 cache 中的数据达到阀值后,会将当前的 cache 进行一次快照,之后清空当前 cache 中的内容,再创建一个新的 wal 文件用于写入,剩下的 wal 文件最后会被删除,快照中的数据会经过排序写入一个新的 tsm 文件中。

2.WAL:wal 文件的内容与内存中的 cache 相同,其作用就是为了持久化数据,当系统崩溃后可以通过 wal 文件恢复还没有写入到 tsm 文件中的数据。

3.TSM File:单个 tsm file 大小最大为 2GB,用于存放数据。

4.Compactor:compactor 组件在后台持续运行,每隔 1 秒会检查一次是否有需要压缩合并的数据。

主要进行两种操作

  1. 一种是 cache 中的数据大小达到阀值后,进行快照,之后转存到一个新的 tsm 文件中。
  2. 另外一种就是合并当前的 tsm 文件,将多个小的 tsm 文件合并成一个,使每一个文件尽量达到单个文件的最大大小,减少文件的数量,并且一些数据的删除操作也是在这个时候完成。

安装

环境: CentOS6.8_x64
InfluxDB版本:1.7.0

InfluxDB的安装

wget  https://dl.influxdata.com/influxdb/releases/influxdb-1.7.0.x86_64.rpm
rpm -ivh influxdb-1.7.0.x86_64.rpm

安装后产生的InfluxDB相关文件说明:

/usr/bin下文件
  • influxd           influxdb服务器
  • influx             influxdb命令行客户端
  • influx_           inspect 查看工具
  • influx_stress   压力测试工具
  • influx_tsm      数据库转换工具(将数据库从b1或bz1格式转换为tsm1格式)
/var/lib/influxdb下文件夹

data                    存放最终存储的数据,文件以**.tsm**结尾

meta                   存放数据库元数据

wal                     存放预写日志文件

/etc/influxdb下文件

influxdb.conf          influxdb数据库配置文件

配置文件参数详解:https://blog.csdn.net/zx711166/article/details/84325865

修改配置

修改InfluxDB的配置,主要配置jmeter存储的数据库与端口号,还有需要将UI端口开放,   找到 [http] 、 [[graphite]]节点,enabled改为true(默认是开启的),bind-address修改绑定的IP和端口:

vim /etc/influxdb/influxdb.conf
# 找到graphite并且修改它的库与端口,修改为下面的结果:
[[graphite]]
  enabled = true
  database = "jmeter"
  bind-address = ":2003"
  protocol = "tcp"
  consistency-level = "one"

# [http]

       #Determines whether HTTP endpoint is enabled.

       enabled= true      

       # The bindaddress used by the HTTP service.

       bind-address= ":8086"          此处配置的IP和端口供grafana连接使用

# 找到admin,将前面的#号去掉,开放它的UI端口,1.70版本没找到这个admin到配置的地方,我就没有修改,没有修改也是可以的
[admin]
  # Determines whether the admin service is enabled.
  enabled = true
 
  # The default bind address used by the admin service.
  bind-address = ":8083"
 
  # Whether the admin service should use HTTPS.
  # https-enabled = false
 
  # The SSL certificate used when HTTPS is enabled.
  # https-certificate = "/etc/ssl/influxdb.pem

配置完了之后:

启动InfluxDB

服务式启动命令

#服务式启动命令
service influxdb start
#停止服务
service influxdb stop
#重启服务
service influxdb restart
#尝试重启服务
service influxdb try-restart
#重新加载服务
service influxdb reload
#强制重新加载服务
service influxdb force-reload
#查看服务状态
service influxdb status
#以非服务方式启动
cd /usr/bin
./influxd
服务启动查看是否正常
#通过查看服务对应进程
[root@CESHI_HT_Jmeter_1 ceshi]# ps aux | grep influx root 14919 0.0 0.0 103320 860 pts/0 S+ 13:14 0:00 grep --color=auto influx influxdb 29294 0.1 0.9 820816 72588 ? Sl Jan13 1:25 /usr/bin/influxd -pidfile /var/run/influxdb/influxd.pid -config /etc/influxdb/influxdb.conf
#通过service influxdb status命令,查看服务状态

[root@CESHI_HT_Jmeter_1 ceshi]# service influxdb status
influxdb process is running [ OK ]

服务启动后相关端口
  • 8086:HTTP API的端口
  • 8088:备份恢复时使用,默认值为8088

InfluxDB 客户端命令行方式操作

客户端命令行方式操作

[root@localhost influxdb]# influx
Connected to http://localhost:8086 version 1.7.0
InfluxDB shell version: 1.7.0
Enter an InfluxQL query
>

显示数据库

> show databases
name: databases
name
----
_internal
jmeter

新建数据库

> create database testdb
> show databases
name: databases
name
----
_internal
testdb

 删除数据库

> drop database testdb
> show databases
name: databases
name
----
_internal

使用数据库

> create database testdb
> use testdb
Using database testdb

显示所有表

show measurement

删除表

> drop measurement disk_free

安装Grafana

使用yum下载Grafana并且安装

1 wget https://dl.grafana.com/oss/release/grafana-6.3.5-1.x86_64.rpm
2 rpm -ivh grafana-6.3.5-1.x86_64.rpm
3 报错:warning: grafana-6.3.5-1.x86_64.rpm: Header V4 RSA/SHA1 Signature, key ID 24098cb6: NOKEY
4 error: Failed dependencies:
5     urw-fonts is needed by grafana-6.3.5-1.x86_64
6 
7 执行 yum install -y urw-fonts
8 再进行第一步的运行rpm -ivh grafana-6.3.5-1.x86_64.rpm
9 然后启动即可/etc/init.d/grafana-server restart

打开浏览器,访问机器IP“http://127.0.0.1:3000

输入用户名,密码登录系统。用户名与密码都是"admin"

添加需要展示数据的数据库(配置InfluxDB )

添加InfluxDB数据库配置。输入帐号密码“admin / admin”,点击“add”添加之后点击“Test & Save” 提示“Success”说明成功了

 

【注意】URL的端口是8086,而刚才配置的8083是UI的端口。

    - 8083端口是InfluxDB的UI界面展示的端口

    - 8086端口是Grafana用来从数据库取数据的端口

    - 2003端口则是刚刚设置的,Jmeter往数据库发数据的端口

配置JMeter

在线程组右键——>添加——>监听器——>后端监听器

 

 使用InfluxdbBackendListenerClient说明:

  • influxdbMetricsSender:org.apache.jmeter.visualizers.backend.influxdb.HttpMetricsSender
  • influxdbUrl:influx数据库的url。example : http://influxHost:8086/write?db=jmeter
  • application:被测试的应用名称。此值也作为名为“application”的标记存储在“events”中
  • measurement:使用默认的”jmeter“就行
  • summaryOnly:为true的情况下,只输出所有请求的集合数据报告,为flase的情况下,输出每条数据的详情报告、
  • samplersRegex:正则表达式将与样本名称匹配并发送到后端。默认匹配所有
  • testTitle:测试名称。默认的设置为 Test name。该值作为名为“text”的字段存储在“事件”度量中。 JMeter在测试的开始和结束时自动生成一个注释,其值以'started'和'ended'结尾
  • percentiles:要发送到后端的百分位数,多个值已;分割
  • TAG_WhatEverYouWant:自定义标签。您可以根据需要添加任意数量的自定义标签。对于它们中的每一个,只需创建一个新行并在其名称前加“TAG_”

配置Grafana

添加一个图表

点击旁边的绿点“Add Panel -> Graph”

配置图表

配置好了,就能看到图了。如果看不到图,请用Jmeter多发几次请求。下图中选择监控的选项,可以在Jmeter的官网上查看到对应的解释

 

Graph里面的选项有:

    General(常规选择)、Metrics(指标)、Axes(坐标轴)、Legend(图例)、 Display(显示样式)、Time range(时间范围)

Genera(常规选择):添加图形标题,图形宽度高度等

    Title:仪表板上的面板标题

    Span:列在面板中的宽度

    Height:面板内容高度(以像素为单位)

选取/详细信息链接(Drilldown / detail link)

    选取部分允许添加动态面板的链接,可以链接到其他仪表板或URL。

    每个链接都有一个标题,一个类型和参数。链接可以是 dashboard或 absolute链接。如果它是一个仪表板链接, dashboard值必须是一个仪表板的名字。如果这是一个 absolute链接,是URL链接的URL。

    params允许添加额外的URL参数的链接。格式是 name=value与多个参数分开,当链接到另一个仪表板使用模板变量,你可以使用 var-myvar=value填充模板变量的期望值链接

 

Metrics(指标)

    定义了来源数据的呈现,每个数据源都提供不同的选择。面板的来源数据通过group,host,application,item从zabbix中获得。

Axes(坐标轴)

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

Left Y和 Right Y可以定制使用,因其中的可选参数太多,请在使用的时候参考官方文档;

Legend(图例):图例展示

    图例的参数:

    Total:返回所有度量查询值的总和

    Current:返回度量查询的最后一个值

    Min:返回最小的度量查询值

    Max:返回最大的度量查询值

    Avg:返回所有度量查询的平均值

    Decimals:控制Legend值的多少,以小数显示悬浮工具提示(图)

    Grafana 中Legend值的计算取决于你使用的度量查询方式和什么样类型的聚合或合并点来实现的,所有上述所说的值在同一时间可能都是不正确的。例如,如果你是每秒请求一次,这可能是使用平均值来作为一个整合,然而这个Legend值不会代表请求的总数。这只是Grafana收到的所有数据点的总和。

Display(显示样式)

    显示样式的控件属性图如下:

图表模式(Draw Modes)

Bar:一个条形图显示值

Lines:显示线图值

 Points:显示点值

选择模式(Mode Options)

Fill:系列的颜色填充,0是没有。

Line Width:线的宽度。

 Staircase:楼梯状显示。

    如果有多个选择项,它们可以作为一个群体显示。

叠加和空值(Stacking & Null value)

Stack:每个系列是叠在另一个之上

Null value:空值

    如果你启用了堆栈可以选择应该显示鼠标悬停功能。

Time range(时间范围)

 

 更多Grafana功能请查阅官方文档....https://grafana.com/grafana

导入grafana已经有的模版

目前界内很多大佬都有上传自己研发的一套监控体系,看以从仪表盘下载对应的需求的仪表盘进行监控,同时可以从中优化 添加时候自己工作业务需要的监控

官网模板库地址:https://grafana.com/dashboards?dataSource=influxdb 如jmeter官方模板:copy id

在Import 添加搜到的模板id(还有一个和官网模板差不多的 模板ID是:4026 可参考下)

选择建好的data source

添加完成后就会出现了以下界面了

 就可以显示实时监控的数据信息了。

参考链接:

https://blog.csdn.net/zx711166/article/details/84325838

https://www.cnblogs.com/Lam7/p/8304076.html

原文地址:https://www.cnblogs.com/xiehong/p/12191282.html