博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
springboot2增加diskspace指标
阅读量:5838 次
发布时间:2019-06-18

本文共 4780 字,大约阅读时间需要 15 分钟。

  hot3.png

本文主要研究下如何在springboot2新增一个diskspace指标

disk health indicator

DiskSpaceHealthIndicatorProperties

spring-boot-actuator-autoconfigure-2.0.1.RELEASE-sources.jar!/org/springframework/boot/actuate/autoconfigure/system/DiskSpaceHealthIndicatorProperties.java

/** * External configuration properties for {@link DiskSpaceHealthIndicator}. * * @author Andy Wilkinson * @since 1.2.0 */@ConfigurationProperties(prefix = "management.health.diskspace")public class DiskSpaceHealthIndicatorProperties {	private static final int MEGABYTES = 1024 * 1024;	private static final int DEFAULT_THRESHOLD = 10 * MEGABYTES;	/**	 * Path used to compute the available disk space.	 */	private File path = new File(".");	/**	 * Minimum disk space, in bytes, that should be available.	 */	private long threshold = DEFAULT_THRESHOLD;	public File getPath() {		return this.path;	}	public void setPath(File path) {		Assert.isTrue(path.exists(), () -> "Path '" + path + "' does not exist");		Assert.isTrue(path.canRead(), () -> "Path '" + path + "' cannot be read");		this.path = path;	}	public long getThreshold() {		return this.threshold;	}	public void setThreshold(long threshold) {		Assert.isTrue(threshold >= 0, "threshold must be greater than 0");		this.threshold = threshold;	}}

DiskSpaceHealthIndicator

spring-boot-actuator-2.0.1.RELEASE-sources.jar!/org/springframework/boot/actuate/system/DiskSpaceHealthIndicator.java

/** * A {@link HealthIndicator} that checks available disk space and reports a status of * {@link Status#DOWN} when it drops below a configurable threshold. * * @author Mattias Severson * @author Andy Wilkinson * @since 2.0.0 */public class DiskSpaceHealthIndicator extends AbstractHealthIndicator {	private static final Log logger = LogFactory.getLog(DiskSpaceHealthIndicator.class);	private final File path;	private final long threshold;	/**	 * Create a new {@code DiskSpaceHealthIndicator} instance.	 * @param path the Path used to compute the available disk space	 * @param threshold the minimum disk space that should be available (in bytes)	 */	public DiskSpaceHealthIndicator(File path, long threshold) {		super("DiskSpace health check failed");		this.path = path;		this.threshold = threshold;	}	@Override	protected void doHealthCheck(Health.Builder builder) throws Exception {		long diskFreeInBytes = this.path.getUsableSpace();		if (diskFreeInBytes >= this.threshold) {			builder.up();		}		else {			logger.warn(String.format(					"Free disk space below threshold. "							+ "Available: %d bytes (threshold: %d bytes)",					diskFreeInBytes, this.threshold));			builder.down();		}		builder.withDetail("total", this.path.getTotalSpace())				.withDetail("free", diskFreeInBytes)				.withDetail("threshold", this.threshold);	}}

metrics

这里我们把disk的health indicator转为metrics

@Componentpublic class DiskMetrics implements MeterBinder {    private File rootFilePath;    public DiskMetrics() {        this.rootFilePath = new File(".");    }    @Override    public void bindTo(MeterRegistry registry) {        Gauge.builder("diskspace.total", rootFilePath, c -> c.getTotalSpace())                .register(registry);        Gauge.builder("diskspace.free", rootFilePath, c -> c.getFreeSpace())                .register(registry);        Gauge.builder("diskspace.usage", rootFilePath, c -> {            long totalDiskSpace = rootFilePath.getTotalSpace();            if (totalDiskSpace == 0) {                return 0.0;            }            long usedDiskSpace = totalDiskSpace - rootFilePath.getFreeSpace();            return Double.valueOf(usedDiskSpace) / totalDiskSpace * 100;        })                .register(registry);    }}

输出

  • /actuator/metrics
{  "names": [    "jvm.memory.committed",    "jvm.buffer.memory.used",    "jvm.gc.memory.allocated",    "jvm.memory.used",    "jvm.gc.max.data.size",    "logback.events",    "system.cpu.count",    "jvm.memory.max",    "jvm.buffer.total.capacity",    "jvm.buffer.count",    "process.files.max",    "jvm.threads.daemon",    "process.start.time",    "diskspace.usage",    "jvm.gc.live.data.size",    "process.files.open",    "process.cpu.usage",    "process.uptime",    "system.load.average.1m",    "statsd.queue.size",    "statsd.queue.capacity",    "http.server.requests",    "system.cpu.usage",    "diskspace.free",    "jvm.threads.live",    "jvm.classes.loaded",    "jvm.classes.unloaded",    "jvm.threads.peak",    "jvm.gc.pause",    "jvm.gc.memory.promoted",    "diskspace.total"  ]}
  • /actuator/metrics/diskspace.usage
{  "name": "diskspace.usage",  "measurements": [    {      "statistic": "VALUE",      "value": 96.99886102691765    }  ],  "availableTags": []}

小结

springboot2默认把diskspace作为一个healthIndicator,其阈值默认为10M。这里通过自定义micrometer的metrics,新增diskspace相关指标,这样就可以统一通过metrcis进行监控报警。

doc

转载于:https://my.oschina.net/go4it/blog/1795832

你可能感兴趣的文章
终端安全求生指南(五)-——日志管理
查看>>
Nginx 使用 openssl 的自签名证书
查看>>
创业维艰、守成不易
查看>>
PHP环境安装套件:快速安装LAMP环境
查看>>
CSS3
查看>>
ul下的li浮动,如何是ul有li的高度
查看>>
C++ primer plus
查看>>
python mysqlDB
查看>>
UVALive 3942 Remember the Word Tire+DP
查看>>
从微软的DBML文件中我们能学到什么(它告诉了我们什么是微软的重中之重)~目录...
查看>>
被需求搞的一塌糊涂,怎么办?
查看>>
c_数据结构_队的实现
查看>>
jquery 选择器总结
查看>>
Qt设置背景图片
查看>>
【阿里云文档】常用文档整理
查看>>
java中的Volatile关键字
查看>>
前端自定义图标
查看>>
实验二
查看>>
独立开发一个云(PaaS)的核心要素, Go, Go, Go!!!
查看>>
网站文章如何能自动判定是抄袭?一种算法和实践架构剖析
查看>>