springmvc老旧系统prometheus 暴漏端点改造
2023-03-15 23:28:02 时间
springmvc 老破旧系统如何更好的接入prometheus+grafana的怀抱呢
依赖引入
<properties>
<io.prometheus.version>0.8.0</io.prometheus.version>
</properties>
<!-- The client -->
<dependency>
<groupId>io.prometheus</groupId>
<artifactId>simpleclient</artifactId>
<version>${io.prometheus.version}</version>
</dependency>
<!-- Hotspot JVM metrics-->
<dependency>
<groupId>io.prometheus</groupId>
<artifactId>simpleclient_hotspot</artifactId>
<version>${io.prometheus.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.prometheus/simpleclient_servlet -->
<dependency>
<groupId>io.prometheus</groupId>
<artifactId>simpleclient_servlet</artifactId>
<version>${io.prometheus.version}</version>
</dependency>
映射配置
<servlet>
<servlet-name>metrics</servlet-name>
<servlet-class>io.prometheus.client.exporter.MetricsServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>metrics</servlet-name>
<url-pattern>/metrics</url-pattern>
</servlet-mapping>
代码示例
import io.prometheus.client.Counter;
import io.prometheus.client.Histogram;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang.math.RandomUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.common.base.BaseAction;
@Controller
public class SampleController extends BaseAction{
//计数器 有标签
static final Counter requests = Counter.build()
.name("sales_requests_total").labelNames("bizName").help("Total requests.").register();
//计数器 无标签
static final Counter unSalesRequests = Counter.build()
.name("unSales_requests_total").help("Total requests.").register();
//平均响应时间
static final Histogram requestLatency = Histogram.build()
.name("requests_latency_seconds").help("Request latency in seconds.").register();
/**
* sales累加值
* @param request
* @param response
* @return
*/
@RequestMapping(value="/sales")
public @ResponseBody String sales(HttpServletRequest request, HttpServletResponse response){
requests.labels("sales").inc();
return "ok";
}
/**
* unSales累加值
* @param request
* @param response
* @return
*/
@RequestMapping(value="/unSales")
public @ResponseBody String unSales(HttpServletRequest request, HttpServletResponse response){
unSalesRequests.inc();
return "ok";
}
/**
* 平均响应时间
* @param request
* @param response
* @return
* @throws InterruptedException
*/
@RequestMapping(value="/time")
public @ResponseBody String time(HttpServletRequest request, HttpServletResponse response) throws InterruptedException{
Histogram.Timer start =requestLatency.startTimer();
long sleepTime=RandomUtils.nextInt(200);
System.out.println(sleepTime);
Thread.sleep(sleepTime);
start.observeDuration();
return "ok";
}
}
启动类暴漏默认端点
import io.prometheus.client.hotspot.DefaultExports;
import javax.annotation.PostConstruct;
import org.springframework.stereotype.Component;
@Component
public class Init {
@PostConstruct
public void init() {
//输出JVM信息
DefaultExports.initialize();
}
}
效果如下
相关文章
- 金融服务领域的大数据:即时分析
- 影响大数据、机器学习和人工智能未来发展的8个因素
- 从0开始构建一个属于你自己的PHP框架
- 如何将Hadoop集成到工作流程中?这6个优秀实践必看
- SEO公司使用大数据优化其模型的5种方法
- 关于Web Workers你需要了解的七件事
- 深入理解HTTPS原理、过程与实践
- 增强分析:数据和分析的未来
- PHP协程实现过程详解
- AI专家:大数据知识图谱——实战经验总结
- 关于PHP的错误机制总结
- 利用数据分析量化协同过滤算法的两大常见难题
- 怎么做大数据工作流调度系统?大厂架构师一语点破!
- 2019大数据处理必备的十大工具,从Linux到架构师必修
- OpenCV中的KMeans算法介绍与应用
- 教大家如果搭建一套phpstorm+wamp+xdebug调试PHP的环境
- CentOS下三种PHP拓展安装方法
- Go语言HTTP Server源码分析
- Go语言HTTP Server源码分析
- 2017年4月编程语言排行榜:Hack首次进入前五十