상세 컨텐츠

본문 제목

Prometheus & Grafana

CI-CD

by giljabi 2024. 12. 21. 20:28

본문

백엔드에서 운영되는 API서버들의 상태를 모니터링을 하는 방법은 많습니다. 그중에서 대중적인것들이 prometheus, grafana등이 있습니다.  

 

 

1. SW 환경

  • prometheus : prometheus.exe 9090
  • grafana : grafana-server.exe 3000
  • pinpoint : collector.sh, web.sh

 

2. api project maven 추가 라이브러리

pom.xml

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
      <groupId>io.micrometer</groupId>
      <artifactId>micrometer-core</artifactId>
      <version>1.2.0</version>
    </dependency>
    <dependency>
      <groupId>io.micrometer</groupId>
      <artifactId>micrometer-registry-prometheus</artifactId>
      <version>1.1.19</version><!-- bean 등록 에러가 없는 마지막 버전-->
    </dependency>

 

core main/resource/application.properties

server.tomcat.mbeanregistry.enabled=true #tomcat 정보
management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always
management.endpoint.metrics.enabled=true
#management.endpoint.prometheus.enabled=true
#management.metrics.export.prometheus.enabled=true
management.server.port=9980

 

java com.~.SecurityConfig "/actuator/**" 추가

  public void configure(WebSecurity web) {
  web.ignoring().antMatchers("/v2/api-docs"
      , "/swagger-resources"
      , "/swagger-resources/configuration/ui"
      , "/swagger-resources/configuration/security"
      , "/swagger-ui.html", "/health", "/version", "/actuator/**");
}

 

prometheus 정보확인

 

3. prometheus 설치

prometheus.yml 추가

  - job_name: "MY-API"
  metrics_path: '/actuator/prometheus'
  scrape_interval: 1s
  static_configs:
    - targets: ["localhost:9980"]

 

prometheus 상태확인

 

prometheus target 정보를 검색

 

prometheus panel

 

 

API Login count sample

  • API HomeContrller.java
import io.micrometer.core.annotation.Counted;
...
    @Counted("login.count") // /actuator/metrics/login.count
    @ApiOperation(value = "로그인", notes = "로그인 API 입니다. email 부분에 id, password 부분에 비밀번호 입력하시어서 토큰 발급하시는데 사용하시면 됩니다. ")
    @PostMapping("/login")
    public Response login(@Valid @RequestBody LoginRequest request) {
        loginCount.incrementAndGet();
        
        Authentication authentication = authenticationManager.authenticate(
            new UsernamePasswordAuthenticationToken(request.getUsername(), request.getPassword()));
  • API SecurityConfig.java
  @Bean
  public PasswordEncoder passwordEncoder() {
    return new BCryptPasswordEncoder();
  }

//추가부분
  @Bean
  public CountedAspect countedAspect(MeterRegistry registry) {
    return new CountedAspect(registry);
  }
  • pom.xml
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
      <groupId>io.micrometer</groupId>
      <artifactId>micrometer-core</artifactId>
      <version>1.2.0</version>
    </dependency>
    <dependency>
      <groupId>io.micrometer</groupId>
      <artifactId>micrometer-registry-prometheus</artifactId>
      <version>1.1.19</version><!-- bean 등록 에러가 없는 마지막 버전-->
    </dependency>

 

  • /login 후 /actuator/prometheus 확인
# HELP login_count_total 
# TYPE login_count_total counter
login_count_total{class="com.api.controller.HomeController",exception="none",method="login",result="success",} 1.0

 

{
"name": "login.count",
"description": "",
"measurements": [
{
"statistic": "COUNT",
"value": 19
}
],
"availableTags": [
{
"tag": "result",
"values": [
"success"
]
},
{
"tag": "exception",
"values": [
"none"
]
},
{
"tag": "method",
"values": [
"login"
]
},
{
"tag": "class",
"values": [
"com.api.controller.HomeController"
]
}
]
}

 

4. grafana

 

* 저장 & 테스트 결과

 

Prometheus 소스 설정

 

  • login count 대시보드 추가, increase(), rate()
  • increase(login_count_total{method="login"}[1m]), Legend : {{method}}

'CI-CD' 카테고리의 다른 글

gitea telegram 알림설정  (0) 2024.12.21
gitea Issue Template  (0) 2023.06.02
gitea Repository Packages  (0) 2023.05.25
gitea Repository Issues/Labels/Milestone/Projects  (0) 2023.05.25
gitea Organization Team  (0) 2023.05.25

관련글 더보기