엔터프라이즈 앱 로깅을 위한 최고의 전략 및 사례!

게시 됨: 2022-02-24

애플리케이션 로그는 앱의 런타임 동안 외부 및 내부 이벤트와 관련된 정보를 전달하는 데 중요한 역할을 합니다. 그리고 가장 중요한 것은 개발자가 이 정보를 실행하는 동안 볼 수 있다는 것입니다. 따라서 버그, 보안 위반 또는 소프트웨어 배포의 이상 현상이 발생할 때마다 앱 로그는 이벤트의 근본 원인을 분석하는 데 유용합니다.

잘 구성된 로그는 예리한 관찰과 즉각적인 조치에 놀라운 역할을 합니다. 전체 시스템이 어떻게 작동하는지 쉽고 빠르게 이해할 수 있고 문제를 사전에 예방하는 데 도움이 됩니다. 그러나 문제 해결 세션은 개발자가 효과적인 로깅 방법을 준수하는 경우에만 생산적입니다. 부적절한 로깅 관행은 원치 않는 문제로 이어집니다. 이제 가장 가능성이 높은 질문은 다음과 같습니다.

  • 무엇을 기록할까요?
  • 로깅을 피하려면 어떻게 해야 합니까?
  • 어떻게 기록합니까?

이 게시물은 엔터프라이즈 앱 로깅에 대한 모범 사례와 로깅 중 피해야 할 사항에 대한 모든 질문에 답합니다.

따라야 할 앱 로깅 모범 사례

타겟 고객 이해하기

로그를 처리하는 동안 앱 로그에는 기계와 사람이라는 두 가지 다른 대상 그룹이 있으며 데이터 처리 방식이 상당히 다르다는 것을 이해하는 것이 중요합니다. 데이터가 구조화되면 기계는 방대한 양의 데이터를 자동으로 빠르게 처리할 수 있지만 인간은 로그를 읽는 데 시간이 필요하기 때문에 상당한 양의 데이터를 처리하는 데 서툴다. 그러나 비정형 데이터의 경우 사람이 기계를 능가합니다.

따라서 로그에서 최상의 결과를 얻으려면 사람은 물론 기계에도 적합한 방식으로 로그를 생성해야 합니다.

다양한 로그 수준의 사용 이해

로그 수준은 시스템 내의 각 이벤트의 심각도를 나타내며 소프트웨어 개발자는 각 이벤트를 언제 사용해야 하는지 알아야 합니다. 다음은 사용 사례 시나리오와 함께 사용 가능한 가장 일반적인 로그 수준입니다.

  • 정보 수준 은 정기적으로 예약된 작업, 중요한 이벤트 배너 및 앱 동작에 있는 정보 메시지와 같은 시스템별 또는 사용자 주도 작업을 처리합니다.
  • 추적 수준 로그를 사용하면 변수 값과 전체 오류 스택을 검사할 수 있습니다. 특정 이벤트에 대한 정보를 제공하기 위한 스택 코드 추적과 같은 정보를 다룹니다. 개발 중 버그를 추적하는 데 사용됩니다.
  • 디버그 수준 은 구체적이고 포괄적인 정보를 나타냅니다. 이 로그는 개발자가 코드를 단계별로 실행하는 데 도움이 되며 일반적으로 디버깅에 사용됩니다.
  • 오류 수준 은 앱이 계속 실행될 수 있지만 영향을 받는 경로에서 기능이 감소하는 오류 발생을 나타냅니다. 따라서 이 수준은 내부 오류 이벤트 또는 오류를 반환하는 API 호출과 같은 오류 조건을 기록하는 데 사용됩니다.
  • 경고 수준 은 오류보다 덜 해로운 이벤트를 나타내지만 조사해야 하는 위험 신호를 나타냅니다. 따라서 이 수준을 사용하여 잠재적으로 오류가 될 수 있는 이벤트(메모리 내 캐시가 용량에 가까워지거나 데이터베이스 호출이 미리 정의된 기간을 초과하는 경우)를 기록합니다. 경고 수준 로그는 자동 경고를 활성화하고 문제 해결 중에 사용하면 오류가 발생하기 전에 시스템의 동작을 이해할 수 있습니다.
  • 치명적 수준 은 앱이 중단되고 치명적인 오류가 발생할 수 있는 심각한 오류 발생을 나타냅니다. 치명적 수준의 로깅은 일반적으로 프로그램의 끝을 나타냅니다. 따라서 이 프로그램은 종료가 선택할 수 있는 유일한 현명한 조치인 경우에만 드물게 사용해야 합니다.

