前言

本文档为简单介绍Cenos7.9环境下物理安装InfluxDB 2.4.0版本及简单的UI及Java API使用

相关链接

  • InfluxDB官网:https://www.influxdata.com/
  • InfluxDB 2.4.0 下载地址: https://portal.influxdata.com/downloads/
  • GitHub 地址
  • influxdb: https://github.com/influxdata/influxdb
  • telegraf: https://github.com/influxdata/telegraf
  • telegraf 插件列表: https://docs.influxdata.com/telegraf/v1.24/plugins/
    在这里插入图片描述

1.测试安装环境:

1.CentOS Linux release 7.9.2009 (Core)
2.CPU 4核,内存8G
3.内部局域网,IP:192.168.0.201

2.安装流程

2.1.关闭防火墙及开机自启动防火墙

systemctl stop firewalld
systemctl disable firewalld

关闭防火墙

2.2.导入influxdb.repo

cat <<EOF | sudo tee /etc/yum.repos.d/influxdb.repo
[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
EOF

在这里插入图片描述
在这里插入图片描述

2.3.安装influxdb2

sudo yum install influxdb2

提示是否安装时 输入y
在这里插入图片描述

2.4.启动并且注册influxdb服务

sudo service influxdb start

在这里插入图片描述

2.5.查看influxdb进程状态

sudo service influxdb start

ps -aux|grep influxdb
在这里插入图片描述

2.6.打开influxdb后台网址,默认端口号8086 (http://192.168.0.201:8086/)

在这里插入图片描述

2.7.点击【GET STARTED】 按钮,进行初始化,并且输入数据库初始化信息后点击【CONTINUE】

Key Value 例如
Username 用户名 admin
Password 密码 admin12345678
Confirm Password 确认密码 admin12345678
Initial Organization Name 组织名称-仪表板、任务、存储桶(Bucket)和用户都属于一个组织 dev_org
Initial Bucket Name 存储桶名称,相当mysql的数据库名称 test_db

在这里插入图片描述
在这里插入图片描述

2.8.初始化数据库完成

在这里插入图片描述

2.9. 点击【QUICK START】切换至管理页面

在这里插入图片描述

3.监视InfluxDB 当前服务器性能

3.1 打开左侧列表的Dashboards,点击 默认的【InFLUXDB 2.0 OSS Metrics】监视版

在这里插入图片描述

3.2 查看当前InfluxDB 数据库服务器的性能

在这里插入图片描述

4.表结构基本概念

InfluxDB 中 org / bucket / measurement 概念的区别

InfluxDB 含义 Mysql 含义 例如
Buckets 数据桶 Database 数据库 xxx_system_db
Measurement 度量 Table user_account
Point 数据点 row(Record) 表的行数据 -
Tag 设置了单索引/联合索引的字段 Index 单索引/联合索引/表主键 用户名 添加索引
Field 未设置索引的字段 可以看作是这个Tag的属性 Column 未设置索引的字段 用户的性别,不会每次登录都需要查询

5.使用java进行插入或查询

5.1 查看开发说明文档

1.打开左侧面板的【Load Data】模块
2.选择【Sources】标签,
3.在【Client Libraries】中点击Java
在这里插入图片描述

5.2 查看Java 项目的配置说明进行简单配置

在这里插入图片描述

以Maven项目为例:

5.2.1 导入maven依赖
<dependency>
	<groupId>com.influxdb</groupId>
	<artifactId>influxdb-client-java</artifactId>
	<version>3.1.0</version>
</dependency>
5.2.2 获取API TOKEN

1.可以在画面中的Token模块中创建新的API token,可以创建下面两种类型的token

  1. Read/Write API Token
  2. All Access API Token
    2.或者是在下面的示例中可以直接获取当前的token值,本文档中 使用了当前登录用户的API token
    在这里插入图片描述
5.2.3 表(Measurement)结构说明

在influx中,无需使用DDL语句进行建表操作,只需要使用insert语句进行插入数据,即可自动创建表
插入语句格式:

  1. Tag与Tag之间用逗号分隔;Field与Field之间用逗号分隔
  2. Tag与Field之间用空格分隔
  3. Tag都是string类型,不需要引号将value包裹
  4. Field如果是string类型,需要加引号
  5. 如果是数字的场合,int型的数字需要在数字后面加i作为标识,无i做标识时,则认为是Float类型,需要在代码转换成Float类型,否则再次插入时,会提示类型不正确
类型 格式
单一Tag,单一Field insert 表名(Measurement),Tag1={value},Tag2={value}英文空格Field1={value}
单一Tag,多个Field insert 表名(Measurement),Tag1={value}英文空格Field1={value},Field2={value}
多个Tag,单一Field insert 表名(Measurement),Tag1={value},Tag2={value}英文空格Field1={value}
多个Tag,多个Field insert 表名(Measurement),Tag1={value},Tag2={value}英文空格Field1={value},Field2={value}

例如在user_account表中,创建联合索引为 用户名=zhangsan,项目组=develop 用户属性 年龄=23,级别=L3的数据

insert user_account,user_name=zhangsan,user_team=develop age=23,level="L3"
5.2.4 代码示例,以WriteApiBlocking的两种方式插入到表(Measurement)中
import java.time.Instant;
import java.util.HashMap;
import java.util.Map;

import com.influxdb.client.InfluxDBClient;
import com.influxdb.client.InfluxDBClientFactory;
import com.influxdb.client.WriteApiBlocking;
import com.influxdb.client.domain.WritePrecision;
import com.influxdb.client.write.Point;

public class InfluxDB2Example {

	public static void main(final String[] args) {
		//从InfluxDB UI画面中可以获取或创建token
		String token_key = "xxxxxxxx";
		//数据库桶名
		String bucket = "test_db";
		//数据库组织名
		String org = "dev_org";

		//通过数据库地址获取数据库客户端对象
		InfluxDBClient client = InfluxDBClientFactory.create("http://192.168.0.201:8086", token_key .toCharArray());
		
		//插入DB方式一
		String data = "user_account,user_name=zhangsan age=23,user_level=\"L3\"";

		WriteApiBlocking writeApi = client.getWriteApiBlocking();
		writeApi.writeRecord(bucket, org, WritePrecision.NS, data);
		
		//插入DB方式二, 多Filed同时插入
		Map<String, Object> fieldMap = new HashMap<>();
		fieldMap.put("age", Float.valueOf(24));
		fieldMap.put("user_level", "L3");
		Point point = Point.measurement("user_account").addTag("user_name", "lisi").addTag("user_team", "develop").addFields(fieldMap)
				.time(Instant.now(), WritePrecision.NS);

		WriteApiBlocking writeApi2 = client.getWriteApiBlocking();
		writeApi2.writePoint(bucket, org, point);
		
		//关闭数据库链接
		client.close();
	}
}
5.2.5 代码示例,查询数据
import java.util.List;

import com.influxdb.client.InfluxDBClient;
import com.influxdb.client.InfluxDBClientFactory;
import com.influxdb.query.FluxRecord;
import com.influxdb.query.FluxTable;

public class InfluxDB2Example {

	public static void main(final String[] args) {
		//从InfluxDB UI画面中可以获取或创建token
		String token_key = "xxxxxxxx";
		//数据库桶名
		String bucket = "test_db";
		//数据库组织名
		String org = "dev_org";

		//通过数据库地址获取数据库客户端对象
		InfluxDBClient client = InfluxDBClientFactory.create("http://192.168.0.201:8086", token_key .toCharArray());
		
		String query = "from(bucket: \"test_db\") |> range(start: 2022-01-01, stop: 2023-01-01)|> filter(fn: (r) => r[\"_measurement\"] == \"user_account\")|> yield(name: \"mean\")";
		List<FluxTable> tables = client.getQueryApi().query(query, org);

		for (FluxTable table : tables) {
		  for (FluxRecord record : table.getRecords()) {
		    System.out.println("Field:" + record.getField() + " Value:" + record.getValue()+ " Time: "+record.getTime());
		  }
		}
		client.close();	
	}
}

查询结果:
在这里插入图片描述

5.2.6 UI画面查询

1.再左侧功能列表中 选择【Data Explorer】
2.在条件中,选择数据库,表(Measurement)名,Tag/字段名称进行过滤
3.点击【Script Editor】按钮,修改脚本,注释掉: |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)

from(bucket: "test_db")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r["_measurement"] == "user_account")
  |> filter(fn: (r) => r["_field"] == "age" or r["_field"] == "user_level")
  //|> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
  |> yield(name: "mean")

