본문 바로가기

APM

원시적인 시계열 데이터 만들기

구성: Spring Boot + MySQL + grafana

 

요구사항: 

 1. 브라우저에서 버튼 클릭 시 click값을 count함.

 2. 10분마다 count값을 DB에 기록

 3. 결과물 시각화

 

테이블 생성 결과

 

 

 

클릭값이 0일때도 기록은 해야 하기 때문에 

이벤트 스케줄러를 활용해 일정 시간마다 INSERT 쿼리를 실행시킴.

 

먼저 이벤트 스케줄러 기능이 활성화 되어있는지 확인

show variables like 'event_scheduler';

값이 ON이면 그대로 진행, OFF면

SET GLOBAL event_scheduler = ON;

으로 값을 바꿈.

 

CREATE EVENT 10minutes_tick
ON SCHEDULE EVERY 10 minute
STARTS '2022-05-30 13:30:00'
COMMENT '10분마다 ROW 추가'
DO
INSERT INTO click_count4(count, time) values(0, now());

10분마다 count값이 0, time은 현재시간인 row를 추가하는 이벤트

 

이벤트 스케줄러 정상작동 확인

 

 

JPQL문법에서는 limit 명령어를 지원하지 않기 때문에

Spring Data JPA가 제공하는 쿼리 메소드로 DB의 마지막 row 단건만 읽어들이는 메소드 생성.

(id값 내림차순 정렬 후 가장 위의 값 하나만 find)

findTop1 = findFirst 이므로 둘중 아무거나 써도 무방함

 

View단에서 count를 증가시킬 버튼 생성

 

이제 이 버튼과 연결(PostMapping("/add"))시킬 메인로직추가

 

 

JPA의 save() 메소드는 식별자 값(id)가 없으면 persist, 있으면 merge를 하기 때문에 
id값은 필수,

time은 기준시간에 변동이 있으면 안되기 때문에 값을 유지,

count만 기존값+1을 해서 save()해줌.

 

 

데이터 누적 결과

 

grafana를 이용한 시각화 + 실시간 수치변동 확인

 

'APM' 카테고리의 다른 글

Grok Pattern으로 Log Parsing 후 APM에 연동  (1) 2023.10.04
Grok패턴 파싱 예제  (0) 2023.09.21