많은 고민 없이 구문 분석할 수 있는 로그 형식 사용

관찰 가능성 플랫폼이 로그에서 데이터를 추출할 수 없는 것은 바람직하지 않습니다. 이러한 상황을 피하려면 쉽게 구문 분석할 수 있는 로그 형식을 사용해야 합니다. 또한 데이터를 쉽게 수집하고 집계할 수 있도록 일관된 로그 구조를 유지합니다.

공통 목적을 제공하는 여러 플랫폼의 경우 모든 응용 프로그램에 대한 로그 형식을 표준화합니다. 이렇게 하면 각 애플리케이션에 관련된 팀이 다양한 속성에 대한 가시성을 요구하더라도 데이터를 관찰 가능성 플랫폼에 통합하는 프로세스가 쉬워집니다. 그리고 사용자 정의된 형식을 사용하는 경우 로그 유형 트리거를 설정하고 고객이 정의한 대로 구문 분석 규칙을 만듭니다.

로그 생성을 위한 효과적인 도구와 건전한 프레임워크 활용

고유한 로깅 환경을 만들어 바퀴를 재발명하는 대신 시도되고 테스트된 로깅 프레임워크와 도구를 활용하십시오. 이 이동은 시간과 번거로움을 줄여줄 뿐만 아닙니다. 또한 일관된 로깅 프레임워크에는 다음과 같은 기능이 있습니다.

로깅 프레임워크의 표준 기능

  • 각 어펜더가 고유한 사용자 정의 로그 패턴 및 출력 형식을 갖는 다양한 어펜더 설정
  • 로거 이름 및 타임스탬프 자동 추가
  • 여러 보안 수준에 대한 지원 및 이러한 수준별 필터링 옵션 제공

로깅 프레임워크의 고급 기능

  • 다양한 코드 구성 요소에 대한 다양한 로그 수준 임계값 구성
  • 대기열이 가득 찰 때마다 하위 수준에서 이벤트를 삭제하는 손실 추가기 사용
  • 특정 메시지가 반복된 횟수를 메시지를 통해 표시하는 로그 요약 어펜더를 사용합니다. 여러 번 반복하는 대신.
  • 로그 수준에 임계값을 설정한 다음 로그 심각도가 높을 때마다 "N개의 하위 수준 로그 라인도 출력"하도록 이를 구성합니다.

개발자에게 친숙한 간결한 로그 메시지 생성

로그 메시지에 더 적은 정보가 포함되어 있으면 모든 중요한 이벤트의 컨텍스트를 생성하는 데 필요한 필수 정보를 캡처하기가 어려워집니다. 그리고 로그 메시지가 너무 길면 성능 문제가 발생합니다. 예를 들어, 큰 로그 파일은 더 높은 I/O와 더 많은 디스크 공간이 사용된다는 것을 의미하며, 이 측면이 파일 시스템에서 지원되지 않으면 전체 성능이 부정적인 영향을 받게 됩니다. 간단히 말해서, 대용량 로그는 스토리지를 소비하고, 검색 로그의 속도를 낮추고, 핵심 문제에서 주의를 산만하게 하여 디버깅을 더 어렵게 만듭니다.

이 문제를 해결하려면 로그 메시지를 최적화해야 합니다. 이를 위해서는 시스템의 기능적 기대와 비기능적 기대치를 철저히 이해하고 그에 따라 기록할 메시지의 품질과 양을 계획해야 합니다. 요컨대, 로그 메시지와 관련하여 품질과 양 사이에서 완벽한 균형을 유지해야 합니다. 모든 로그 메시지는 의미 있고 컨텍스트와 관련이 있어야 합니다. 예를 들어 앱이 내부 API에서 연결 및 데이터 검색에 실패할 경우 실행 중인 앱 수 또는 메모리 공간에 대한 정보를 포함하는 것보다 API 또는 생태계의 네트워크 상태 정보에서 오류 메시지를 로깅하는 것이 더 중요합니다. 응용 프로그램에서 사용합니다.

피해야 할 앱 로깅 관행

적절한 암호화 없이 중요한 데이터 로깅

