봄 부팅 기본 지표와 자신의 소스에 대해 자세히 알아보십시오.
당신은 당신의 응용 프로그램에 대해 생성 된 모든 기본 지표 봄 부팅 및 마이크로 미터 셨나요? 그렇지 않으면 - 당신은 할 수 액츄에이터 프로젝트에 종속성을 추가 한 다음 확인을 클릭 / 액추에이터 / 메트릭 당신은 JVM, 프로세스, 톰캣, 교통 등에 대한 유용한 정보를 찾을 경우 엔드 포인트. 그런 다음, 약간의 추가 캐시 , 데이터 소스 더욱 지표가있을 것이다, 또는 JPA 종속성을. 당신은 그들이 종료 방법을 알고 싶다면, 우리는 당신이 준비를 위해 다음이 문서는, 그들이 설명하는 매개 변수에 대한 설명을 찾을 수 있습니다.
지표 보여
이 질서하려면, 우리는 봄 부팅 응용 프로그램의 통계가 시작하는 방법을 보여 드리겠습니다. 당신이 이미 알고있는 경우,이 섹션을 건너 뛸 수 있습니다.
바이 인덱스 봄 부팅 micrometer.io의 과정. 당신이 액츄에이터를 사용하는 경우, 당신은 액추에이터에 종속 되었기 때문에, 프로젝트에 마이크로 미터 종속성을 추가 할 필요가 없습니다. 심지어 당신이 그것을 제공에 관심이없는, 그리고 그것입니다 때문에, 액추에이터를 사용 희망 엔드 포인트의 경우 AutoConfigurations
등록 모듈 많은 지표. 우리는 나중에 자세히 논의 할 것이다.
그래서, 우선, 간단하게 (여기 build.gradle.kts) 프로젝트에 액츄에이터 종속성을 추가
dependencies {
implementation("org.springframework.boot:spring-boot-starter-actuator")
}
그리고 액츄에이터 엔드 포인트에서 인덱스의 이름을 표시, HTTP를 클릭 : // localhost를 : 8080 / 액추에이터 / 측정.
{
"names": [
"jvm.threads.states",
"process.files.max",
"jvm.memory.used",
"jvm.gc.memory.promoted",
"jvm.memory.max",
"system.load.average.1m",
...
]
}
그런 다음 세부 사항을 볼 수 있습니다 예를 들어, URL 경로에 인덱스 이름을 추가 통해 http : // localhost : 8080 / 액추에이터 / 측정 / system.cpu.count합니다.
{
"name": "system.cpu.count",
"description": "The number of processors available to the Java virtual machine",
"baseUnit": null,
"measurements": [
{
"statistic": "VALUE",
"value": 8
}
],
"availableTags": [
]
}
특정 악기 레지스트리를 제공함으로써, 당신은 정기적으로 당신의 선택 (의 인덱스 시스템에이 지표를 보낼 수 있습니다 프로 메테우스 , 새로운 유물 , CloudWatch를 , 흑연 등). - 우리가 가장 간단 할 레지스트리를 사용하자 LoggingMeterRegistry을 이 모든 지표 단지 일반 기록이다.
@Configuration
class MetricsConfig {
@Bean
LoggingMeterRegistry loggingMeterRegistry() {
return new LoggingMeterRegistry();
}
}
이제, 지표 로그에 나타납니다 :
2019-07-17 11:07:09.406 INFO 91283 --- [trics-publisher] i.m.c.i.logging.LoggingMeterRegistry : jvm.buffer.count{id=direct} value=0 buffers
2019-07-17 11:07:09.406 INFO 91283 --- [trics-publisher] i.m.c.i.logging.LoggingMeterRegistry : jvm.buffer.count{id=mapped} value=0 buffers
2019-07-17 11:07:09.406 INFO 91283 --- [trics-publisher] i.m.c.i.logging.LoggingMeterRegistry : jvm.buffer.memory.used{id=direct} value=0 B
2019-07-17 11:07:09.406 INFO 91283 --- [trics-publisher] i.m.c.i.logging.LoggingMeterRegistry : jvm.buffer.memory.used{id=mapped} value=0 B
2019-07-17 11:07:09.408 INFO 91283 --- [trics-publisher] i.m.c.i.logging.LoggingMeterRegistry : jvm.classes.loaded{} value=8530 classes
2019-07-17 11:07:09.408 INFO 91283 --- [trics-publisher] i.m.c.i.logging.LoggingMeterRegistry : jvm.gc.live.data.size{} value=0 B
2019-07-17 11:07:09.408 INFO 91283 --- [trics-publisher] i.m.c.i.logging.LoggingMeterRegistry : jvm.gc.max.data.size{} value=0 B
2019-07-17 11:07:09.410 INFO 91283 --- [trics-publisher] i.m.c.i.logging.LoggingMeterRegistry : jvm.memory.committed{area=nonheap,id=Compressed Class Space} value=6.25 MiB
2019-07-17 11:07:09.410 INFO 91283 --- [trics-publisher] i.m.c.i.logging.LoggingMeterRegistry : jvm.memory.committed{area=heap,id=G1 Eden Space} value=168 MiB
...
공급 장치 표시 등
그럼, 어떻게 이러한 지표가 어떻게 제공 하는가? 예는 다음과 같을 수 있습니다 WebMvcMetricsFilter , 모든 스프링 웹 MVC 엔드 포인트에 성능을 추가 (http.server.requests 미터) .
그러나이 예는 매우 간단합니다. 스프링 프레임 워크에 의해 처리되는 모든 요청, 추가 표시 내부적으로 생성 된 호출이 필요하지 않은 경우 (단지 확인 WebMvcMetricsFilter.record () 메소드).
당신이 순수 사용할 경우, 으로 Ehcache를 또는 최대 절전 모드 후 또는 다른 데이터 소스 다음 상황을 지표를 생성?
그래서 캐시. * 인덱스 그것은, 내가 비록 @Autowired
순수 net.sf.ehcache.Cache
생성합니다?
그래서 최대 절전 모드. * 색인에게 그것을, 내가 비록 @Autowired
순수 org.hibernate.SessionFactory
생성합니다?
jvm.*
그런 다음 process.*
, tomcat.*
그래서 어떻게 자동으로 생성?
구성 요소 자체를 모니터링하여 이러한 통계를 제공하기 때문에, 사람들이 생각하는 것보다 더 쉽게 보인다. 때때로, 그것은 직접 예를 들어, 제공 cache.getStatistics()
에 EHCache는 제공 StatisticsGateway을 , 또는 sessionFactory.getStatistics()
하기 의 SessionFactory가 최대 절전 모드 제공하는 통계를 등등합니다.
때때로,이 같은 관리 빈과 같은 다른 수단에 의해 달성 될 수있다. 예를 들어, 의 RuntimeMXBean JVM에 대한 process.*
메트릭 및 (예를 들어 GlobalRequestProcessor
, Servlet
등) Tomcat mbeans
에 대한 톰캣. * 색인
이러한 통계를 액세스하고 특정 인덱스로 변환하기 위해, 마이크로 미터 소개 MeterBinder의 개념을.
체크 MeterBinder
구현 계층 구조를 사용 가능한 지표 그룹에 대한 더 자세한 정보를 얻을 수 있습니다.
당신은 또한 수 있습니다 직접에서 마이크로 미터의 repo는 에 확인.
열기는, 예를 들어, EhCache2Metrics는 , 당신은 발견 할 것이다 으로 Ehcache 통계 정보의 내용과 방법 특정 마이크로 미터 지표에 매핑됩니다.
cache.size -> StatisticsGateway:getSize cache.gets{result=miss} -> StatisticsGateway:cacheMissCount cache.gets{result=hit} -> StatisticsGateway:cacheHitCount cache.puts -> StatisticsGateway:cachePutCount cache.evictions -> StatisticsGateway:cacheEvictedCount cache.remoteSize -> StatisticsGateway::getRemoteSize cache.removals -> StatisticsGateway::cacheRemoveCount cache.puts.added{result=added} -> StatisticsGateway::cachePutAddedCount cache.puts.added{result=updated} -> StatisticsGateway::cachePutAddedCount cache.misses{reason=expired} -> StatisticsGateway::cacheMissExpiredCount) cache.misses{reason=notFound} -> StatisticsGateway::cacheMissNotFoundCount) cache.xa.commits{result=readOnly} -> StatisticsGateway::xaCommitReadOnlyCount cache.xa.commits{result=exception} -> StatisticsGateway::xaCommitExceptionCount cache.xa.commits{result=committed} -> StatisticsGateway::xaCommitCommittedCount cache.xa.rollbacks{result=exception} -> StatisticsGateway::xaRollbackExceptionCount cache.xa.rollbacks{result=success} -> StatisticsGateway::xaRollbackSuccessCount cache.xa.recoveries{result=nothing} -> StatisticsGateway::xaRecoveryNothingCount cache.xa.recoveries{result=success} -> StatisticsGateway::xaRecoveryRecoveredCount cache.local.offheap.size -> StatisticsGateway::getLocalOffHeapSize) cache.local.heap.size -> StatisticsGateway::getLocalHeapSizeInBytes cache.local.disk.size -> StatisticsGateway::getLocalDiskSizeInBytes
등록 MeterBinders
할 수 있습니다 매우 간단한 예제 문서를 마이크로 미터가 발견되었다.
수동으로 할 수있는 기억 :
new ClassLoaderMetrics().bindTo(registry);
new JvmMemoryMetrics().bindTo(registry);
new EhCache2Metrics(cache, Tags.of("name", cache.getName())).bindTo(registry)
new TomcatMetrics(manager, tags).bindTo(registry)
...
양자 택일로, 당신은 봄 부팅, 그것은 엔진에서 당신을 위해 그것을 할 것입니다 사용할 수 있습니다.
내가 전에 언급 한 바와 같이, 액추에이터는 많은 제공 AutoConfiguration
들과 MetricsBinders
단지 주어진 종속성을 추가, 그것은 등록됩니다 MeterBinders
.
예를 들어, TomcatMetricsBinder의 등록 TomcatMetrics (임베디드 컨테이너). MeterRegistryConfigurer는 실행 시간과 다른 시스템 지표를 JVM을 등록합니다.
이제 응용 프로그램에서으로 Ehcache를 사용한다고 가정합니다. 두 종속성을 추가 할 수 있습니다 :
implementation("org.springframework.boot:spring-boot-starter-cache")
implementation("net.sf.ehcache:ehcache")
그런 다음 캐시를 등록 (또한 수 ehcache.xml 얻을 수)
@Bean
Cache playCache(EhCacheCacheManager cacheManager) {
CacheConfiguration cacheConfiguration = new CacheConfiguration()
.name(CACHE_NAME)
.maxEntriesLocalHeap(MAX_ELEMENTS_IN_MEMORY);
Cache cache = new Cache(cacheConfiguration);
cacheManager.getCacheManager().addCache(cache);
cacheManager.initializeCaches();
return cache;
}
이제 CacheMetricsRegistrarConfiguration 각 캐시 관리 등록을위한 봄 캐시 관리자를 통해 EhCache2Metrics .
당신이 봄 캐시 관리를 사용하지 않으려면, 당신은 자신을 등록 할 수 있습니다 EhCache2Metrics
.
이제 응용 프로그램을 시작, 당신은 다른으로 Ehcache 지표를 볼 수 있습니다.
2019-07-17 13:08:45.113 INFO 93052 --- [trics-publisher] i.m.c.i.logging.LoggingMeterRegistry : cache.gets{cache=playCache,cacheManager=cacheManager,name=playCache,result=hit} throughput=12.95/s
2019-07-17 13:08:45.124 INFO 93052 --- [ Thread-4] i.m.c.i.logging.LoggingMeterRegistry : cache.misses{cache=playCache,cacheManager=cacheManager,name=playCache,reason=notFound} throughput=3.7/s
2019-07-17 13:08:45.124 INFO 93052 --- [trics-publisher] i.m.c.i.logging.LoggingMeterRegistry : cache.gets{cache=playCache,cacheManager=cacheManager,name=playCache,result=miss} throughput=3.7/s
2019-07-17 13:08:48.840 INFO 93052 --- [ Thread-4] i.m.c.i.logging.LoggingMeterRegistry : cache.puts{cache=playCache,cacheManager=cacheManager,name=playCache} throughput=16.65/s
2019-07-17 13:08:48.840 INFO 93052 --- [trics-publisher] i.m.c.i.logging.LoggingMeterRegistry : cache.misses{cache=playCache,cacheManager=cacheManager,name=playCache,reason=notFound} throughput=3.7/s
2019-07-17 13:08:48.841 INFO 93052 --- [trics-publisher] i.m.c.i.logging.LoggingMeterRegistry : cache.puts{cache=playCache,cacheManager=cacheManager,name=playCache} throughput=16.65/s
2019-07-17 13:08:48.841 INFO 93052 --- [ Thread-4] i.m.c.i.logging.LoggingMeterRegistry : cache.puts.added{cache=playCache,cacheManager=cacheManager,name=playCache,result=updated} throughput=0.116667/s
2019-07-17 13:08:48.841 INFO 93052 --- [trics-publisher] i.m.c.i.logging.LoggingMeterRegistry : cache.puts.added{cache=playCache,cacheManager=cacheManager,name=playCache,result=updated} throughput=0.116667/s
2019-07-17 13:08:48.841 INFO 93052 --- [ Thread-4] i.m.c.i.logging.LoggingMeterRegistry : cache.puts.added{cache=playCache,cacheManager=cacheManager,name=playCache,result=added} throughput=0.116667/s
2019-07-17 13:08:48.842 INFO 93052 --- [trics-publisher] i.m.c.i.logging.LoggingMeterRegistry : cache.puts.added{cache=playCache,cacheManager=cacheManager,name=playCache,result=added} throughput=0.116667/s
2019-07-17 13:08:48.847 INFO 93052 --- [trics-publisher] i.m.c.i.logging.LoggingMeterRegistry : cache.local.disk.size{cache=playCache,cacheManager=cacheManager,name=playCache} value=0 B
2019-07-17 13:08:48.847 INFO 93052 --- [ Thread-4] i.m.c.i.logging.LoggingMeterRegistry : cache.local.disk.size{cache=playCache,cacheManager=cacheManager,name=playCache} value=0 B
2019-07-17 13:08:48.908 INFO 93052 --- [ Thread-4] i.m.c.i.logging.LoggingMeterRegistry : cache.local.heap.size{cache=playCache,cacheManager=cacheManager,name=playCache} value=1.039062 KiB
2019-07-17 13:08:48.908 INFO 93052 --- [trics-publisher] i.m.c.i.logging.LoggingMeterRegistry : cache.local.heap.size{cache=playCache,cacheManager=cacheManager,name=playCache} value=1.039062 KiB
2019-07-17 13:08:48.909 INFO 93052 --- [trics-publisher] i.m.c.i.logging.LoggingMeterRegistry : cache.local.offheap.size{cache=playCache,cacheManager=cacheManager,name=playCache} value=0 B
2019-07-17 13:08:48.909 INFO 93052 --- [ Thread-4] i.m.c.i.logging.LoggingMeterRegistry : cache.local.offheap.size{cache=playCache,cacheManager=cacheManager,name=playCache} value=0 B
2019-07-17 13:08:48.909 INFO 93052 --- [ Thread-4] i.m.c.i.logging.LoggingMeterRegistry : cache.remoteSize{} value=0
2019-07-17 13:08:48.909 INFO 93052 --- [trics-publisher] i.m.c.i.logging.LoggingMeterRegistry : cache.remoteSize{} value=0
2019-07-17 13:08:48.909 INFO 93052 --- [ Thread-4] i.m.c.i.logging.LoggingMeterRegistry : cache.size{cache=playCache,cacheManager=cacheManager,name=playCache} value=7
2019-07-17 13:08:48.909 INFO 93052 --- [trics-publisher] i.m.c.i.logging.LoggingMeterRegistry : cache.size{cache=playCache,cacheManager=cacheManager,name=playCache} value=7
이 경우, 각 성분 컨텍스트 지표의 책임은 다음과 같이 요약 될 수있다 :
당신은에서 할 수 있습니다 여기에 제공되는 모든 이러한 개념 샘플 응용 프로그램을 볼 수 있습니다.
코딩 해피!
원본 : HTTPS : //dzone.com/articles/spring-boot-where-do-the-default-metrics-come-from
저자 : DAWID Kublik
번역 : 퀴나
당당한 복지는 시간에 강타, 공공 우려 번호 무대 뒤 다시 7 월 003 오 하이라이트의 번역받을 수있는 복지 다시 갈 : 001, 002, 당신이받을 수 있습니다!