SpringBoot整合TICK(Telegraf+InfluxDB+Chronograf +Kapacitor)监控系列之一:InfluxDB

简介: TICK各个模块说明如下所示:T(Telegraf):服务监控数据采集,包括服务器CPU、内存、IO、进程状态、服务状态等等;I(InfluxDB):时序型数据库,存储Telegraf采集的监控数据,每条数据都会有time序列;C(Chronograf):时间序列数据可视化展示;K(Kapacitor):可以按照预先编写好的规则,实时地订阅influxDB数据或者批量查询数据,并进行告警。

引言

最近项目中需要使用TICK监控方案实现对于服务器运行状态、服务运行状态等运行时状态监控以及告警。所谓TICK即为Telegraf+InfluxDB+Chronograf +Kapacitor。本文主要介绍SpringBoot结合Influxdb实现数据查询的方法,网上相关的资料不多。所以想在此记录下学习的过程,一方面是对自己学习过程的记录,另一方面希望也可以给需要的同学一点经验分享。(网上已经有InfluxDB安装相关的文章,这里就不再进行赘述)


TICK各个模块说明如下所示:

T(Telegraf):服务监控数据采集,包括服务器CPU、内存、IO、进程状态、服务状态等等;

I(InfluxDB):时序型数据库,存储Telegraf采集的监控数据,每条数据都会有time序列;

C(Chronograf):时间序列数据可视化展示;

K(Kapacitor):可以按照预先编写好的规则,实时地订阅influxDB数据或者批量查询数据,并进行告警。


TICK大致的监控框架如下图所示:

image.png

本文将按照以下几部分进行阐述。

- InfluxDB简要介绍

- InfluxDB相关概念

- InfluxDB数据查询


一、InfluxDB简要介绍

InfluxDB是一款Go语言实现的开源时序性数据库,它不需要外部依赖。其设计目的主要用于系统的水平式以及分布式扩展,它对于数据的实时分析,历史数据展示等都提供了良好的支持。插句题外话,学习一项新技术的最好办法就是阅读它的官方文档,大部分的技术官方文档都是英文的,读起来稍微有点费劲,但是只要坚持下去,配上谷歌翻译,并没有想象中那么难。因为官方文档应该是作者对于该技术最原汁原味的理解和叙述,其他翻译的有可能会丢失部分原作者的技术理解。废话不多说,InfluxDB提供的主要特性如下:



1.内置HTTP API,所以我们不需要另外写服务端的代码来启动和运行它;

2.它可以为每条数据打上标签,实现更加方便快捷的数据查询;

3.提供类SQL的查询语句,可以实现几乎无成本的SQL学习迁移,方便开发者快速掌握;

4.数据库安装和管理更加简便,快速的数据保存以及读取;

5.它的目的是实时的数据查询响应,当数据进入数据库时将被索引,同时数据的查询结果要在100ms内进行返回。


二、InfluxDB相关概念

|database|field key|field set| |:–:| :–:|:–: | |field value|measurement|point| |retention policy|series|tag key| |tag set|tag value| timestamp| 下面将对这些概念进行说明。

time cpu usage_idle host
1526035302000000000 cpu-total 43.952299828963156 OS1
1526035302000000000 cpu0 0 OS1
1526035302000000000 cpu1 89.58333333455441 OS1
1526035302000000000 cpu-total 46.952299823520136 OS2
1526035302000000000 cpu0 0 OS2
1526035302000000000 cpu1 91.58333339451375 OS2

influxDB是时序性数据库,所以每一条数据都带有时间戳。


服务器cpu数据存在influxDB中的cpu表中,其中cpu为cpu名称,host为机器名称,time是数据库中每条数据都会自带的时间戳,是fluxDB区别于其他数据库的重要特征之一。usage_idle,cpu被称为fields,它是由对应的field key以及field value组成。由于influxDB是时序性数据库,所以每个field value都有对应的时间戳与其进行对应。由上表可知,每组field key和field value的集合组成了field set。


field是influxDB中不可获取的数据组成部分,每一条存放在数据库中的数据都包含field。但是field本身是没有索引的,如果以field为条件进行数据查询的时候,数据库会遍历库中所有的field直到匹配到对应的field,这样的查询是很耗费资源的。所以尽量在索引上去执行数据操作。


以上数据库表中host就相当于tag,因为它是带有索引属性的,通过它作为条件可以进行数据的筛选,意味着通过它来进行查询操作效率更高。


