본문 바로가기

내 이야기/프로젝트

로그 추적 시스템(연구과제)

2020.06 ~ 2020.12

개요

 

로그 추적시스템과 관련된 연구 내용이었다. 

연구내용이다보니 많은 것들을 공개할 수 없어서, 내가 작성했던 문서 위주로 간략하게만 소개할 수 있을 듯하다.

 

로그 분석은 시스템 문제 해결의 중요한 방법이다.

그러나 최근 분산 컴퓨팅, 시스템 고도화 등의 여러 환경 속에서 시스템의 구조가 복합적으로 변해가고 있다.
그 결과, 하나의 시스템 내부에서도 수많은 로그 파일들을 생성하고 작성한다. 이러한 복합적인 시스템 구조 속에서 문제 발생 시 연쇄적으로 영향을 미치므로 여러 로그들 중에서 단순 하나의 프로그램에 대한 로그 분석만으로 문제 해결은 쉽지 않은 실정이다.

이에 따라 로그 추적 시스템을 통해 여러 로그들 중에서 시스템 문제 해결에 필요한 로그를 추려내 제공하고자 한다.
결과적으로 적절한 로그 추적 시스템을 통해 빠르고 정확하게 시스템 문제 해결에 필요한 로그 기록을 제공한다. 이를 위해 본 연구는 시스템 내부에서 작성중인 로그 파일들에 대한 정보를 함수 hooking을 통해 가져오는 과정과 여러 로그들 간의 상관관계를 파악하여 필요한 로그 기록을 역추적하는 과정을 설명한다.

즉, 시스템 함수들을 가로채 열려있는 로그 파일들만을 찾아내고 이 로그들 중에서 핵심 근원로그를 찾는 연구를 진행하였다.


구현

내가 맡은 역할은 시스템 함수 후킹을 통해 로그 파일들을 찾아내는 것이었다.

 

함수 후킹을 통해 처리하는 인자들을 NoSQL DB에 적재한다.

 

open, close 함수의 파라미터를 통해 open 했지만 close를 하지않은 열려있는 파일들을 전부 가져온다(그 이유는 로그파일들은 계속 열린채로 write 과정을 하기 때문이다). 

 

그리고 로그파일 형식에 맞지 않은 파일들을 제하여 로그파일들을 추려낸다.

 

시스템 함수를 후킹하는 라이브러리는 C 코드
MongoDB 내 데이터를 처리하고 가공하는 코드는 Python 코드로 구현하였다

 

정리하면 내가 맡은 롤은 아래와 같다.

 


완성? 후기?

 

결과적으로 연구 과제였기에 결과물은 따로 없다. 작성했던 간소한 논문? 보고서? 정도.

 

그러나 많은 공부가 되었다. 리눅스 운영체제 이해나 시스템 함수, 분산 시스템 등 여러 지식에 대해서 직접 겪어보며 공부를 할 수 있었다.

 

구체적으로는 구현 과정에서 C 함수들을 직접 재현하여 로그를 생성하는 과정들이 나에게는 상당히 어렵게 느껴졌다. 직접 전부 구현하지는 않았지만 구현된 소스코드들을 가져와 리팩토링하는 롤이 나에게 주어졌었다. 그 롤을 수행하면서 많은 시행착오들을 느끼고 리눅스 C 함수들의 메모리 문제나 시스템 함수들이 어떻게 커널에 링크되는지 등 이런 부분들을 많이 공부하게 되었다.

 

그리고 분산시스템에서는 성능적인 이슈들도 민감하기에 이런 부분들에 대해서도 많은 공부를 했다. 테스트하면서 성능적으로 어떻게 개선할지 디버깅에 대한 코스트와 성능, 이 두가지에 대한 정답을 내리는 과정도 많은 공부가 되었다.