DEV 52

성능과 사용자 경험의 사이에서

저는 회사에서 로그 모니터링 서비스를 만들고 있습니다. 위의 화면에서 검색 조건은 content:*Exception*으로 입력되어 있습니다. 수집 된 로그 중에서 Exception이 포함된 로그를 조회하는 모습을 보여줍니다. 지정한 키워드가 포함되었는지 확인할 때에는 java.lang.String#startsWith(java.lang.String)을 사용합니다. 물론 이렇게 수집된 모든 로그에 대해서 FULL-SCAN을 하면 검색 속도도 안나오고 CPU도 많이 사용할 수 있습니다. 더 큰 문제는 지정한 검색 시간 안에 로그가 N개 있으면 N개의 문자열에 대해서 모두 startsWith 연산을 수행한다는 점입니다. RDBMS를 사용하는 환경이라면 Connection Pool을 오랫동안 점유하게 되고, Fi..

DEV/INSIGHT 2023.09.20

java-grok 라이브러리 수정해서 오픈소스로 배포하기 (with gradle 8.*)

오픈소스를 수정 배포하게 된 배경 저는 사내에서 로그 모니터링 서비스를 만들고 있습니다. 위 사진에서 파란색 태그는 임의의 로그(문자열)에서 semantic(의미를 가지는) 키워드로 추출된 값들입니다. 이렇게 추출된 태그를 기반으로 인덱스가 생성되고 로그를 조회할 수 있습니다. 임의의 형태로 수집되는 로그에서 유의미한 형태의 키워드를 추출하기 위해서 thekrakken/java-grok 라는 라이브러리를 사용하고 있었습니다. 직접 만들고 있는 로그 모니터링을 사용해서 운영환경에서 발생하는 문제를 분석하다보니 크게 2가지 문제의식을 갖게 되었습니다. 1. 다양한 환경에서 수집되는 로그와 인덱스를 체계적으로 관리할 필요성이 있다. 2. 로그를 메트릭스로 변환해서 메트릭스 기반으로 개발된 다양한 기능들을 사용..

DEV/JAVA 2023.09.18