java metrics 怎么样,Java metrics
发布日期:2021-06-24 16:15:48 浏览次数:4 分类:技术文章

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

项目中有对程序的一个健康检查,以及TPS,QPS等。

文档

*Maven

io.dropwizard.metrics

metrics-core

3.1.0

io.dropwizard.metrics

metrics-servlets

3.1.0

com.codahale.metrics

metrics-healthchecks

3.0.1

com.github.davidb

metrics-influxdb

0.8.2

核心工具类

import com.codahale.metrics.*;

import com.ktyh.think.filter.prometheus.DropwizardExportSetUp;

import io.prometheus.client.CollectorRegistry;

import metrics_influxdb.InfluxdbReporter;

import metrics_influxdb.api.protocols.InfluxdbProtocols;

import org.slf4j.LoggerFactory;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

import java.util.concurrent.TimeUnit;

/**

* Created by zhangjianxin on 2016/11/3.

* metrics core config and static void formart

*/

public class MetricsCore {

/**

* 因数据存在争议,改为单例模式。

*/

private static final MetricRegistry METRIC_REGISTRY = new MetricRegistry();

private static String HOST_IP_ADDRESS;

private static String USERNAME;

private static String PASSWORD;

private static String DATABASE;

private static int PORT;

private static ServletRequest ARG_REQ;

private static ServletResponse ARG_RESP;

/**

* @author 内存使用程度MB

*/

Gauge getFreeMemory = () -> toMb(Runtime.getRuntime().freeMemory());

Gauge getTotalMemory = () -> toMb(Runtime.getRuntime().totalMemory());

public static synchronized MetricRegistry getInstance() {

return METRIC_REGISTRY;

}

public static ScheduledReporter influxdbReporter(MetricRegistry metrics) {

InitInfluxdbConfig();//初始化

return InfluxdbReporter.forRegistry(metrics)

.protocol(InfluxdbProtocols.http(HOST_IP_ADDRESS, PORT, USERNAME, PASSWORD, DATABASE))

.convertRatesTo(TimeUnit.SECONDS)

.convertDurationsTo(TimeUnit.MILLISECONDS)

.filter(MetricFilter.ALL)

.skipIdleMetrics(false)

.build();

}

public static void freeMemoryForJvm(MetricRegistry metrics) {

metrics.register(MetricRegistry.name("memory_free_mb_size"), new Gauge() {

@Override

public Long getValue() {

return toMb(Runtime.getRuntime().freeMemory());

}

});

}

public static void totalMemoryForJvm(MetricRegistry metrics) {

metrics.register(MetricRegistry.name("memory_total_mb_size"), new Gauge() {

@Override

public Long getValue() {

return toMb(Runtime.getRuntime().totalMemory());

}

});

}

//转换为MB

private static long toMb(long bytes) {

return bytes / 1024 / 1024;

}

/**

* 初始化时序数据库配置,可以通过反射进行更改

**/

public static void InitInfluxdbConfig() {

PORT = 8085;

HOST_IP_ADDRESS = "192.168.1.102";

USERNAME = "root";

PASSWORD = "root";

// DATABASE = "Metrics";

DATABASE = "_internal";

}

/**

* 传递初始化参数,用单例去回调

*

* @param "Servlet request and respone"

*/

public static void requestFullArgs(ServletRequest req, ServletResponse resp) {

ARG_REQ = req;

ARG_RESP = resp;

}

/**

* Reporter 数据的展现位置

*

* @param metrics

* @return

*/

public ConsoleReporter consoleReporter(MetricRegistry metrics) {

return ConsoleReporter.forRegistry(metrics)

.convertRatesTo(TimeUnit.SECONDS)

.convertDurationsTo(TimeUnit.MILLISECONDS)

.build();

}

public Slf4jReporter slf4jReporter(MetricRegistry metrics) {

return Slf4jReporter.forRegistry(metrics)

.outputTo(LoggerFactory.getLogger("demo.metrics"))

.convertRatesTo(TimeUnit.SECONDS)

.convertDurationsTo(TimeUnit.MILLISECONDS)

.build();

}

public JmxReporter jmxReporter(MetricRegistry metrics, String doMain) {

return JmxReporter.forRegistry(metrics)

.inDomain(doMain)

.convertRatesTo(TimeUnit.SECONDS)

.convertDurationsTo(TimeUnit.MILLISECONDS)

.filter(MetricFilter.ALL).build();

}

/**

* Meters会将最近1分钟,5分钟,15分钟的TPS(每秒处理的request数)给打印出来,还有所有时间的TPS。

*

* @param metrics

* @return

*/

public Meter requestMeter(MetricRegistry metrics, String arg) {

return metrics.meter(MetricRegistry.name("meter_event_" + arg));

}

/**

* 直方图

*

* @param metrics

* @return

*/

public Histogram responseSizes(MetricRegistry metrics, String arg) {

return metrics.histogram(MetricRegistry.name("size_histogram_" + arg));

}

/**

* 计数器

*

* @param metrics

* @return

*/

public Counter pendingJobs(MetricRegistry metrics, String arg) {

return metrics.counter(MetricRegistry.name("counter_Job_" + arg));

}

/**

* 计时器

*

* @param metrics

* @return

*/

public Timer responsesExecureTime(MetricRegistry metrics, String arg) {

return metrics.timer(MetricRegistry.name("response_timer_" + arg));

}

public Meter requestURLCount(MetricRegistry metrics, String arg) {

return metrics.meter(MetricRegistry.name("request_URL_" + arg));

}

}

##目前这种方式只是将数据推送到influxdb ,以及prometheus 。

1 数据采集

2 采集点(Filter,Controller,Service)

3 数据推送(influxdb,primetheus,jmx,console,cvs等。)

转载地址:https://blog.csdn.net/weixin_33758343/article/details/115780261 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:在vscode中php语言配置,Visual Studio Code C / C++ 语言环境配置
下一篇:ckeditor php图片上传,PHP:使用CKEditor和CKFinder上传图片,Flash,文件等

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2024年04月24日 20时59分03秒