未验证 提交 6f7751bc 编写于 作者: X Xiangpeng Hu 提交者: GitHub

[IOTDB-6082] Improve disk space metrics (#10925)

上级 332521a3
...@@ -274,7 +274,8 @@ public class ConfigNode implements ConfigNodeMBean { ...@@ -274,7 +274,8 @@ public class ConfigNode implements ConfigNodeMBean {
ArrayList<String> diskDirs = new ArrayList<>(); ArrayList<String> diskDirs = new ArrayList<>();
diskDirs.add(CONF.getSystemDir()); diskDirs.add(CONF.getSystemDir());
diskDirs.add(CONF.getConsensusDir()); diskDirs.add(CONF.getConsensusDir());
MetricService.getInstance().addMetricSet(new SystemMetrics(diskDirs)); SystemMetrics.getInstance().setDiskDirs(diskDirs);
MetricService.getInstance().addMetricSet(SystemMetrics.getInstance());
} }
private void initCpuMetrics() { private void initCpuMetrics() {
......
...@@ -20,6 +20,7 @@ package org.apache.iotdb.db.conf; ...@@ -20,6 +20,7 @@ package org.apache.iotdb.db.conf;
import org.apache.iotdb.common.rpc.thrift.TEndPoint; import org.apache.iotdb.common.rpc.thrift.TEndPoint;
import org.apache.iotdb.commons.client.property.ClientPoolProperty.DefaultProperty; import org.apache.iotdb.commons.client.property.ClientPoolProperty.DefaultProperty;
import org.apache.iotdb.commons.conf.CommonDescriptor;
import org.apache.iotdb.commons.conf.IoTDBConstant; import org.apache.iotdb.commons.conf.IoTDBConstant;
import org.apache.iotdb.commons.utils.FileUtils; import org.apache.iotdb.commons.utils.FileUtils;
import org.apache.iotdb.commons.utils.TestOnly; import org.apache.iotdb.commons.utils.TestOnly;
...@@ -39,6 +40,7 @@ import org.apache.iotdb.db.storageengine.dataregion.compaction.selector.constant ...@@ -39,6 +40,7 @@ import org.apache.iotdb.db.storageengine.dataregion.compaction.selector.constant
import org.apache.iotdb.db.storageengine.dataregion.tsfile.timeindex.TimeIndexLevel; import org.apache.iotdb.db.storageengine.dataregion.tsfile.timeindex.TimeIndexLevel;
import org.apache.iotdb.db.storageengine.dataregion.wal.utils.WALMode; import org.apache.iotdb.db.storageengine.dataregion.wal.utils.WALMode;
import org.apache.iotdb.db.utils.datastructure.TVListSortAlgorithm; import org.apache.iotdb.db.utils.datastructure.TVListSortAlgorithm;
import org.apache.iotdb.metrics.metricsets.system.SystemMetrics;
import org.apache.iotdb.rpc.RpcTransportFactory; import org.apache.iotdb.rpc.RpcTransportFactory;
import org.apache.iotdb.rpc.RpcUtils; import org.apache.iotdb.rpc.RpcUtils;
import org.apache.iotdb.tsfile.common.conf.TSFileDescriptor; import org.apache.iotdb.tsfile.common.conf.TSFileDescriptor;
...@@ -54,6 +56,7 @@ import org.slf4j.LoggerFactory; ...@@ -54,6 +56,7 @@ import org.slf4j.LoggerFactory;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.HashSet; import java.util.HashSet;
...@@ -1256,6 +1259,18 @@ public class IoTDBConfig { ...@@ -1256,6 +1259,18 @@ public class IoTDBConfig {
} }
} }
this.tierDataDirs = tierDataDirs; this.tierDataDirs = tierDataDirs;
reloadSystemMetrics();
}
void reloadSystemMetrics() {
ArrayList<String> diskDirs = new ArrayList<>();
diskDirs.add(IoTDBDescriptor.getInstance().getConfig().getSystemDir());
diskDirs.add(IoTDBDescriptor.getInstance().getConfig().getConsensusDir());
diskDirs.addAll(Arrays.asList(IoTDBDescriptor.getInstance().getConfig().getDataDirs()));
diskDirs.addAll(Arrays.asList(CommonDescriptor.getInstance().getConfig().getWalDirs()));
diskDirs.add(CommonDescriptor.getInstance().getConfig().getSyncDir());
diskDirs.add(IoTDBDescriptor.getInstance().getConfig().getSortTmpDir());
SystemMetrics.getInstance().setDiskDirs(diskDirs);
} }
// if IOTDB_DATA_HOME is not set, then we keep dataHomeDir prefix being the same with IOTDB_HOME // if IOTDB_DATA_HOME is not set, then we keep dataHomeDir prefix being the same with IOTDB_HOME
......
...@@ -91,7 +91,8 @@ public class DataNodeMetricsHelper { ...@@ -91,7 +91,8 @@ public class DataNodeMetricsHelper {
diskDirs.addAll(Arrays.asList(CommonDescriptor.getInstance().getConfig().getWalDirs())); diskDirs.addAll(Arrays.asList(CommonDescriptor.getInstance().getConfig().getWalDirs()));
diskDirs.add(CommonDescriptor.getInstance().getConfig().getSyncDir()); diskDirs.add(CommonDescriptor.getInstance().getConfig().getSyncDir());
diskDirs.add(IoTDBDescriptor.getInstance().getConfig().getSortTmpDir()); diskDirs.add(IoTDBDescriptor.getInstance().getConfig().getSortTmpDir());
MetricService.getInstance().addMetricSet(new SystemMetrics(diskDirs)); SystemMetrics.getInstance().setDiskDirs(diskDirs);
MetricService.getInstance().addMetricSet(SystemMetrics.getInstance());
} }
private static void initCpuMetrics() { private static void initCpuMetrics() {
......
...@@ -37,22 +37,49 @@ import java.nio.file.FileStore; ...@@ -37,22 +37,49 @@ import java.nio.file.FileStore;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Path; import java.nio.file.Path;
import java.nio.file.Paths; import java.nio.file.Paths;
import java.util.ArrayList; import java.util.Collections;
import java.util.HashSet; import java.util.HashSet;
import java.util.List;
import java.util.Set; import java.util.Set;
import java.util.concurrent.atomic.AtomicReference;
public class SystemMetrics implements IMetricSet { public class SystemMetrics implements IMetricSet {
private static final Logger logger = LoggerFactory.getLogger(SystemMetrics.class); private static final Logger logger = LoggerFactory.getLogger(SystemMetrics.class);
private static final String SYSTEM = "system"; private static final String SYSTEM = "system";
private final com.sun.management.OperatingSystemMXBean osMxBean; private final com.sun.management.OperatingSystemMXBean osMxBean;
private final Set<FileStore> fileStores = new HashSet<>(); private final Set<FileStore> fileStores = new HashSet<>();
private final ArrayList<String> diskDirs; private final AtomicReference<List<String>> diskDirs =
new AtomicReference<>(Collections.emptyList());
public SystemMetrics(ArrayList<String> diskDirs) { public SystemMetrics() {
this.diskDirs = diskDirs;
this.osMxBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); this.osMxBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();
} }
public void setDiskDirs(List<String> diskDirs) {
this.diskDirs.set(diskDirs);
for (String diskDir : this.diskDirs.get()) {
if (!FSUtils.isLocal(diskDir)) {
continue;
}
Path path = Paths.get(diskDir);
FileStore fileStore = null;
try {
fileStore = Files.getFileStore(path);
} catch (IOException e) {
// check parent if path is not exists
path = path.getParent();
try {
fileStore = Files.getFileStore(path);
} catch (IOException innerException) {
logger.error("Failed to get storage path of {}, because", diskDir, innerException);
}
}
if (null != fileStore) {
fileStores.add(fileStore);
}
}
}
@Override @Override
public void bindTo(AbstractMetricService metricService) { public void bindTo(AbstractMetricService metricService) {
collectSystemCpuInfo(metricService); collectSystemCpuInfo(metricService);
...@@ -163,28 +190,6 @@ public class SystemMetrics implements IMetricSet { ...@@ -163,28 +190,6 @@ public class SystemMetrics implements IMetricSet {
} }
private void collectSystemDiskInfo(AbstractMetricService metricService) { private void collectSystemDiskInfo(AbstractMetricService metricService) {
for (String diskDir : diskDirs) {
if (!FSUtils.isLocal(diskDir)) {
continue;
}
Path path = Paths.get(diskDir);
FileStore fileStore = null;
try {
fileStore = Files.getFileStore(path);
} catch (IOException e) {
// check parent if path is not exists
path = path.getParent();
try {
fileStore = Files.getFileStore(path);
} catch (IOException innerException) {
logger.error("Failed to get storage path of {}, because", diskDir, innerException);
}
}
if (null != fileStore) {
fileStores.add(fileStore);
}
}
metricService.createAutoGauge( metricService.createAutoGauge(
SystemMetric.SYS_DISK_TOTAL_SPACE.toString(), SystemMetric.SYS_DISK_TOTAL_SPACE.toString(),
MetricLevel.CORE, MetricLevel.CORE,
...@@ -213,7 +218,7 @@ public class SystemMetrics implements IMetricSet { ...@@ -213,7 +218,7 @@ public class SystemMetrics implements IMetricSet {
SystemTag.NAME.toString(), SystemTag.NAME.toString(),
SYSTEM); SYSTEM);
diskDirs.clear(); diskDirs.get().clear();
fileStores.clear(); fileStores.clear();
} }
...@@ -240,4 +245,14 @@ public class SystemMetrics implements IMetricSet { ...@@ -240,4 +245,14 @@ public class SystemMetrics implements IMetricSet {
} }
return sysFreeSpace; return sysFreeSpace;
} }
public static SystemMetrics getInstance() {
return SystemMetricsHolder.INSTANCE;
}
private static class SystemMetricsHolder {
private static final SystemMetrics INSTANCE = new SystemMetrics();
private SystemMetricsHolder() {}
}
} }
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册