4.点击【SUBMIT】进行查询
在这里插入图片描述
在这里插入图片描述

6.安装telegraf 插件进行服务器监听

telegraf 插件属于Agant,通过配置 用来收集目标服务器或者软件服务的状态,并且发送给InfluxDB服务器,可配合grafana 进行UI状态监视

6.1 在目标服务器进行安装telegraf

6.1.1 导入influxdata.repo
cat <<EOF | sudo tee /etc/yum.repos.d/influxdata.repo
[influxdata]
name = InfluxData Repository - Stable
baseurl = https://repos.influxdata.com/stable/\$basearch/main
enabled = 1
gpgcheck = 1
gpgkey = https://repos.influxdata.com/influxdb.key
EOF

sudo yum install telegraf
6.1.2 安装telegraf插件
sudo yum install telegraf

在这里插入图片描述在这里插入图片描述

6.3 监视第三方CentOS服务器的系统状态

6.3.1 打开Telegraf数据导入插件

1.左侧列表中 选择【Load Data】
2.在【Load Data】中,选择【Telegraf】

在这里插入图片描述

6.3.2 创建新配置

1.点击【CREATE CONFIGURATION】
2.勾选【System】,点击【CONTINUE】
在这里插入图片描述
3.输入自定义的配置名称及描述
4.点击【CREATE AND VERIFY】
在这里插入图片描述
5.创建成功后,可以获取API token及启动Telegraf命令
在这里插入图片描述
6.在目标服务器 输入API token 并且启动telegraf

配置token
export INFLUX_TOKEN=-k5sGLzxO1K0cnVSsiAFUpULY2dm4AW7cfcVgpgWm4RkYf1zdVoTqv-bmzOgk4Uj7K1N_QdGyOVhciCNBy3c7A==
启动telegraf
telegraf --config http://192.168.0.201:8086/api/v2/telegrafs/0a1201a563acd000

在这里插入图片描述

6.3.3 查看目标服务器的数据收集结果

1.在左侧功能列表中,点击【Dashboards】
2.在右侧Dashboards,查看最新创建的System,并且点击该【System】名称,进行重命名,确保可以识别目标服务器
在这里插入图片描述例如:修改为server_202
在这里插入图片描述
3.点击目标服务器,查看当前状态
在这里插入图片描述

总结

以上为InfluxDB(2.4)版本结合Cenos7.9服务器进行简单的文档配置说明。
如需深入了解InfluxDB ,请参考官方文档 https://docs.influxdata.com/influxdb/v2.4/

Logo

一站式 AI 云服务平台

更多推荐