博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Prometheus 普罗米修斯监控
阅读量:6906 次
发布时间:2019-06-27

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

周末在家无聊 看新闻 看到关于监控的东西 拿来玩玩 试一下 感觉还蛮有意思 特此记录一下

这里只介绍客户端的配置

 

1:首先在POM中添加依赖

io.prometheus
simpleclient
${prometheus.version}
io.prometheus
simpleclient_hotspot
${prometheus.version}
io.prometheus
simpleclient_servlet
${prometheus.version}
io.prometheus
simpleclient_pushgateway
${prometheus.version}
io.prometheus
simpleclient_spring_web
${prometheus.version}

2:在web.xml文件里添加servlet拦截器

PrometheusServlet
io.prometheus.client.exporter.MetricsServlet
PrometheusServlet
/metrics
web.xml

3:添加拦截器class

public class WebInterceptor extends HandlerInterceptorAdapter {    private static Logger logger = Logger.getLogger(WebInterceptor.class);    private static final String SYSTEM_ID= "BLOAN-GJJ";    private static final String APP_ID= "gjj-ics-credit";    private static final String TYPE = "java";    private static final Histogram requestLatency = Histogram.build()            .name("service_requests_latency_seconds")            .help("Request latency in seconds.")            .labelNames("systemId", "appId", "type", "name", "method").register();    private ThreadLocal
timerThreadLocal; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { return super.preHandle(request, response, handler); } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { String name = this.getName(request, handler).toLowerCase(); String method = request.getMethod().toUpperCase(); timerThreadLocal = new ThreadLocal<>(); timerThreadLocal.set(requestLatency.labels(SYSTEM_ID, APP_ID, TYPE, name, method).startTimer()); super.postHandle(request, response, handler, modelAndView); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { super.afterCompletion(request, response, handler, ex); if (timerThreadLocal.get() != null) { timerThreadLocal.get().observeDuration(); } } @Override public void afterConcurrentHandlingStarted(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { super.afterConcurrentHandlingStarted(request, response, handler); } private String getName(HttpServletRequest request, Object handler) { String name = ""; try { if (handler != null && handler instanceof HandlerMethod) { HandlerMethod method = (HandlerMethod) handler; String className = ((HandlerMethod) handler).getBeanType().getName(); name = className + "." + method.getMethod().getName(); } else { name = request.getRequestURI(); } } catch (Exception ex) { logger.error("getName", ex); } finally { return name; } }}
View Code

4:配置初始化的类

@Componentpublic class PrometheusConfig {    private static Logger logger = Logger.getLogger(PrometheusConfig.class);    @PostConstruct    public void initialize() {        logger.info("prometheus init...");        DefaultExports.initialize();        logger.info("prometheus has been initialized...");    }}
PrometheusConfig.class

5:springmvc.xml中 添加拦截器

6:spring-application.xml 初始化 初始化类中的方法

 7:添加controller

@Controllerpublic class MetricsController {    private CollectorRegistry registry;    /**     * Construct a MetricsServlet for the default registry.     */    public MetricsController() {        this(CollectorRegistry.defaultRegistry);    }    /**     * Construct a MetricsServlet for the given registry.     */    private MetricsController(CollectorRegistry registry) {        this.registry = registry;    }    @RequestMapping(value="/metrics",method= RequestMethod.GET)    public void metrics(final HttpServletRequest req,                        final HttpServletResponse resp) throws ServletException,            IOException {        resp.setStatus(HttpServletResponse.SC_OK);        resp.setContentType(TextFormat.CONTENT_TYPE_004);        try (Writer writer = resp.getWriter()) {            TextFormat.write004(writer,                    registry.filteredMetricFamilySamples(parse(req)));            writer.flush();        }    }    private Set
parse(HttpServletRequest req) { String[] includedParam = req.getParameterValues("name[]"); if (includedParam == null) { return Collections.emptySet(); } else { return new HashSet<>(Arrays.asList(includedParam)); } }}

 

 

启动tomcat 以及你的project 然后进入localhost:8080/metrics就可以看到JVM的信息了

转载于:https://www.cnblogs.com/showme1942/p/7457451.html

你可能感兴趣的文章
linux TCP客户端指定端口号连接服务端
查看>>
RTP协议 Q&A
查看>>
linux下php调用root权限实现方案
查看>>
5.Spring Cloud初相识-------Hystrix熔断器
查看>>
CSS3设置Table奇数行和偶数行样式
查看>>
PHP版本过狗Shell
查看>>
BZOJ 2127 happiness ——网络流
查看>>
N皇后问题
查看>>
JavaScript检测数据类型
查看>>
观察者模式
查看>>
《CLR via C#》读书笔记 之 类型基础
查看>>
EXt js 学习笔记总结
查看>>
Vue---父子组件之间的通信
查看>>
第八章:手工建库
查看>>
JavaScript语法
查看>>
js事件浏览器兼容
查看>>
获取贴吧对应页html及写入文件
查看>>
Entity Framework学习初级篇3--LINQ TO Entities
查看>>
android 相对布局
查看>>
SilverLight商业应用程序开发---学习笔记(9)
查看>>