InfluxDB中measurement作为tag,fields和time列的容器,measurement的名字是存储在相关fields数据的描述。 measurement的名字是字符串,相对于传统关系型数据库,influxDB中的measurement就相当于mysql中的table。

在样本数据中,measurement census中的所有内容都属于autogen的retention policy。 InfluxDB自动创建该存储策略, 它具有无限的持续时间和复制因子设置为1。


现在我们已经熟悉了measurement,tag set和retention policy,那么现在是讨论series的时候了。 在InfluxDB中,series是共同retention policy,measurement和tag set的集合。

series编号 retention policy measurement tag set
series 1 autogen cpu host=OS1

最后,point就是具有相同timestamp的相同seriesfield集合。

三、InfluxDB数据查询

1.linux环境相关操作

(1) 在linux环境安装好influxDB之后,进入root权限下输入influx,linux显示如下:

image.png

(2) 输入use telegraf_1,表示使用telegraf_1这个数据库。

image.png

(3) 输入show measurements,展示该库中存在的表有哪些。后面就可以像普通sql查询一样,使用select语句进行查询的了,但是注意在查询语句后面加上limit做限制,不然会查询出来时间段内所有的数据。

image.png

SpringBoot工程中需要使用对应的Java Client library来进行相关的数据库操作。在pom文件中引入以下依赖,由于本文需要使用sql的参数化查询功能,所以使用的client版本为2.10。

<dependency>
            <groupId>org.influxdb</groupId>
            <artifactId>influxdb-java</artifactId>
            <version>2.10</version>
</dependency>

以下代码为influxDb构建方法,代码中附有部分注释方便读者理解。

//构建InfluxDB客户端
@Configuration
public class InfluxdbBuilder {
    Logger logger = LoggerFactory.getLogger(InfluxdbBuilder.class);
    /**
     * 
     * 方法功能描述:服务启动时向Spring容器注入influxDB bean
     * @author taomeng 2018年5月15日 上午10:44:30    
     * @return
     */
    @Bean("influxDB")
    public InfluxDB createInfluxDB() {
        InfluxDB influxDB = null;
        if (null == influxDB) {
            try {
                //influxDb默认端口为8086,默认没有用户名和密码
                influxDB = InfluxDBFactory.connect("http://127.0.0.1:8086", " ", " ");
            } catch (Exception e) {
                logger.error("Connect influxDB has a excecption", e);
            }
        }
        //指定对应的数据库名称
        influxDB.setDatabase("telegraf");
        return influxDB;
相关文章
|
2天前
|
运维 Prometheus 监控
Spring Boot中使用Actuator监控应用状态
Spring Boot中使用Actuator监控应用状态
|
6天前
|
运维 监控 Java
Spring Boot中使用Actuator进行监控
Spring Boot中使用Actuator进行监控
|
15天前
|
JSON 监控 Java
SpringBoot实用开发篇第七章(监控技术)
SpringBoot实用开发篇第七章(监控技术)
|
21天前
|
Prometheus 监控 Cloud Native
【监控】Spring Boot+Prometheus+Grafana实现可视化监控
【监控】Spring Boot+Prometheus+Grafana实现可视化监控
40 6
|
1天前
|
Prometheus 监控 Cloud Native
Spring Boot中使用Micrometer进行指标监控
Spring Boot中使用Micrometer进行指标监控
|
3天前
|
监控 Java Spring
Spring Boot中使用Actuator进行监控
Spring Boot中使用Actuator进行监控
|
27天前
|
Prometheus 监控 安全
Java一分钟之-Spring Boot Actuator:健康检查与监控
【6月更文挑战第7天】Spring Boot Actuator 提供了丰富的监控和管理端点,如健康检查、性能监控。要启用Actuator,需添加依赖并配置暴露端点。健康检查可自定义,性能监控可通过Metrics结合Micrometer集成外部系统。安全配置很重要,可以使用Spring Security保护端点。日志和环境信息管理则可通过`/loggers`和`/env`端点。正确使用Actuator能提升应用的可观察性和维护性。
31 1
|
5天前
|
Prometheus 监控 Java
使用Spring Boot Actuator监控应用健康状态
使用Spring Boot Actuator监控应用健康状态
|
6天前
|
运维 Prometheus 监控
Spring Boot中使用Actuator监控应用状态
Spring Boot中使用Actuator监控应用状态
|
6天前
|
存储 传感器 Java
整合Spring Boot和InfluxDB实现时序数据存储
整合Spring Boot和InfluxDB实现时序数据存储