백엔드에서 운영되는 API서버들의 상태를 모니터링을 하는 방법은 많습니다. 그중에서 대중적인것들이 prometheus, grafana등이 있습니다.
1. SW 환경
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
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()));
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
//추가부분
@Bean
public CountedAspect countedAspect(MeterRegistry registry) {
return new CountedAspect(registry);
}
<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>
# 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 소스 설정
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 |