애플리케이션 배포에 있어 컨테이너의 등장은 분명 소프트웨어 개발과 배포 방식을 혁신적으로 변화시켰습니다. 기존에는 애플리케이션의 종속성, 환경정보, 라이브러리 버전 등으로 인해 환경마다 사전에 고려해야 할 것들도 많았고 예측할 수 없는 오류로 인해 안정성을 유지하기 어려웠습니다. 하지만 컨테이너의 등장으로 운영자는 여러 환경에 구애받지 않고 원하는 만큼의 일관된 환경을 구성할 수 있고 그 동안 배포 과정에서 발생했던 오류를 최소화할 수 있었습니다.
컨테이너의 등장으로 행복하기만 했을까요? 그렇지만은 않을 겁니다. 컨테이너는 애플리케이션 서비스에 필요한 최소한의 것들로 구성된 경량 패키지입니다. 따라서 원하는 만큼 복제할 수도 있고 스케일링 작업도 간편하지만 규모가 커지는 만큼 관리 포인트도 함께 증가하게 됩니다. 만약 한 번의 작업이 100개 컨테이너에 대한 배포이거나 혹은 1000개 컨테이너에 대한 패치라면 이후에 상황을 한꺼번에 모니터링 하기란 쉽지 않을 것입니다. 이런 상황에 많은 운영자들이 어려워하는 부분이 이슈 식별의 어려움입니다. 많은 컨테이너를 운영 중인 상태에서 구간마다 각기 다른 문제가 발생하고 있다면 우리는 효과적인 로깅과 분석방법을 고민해야 할 것입니다.
이번에는 우리가 대비하지 못했던 과거의 이슈를 와탭의 로그 모니터링으로 되짚는 방법에 대해 이야기하려 합니다.
와탭은 모니터링 대상의 업무단위와 개별의 식별 정보를 바탕으로 수집된 다양한 로그를 보여줍니다. 예를 들어 컨테이너 개별 단위, 업무별 단위, 서버 단위로 통합하여 보여줄 수 있고 각 로그 타입에 따라 발생했던 건수를 막대 차트로 시각화하여 수집된 로그의 양과 추이를 살펴볼 수 있습니다. 실시간 조회는 물론 이동하고 싶은 과거로 돌아가 미처 발견하지 못했던 문제와 버그를 식별할 수 있고 사용자 동작, 트래픽 패턴, 리소스 사용률 등의 정보를 얻을 수 있습니다. 또한 보안이 중요시되는 요즘 보안 로그를 포함하여 과거 로그를 모니터링하면 악의적인 활동을 탐지하고 보호 조치를 취할 수 있습니다. 로그를 잘 눈여겨보면 비정상적인 활동, 침입 시도, 보안 위협과 관련된 로그를 확인하여 시스템의 안전성을 강화하는 것도 가능하죠.
마찬가지로 과거의 시간으로 돌아가면 현재는 존재하지 않는 컨테이너들의 로그도 다시 조회할 수 있습니다. 일반적으로 OOM Killed 등 여러 요인으로 인해 사라져버린 컨테이너들의 로그를 다시 확인하는 것은 어려울 수 있습니다. 컨테이너 사상에서는 현재 특정 컨테이너에 어떠한 문제가 생겼을 때 이를 지금 고치는 것이 아니라 ‘버리고 새로운 것을 만들자’의 성격이 강했습니다. 문제 상황을 빠르게 조치하고 서비스 중단 시간을 줄일 수 있다는 장점이 있지만, 문제가 되는 당시 시간에 컨테이너 내에서 어떤 상황이 있었는지 뒤늦게 살펴보기에는 다소 불편할 수 있습니다. 지금은 이미 사라져버렸기 때문입니다. 이를 위해 Elasticsearch, Logstash , Kibana(ELK 스택), Grafana 등 별도로 이용할 수 있는 로깅 및 모니터링 관련 도구들이 있지만 와탭 이용자라면 같은 기능을 더욱 편리하게 사용할 수 있습니다.
쿠버네티스 모니터링을 함께 사용 중이라면 여러 과거 시간으로 이동하며 애플리케이션 로그와 K8s Event 로그를 함께 살펴볼 수 있습니다. 애플리케이션 로그는 애플리케이션 내부에서 발생하는 이벤트 및 오류 정보를 기록합니다. 쿠버네티스 이벤트 로그는 클러스터의 상태 변경, Pod Scheduling, Node 문제 등과 관련된 이벤트 정보를 기록하기 때문에 이 두 가지 로그 유형을 함께 모니터링하면 애플리케이션과 클러스터에서 발생하는 문제를 신속하게 진단하고 해결할 수 있습니다.
로그 파싱을 적용하면 불규칙한 형태라도 쿼리가 가능한 형태로 모니터링할 수 있습니다. 로그를 파싱 하는 방법에는 두 가지가 있습니다.
1. GROK 파서: 임의의 형태로 수집되는 로그를 정규 표현식과 GROK 문법을 활용해 파싱 합니다.
2. JSON 파서: JSON 형태로 수집되는 로그를 파싱 합니다.
로그를 파싱 하면 대량의 데이터를 필터링하고 원하는 정보만 추출할 수 있습니다. 이로써 복잡한 로그 데이터에서 중요한 정보만을 선별하여 모니터링하고 분석할 수 있으며 너무 많은 정보의 오버로드를 방지하여 유용한 데이터에 집중할 수 있게 해줍니다.