热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

引言最近项目中需要使用TICK监控方案实现对于服务器运行状态、服务运行状态等运行时状态监控以及告警。所谓TICK即为Telegraf+InfluxDB+Chronograf+Kapacit

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

  • 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表中,其中cpucpu名称,host为机器名称,time是数据库中每条数据都会自带的时间戳,是fluxDB区别于其他数据库的重要特征之一。usage_idlecpu被称为fields,它是由对应的field key以及field value组成。由于influxDB是时序性数据库,所以每个field value都有对应的时间戳与其进行对应。由上表可知,每组field keyfield 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中的所有内容都属于autogenretention policy。 InfluxDB自动创建该存储策略, 它具有无限的持续时间和复制因子设置为1。

现在我们已经熟悉了measurementtag setretention policy,那么现在是讨论series的时候了。 在InfluxDB中,series是共同retention policymeasurementtag 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显示如下:
这里写图片描述
(2) 输入use telegraf_1,表示使用telegraf_1这个数据库。
这里写图片描述
(3) 输入show measurements,展示该库中存在的表有哪些。后面就可以像普通sql查询一样,使用select语句进行查询的了,但是注意在查询语句后面加上limit做限制,不然会查询出来时间段内所有的数据。
这里写图片描述

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

<dependency>
            <groupId>org.influxdbgroupId>
            <artifactId>influxdb-javaartifactId>
            <version>2.10version>
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;

推荐阅读
  • OpenMap教程4 – 图层概述
    本文介绍了OpenMap教程4中关于地图图层的内容,包括将ShapeLayer添加到MapBean中的方法,OpenMap支持的图层类型以及使用BufferedLayer创建图像的MapBean。此外,还介绍了Layer背景标志的作用和OMGraphicHandlerLayer的基础层类。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 集合的遍历方式及其局限性
    本文介绍了Java中集合的遍历方式,重点介绍了for-each语句的用法和优势。同时指出了for-each语句无法引用数组或集合的索引的局限性。通过示例代码展示了for-each语句的使用方法,并提供了改写为for语句版本的方法。 ... [详细]
  • 本文介绍了OpenStack的逻辑概念以及其构成简介,包括了软件开源项目、基础设施资源管理平台、三大核心组件等内容。同时还介绍了Horizon(UI模块)等相关信息。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
author-avatar
手机用户2502921455
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有