一、    背景说明

Java服务级监控用于对每个应用占用的内存、线程池的线程数量、restful调用数量和响应时间、JVM状态、GC信息等进行监控,并可将指标信息同步至普罗米修斯中集中展示和报警。网上类似的文章较多,内容长且时间较旧,本文所写内容已经过实践验证,可快速帮助你实现集成。

二、    监控方案说明

本监控方案仅用于SpringBoot 2项目。通过在服务中引入actuator组件实现与普罗米修斯的集成。由于actuator有一定的安全隐患,本文也着重介绍了如何实现授权访问。

三、    方案详情

1、引入spring actuator及spring security

Actuator用于收集微服务的监控指标包括内存使用、GC、restful接口调用时长等信息。为避免敏感信息泄露的风险,还需要同时使用spring security框架以实现访问actuator端点时的授权控制。“micrometer-registry-prometheus”用于将您的微服务暴露为“exportor”,可直接对接普罗米修斯。

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency> <groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
<version>1.8.1</version>
</dependency>

2、配置文件(application.yml)增加应用名称

spring:
application:
name: your service name

“name”节点的值需要根据当前服务的名称填写,建议规则如下:小于32字符长度;全小写;单词间使用“-”分隔。

3、配置文件中增加actuator配置

建议将下面配置放在二级配置文件(application-x,例:线上配置文件“application-prod”)中。配置信息的“include”节点建议仅暴露“prometheus”节点

#name和password为您自定义的信息
spring:
security:
user:
name: ***
password: *** management:
server:
port: 1234 #给actuator一个自定义端口,建议与服务的端口进行区分
metrics:
tags:
application: ${spring.application.name}
endpoints:
web:
base-path: /${spring.application.name}/application-monitor #安全起见,此处使用自定义地址
exposure:
include: prometheus #安全起见,仅暴露prometheus一个端点

4、配置spring security

为实现actuator端点访问授权,需要在启动文件(即包含“static void main”方法的文件)的同级任意目录中建立一个名为“SecurityConfig .java”的java文件,并将下列代码复制到类中

@EnableWebSecurity
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.formLogin()
.and()
.httpBasic()
.and()
.authorizeRequests()
          //application-monitor为3小节本配置文件中自定义的actuator端点url,此处代码表示当访问actuator端点时,需要进行登录。用户名和密码参看3小节配置
.antMatchers("/**/application-monitor/**").authenticated()
.anyRequest().permitAll(); //其它业务接口不用登录
}
}

5、验证结果

配置完成后启动服务。访问服务中的查询类业务接口,应与引入“actuator”和“spring security”前一致。访问“ip:1234/{your service name}/application-monitor/prometheus”,应显示登录界面,如下图所示。

输入3小节中“spring.security.user”节点中的用户名与密码,显示如下界面表示配置成功。需要注意:务必保证测试结果与上述说明一致,以避免服务正常的restful接口无法被访问。

配置成功后,您的服务就变成了一个标准的“exportor”,可以实现与普罗米修斯的对接。

