이번 종합설계프로젝트2(졸업 프로젝트2)에서 NLP를 이용한 IT 시스템 로그 분석을 하기로 하였다. IT 시스템 로그의 종류는 무척 많다. 그 중 멘토님께서 추천해주신 것은 Java Thread Dump였다. 그럼 IT 시스템 로그는 무엇이고 또 Java Thread Dump는 무엇일까??
프로젝트 수행 계획서 작성한 내용을 바탕으로 정리하였다.
로그 데이터에는 가동중인 컴퓨터 시스템 내에서 발생하는 장애에 대처하기 위해 데이터 장애 발생 직전의 상태로 복원(recovery)하기 위한 필요한 정보가 들어 있다. 로그는 시스템에서 일어나는 모든 현상을 분석, 조치 할 수 있는 정보를 제공해 주는 매우 중요한 자원으로 로그는 시스템 환경에 따라 OS 로그, H/W 로그, 웹서버 로그, WAS 로그, 애플리케이션 로그 등 다양한 종류가 존재한다. 이렇게 다양한 로그 데이터 중 자바 스레드 덤프(Java Thread Dump)를 분석하기로 하였다.
수 많은 종류의 로그 데이터 중 스레드 덤프(Thread Dump)를 사용하기로 한 이유는, 다른 기존 로그 데이터와는 다르게 시작과 끝이 분명하며 결과가 확실하기 때문에 따로 결과값을 확인하고 분석할 필요가 없다. 때문에 머신러닝 모델 개발에 적합하다고 판단되어 스레드 덤프를 타겟 로그로 사용하기로 하였다.
사용하기로 한 AutoML과 BERT는 자연어 학습만 되어있지 IT 시스템 로그 같은 경우에는 학습된 적이 없다. 따라서 다른 로그보다 Java Thread Dump가 모델 개발에 적합하다는 생각을 하게 되었다.
웹 서버에서는 많은 수의 동시 사용자를 처리하기 위해 수십~수백 개 정도의 스레드를 사용한다. 두 개 이상의 스레드가 같은 자원을 이용할 때는 필연적으로 스레드 간에 경합(Contention)이 발생하고 경우에 따라서는 데드락(Deadlock)이 발생할 수도 있다.
경합이란 어떤 스레드가 다른 스레드가 획득하고 있는 락(lock)이 해제되기를 기다리는 상태를 말한다. 웹 애플리케이션에서 여러 스레드가 공유 자원에 접근하는 일은 매우 빈번하다. 대표적으로 로그를 기록하는 것도 로그를 기록하려는 스레드가 락을 획득하고 공유 자원에 접근하는 것이다.
데드락은 스레드 경합의 특별한 경우인데, 두 개 이상의 스레드에서 작업을 완료하기 위해서 상대의 작업이 끝나야 하는 상황을 말한다.
스레드 경합 때문에 다양한 문제가 발생할 수 있으며, 이런 문제를 분석하기 위해서는 스레드 덤프(Thread Dump)를 이용한다. 각 스레드의 상태를 정확히 알 수 있기 때문이다. 스레드의 상태를 앎으로써 동시 다발적으로 발생하는 작업을 수행하는 스레드의 상태를 파악하여 어느 위치에서 에러가 발생했는지 등 서비스 상태 분석이 가능하다.
따라서 이런 스레드 덤프를 확인하고 분석하여 에러 발생 원인을 찾는 것이 중요하다. 하지만 스레드 덤프 발생 수는 무지 많다. 따라서 물리적으로 사람이 하나하나 찾는 것에는 한계가 있다. 따라서 모델 개발로 에러 확인을 자동화하여 좀 더 쉬운 유지 보수가 가능하게 될 것이다.