influxdb java api使用_Influxdb入门使用
正版包邮flutter实战杜文丛书书
71.3元
包邮
(需用券)
去购买 >
一,Influxdb安装与启动
1,创建yum仓库cat <
[influxdb]
name = InfluxDB Repository - RHEL $releasever
baseurl = https://repos.influxdata.com/rhel/$releasever/$basearch/stable
enabled = 1
gpgcheck = 1
gpgkey = https://repos.influxdata.com/influxdb.key
EO
2,安装启动influxdb## 安装influxdb
sudo yum install influxdb## 启动服务
sudo systemctl start influxdb
3,influxdb客户端使用## 进入命令行客户端
influx
Connected to http://localhost:8086 version 1.8.1
InfluxDB shell version: 1.8.1
二,Influxdb基本概念与操作
1,Database
数据库,可以创建多个,不同数据库中的数据文件,存放在磁盘上的不同目录。# 查看数据库
show databases
# 创建数据库
create database mydb
# 使用数据库
use mydb
# 删除数据库
drop database mydb
2,Measurement
相当于数据库中的表名,时间数据 time、Tag、Field 组合成了 Measurement。InfluxDB 没有创建表一说,直接 insert 就可以将数据插入 Measurement,可以理解为自动创建表。InfluxDB 没有对 measurement 的修改操作。-- 创建一个cpu的measurement,tags为host和regin,其中值为0.64
insert cpu,host=serverA,region=china\_shanghai value=0.64
-- 查询 measurement
> select * from cpu
name: cpu
time host region value
---- ---- ------ -----
1596695999229393499 serverA china\_shanghai 0.64
3,Point
表里的一行数据,由时间戳(timestamp)、标签(tag)、数据(field)组成。timestamp 相当于 point 的时间戳,field 相当于point的值,tags 相当于 point 的属性。
4,Timestamp
数据的时间戳,相当于主键。不赋值时,默认为系统时间。
5,Tag
相当于索引。采用key=value形式,多个 tag 之间用 ',' 分隔。> show tag keys from cpu
name: cpu
tagKey
------
host
region
6,Field
相当于实际记录的数据值,也是采用key=value形式,多个 tag 之间用 ',' 分隔> show field keys
name: cpu
fieldKey fieldType
-------- ---------
value float
7,Retention Policy
存储策略,InfluxDB 会自动清理数据,可以设置数据保留的时间,默认会创建存储策略 autogen (保留时间为永久),之后用户可以自己设置,例如保留最近 30 天的数据。-- 查看默认策略
> show retention policies on mydb
name duration shardGroupDuration replicaN default
---- -------- ------------------ -------- -------
0s 168h0m0s 1 true-- 创建新的策略
create retention policy "rp\_day\_30" on "mydb" duration 30d replication 1 default-- 修改策略
alter retention policy "rp\_day\_30" on "mydb" duration 20d replication 1 default
三,Influxdb api使用
1,首先配置influxdb的properties配置,如下:# influxDB
spring.influx.url\=http://192.168.60.201:8086
spring.influx.user\=admin
spring.influx.password\=admin
spring.influx.database\=mydb
2,添加influx java config@Configuration
@Slf4j
public class InfluxConfig {
@Value("${spring.influx.url}")
private String influxDBUrl;
@Value("${spring.influx.user}")
private String userName;
@Value("${spring.influx.password}")
private String password;
@Value("${spring.influx.database}")
private String database;
/**
* 异步插入:
* enableBatch这里第一个是point的个数,第二个是时间,单位毫秒
* point的个数和时间是联合使用的,如果满100条或者60 * 1000毫秒
* 满足任何一个条件就会发送一次写的请求。
*/
@Bean(name = "influxDB")
public InfluxDB influxdb() {
InfluxDB influxDB = InfluxDBFactory.connect(influxDBUrl, userName, password);
try {
influxDB.setDatabase(database).enableBatch(100, 1000 * 60, TimeUnit.MILLISECONDS);
} catch (Exception e) {
log.error("fail enableBatch:", e);
} finally {
//设置默认策略
influxDB.setRetentionPolicy("autogen");
}
//设置日志输出级别
influxDB.setLogLevel(InfluxDB.LogLevel.BASIC);
return influxDB;
}
}
3,抽象influxdb api接口,提供埋点事件接口@Component
@Slf4j
public class InfluxMonitor {
private ConcurrentLinkedDeque eventDeque = new ConcurrentLinkedDeque<>();
private static final String measurement = "Event";
private static final String eventName = "EventName";
private static final String eventCount = "EventCount";
private static AtomicInteger eventSize = new AtomicInteger();
private static ExecutorService executor = Executors.newFixedThreadPool(16);
@Value("${spring.influx.database}")
private String database;
@Autowired
private InfluxDB influxDB;
/**
* 多线程异步处理
*/
public InfluxMonitor() {
for (int i = 0; i < 8; i++) {
executor.submit((Runnable) () -> {
while (true) {
try {
Thread.sleep(100);
int size = 2000;
Point point;
BatchPoints batchPoints = BatchPoints.database(database).build();
while ((point = eventDeque.pollLast()) != null && size-- > 0) {
eventSize.getAndDecrement();
batchPoints.point(point);
}
if (batchPoints.getPoints().size() > 0) {
influxDB.write(batchPoints);
}
} catch (Exception e) {
log.error("influxDB:", e);
}
}
});
}
}
/**
* 多线程处理件
*/
public void produce(Point point) {
if (eventSize.getAndIncrement() < 5000) {
eventDeque.offerFirst(point);
}
}
/**
* 创建订单事件
*/
public void createOrderEvent(String messageCode, CreateOrderDTO order) {
Map tags = new HashMap<>();
tags.put("messageCode", messageCode);
tags.put("channel", order.getChannel());
this.logEvent("createOrder", new HashMap<>(), tags);
}
/**
* 发送数据
*
* @param logEventName 事件类型 如:创建订单
* @param fields influx field 指标如: 下单次数
* @param tags influx tags 查询索引
*/
public void logEvent(String logEventName, Map fields, Map tags) {
try {
tags.put(eventName, logEventName);
fields.put(eventCount, 1);
Point point = Point.measurement(measurement)
.tag(tags)
.fields(fields)
.build();
this.produce(point);
} catch (Exception e) {
log.error("influx log event:", e);
}
}
}
4,添加controller模拟下单接口@RestController
@RequestMapping(value = "/influx")
@Slf4j
public class InfluxController {
@Autowired
private InfluxMonitor influxMonitor;
@PostMapping("/createOrder")
public Object createOrder(@RequestBody CreateOrderDTO createOrder) {
log.info("订单业务处理..............");
String messageCode = "200";
influxMonitor.createOrderEvent(messageCode, createOrder);
return Boolean.TRUE;
}
}
5,使用postman测试,下一节我们使用可视化页面展示
四,可视化工具Grafana介绍
Grafana 是以纯 Javascript 开发的前端工具,用于访问 InfluxDB,自定义报表、显示图表等,Grafana下载地址。
安装wget https://dl.grafana.com/oss/release/grafana-7.1.2-1.x86\_64.rpm
sudo yum install grafana-7.1.2-1.x86\_64.rpm
修改配置 : vim /etc/grafana/grafana.ini[server]
# Protocol (http, https, h2, socket)
;protocol = http
# The ip address to bind to, empty will bind to all interfaces
http_addr = 192.168.60.201
# The http port to use
http_port = 3000
启动检查systemctl start grafana-server ## 启动grafana服务
systemctl status grafana-server ## 检查启动状态
在浏览器中访问我们配置的ip及端口,本文配置的为:http://192.168.60.201:3000,默认的用户名和密码是admin/admin,首次登陆提醒你修改密码即可
配置数据源(官网地址)Grafana支持多种数据源如:MySQL,Graphite,InfluxDB,Elasticsearch等,本文说的是influxDB,当然使用的就是InfluxDB了,我们看到有很多可选的数据源如下:
下面是本地基于InfluxDB的配置,主要是url,database等一些基本配置
Grafana像写sql一样统计展示不同的面板,非常方便,下面就是以下单次数及各渠道下单分布创建不同的面板来展示Grafana的强大!FROM 指定目标
autogen:我们代码中指定的存储策略
Event :我们代码中指定的measurement
EventName:指定的tags中的一个,本文中就是创建订单事件 createOrder
SELECT 查询指标
field(EventCount) : 指定的fields中的一个,也是我们需要监控的指标,本文中就是下单次数,我默认指定了一次接口调用存储了一次EventCount=1
sum():这个就不多说了相当于mysql中的求和,计算的就是前面指定的field
GROUP BY 分组
time($_interval):面板上指定的时间
ALIAS BY 查询结果别名,本文中就是下单成功次数
Grafana支持很多复杂的查询,这里就不一一演示了,最后看下我们做的面板效果图,InfluxDB的性能是非常好的近实时的,我们通过选择不同的时间来查看业务埋点监控看板
java 11官方入门(第8版)教材
79.84元
包邮
(需用券)
去购买 >
influxdb java api使用_Influxdb入门使用相关推荐
- akka java api中文_akka入门 (1):akka简介
这个akka入门系列大量参考了akka文档.主要是翻译+自己的一些理解.这里对akka文档吐一下槽,它的文档初看上去感觉挺详细的.但是很多示例代码都是片段,对初学者来说甚至都无法运行起来,所以我这里会 ...
- kafka java api 删除_Kafka入门系列—6. Kafka 常用命令及Java API使用
常用命令 启动Zookeeper ./zkServer.sh start-foreground 可选参数: ./zkServer.sh {start|start-foreground|stop|res ...
- influxdb java api使用_java使用influxDB数据库的详细源码
此文实例给亲们分享了java使用influxDB数据库的具体代码,供大家参考,具体内容如下 1.pom.xml中导入jar包依赖 org.influxdb influxdb-java 2.5 2.编写 ...
- mybatis入门(五)之Java API
转载自 mybatis Java API Java API 既然你已经知道如何配置 MyBatis 和创建映射文件,你就已经准备好来提升技能了.MyBatis 的 Java API 就是你收获你所 ...
- 大数据技术之_20_Elasticsearch学习_01_概述 + 快速入门 + Java API 操作 + 创建、删除索引 + 新建、搜索、更新删除文档 + 条件查询 + 映射操作
大数据技术之_20_Elasticsearch学习_01 一 概述 1.1 什么是搜索? 1.2 如果用数据库做搜索会怎么样? 1.3 什么是全文检索和 Lucene? 1.4 什么是 Elastic ...
- 大数据技术之_20_Elasticsearch学习_01_概述 + 快速入门 + Java API 操作 + 创建、删除索引 + 新建、搜索、更新删除文档 + 条件查询 + 映射操作...
一 概述1.1 什么是搜索?1.2 如果用数据库做搜索会怎么样?1.3 什么是全文检索和 Lucene?1.4 什么是 Elasticsearch?1.5 Elasticsearch 的适用场景1.6 ...
- ElasticSearch入门-搜索(java api)
ElasticSearch入门-搜索(java api) package com.qlyd.searchhelper;import java.util.Map;import net.sf.json.J ...
- zookeeper入门学习之java api会话建立《四》
在上一篇zk中简单玩了下api的连接创建会话,也总是留下了很多坑,就是那些引申开来,搞不明白的问题.有时候想追究起来,问题总是那么无穷无尽,有时候问题比答案更有力度吧,到最后都是些哲学问题吗?存在的这 ...
- MyBatis——Java API
Java API 既然你已经知道如何配置 MyBatis 和创建映射文件,你就已经准备好来提升技能了. MyBatis 的 Java API 就是你收获你所做的努力的地方.正如你即将看到的,和 JDB ...
- Java数据持久层框架 MyBatis之API学习八(Java API详解)
对于MyBatis的学习而言,最好去MyBatis的官方文档:http://www.mybatis.org/mybatis-3/zh/index.html 对于语言的学习而言,马上上手去编程,多多练习 ...
最新文章
- 从ubuntu中文论坛转载的一片超好的文章,慢慢学习中
- HelloFresh迁移至新的API网关,实现微服务架构
- 第二天学习Java的笔记
- 走进缓存的世界(一) - 开篇
- 董付国老师1900页系列Python教学PPT阅读地址汇总
- 该怎么输出log?!
- 解决 No converter found for return value of type 的问题
- Python内置函数一览表
- 说说我的专业计算机作文,说说我自己作文(精选11篇)
- 微信企业号和微信公众号使用js-sdk说明和注意事项
- 包你笑,笑话之三 超强情侣对话
- java jsf 入门_JSF入门实战
- 安卓Android基于百度云平台人脸识别学生考勤签到系统设计
- python count函数时间复杂度_Python之时间复杂度
- 更改 IE 代理服务器的设置
- 你还在为博客访问量少而发愁么?
- RACH Procedure Log Analysis
- C# AForge设置摄像头参数(含代码)
- python数列翻转_Python 翻转列表
- 如何写好一份MRD文档
热门文章
- 日常生活 之 有哪些道理是你慢慢才明白的?
- ubuntu安装xbox手柄的驱动程序
- 黑莓装Linux系统,“黑莓的Linux桌面管理器”──Barry的使用
- 热敏打印机数据截取+追加打印二维码
- 增长黑客理论(AARRR)模型
- bitcoin全节点搭建
- linux下无法删除文件夹,解决linux上无法删除文件的方法(疑难文件)
- macos系统镜像iso_Windows10操作系统iso镜像、微软正版软件下载站:MSDN,我告诉你...
- 华为已找到安卓才“替代品”?马云马斯克激辩人工智能未来;微软说:麻将AI系统终获突破;扭亏!中兴通讯上半年净利14.71亿……...
- 3D MAX2014 安装教程(个人亲自示例)