Java微服务监控及与普罗米集成的更多相关文章

  1. 普罗米修斯!Ubuntu下prometheus监控软件安装使用

    *Prometheus* 是一个开源的服务监控系统和时间序列数据库 官方网站:prometheus.io 一.安装prometheus cd /usr/local/        #进入安装目录 wg ...

  2. 第七模块 :微服务监控告警Prometheus架构和实践

    119.监控模式分类~1.mp4 logging:日志监控,Logging 的特点是,它描述一些离散的(不连续的)事件. 例如:应用通过一个滚动的文件输出 Debug 或 Error 信息,并通过日志 ...

  3. 一步步教你用Prometheus搭建实时监控系统系列(一)——上帝之火,普罗米修斯的崛起

    上帝之火 本系列讲述的是开源实时监控告警解决方案Prometheus,这个单词很牛逼.每次我都能联想到带来上帝之火的希腊之神,普罗米修斯.而这个开源的logo也是火,个人挺喜欢这个logo的设计. 本 ...

  4. 监控神器-普罗米修斯Prometheus的安装

    搬砖党的福音:普罗米修斯-监控神器 功能: 在业务层用作埋点系统 Prometheus支持多种语言(Go,java,python,ruby官方提供客户端,其他语言有第三方开源客户端).我们可以通过客户 ...

  5. 现如今,最热门的13个Java微服务框架

    曾经的 服务器领域 有许多不同的芯片架构???有哪些芯片架构???和操作系统???,经过长期发展,Java的“一次编译,到处运行”使得它在服务器领域找到一席之地,成为程序员们的最爱. 本文,我们将和大 ...

  6. Java微服务 vs Go微服务,究竟谁更强!?

    前言 Java微服务能像Go微服务一样快吗? 这是我最近一直在思索地一个问题. 去年8月份的the Oracle Groundbreakers Tour 2020 LATAM大会上,Mark Nels ...

  7. 普罗米修斯+grafana监控k8s

    其实现原理有点类似ELK.node-exporter组件负责收集节点上的metrics监控数据,并将数据推送给prometheus, prometheus负责存储这些数据,grafana将这些数据通过 ...

  8. SpringCloud微服务实战——搭建企业级开发框架(四十四):【微服务监控告警实现方式一】使用Actuator + Spring Boot Admin实现简单的微服务监控告警系统

      业务系统正常运行的稳定性十分重要,作为SpringBoot的四大核心之一,Actuator让你时刻探知SpringBoot服务运行状态信息,是保障系统正常运行必不可少的组件.   spring-b ...

  9. 从成本角度看Java微服务

    近年来,微服务因其良好的灵活性和伸缩性等特点备受追捧,很多公司开始采用微服务架构或将已有的单体系统改造成微服务.IBM也于近日开源了轻量级Java微服务应用服务器 Open Liberty .但是采用 ...

随机推荐

  1. pandas tutorial

    目录 Series 利用dict来创建series 利用标量创建series 取 Dataframe 利用dict创建dataframe 选择 添加列 列移除 行的选择, 添加, 移除 Panel B ...

  2. oralce索引的使用

    1.索引的作用 数据库对象 用于提高数据库检索的效率,对于where,group,order by条件中经常出现的字段,创建索引可以加快效率 缺点:如果对于大量的数据插入时效率可能会变低 2.索引的使 ...

  3. nginx 安装配置及使用 启动权限拒绝问题

    安装 yum install -y nginx 查看安装的路径 whereis nginx 可能会有所不同 需要根据自己的查看 执行目录:/usr/sbin/nginx 模块所在目录:/usr/lib ...

  4. Thrift框架-具体使用

    1.前言 使用thrift心得: (1)thrift是一个RPC的框架  ,RPC是远程过程调用协议:用于进行可扩展且跨语言的服务的开发,以构建在C++.Java.Python.PHP.Ruby.Er ...

  5. SpringBoot学习笔记四之后台登录页面的实现

    注:图片如果损坏,点击文章链接: https://www.toutiao.com/i6803542216150090252/ 继续之前完成的内容,首先创建一个常量类 常量类的内容 服务器端渲染 前后端 ...

  6. 学习Java爬虫文档的学习顺序整理

    1.认识正则表达式(Java语言基础) https://www.toutiao.com/i6796233686455943693/ 2.正则表达式学习之简单手机号和邮箱练习 https://www.t ...

  7. JDBC简单查询数据库

    注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6543890367761089031/ 1.我们先新建一个数据库作为测试库 数据库名称为test.测试表为perso ...

  8. BeanUtils.copyProperties 选择性赋值字段

    BeanUtils.copyProperties 在字段赋值上有强大的功能,如果有两个的类,如果需要将相同的字段赋值,就可以直接赋制.而不需要每个字段都需要一个一个赋制. BeanUtils.copy ...

  9. 《Go组件设计与实现》-netpoll的总结

    主要针对字节跳动的netpoll网络库进行总结.netpoll网络库相比于go本身的net标准库更适合高并发场景. 基础知识 netpoll与go.net库一样使用epoll这种IO多路复用机制处理网 ...

  10. python客户端和Appium服务端联调出现的问题解决办法

    按照安装文档搭建完移动端自动化测试环境,包括:SDK.JDK.Node.js.Appium及客户端后,appium-doctor可以成功的检测到各配套版本.如下图: 可是,运行from appium ...