봄 부팅 기본 지표에서 온?

봄 부팅 기본 지표와 자신의 소스에 대해 자세히 알아보십시오.

당신은 당신의 응용 프로그램에 대해 생성 된 모든 기본 지표 봄 부팅 및 마이크로 미터 셨나요? 그렇지 않으면 - 당신은 할 수 액츄에이터 프로젝트에 종속성을 추가 한 다음 확인을 클릭 / 액추에이터 / 메트릭 당신은 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구현 계층 구조를 사용 가능한 지표 그룹에 대한 더 자세한 정보를 얻을 수 있습니다.

마이크로 미터 MeterBinders

당신은 또한 수 있습니다 직접에서 마이크로 미터의 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

이 경우, 각 성분 컨텍스트 지표의 책임은 다음과 같이 요약 될 수있다 :

으로 Ehcache 인덱스 아키텍처

당신은에서 할 수 있습니다 여기에 제공되는 모든 이러한 개념 샘플 응용 프로그램을 볼 수 있습니다.

코딩 해피!

원본 : HTTPS : //dzone.com/articles/spring-boot-where-do-the-default-metrics-come-from

저자 : DAWID Kublik

번역 : 퀴나


당당한 복지는 시간에 강타, 공공 우려 번호 무대 뒤 다시 7 월 003 오 하이라이트의 번역받을 수있는 복지 다시 갈 : 001, 002, 당신이받을 수 있습니다!



IMG

추천

출처www.cnblogs.com/liululee/p/11410493.html