通过java和influxdb数据库监测Linux系统Cpu使用情况的代码
时间: 2024-02-05 21:13:28 浏览: 71
下面是一个简单的Java程序,用于监测Linux系统CPU使用情况,并将数据存储在InfluxDB数据库中。
```java
import org.influxdb.InfluxDB;
import org.influxdb.InfluxDBFactory;
import org.influxdb.dto.Point;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
public class CpuMonitor {
public static void main(String[] args) throws Exception {
// InfluxDB连接参数
String serverURL = "http://localhost:8086";
String username = "root";
String password = "root";
String dbName = "testdb";
// 连接InfluxDB数据库
InfluxDB influxDB = InfluxDBFactory.connect(serverURL, username, password);
influxDB.createDatabase(dbName);
// 读取/proc/stat文件
BufferedReader reader = new BufferedReader(new FileReader("/proc/stat"));
// 获取CPU使用情况
String line;
long[] prevCpu = new long[7];
long[] currCpu = new long[7];
while ((line = reader.readLine()) != null) {
if (line.startsWith("cpu ")) {
String[] fields = line.split("\\s+");
for (int i = 1; i <= 7; i++) {
currCpu[i - 1] = Long.parseLong(fields[i]);
}
break;
}
}
// 循环监测CPU使用情况并将数据存储到InfluxDB数据库中
while (true) {
// 读取/proc/stat文件
reader = new BufferedReader(new FileReader("/proc/stat"));
// 获取CPU使用情况
while ((line = reader.readLine()) != null) {
if (line.startsWith("cpu ")) {
String[] fields = line.split("\\s+");
for (int i = 1; i <= 7; i++) {
prevCpu[i - 1] = currCpu[i - 1];
currCpu[i - 1] = Long.parseLong(fields[i]);
}
break;
}
}
// 计算CPU使用率
long totalCpuTime = 0;
for (int i = 0; i < 7; i++) {
totalCpuTime += currCpu[i] - prevCpu[i];
}
long idleCpuTime = currCpu[3] - prevCpu[3];
double cpuUsage = (totalCpuTime - idleCpuTime) * 100.0 / totalCpuTime;
// 将数据存储到InfluxDB数据库中
Point point = Point.measurement("cpu_usage")
.time(System.currentTimeMillis(), TimeUnit.MILLISECONDS)
.addField("value", cpuUsage)
.build();
influxDB.write(dbName, "default", point);
// 休眠1秒钟
Thread.sleep(1000);
}
}
}
```
需要注意的是,该程序需要依赖InfluxDB Java客户端库,可以通过Maven或者手动下载的方式添加到项目中。此外,需要在Linux系统中运行该程序,并且需要具有读取/proc/stat文件的权限。
阅读全文