本文主要是记录给自己以后看的。因为一路做过来有很多坑。所以可能记录的不完整。但大体上思路是这样。
因为学业繁忙,以后有机会再写详细点。
第一部分:安装InfluxDB数据库
InfluxDB数据库是一种时序数据库。针对它的一些优缺点,这里不一一展开,不然能写几万字。针对具体用法以后在写。
我们从网上下载InfluxDB的压缩包后,直接解压缩,配置下文件就可使用了。很简单。
我们把它解压下来就可以了,我直接放到了C盘根目录下。
下面是InfluxDB的文件
其实InfluxDB很简单,跟redis类似,也是解压并配置下文件就可使用。下面我们简单配置下文件。
打开 influxdb.conf 后,根据这位大神的解释来看你是否需要打开的一些操作。
我当时就是参考这个的。这里不详细了,大同小异的东西。需要用到哪个,把前面的#去掉就行。
默认情况下监听端口是8088
我们用cmd打开influxd.exe ,看到下面的图,就意味着成功开启InfluxDB了, 下面就可以使用客户端influx.exe来自己使用cmd操作InfluxDB数据库了。
这边我贴个代码吧。也是参考别人的。
public class InfluxDBConnection {
// 用户名
private String username;
// 密码
private String password;
// 连接地址
private String openurl;
// 数据库
private String database;
// 保留策略
private String retentionPolicy;
private InfluxDB influxDB;
public InfluxDBConnection(String username, String password, String openurl, String database,
String retentionPolicy) {
this.username = username;
this.password = password;
this.openurl = openurl;
this.database = database;
this.retentionPolicy = retentionPolicy == null || retentionPolicy.equals("") ? "autogen" : retentionPolicy;
influxDbBuild();
}
/**
* 创建数据库
*
* @param dbName
*/
@SuppressWarnings("deprecation")
public void createDB(String dbName) {
influxDB.createDatabase(dbName);
}
/**
* 删除数据库
*
* @param dbName
*/
@SuppressWarnings("deprecation")
public void deleteDB(String dbName) {
influxDB.deleteDatabase(dbName);
}
/**
* 测试连接是否正常
*
* @return true 正常
*/
public boolean ping() {
boolean isConnected = false;
Pong pong;
try {
pong = influxDB.ping();
if (pong != null) {
isConnected = true;
}
} catch (Exception e) {
e.printStackTrace();
}
return isConnected;
}
/**
* 连接时序数据库 ,若不存在则创建
*
* @return
*/
public InfluxDB influxDbBuild() {
if (influxDB == null) {
influxDB = InfluxDBFactory.connect(openurl, username, password);
}
try {
// if (!influxDB.databaseExists(database)) {
// influxDB.createDatabase(database);
// }
} catch (Exception e) {
// 该数据库可能设置动态代理,不支持创建数据库
// e.printStackTrace();
} finally {
influxDB.setRetentionPolicy(retentionPolicy);
}
influxDB.setLogLevel(InfluxDB.LogLevel.NONE);
return influxDB;
}
/**
* 创建自定义保留策略
*
* @param policyName
* 策略名
* @param duration
* 保存天数
* @param replication
* 保存副本数量
* @param isDefault
* 是否设为默认保留策略
*/
public void createRetentionPolicy(String policyName, String duration, int replication, Boolean isDefault) {
String sql = String.format("CREATE RETENTION POLICY \"%s\" ON \"%s\" DURATION %s REPLICATION %s ", policyName,
database, duration, replication);
if (isDefault) {
sql = sql + " DEFAULT";
}
this.query(sql);
}
/**
* 创建默认的保留策略
*
* @param 策略名:default,保存天数:30天,保存副本数量:1
* 设为默认保留策略
*/
public void createDefaultRetentionPolicy() {
String command = String.format("CREATE RETENTION POLICY \"%s\" ON \"%s\" DURATION %s REPLICATION %s DEFAULT",
"default", database, "30d", 1);
this.query(command);
}
/**
* 查询
*
* @param command
* 查询语句
* @return
*/
public QueryResult query(String command) {
return influxDB.query(new Query(command, database));
}
/**
* 插入
*
* @param measurement
* 表
* @param tags
* 标签
* @param fields
* 字段
*/
public void insert(String measurement, Map<String, String> tags, Map<String, Object> fields, long time,
TimeUnit timeUnit) {
Builder builder = Point.measurement(measurement);
builder.tag(tags);
builder.fields(fields);
if (0 != time) {
builder.time(time, timeUnit);
}
influxDB.write(database, retentionPolicy, builder.build());
}
/**
* 批量写入测点
*
* @param batchPoints
*/
public void batchInsert(BatchPoints batchPoints) {
influxDB.write(batchPoints);
// influxDB.enableGzip();
// influxDB.enableBatch(2000,100,TimeUnit.MILLISECONDS);
// influxDB.disableGzip();
// influxDB.disableBatch();
}
/**
* 批量写入数据
*
* @param database
* 数据库
* @param retentionPolicy
* 保存策略
* @param consistency
* 一致性
* @param records
* 要保存的数据(调用BatchPoints.lineProtocol()可得到一条record)
*/
public void batchInsert(final String database, final String retentionPolicy, final ConsistencyLevel consistency,
final List<String> records) {
influxDB.write(database, retentionPolicy, consistency, records);
}
/**
* 删除
*
* @param command
* 删除语句
* @return 返回错误信息
*/
public String deleteMeasurementData(String command) {
QueryResult result = influxDB.query(new Query(command, database));
return result.getError();
}
/**
* 关闭数据库
*/
public void close() {
influxDB.close();
}
/**
* 构建Point
*
* @param measurement
* @param time
* @param fields
* @return
*/
public Point pointBuilder(String measurement, long time, Map<String, String> tags, Map<String, Object> fields) {
Point point = Point.measurement(measurement).time(time, TimeUnit.MILLISECONDS).tag(tags).fields(fields).build();
return point;
}
}
下面的代码是我自己的一个测试用例,在后面的Grafana中有用到。
这里注意下,InfluxDB给用户的默认账号密码都是admin,可以使用命令看下。具体啥命令我忘记了。。。。
简单介绍下下面的几个字段吧
test: 对应InfluxDB 中的数据库名
url:表示的是一个索引
valueurl:表示的是记录的值
上面两个就是以键值对的形式来存储的。具体怎么回事,使用客户端插入几条数据,再查询一下就知道了。
spider:是我的表名(measurements)
public class InfluxDBUtil {
private InfluxDBConnection dbConnection = new InfluxDBConnection("admin", "admin", "http://127.0.0.1:8086", "test",
null);
@Test // 插入到监控的数据库 spider中
public void InsertSpider() throws Exception {
Random random = new Random();
int i = Integer.MAX_VALUE;
while (i > 0) {
Thread.sleep(2000);
Map<String, String> tags=new HashMap<String, String>();
tags.put("url","cc");
Map<String, Object> fields=new HashMap<String, Object>();
fields.put("valueurl", random.nextInt(100)+1);
dbConnection.insert("spider", tags, fields, System.currentTimeMillis(), TimeUnit.MILLISECONDS);
i--;
System.out.println(i);
}
System.out.println("插入成功 ");
}
}
好了,上面就是InfluxDB的一个非常简要的操作,写的不具体,如果看不明白,或者有需要帮助的在评论中留言,我看到了肯定会给回复了。
第二部分 Grafana的使用
Windows 下的 Grafana安装非常简单。只需要几步即可。可以看这里。
首先我们把Grafana下载下来,然后解压。我依然是解压在c盘根目录。
解压下如图所示:
接下来我们进到conf文件夹中可以看到:
如果你忽略官网建议的先复制一份defaults.ini,重命名再使用的话,它默认直接使用defaults.ini里面的配置 ,所以可以不用管。
接下来我们修改下sample.ini里面的内容。我的修改如下: 自己对着改改就好。
3000 就是Grafana使用的端口。
这里面的type无所谓的,可以不用改。
接下来比较重要,我们直接用 命令行打开Grafana的服务器会报错的。
这时我们需要一个工具来帮助我们把Grafana的服务添加到系统服务中去,就是NSSM
先下载一个NSSM :下载地址
下载NSSM解压后,到win64下有一个nssm.exe文件。
使用cmd直接打开nssm.exe,它会让你填写路径,按要求填写完即可。
按要求把Grafana的对应目录填写上点击Install service即可。。。杀毒软件提示请允许。
出现下面这个提示,说明你的Grafana安装成功了!。
接下来,在cmd下(注意目录),执行nssm start grafana 命令即可。
我们可以看到Grafana已经成功添加到了系统服务里面去了。
后面浏览器直接输入:http://localhost:3000 就可以看到我下面的这个页面了!
账号,密码都是admin,输入 进去后
好了,成功了,下面简单讲下里面的使用。
首先我们得要添加一个数据库,让Grafana能够监听到数据库的端口
点进去,把箭头指向的字段都填起来即可。很简单。就是些数据库的url,数据库名称,自己数据库的账号,密码等 。
输入完会自己提示成功的!这一部完成以后接下去就是个绑定数据的问题了。
数据库设置好了以后自己选一个dashboard即可。然后就是填充数据库的数据了。。
当你用我前面第一部分的测试代码把数据插入到这里以后,这么设置:
要是看不懂的话直接点右边Toggle Edit Mode
把下面这串代码复制进来,即可,大同小异。
设置好了上面的步骤后,就可以看到下面这个监控图了。
当然有各种各样的dashboard,自己摸索就好。
最后,,,,,,我自己没弄明白怎么自动刷新,在下面的设置里,也写了5s更新,但没反应。。。。。希望有懂的朋友告诉我下,谢谢。。。。。。。
以上。