타파스에서 사용하는 로그를 정리할 필요성을 느꼈다. 왜냐하면 운영하는 사람의 입장에서는 로그의 중요성이 매우 크다. 로그에 오류를 확인해서 조치를 취해야 할 경우가 많다.
aplib/aplog.c에서는 콘솔출력, 파일에 출력, 로그를 처리하는 프로세스에 로그데이타를 전송하는 기능 등을 구현했다. 로그데이타를 전송할때 사용한 기술은 메세지큐, kafka이다. 로그데이타를 받은 프로세스에서는 파일로 출력, mongo-db에 저장을 했다.
이방법 보다 좋은 방법이 없을까? 웹서치를 계속 했다. 그래서 발견한 방법이 Fluent-Bit -> ELK(Elasticsearch-Logstash-Kibana)조합이다.(Logstash는 사용안함) k8s에 Fluent-bit를 설치하면 로그를 일정포맷으로 Elasticsearch로 전송한다. 전송된 데이타를 Kibana로 조회해서 사용한다. 가장 보편적으로 많이 사용하는 방법인것 같다.
데이타의 포맷은 JSON포맷으로 많이 사용된다. 타파스에서 사용하는 로그포맷을 정해 보았다.
| 키 | 값 |
|---|---|
| timestamp | 출력일자/시간 |
| level | 로그레벨(DEBUG,INFO,NOTICE,WARN,ERROR,FATAL) |
| message | 로그내용 |
| pgname | 프로세스명 |
| hostname | 호스트명 |
지금까지 개발된 타파스의 로그는 JSON포맷도 아니고 정형화가 되어 있지 않았다. zlog 라이브러리를 채택해서 타파스의 로그를 전체적으로 수정했다.
일단, pflib, aplib의 라이브러리에서는 치명적인 오류인 경우 콘솔로만 출력한다. 그외 오류는 errCode, errMsg에 설정을 한다. 그래서 호출한 쪽에서 오류체크를 해서 오류로그를 출력해야 한다.
initApSqlSt()를 호출해서 치명적인 오류는 NULL를 리턴한다. 그외의 오류는 errCode = -1, errMsg="오류메세지"를 세트한다.
위와 같이 오류를 체크해서 ap_dput_log()로 오류메세지를 출력한다.
kibana에서 오류메세지 확인 가능하다.

댓글
댓글 쓰기