앱 로그는 다음과 같은 민감한 데이터를 노출해서는 안 됩니다.

  • 사용자 이름, 이름/성, 생년월일, 성별, 청구/우편 주소, 이메일 ID, 연락처, 신용카드 번호, 주민등록번호 등과 같은 PII 또는 개인 식별 정보
  • 업체명 등의 업체명/연락처 직원, 고객 등을 포함한 관련인; 비즈니스 관계; 및 제3자와의 비즈니스 관련 거래.
  • 보안 자격 증명 , 암호 및 인증 토큰
  • 카드 정보, 은행 계좌 번호 및 거래 금액과 같은 금융 데이터 .

GDPR, HIPAA 및 CCPA와 같은 대부분의 개인 정보 보호 법률/규정은 보안 위반 및 심각한 소송으로 이어질 수 있으므로 로그를 통해 전술한 정보를 표시하지 말 것을 권고합니다. 표준 프로토콜에 따라 로그에 재무 데이터가 있는 경우 완전히 마스킹하거나 숨겨야 합니다. 그리고 비즈니스 트랜잭션이 언급되어야 하는 경우 실제 비즈니스 이름/식별자 대신 시스템 생성 이벤트 ID를 사용해야 합니다.

비프로덕션 환경에서 일부 민감한 사용자 데이터를 기록해야 하는 경우 안전을 보장하는 방법은 무엇입니까?

  • 로그에서 숨길 정보를 지정하십시오. 모든 필드에 속성을 첨부하고 "show", "hide", "mask" 및 "encrypt"와 같은 명령으로 가시성 수준을 언급하십시오.
  • 로그 메시지를 필터링하고 관련 환경에 따라 사전 정의된 지침을 준수하는 민감한 필드를 처리하기 위한 파서를 작성하십시오.

공급업체 잠금

특정 공급업체에 종속되지 않도록 로그 관리를 구성해야 합니다. 이러한 이유로 공급업체 라이브러리를 하드코딩하지 마십시오. 대신 이식성을 위해 표준 라이브러리/래퍼를 선택하십시오. 래퍼를 사용하면 앱 코드에서 타사 도구를 명시적으로 언급하지 않거나 적절한 방법론에 따라 로거 인터페이스를 만들고 이를 구현할 클래스를 포함할 수 있습니다. 그런 다음 이 클래스에 타사를 호출하는 코드를 추가합니다.

문제 해결만을 위한 메시지 로깅

문제 해결이 로깅의 주요 목적이라는 것을 우리 모두 알고 있습니다. 그러나 로그 메시지는 다른 작업에서도 매우 유용하기 때문에 문제 해결을 위한 용도로만 로그 메시지를 사용해서는 안 됩니다. 따라서 문제 해결 외에도 다음 비즈니스 작업에 대한 메시지를 기록할 수도 있습니다.

  • 프로파일링: 타임스탬프가 찍힌 로그(때로는 밀리초 수준)는 프로그램 섹션을 프로파일링하는 효과적인 도구로 사용할 수 있습니다. 예를 들어 작업의 시작과 끝을 기록하면 문제 해결 중에 프로그램 자체에 해당 메트릭을 추가하지 않고도 특정 성능 메트릭을 유추할 수 있습니다.
  • 감사: 주목할만한 이벤트, 시스템 사용자의 활동(로그인, 편집 등)을 설명하는 설명을 캡처합니다.
  • 통계 보고서 수집 : 실행 중인 프로그램이나 사용자의 행동에 대한 흥미로운 통계를 수집할 수 있습니다. 또한 연속적으로 발생하는 너무 많은 오류를 감지하기 위해 경고 시스템에 연결할 수도 있습니다.

결론

오늘날 로깅은 비즈니스 인텔리전스, 운영 및 마케팅 전략과 같은 모든 기업의 여러 측면에서 중추적인 역할을 합니다. 그리고 올바른 로깅 기술을 따르고 로그가 효과적으로 작동하도록 하는 것이 매우 중요합니다. 로그 모니터링 및 관리에 대한 모범 사례를 준수하면 비즈니스 운영을 원활하게 실행하고 문제를 더 빠르게 해결하여 개발 프로세스를 더 빠르게 수행할 수 있습니다.

기술 지원이 필요한 경우 인도에서 경험이 풍부하고 유능한 아웃소싱 소프트웨어 개발 회사인 Biz4Solutions에 문의하십시오. 우리는 10년 이상 동안 전 세계 고객에게 탁월한 서비스를 제공해 왔습니다.