java metrics 怎么样,Java metrics
项目中有对程序的一个健康检查,以及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等。)
java metrics 怎么样,Java metrics相关推荐
- java度量页面_JAVA Metrics 度量工具使用介绍1
Metrics是一个给JAVA提供度量工具的包,在JAVA代码中嵌入Metrics代码,可以方便的对业务代码的各个指标进行监控,同一时候,Metrics可以非常好的跟Ganlia.Graphite结合 ...
- java系统监控_Java Metrics系统性能监控工具
Metrics是一个Java库,可以对系统进行监控,统计一些系统的性能指标. 比如一个系统后台服务,我们可能需要了解一下下面的一些情况: 1.每秒钟的请求数是多少(TPS)? 2.平均每个请求处理的时 ...
- 分布式应用,response导出error on submit request on future invoke、java.lang.OutOfMemoryError: Java heap space
背景 HSF 分布式框架 ,基于EasyExcel 实现excel导出 . 控制层, GET请求 , 传递 HttpServletRequest 和 HttpServletRespose 到,业务中台 ...
- JAVA语言规范 JAVA SE 8 - 类型、值和变量
JAVA语言规范 JAVA SE 8 - 类型.值和变量 类型和值的种类 简单类型和值 整数类型和值 整数操作 浮点数类型.格式和值 浮点数操作 boolean类型和布尔值 引用类型和值 对象 Obj ...
- HA historyserver错误日志java.lang.RuntimeException: java.io.IOException: Couldn‘t create proxy provid nu
错误日志 2021-11-04 21:27:35,794 INFO org.apache.hadoop.service.AbstractService: Service org.apache.hado ...
- 必学Java类库/常用Java类库大全(awesome-java)
完整资源地址:http://www.21doc.net/java/awesomejava 对象映射 简化对象映射的框架. Dozer - 使用注释,API或XML配置将数据从一个对象复制到另一个对象的 ...
- java 读取txt,java读取大文件
java 读取txt,java读取大文件 package com.bbcmart.util; import java.io.File; import java.io.RandomAccessFile; ...
- JAVA基础(JAVA 执行环境) 第一天
JAVA程序有3中执行环境. (1)能够单独运行的程序,称为Java Application(Java应用程序). (2)在Internet浏览器中运行的程序,称为 Java Applet(JAVA小 ...
- java.utilDate和java.sql.Date
java.utilDate和java.sql.Date由广州疯狂软件教育java培训分享: java程序中的时间类型有java.util.Date和java.sql.Date两种.两者之间的关系和转化 ...
- java 终极超类,Java问答:终极父类(3),java问答
Java问答:终极父类(3),java问答Java问答:终极父类(上) Java问答:终极父类(下) Java问答:终极父类(2)-上篇 Java问答:终极父类(2)-下篇 在之前关于 Object ...
最新文章
- golang中的反射
- HTAP数据库 PostgreSQL 场景与性能测试之 28 - (OLTP) 高并发点更新
- 平台型OA=高性价比OA?
- ROC曲线 vs Precision-Recall曲线
- python打包成exe_【Python】使用pyinstaller打包成exe文件时可以显示图片的方法
- pycharm 安装与激活
- php代码样式,PHP代码样式
- linxu安装OSX
- Delphi XE5实现减少编译出来的程序体积
- 你可能小赚,但苹果永远不亏!华强北老板说一台新iPhone只赚10块钱?
- mate30后续用鸿蒙系统,mate30可以升级鸿蒙不?升级后还能退回原系统吗?
- Google 要在游戏世界里训练 AI 了!
- blender 用户界面基本构成
- 大数据之Python数据分析 实训 航空公司客户价值分析之二、使用 K-Means 算法进行客户分群
- 201903-2 二十四点
- Google Play 政策更新重点回顾 (上) | 2022 年 4 月
- Python 搭建 AI 健身评分系统
- 拼多多商品链接怎么打开链接下架怎么回事拼多多商品竞价怎么玩需要哪些流程
- Win10各版本区别
- 智慧交通怎样利用科技打造一个“最强大脑”
热门文章
- module_platform_driver 与 module_init
- MATLAB有几个英文单词构成,有关英语词汇构成,看这一篇就够了!
- 流程图软件 drawio 快捷键 使用技巧
- OpenJudge 1.7.13
- sae wpa3加密方式_WPA3-SAE 身份验证
- python报错:ValueError: not enough values to unpack (expected 6, got 3)
- 基于javaweb+springboot的健身房管理系统(Java+ssm+springboot)
- 今晚,为阿里巴巴打call
- 唯品会实现电商平台从业务到架构的治理体系
- linux 上安装portainer.io