로그 관리는 로그의 생성에서 집계, 저장, 분석, 보관 및 폐기까지 로그 데이터의 처리와 관련된 모든 프로세스를 의미합니다. 로그 관리 시스템은 애플리케이션, 네트워크 또는 서버에서 이뤄지는 모든 것(오류, HTTP 요청 등)을 기록해야 합니다. 이렇게 기록된 로그 데이터는 문제 해결과 분석에 사용할 수 있습니다. 현대의 애플리케이션은 일상적으로 수백만 개에서 수십억 개에 달하는 이벤트를 생성하는 여러 서비스들로 구성되기 때문에, 관리를 하는 것 뿐만 아니라 인시던트 해결을 위해 실행 가능한 인사이트를 도출하기가 상당히 어렵습니다. 이 때문에, 로그 관리는 데브옵스, 옵저버빌리티, IT 관행의 중요한 일부입니다.
로그란 무엇일까요?
로그는 컴퓨터가 개별적인 작업이나 이벤트에 대해 생성하는 기록으로 타임스탬프가 찍혀 있습니다. 거의 모든 최신 소프트웨어 시스템은 로그 데이터를 생성할 수 있으며, 또 로그를 생성하는 것이 모범적인 관행입니다. 로그가 일반적으로 기록하는 데이터는 함수 호출, 오류, HTTP 요청, 데이터베이스 트랜잭션 등이며, 로그는 발생하는 상황에 대한 단계별 상세 정보를 제공합니다.
로그가 왜 중요할까요?
로그는 애플리케이션, 네트워크 또는 서버에서 발생하는 모든 일에 대한 기록입니다. 애플리케이션 모니터링, 오류 추적 및 오류 보고를 위한 기반이 되어주므로 옵저버빌리티에 반드시 필요한 요소입니다. 데이터 로그 없이는 이러한 작업이 불가능합니다.
옵저버빌리티와 모니터링에는 4가지 유형의 텔레메트리 데이터 (메트릭, 이벤트, 로그, 트레이스)가 사용됩니다.
- 메트릭(Metrics)은 집계된 로그 데이터를 기반으로 하며 애플리케이션이 어떻게 실행되고 있는지에 대한 정보를 제공합니다. 뉴렐릭같은 툴은 자동으로 중요한 메트릭을 생성해주며 필요에 따라 사용자가 다른 메트릭을 지정할 수도 있습니다.
- 이벤트(Events)는 애플리케이션에서 발생하는 일을 설명하며,여러 줄로 구성된 로그 데이터로 구성됩니다. 이벤트는 로그보다 스토리지 공간을 더 많이 차지하므로, 보통 로그 만큼 오래 보관되지는 않습니다.
- 로그(Logs)는 이벤트보다 훨씬 세분화된 정보로 애플리케이션에서 일어나는 모든 단계를 설명합니다.
- 트레이스(Traces)는 스팬(span)을 사용해 이벤트를 연결하여, 문제의 근본 원인을 추적하고 해결할 수 있도록 합니다.
네 가지 유형의 텔레메트리 데이터에는 모두 로그라는 공통점이 있습니다. 로그가 없으면 이 네 가지 텔레메트리 데이터를 얻을 수 없기 때문에, 애플리케이션에서 일어나는 일을 관찰할 수 없습니다. 문제에 대해 데이터를 선제적으로 모니터링하는 것이 아니라, 최종 사용자를 통해 문제에 대해 알게 되고 능동적이 아니라 수동적으로 문제를 해결해야 합니다. 문제가 있음을 알게 되어도 로그 없이는 애플리케이션에 대한 오류 기록이 없기 때문에 해결하기가 매우 어렵습니다. 결과적으로 사용자 만족도가 떨어지고 엔지니어는 스트레스를 받으며 고객들은 실망하고 제품이 성공하지 못할 확률도 높아집니다.
로그는 또 다른 이점을 제공합니다. 바로 크기가 매우 작다는 것입니다. 때문에, 이벤트 같은 많은 유형의 데이터보다 전송과 저장이 훨씬 쉽습니다.
로그 관리가 왜 중요할까요?
로그 데이터를 내보내도록 애플리케이션을 설정하는 것만으로는 충분하지 않습니다. "아무도 듣는 사람이 없는 숲 속에서 나무가 쓰러질 때 소리가 나는가?”라는 철학적인 수수께끼를 들어보셨을 겁니다. 답은 소리가 나지 않는다입니다. 로그 데이터의 경우, 데이터가 생성되더라도 제대로 수집되어 저장되지 않으면 로그 정보는 없는 것과 마찬가지가 됩니다. 로그 데이터는 어디론가 보내져야 합니다. 이상적으로는 다른 서비스에서 나오는 데이터와 상호연관시켜 필요에 따라 적절하게 분석하고 검색할 수 있도록 중앙의 위치로 보내져야 합니다.
그러나 중앙화된 데이터 수집은 로그 관리 프로세스의 한 단계에 불과합니다. 로그 관리에는 로그 데이터가 내보내기 되는 순간부터 최종 보관되어 삭제될 때까지, 로그의 모든 수명 주기 단계를 관리하는 것이 포함됩니다.
많은 현대의 애플리케이션에는 마이크로서비스, 분산 시스템 및 클라우드 기반 서비스가 포함되며, 시스템의 각 부분이 자체적으로 로그 데이터를 내보냅니다. 예를 들어 애플리케이션에서 평균 응답 시간이 가장 긴 HTTP 요청이 무엇인지 알아야 한다고 가정해 보겠습니다. 애플리케이션이 분산되어 있는 경우, 여러 서비스가 HTTP 요청을 할 수 있으며 로그 데이터를 한 곳에서 사용할 수 있는 경우에만 서비스를 비교할 수 있습니다. 이 부분에서 로그 관리가 필요합니다.
성공적인 로그 관리를 통해 다음이 가능해집니다.
- 컨텍스트 전환 감소: 로그 데이터를 한 곳에 저장하면 툴과 컨텍스트 간에 전환할 필요가 없습니다. 로그 데이터가 다른 위치에 저장된 경우, 잠재적으로 문제를 해결하기 위해 여러 위치와 툴들을 오가며 확인해야 합니다.
- 더 빠르게 문제 발견 및 해결: 로그 관리 솔루션을 사용하면 컨텍스트에서 로그 데이터를 신속하게 검색, 분석 및 시각화할 수 있으므로 문제가 사용자에게 영향을 미치기 전에 신속하게 식별하고 제거할 수 있습니다.
- 필요한 데이터에 대한 로그 즉시 검색: 효과적인 로그 솔루션은 로그를 자세히 살펴보고 필요한 데이터를 빠르게 얻는 데 필요한 모든 검색 기능을 제공합니다.
- 모든 데이터를 한 곳에서 시각화: 중앙화된 로그 데이터를 사용하면 4가지 텔레메트리 데이터를 사용해 애플리케이션 수행 방식에 대한 높은 수준의 개요를 제공하는 맞춤화된 시각화 및 대시보드를 구축할 수 있습니다.
이러한 이점을 얻으려면 어떤 기능이 필요할까요? 자세히 살펴보겠습니다.
로그 관리 솔루션에는 어떤 기능이 포함되어야 할까요?
로그 관리 툴에 다음 기능이 포함되어 있으면 최대한의 이점을 얻을 수 있습니다.
- 유연하고 포괄적인 계측: 모든 로그 데이터를 한 곳에 수집하려면 애플리케이션을 계측해야 합니다. 계측은 애플리케이션을 통해 흐르는 데이터를 추적하는 에이전트들을 설치하는 프로세스입니다. 여러 클라우드 서비스와 Java, Rails, .NET API, 그리고 React와 JavaScript을 프런트엔드에 사용하는 애플리케이션을 고려해야 합니다. 이러한 각 서비스는 계측되어야 하며, 로그 관리 툴에는 최대한 다양한 프로그래밍 언어와 서비스에 사용할 수 있는 에이전트가 있어야 모든 서비스를 완벽하게 지원할 수 있습니다. 언제든지 애플리케이션의 일부(예: 민감 데이터)를 계측하지 않도록 선택할 수 있지만, 계측되지 않은 서비스는 로그 데이터에 공백을 남깁니다.
- 로그 전달과 호환: 서비스를 계측할 수 없는 경우 로그를 전달해야 합니다. 로그 관리 툴은 로그 전달을 처리할 수 있어야 합니다.
- 강력한 쿼리: 오류가 발생하면 즉시 로그에 액세스할 수 있어야 합니다. 그렇기 때문에 로그 관리 솔루션이 빠르고 효율적으로 데이터를 쿼리할 수 있는 기능을 갖추는 것이 중요합니다. 예를 들어 뉴렐릭은 NRQL(뉴렐릭 쿼리 언어)를 사용해 사용자가 필요한 데이터를 얻을 수 있도록 광범위하고 유연한 쿼리를 제공합니다.
- 안전한 데이터 스토리지: 특히 HIPAA(건강 및 의료 기록을 안전하게 보관하기 위한 표준) 같이 엄격하게 규정 준수가 필요한 애플리케이션에서 민감한 로그 데이터를 처리하려면 보안이 필수적입니다.
로그 관리 프로세스는 어떤 단계로 구성될까요?
로그 관리 프로세스의 주요 단계를 소개합니다.
- 생성: 먼저, 서비스가 로그 데이터를 생성해야 합니다. 서드파티 서비스에는 종종 로그 데이터를 내보내는 기능이 포함되어 있습니다. 서비스를 계측하여 로그를 기록할 수도 있습니다.
- 수집: 로그 데이터 수집은 프로세스의 두 번째 단계입니다. 여기에는 일반적으로 모든 로그가 중앙 위치에서 수집되도록 지원하는 계측과 로그 전달의 조합이 포함됩니다.
- 집계: 집계는 수집된 로그 데이터를 가져와 유용하고 표준화된 형식으로 구성하는 프로세스입니다. 여기에는 다양한 소스의 로그 데이터를 구문 분석하고 데이터가 일관되도록 필요에 따라 데이터 형식을 변환하는 작업이 포함됩니다. 예를 들어 집계된 데이터는 JSON 포맷으로 표준화될 수 있습니다. 로그가 생성된 서비스 또는 IP 주소 같은 추가 컨텍스트를 제공하는 메타데이터로 로그를 보강하는 것도 일반적입니다.
- 저장: 로그 데이터가 수집되면 데이터베이스에 저장해야 합니다. 예를 들어 뉴렐릭으로 전송되는 모든 로그 데이터는 NRDB(뉴렐릭 데이터베이스)에 저장됩니다. 이상적으로는 효율적인 쿼리 및 분석을 위해 데이터가 인덱싱되어야 합니다.
- 아카이브: 일정 기간이 지나면 일부 로그 데이터에 지속적으로 액세스할 필요가 없어지지만, 법적인 이유로 또는 회사 정책이나 다른 목적을 위해 해당 데이터를 보관해야 할 필요가 있을 수 있습니다. 오래된 데이터를 아카이빙하면, 스토리지를 최적화하고 최근 로그 데이터를 보다 효율적으로 쿼리할 수 있습니다.
- 삭제: 공간을 절약하기 위해 일정 기간이 지나면 로그 데이터를 삭제하도록 선택할 수도 있습니다.
궁극적으로 로그 관리 프로세스의 목표는 문제 해결, 분석, 시각화, 보고 및 알림에 로그를 사용할 수 있도록 만드는 것입니다. 효과적인 로그 관리 솔루션 없이는 모두 가능하지 않은 일입니다. 일부 로그 관리 툴에는 이러한 기능이 포함되어 있지만, 애플리케이션 성능 모니터링과 옵저버빌리티 솔루션을 로그 관리와 함께 사용하는 것이 일반적입니다.
로그 관리, 뉴렐릭으로 시작하십시오.
로그 관리에 대해 자세히 알아볼 수 있는 가장 좋은 방법은 직접 체험해보는 것입니다. 지금 바로 무료 뉴렐릭 계정을 신청해 시작해보십시오. 무료 계정에는 매월 100GB의 무료 데이터 수집과 1명의 무료 전체 액세스 사용자 및 무제한 무료 기본 사용자가 포함됩니다. 보다 자세한 내용은 로그 관리 문서에서 확인하십시오.
이 블로그에 표현된 견해는 저자의 견해이며 반드시 New Relic의 견해를 반영하는 것은 아닙니다. 저자가 제공하는 모든 솔루션은 환경에 따라 다르며 New Relic에서 제공하는 상용 솔루션이나 지원의 일부가 아닙니다. 이 블로그 게시물과 관련된 질문 및 지원이 필요한 경우 Explorers Hub(discuss.newrelic.com)에서만 참여하십시오. 이 블로그에는 타사 사이트의 콘텐츠에 대한 링크가 포함될 수 있습니다. 이러한 링크를 제공함으로써 New Relic은 해당 사이트에서 사용할 수 있는 정보, 보기 또는 제품을 채택, 보증, 승인 또는 보증하지 않습니다.