SpringBoot Admin 2.0 통합 Arthas 의 실현 절차
11436 단어 SpringBootAdmin2.0Arthas
회 사 는 아직 비교적 통 일 된 생산 마이크로 서비스 배치 와 상태 관리 능력 을 구축 하지 못 했 기 때문에 각 시스템 의 연구 개발 운영 은 비교적 독립 적 이다.현재 프로젝트 는 Spring Cloud 와 Eureka 의 프레임 워 크 구 조 를 사용 하여 SBA 의 기초 지지 능력 과 일치 하 는 동시에 SBA 는 서비스 감지,로그 등급 설정 관리,그리고 actuator 를 바탕 으로 하 는 JVM,Spring 용기 의 여러 관리 플러그 인 을 제공 하여 기본 적 인 사용 수 요 를 만족 시 킬 수 있 습 니 다.
조사 연구 기간 에 Arthas 전체 버 전 은 3.4.5 로 Webconsole 기반 Tunner Server 모델 을 제 공 했 고 앞의 링크 글 을 통 해 실천 되 었 으 며 SBA 와 통합 할 수 있 습 니 다.프로젝트 자체 에 역사적 부담 이 없 기 때문에 실제 통합 과정 에서 SBA 2.0 버 전 을 사용 하여 더 많은 관리 기능 과 그래 픽 인터페이스 능력 을 제공 합 니 다.기타 장점:
몇 가지 관건 은 JVM 에 Arthas Spring Boot 플러그 인 을 내장 하고 공상 은행 의 모델 을 참고 하여 완벽 한 클 라 이언 트 다운로드 와 스 크 립 트 수정 을 통 해 원 격 통 제 를 실현 합 니 다.내장 방안 의 작업 개 발 량 이 적 고 관련 소스 구성 요 소 를 통합 하면 관련 원 격 사용 모델 을 실현 하고 안전 을 병행 할 수 있다.공 은의 방안 은 크 고 전체 구조 계획 에 적합 하 며 연구 개발 팀 이 있 는 도 시 를 배치 하 는 데 적합 하 다.내 장 된 프로젝트 는 JMX 를 통한 시작 정지 동작(3.4.5 기반 Spring Boot 플러그 인 은 관련 핸들 을 가 져 올 수 없고 일시 적 으로 실행 할 수 없 음)을 포함 하 며 기본적으로 시작 하지 않 습 니 다.원 격 JMX 개통 후 JVM 은 관련 스 레 드 8 개 를 추가 하고 가상 머 신 메모리 30MB 정 도 를 새로 추 가 했 으 며,본 고 에서 참고 한 SBA 1.0 방안 과 마찬가지 로 온라인 오픈 전 JVM 메모리 가 지원 되 는 지 고려 해 야 한다.
실현 효과
SBA 2.0 의 가장 큰 편 의 는 외부 웹 페이지 를 설정 화 하 는 능력 을 제공 하 는 것 이다.또한 웹 페이지 가 현재 JVM 프로 세 스 를 실현 하면 Spring-security 의 로 컬 권한 관 리 를 실현 할 수 있 고 생산 환경 에서 SBA 에 로그 인 한 후에 만 관련 통 합 된 arthas 기능 을 사용 할 수 있다.
로그 인 인터페이스
외 장 연결 위치
JMX 의 사용
점프 아 트 하 스 웹 콘 솔
개조 안
1.전체 공정 구조
전체 프로젝트 는 SBA 오픈 소스 프로젝트 의 example 프로젝트 를 수정 하고 custom-ui 를 구체 적 으로 사용 하 는 프로젝트 링크 는
[spring-boot-admin-sample-custom-ui]
, 입 니 다.빨간색 상자 의 부분 은 arthas 웹 콘 솔 의 모든 정적 파일 입 니 다.Maven Resource 의 지정 한 설정 을 통 해 지정 한 디 렉 터 리 에 입력 하여 SBA 가 시 작 될 때 사용자 정의 로 딩 을 실현 합 니 다.maven resource 설정-아래:
<resource>
<directory>static</directory>
<targetPath>${project.build.directory}/classes/META-INF/spring-boot-admin-server-ui/extensions/arthas
</targetPath>
<filtering>false</filtering>
</resource>
2.외부 링크 설정SBA 2.0 은 vue 온 가족 통 을 사용 하기 시 작 했 기 때문에 확장 집성 이 모두 편리 하 다.그 중에서 공식 문 서 는 외부 연결 의 설정 방식 을 제시 했다[Linking / Embedding External Pages]
sba example 프로젝트 의 application.yml 설정 을 참고 하면 됩 니 다.
# tag::customization-external-views[]
spring:
boot:
admin:
ui:
external-views:
- label: "Arthas Console"
url: http://21.129.49.153:8080/
order: 1900
# end::customization-external-views[]
3.스프링 MVC 컨트롤 러 에 대응원래 실 현 된 SBA 통합 부분 을 참조 하여 이 부분 은 다음 과 같은 기능 을 수행 합 니 다.
4.Arthas Spring Boot 플러그 인 수정 및 설정
원래 실 현 된 SBA 통합 플러그 인 수정 및 클 라 이언 트 설정 application.yml 참조.
원본 Spring boot 플러그 인 에 대한 수정 은 기 존 플러그 인 이 Spring 의@Conditional OnMissingBean 을 통 해 자동 으로 불 러 오 는 것 입 니 다.
수정 은 주로 이 부분 을 수정 하여 프로필 을 통 해 기본적으로 시작 하지 않 고 사용 할 때 원 격 으로 관련 에이전트 라인 을 시작 합 니 다.
5.Spring Actuator 기반 JMX 구현
SBA client 는 maven 도입 에서 기본적으로 jolokia-core.jar 를 도입 합 니 다.SBA client 의존 으로 이 가방 을 자체 도입 할 수 없 으 면 actuator 를 통 해 http 기반 jmx 작업 능력 과 SBA 콘 솔 의 관련 기능 을 틈새 없 이 개방 할 수 있 습 니 다.
application.yml 에서 management 관련 설정 을 개방 하고 자신의 환경 상황 에 따라 클 라 이언 트 측 에서 Spring security 인증 을 열 수 있 으 며 SBA 도 서 비 스 를 통 해 암호 보호 actuator 터미널 의 방문 을 잘 지원 할 수 있 습 니 다.
# management
management:
endpoints:
web:
exposure:
# * ,
include: "*"
exclude: env
endpoint:
health:
# 。
show-details: ALWAYS
health:
status:
http-mapping:
# http
FATAL: 503
JMX 는 원문 에서 Environment ChangeListener 의 실현 방향 을 참고 하고 Spring 의 JMX 주 해 를 바탕 으로 실현 하면 된다.
@Component
@ManagedResource(objectName = "com.ArthasAgentManageMbean:name=ArthasMbean", description = "Arthas Mbean")
public class ArthasMbeanImpl {
@Autowired
private Map<String, String> arthasConfigMap;
@Autowired
private ArthasProperties arthasProperties;
@Autowired
private ApplicationContext applicationContext;
/**
*
*
* @return
*/
private ArthasAgent arthasAgentInit() {
arthasConfigMap = StringUtils.removeDashKey(arthasConfigMap);
//
Map<String, String> mapWithPrefix = new HashMap<String, String>(arthasConfigMap.size());
for (Map.Entry<String, String> entry : arthasConfigMap.entrySet()) {
mapWithPrefix.put("arthas." + entry.getKey(), entry.getValue());
}
final ArthasAgent arthasAgent = new ArthasAgent(mapWithPrefix, arthasProperties.getHome(),
arthasProperties.isSlientInit(), null);
arthasAgent.init();
return arthasAgent;
}
@ManagedOperation(description = " Arthas Tunnel Server ")
public String getArthasTunnelServerUrl() {
return arthasProperties.getTunnelServer();
}
@ManagedOperation(description = " Arthas Tunnel Server , attach ")
@ManagedOperationParameter(name = "tunnelServer", description = "example:ws://127.0.0.1:7777/ws")
public Boolean setArthasTunnelServerUrl(String tunnelServer) {
if (tunnelServer == null || tunnelServer.trim().equals("") || tunnelServer.indexOf("ws://") < 0) {
return false;
}
arthasProperties.setTunnelServer(tunnelServer);
return true;
}
@ManagedOperation(description = " AgentID")
public String getAgentId() {
return arthasProperties.getAgentId();
}
@ManagedOperation(description = " ")
public String getAppName() {
return arthasProperties.getAppName();
}
@ManagedOperation(description = " ArthasConfigMap")
public HashMap<String, String> getArthasConfigMap() {
return (HashMap) arthasConfigMap;
}
@ManagedOperation(description = " Arthas agent")
public Boolean isArthasAttched() {
DefaultListableBeanFactory defaultListableBeanFactory = (DefaultListableBeanFactory) applicationContext.getAutowireCapableBeanFactory();
String bean = "arthasAgent";
if (defaultListableBeanFactory.containsBean(bean)) {
return true;
}
return false;
}
@ManagedOperation(description = " Arthas agent")
public Boolean startArthasAgent() {
DefaultListableBeanFactory defaultListableBeanFactory = (DefaultListableBeanFactory) applicationContext.getAutowireCapableBeanFactory();
String bean = "arthasAgent";
if (defaultListableBeanFactory.containsBean(bean)) {
((ArthasAgent) defaultListableBeanFactory.getBean(bean)).init();
return true;
}
defaultListableBeanFactory.registerSingleton(bean, arthasAgentInit());
return true;
}
@ManagedOperation(description = " Arthas agent, ")
public Boolean stopArthasAgent() {
// TODO tmp classLoader, com.taobao.arthas.core.server.ArthasBootstrap destroy
DefaultListableBeanFactory defaultListableBeanFactory = (DefaultListableBeanFactory) applicationContext.getAutowireCapableBeanFactory();
String bean = "arthasAgent";
if (defaultListableBeanFactory.containsBean(bean)) {
defaultListableBeanFactory.destroySingleton(bean);
return true;
} else {
return false;
}
}
}
실제 사용관리 공사 가 생산 에 들 어간 후 여러 차례 생산 환경 에서 문제 조사 와 코드 열 복원 에 사용 되 었 다.성능 문 제 는 주로 성능 흐름 제어 구성 요소 와 그 레이스 케 일 발표 관련 설정 매개 변수 에 대한 온라인 검증 과 debug 에 사 용 됩 니 다.
코드 열 로드 관련 초기 에는 jad+mc 방식 으로 작업 을 진행 하 였 으 며,나중에 jad 가 일부 코드 에서 환경 설정 및 jvm 문제 로 인해 반 컴 파일 코드 가 일치 하지 않 는 상황 을 발견 하 였 으 며,추 후 Maven 패키지 배치 응용 프로그램 source 압축 패 키 지 를 통 해 해결 하 였 으 며,jar 와 같은 버 전 으로 구 축 된 source 를 직접 사용 하여 수정 하 는 것 이 더욱 신뢰 할 수 있 습 니 다.전체 방안 은 관리 가 비교적 엄격 한 생산 환경 에서 효과 적 인 성능 분석 과 열 복원 능력 을 제공 했다.
남 겨 진 문제
기 존 공식 적 으로 제 공 된 com.taobao.arthas.agent.attach.arthasAgent 에서 arthas 에이전트 를 시작 하 는 클 라 이언 트 가 사용 하 는 arthasClassLoader 와 bootstrapClass 는 모두 방법 내 임시 변수 로 외부 에서 관련 핸들 을 가 져 올 수 없습니다.bootstrapClass 를 통 해 arthas 에이전트 를 닫 는 기능 을 수행 합 니 다.임시 솔 루 션 은 JMX 를 통 해 시작 한 후 웹 콘 솔 연결 을 사용 한 후 stop 명령 을 사용 하여 대상 프로 세 스 의 arthas 에이전트 를 닫 는 것 입 니 다.
기 존 바이트 코드 로 딩 도 구 는 내부 클래스,개인 클래스 의 온라인 열 배치 교 체 를 잘 실현 할 수 있 으 며,테스트 를 통 해 SkyWalk 8.x 버 전의 자바 에이전트 플러그 인 을 호 환 할 수 있 습 니 다.그러나 테스트 환경 에 서 는 jacoco 커버 리 지 채집 플러그 인과 Arthas 바이트 코드 가 호 환 되 지 않 는 상황 이 설정 되 어 있 습 니 다.일부 환경 에서 사용 할 때 대응 하 는 에이 전 트 를 먼저 닫 아야 arthas 와 관련 된 기능 을 정상적으로 사용 할 수 있다.
start.aliyun.com 지행 착수 실험실 체험 Arthas 57 개 착수 실험 에 오신 것 을 환영 합 니 다:
이상 은 SpringBoot Admin 2.0 통합 Arthas 의 실현 절차 에 대한 상세 한 내용 입 니 다.SpringBoot Admin 2.0 통합 Arthas 에 관 한 자 료 는 저희 의 다른 관련 글 을 주목 해 주 십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Java・SpringBoot・Thymeleaf】 에러 메세지를 구현(SpringBoot 어플리케이션 실천편 3)로그인하여 사용자 목록을 표시하는 응용 프로그램을 만들고, Spring에서의 개발에 대해 공부하겠습니다 🌟 마지막 데이터 바인딩에 계속 바인딩 실패 시 오류 메시지를 구현합니다. 마지막 기사🌟 src/main/res...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.