로그

로그

ServiceWatch의 로그를 사용하면 로그를 제공하는 서비스의 자원으로부터 수집된 로그 파일을 모니터링, 저장하고 액세스할 수 있습니다.

로그 그룹1로그 그룹1로그 그룹1로그 그룹2로그 그룹2로그 그룹2
로그 스트림1로그 스트림2로그 스트림3로그 스트림A로그 스트림B로그 스트림C
로그 이벤트로그 이벤트로그 이벤트로그 이벤트로그 이벤트로그 이벤트
로그 이벤트로그 이벤트로그 이벤트로그 이벤트로그 이벤트
표. 로그 구성 - 로그 그룹, 로그 스트림, 로그 이벤트
참고

로그 구성의 예시로 아래와 같습니다.

  • 📂 로그 그룹: “WebApp-Logs”
    • 📄 로그 스트림 1: “Server-1”
      • 📝 로그 이벤트 1: “[2025-03-20 10:00:01] User logged in”
      • 📝 로그 이벤트 2: “[2025-03-20 10:05:34] Database connection error”

로그 그룹

로그 그룹은 동일한 보존 정책 설정을 공유하는 로그 스트림들의 컨테이너입니다. 각 로그 스트림은 하나의 로그 그룹에 속해야 합니다. 예를 들어, Kubernetes Engine의 각 클러스터의 로그에 대해 별도의 로그 스트림이 있으면 로그 스트림을 /scp/ske/{클러스터 이름} 라는 하나의 로그 그룹으로 묶을 수 있습니다.

로그 보관 정책

로그 보존 정책은 ServiceWatch에 로그 이벤트를 보관하는 기간을 설정할 수 있습니다. 기간이 만료된 로그 이벤트는 자동으로 삭제됩니다. 로그 그룹에 할당된 보존 기간은 로그 그룹에 속한 로그 스트림과 로그 이벤트에 적용됩니다.

보존 기간은 다음 중에서 선택할 수 있으며, 일 단위로 설정됩니다.

보존 기간
  • 만기 없음
  • 1일
  • 3일
  • 5일
  • 1주(7일)
  • 2주(14일)
  • 1개월(30일)
  • 2개월(60일)
  • 3개월(90일)
  • 4개월(120일)
  • 5개월(150일)
  • 6개월(180일)
  • 1년(365일)
  • 13개월(400일)
  • 18개월(545일)
  • 2년(731일)
  • 3년(1096일)
  • 5년(1827일)
  • 6년(2192일)
  • 7년(2557일)
  • 8년(2922일)
  • 9년(3288일)
  • 10년(3653일)
표. 로그 그룹 보존 정책 기간

로그 스트림

로그 스트림은 동일한 소스에서 발생한 순서대로 정렬된 로그 이벤트들의 모음입니다. 예를 들어, 특정 Kubernetes Engine 클러스터에서 발생하는 모든 로그 이벤트는 하나의 로그 스트림을 구성할 수 있습니다.

로그 이벤트

로그 이벤트는 자원에서 발생하는 로그의 기록한 개별 레코드입니다. 로그 이벤트 레코드에는 이벤트가 발생한 시점에 대한 타임스탬프와 로그 메시지, 두 개의 속성이 포함되어 있습니다. 각 메시지는 UTF-8로 인코딩되어야 합니다.

로그 패턴

로그 패턴을 생성하여 패턴에 일치하는 로그 데이터를 필터링할 수 있습니다. 로그 패턴은 ServiceWatch가 수집한 로그 데이터에서 검색할 단어 또는 패턴을 정의하고 로그 발생에 대한 현황을 그래프로 확인할 수 있고, 경보 정책을 생성할 수 있는 지표로 생성합니다.

로그 패턴은 데이터를 소급하여 적용하지 않습니다. 로그 패턴을 생성한 이후에 수집되는 로그 이벤트에 대해 적용됩니다.

로그 패턴 네임스페이스

네임스페이스는 지표를 구분하고 그룹화하기 위한 논리적인 구분입니다. ServiceWatch에서는 서비스와 연계된 네임스페이스, 사용자 정의 지표를 위한 네임스페이스, 로그 패턴을 위한 네임스페이스로 구분됩니다.

  • Virtual Server 등 서비스와 연계된 네임스페이스
  • 사용자 정의 지표로 이루어진 네임스페이스로 사용자 정의 지표 API 또는 ServiceWatch Agent를 통해 수집된 지표의 네임스페이스
  • 로그 패턴에 의해서 만들어진 지표의 네임스페이스

로그 패턴에서 로그 패턴에 대한 지표를 생성할 때 로그 패턴을 위한 네임스페이스로 신규 생성하거나, 생성되어 있는 로그 패턴 네임스페이스 중 선택할 수 있습니다.

지표명

모니터링된 로그 정보가 ServiceWatch의 생성되는 지표의 이름입니다. 지표가 존재하게될 네임스페이스 안에 지표명이 중복되지 않도록 설정해야합니다.

지표값

패턴에 일치하는 로그가 발견될 때마다 지표에 게시하는 숫자 값입니다. 예를 들어, 특정 단어(예: Error)의 출현 횟수를 계산할 경우 각 출현마다 이 값이 1이 됩니다. 전송된 바이트를 계산하는 경우 로그 이벤트에서 발견된 실제 바이트 수만큼 증가시킬 수 있습니다.

기본값

로그 수집할 때 일치하는 로그를 찾을 수 없는 기간 동안 로그 패턴에 기록되는 값입니다. 기본값을 0으로 설정하면 이러한 모든 기간에서 일치하는 데이터가 없는 기간 때문에 지표가 불규칙해지는 것을 방지할 수 있습니다.

로그 패턴으로 생성한 지표에 차원을 설정하는 경우 해당 지표에 기본값을 설정할 수 없습니다.

차원

차원은 지표를 추가로 정의하는 키-값 쌍입니다. 로그 패턴에서 생성된 지표에 차원을 추가할 수 있습니다. 차원은 지표에 대한 고유한 식별자의 일부이므로 로그에서 고유한 이름/값 쌍을 추출할 때마다 해당 지표의 새로운 변형이 생성되는 것입니다.

로그 패턴 형식을 공백 구분 패턴과 JSON 형식 패턴을 선택한 경우에 차원을 설정할 수 있으며, 패턴에서 설정한 파라미터 중 하나로 설정 가능합니다. 지표에 차원을 최대 3개까지 할당할 수 있습니다. 기본값이 설정되어있는 경우 차원을 설정할 수 없습니다. 차원을 설정하려면 기본값을 사용하지 않도록 설정해야합니다.

패턴 형식

ServiceWatch가 각 로그 이벤트에서 데이터를 해석하는 방법을 설명한 것입니다. 패턴 형식은 아래와 같이 3가지 중에 선택할 수 있습니다.

  • 문자열 패턴: 특정 문자열이 포함된 로그
  • 공백 구분 패턴: 타임스탬프, IP 주소, 문자열 등 공백으로 구분되는 로그
  • JSON 형식 패턴: 특정 JSON 필드를 포함하는 로그

사용 가능한 정규식 구문

정규식을 사용하여 로그 데이터를 검색하고 필터링하는 경우 표현식을 %로 묶어야 합니다.

정규식을 포함하는 패턴에는 다음만 포함할 수 있습니다.

  • 영숫자 - 영숫자는 문자(A~Z 또는 a~z) 또는 숫자(0~9)에 해당하는 문자입니다.
    • A-Z, a-z, 0-9와 같이 사용할 수 있습니다.
  • 지원되는 기호 문자는 다음과 같습니다.
    • :, _, #, =, @, /, ;, ,, -
    • 예를 들어, %servicewatch!%!이 지원되지 않으므로 사용할 수 없습니다.
  • 지원되는 연산자는 다음과 같습니다.
    • 여기에는 ^, $, ?, [, ], {, }, |, \, *, +, .가 포함됩니다.
    • (, ) 연산자는 지원되지 않습니다.
연산자사용 방법
^문자열의 시작 위치를 일치하는 항목으로 고정합니다. 예를 들어, %^[ab]cd%acdbcd과 일치하며, bcd와 일치하지 않습니다.
$문자열의 끝 위치를 일치하는 항목으로 고정합니다. 예를 들어, %abc$%xyzabcxyabc과 일치하며, abcd와 일치하지 않습니다.
??앞에 오는 문자가 0번 또는 1번 나타나는 경우 일치합니다. 예를 들어, %abc?d%abcdabd 둘다 일치하며, abcabccd는 일치하지 않습니다.
[]대괄호 안에 포함된 문자 목록 또는 문자 범위와 일치합니다. 예를 들어, %[abc]%a, b, c와 일치하고, %[a-z]%a에서 z까지의 모든 소문자와 일치하며, %[abcx-z]%a, b, c, x, y, z와 일치합니다.
{m, n}앞에 오는 문자가 m~n번만큼 반복되는 경우 일치합니다. 예를 들어, %a{3,5}%aaa, aaaaaaaaa와만 일치하며, aaa는 일치하지 않습니다.
||의 양쪽에 있는 문자 중 하나와 일치합니다.
  • %abc|de%abce 또는 abde와 일치할 수 있습니다.
\Escape 문자로, 이 문자를 사용하면 연산자의 특수한 연산자로서의 의미 대신, 문자 그대로를 사용할 수 있습니다.
*앞에 오는 문자와 0개 이상 일치합니다. 예를 들어, %12*3%13, 123, 122223와 일치합니다.
+앞에 오는 문자와 1개 이상 일치합니다. 예를 들어, %12+3%123, 1223, 12223와 일치할 수 있지만, 13와는 일치하지 않습니다.
.모든 문자와 일치합니다. 예를 들어, %.ab%cab, dab, bab, 8ab, #ab, ab(공백 포함), ab으로 끝나는 3자리 문자열과 일치합니다.
\d, \D숫자 및 숫자 외 문자와 일치합니다. 예를 들어, %\d%%[0-9]%와 같고, %\D%%[^0-9]%와 같이 숫자를 제외한 모든 문자와 일치합니다.
\s, \S공백 문자 및 공백 외 문자와 일치합니다. 공백 문자에는 탭(\t), 공백( ), 줄 바꿈(\n) 문자가 포함됩니다.
\w, \W영숫자 및 영숫자 외 문자와 일치합니다. 예를 들어, %\w%%[a-zA-Z_0-9]%와 같고, %\W%%[^a-zA-Z_0-9]%와 같습니다.
\xhh2자리 16진수 문자의 ASCII 매핑을 일치합니다. \x는 다음 문자가 ASCII의 16진수 값임을 나타내는 Escape 문자입니다. hh는 ASCII 테이블의 문자를 가리키는 2자리 16진수(0~9 및 A~F)를 지정합니다.
표. 로그 패턴 사용 가능한 정규식 구문 연산자
참고
123.123.123.1와 같은 IP 주소를 정규식으로 표현하기 위해서는 %123\.123\.123\.1%와 같이 표현합니다.

문자열 패턴

정규식을 이용한 문자열 패턴

정규식 앞뒤에 %(백분율)로 묶인 정규식 문자열 패턴을 사용하여 로그 이벤트에서 일치하는 패턴을 검색할 수 있습니다. 다음은 ERROR 키워드로 구성된 모든 로그 이벤트를 검색하는 패턴의 예시입니다. 사용 가능한 정규식 구문을 참고바랍니다.

%ERROR%

위 패턴은 아래와 같은 로그 이벤트 메시지와 매칭됩니다.

  • [2026-02-13 14:22:01] ERROR 500 POST /api/v1/checkout (192.168.1.10) - NullPointerException at com.app.controller.CheckoutController.java:55
  • [ERROR] Configuration file not found: /etc/app/config.yaml
형식이 없는 로그 이벤트에서의 문자열 패턴

JSON 등과 같은 형식이 아닌 로그 이벤트에서 문자열을 검색하기 위한 문자열 패턴입니다. 아래는 로그 이벤트 메시지 예시이며, 다양한 문자열 패턴 구분에 맞게 매칭되는 로그 이벤트를 확인할 수 있습니다.

ERROR CODE 400 BAD REQUEST
ERROR CODE 401 UNAUTHORIZED REQUEST
ERROR CODE 419 MISSING ARGUMENTS
ERROR CODE 420 INVALID ARGUMENTS
구분패턴매칭되는 로그 이벤트 메시지
단일 문자열ERROR CODEERROR가 포함된 로그 이벤트
  • ERROR CODE 400 BAD REQUEST
  • ERROR CODE 401 UNAUTHORIZED REQUEST
  • ERROR CODE 419 MISSING ARGUMENTS
  • ERROR CODE 420 INVALID ARGUMENTS
다중 문자열(And 조건)ERROR REQUESTERRORREQUEST라는 문자열이 포함된 로그 이벤트
  • ERROR CODE 400 BAD REQUEST
  • ERROR CODE 401 UNAUTHORIZED REQUEST
다중 문자열(Or 조건)?ERROR ?400ERROR또는 400문자열이 포함된 로그 이벤트
  • ERROR CODE 400 BAD REQUEST
  • ERROR CODE 401 UNAUTHORIZED REQUEST
  • ERROR CODE 419 MISSING ARGUMENTS
  • ERROR CODE 420 INVALID ARGUMENTS
정확히 일치되는 문자열“BAD REQUEST”“BAD REQUEST”라는 정확한 문구가 포함된 로그 이벤트
  • ERROR CODE 400 BAD REQUEST
특정 문자열 제외ERROR -400일부 용어가 포함되고 다른 용어가 제외하는 패턴. 제외하려는 문자열 앞에 -를 입력합니다. 다음은 ERROR라는 문자열을 포함하고 400이라는 문자열를 제외한 로그 이벤트
  • ERROR CODE 401 UNAUTHORIZED REQUEST
  • ERROR CODE 419 MISSING ARGUMENTS
  • ERROR CODE 420 INVALID ARGUMENTS
표. 형식이 없는 로그 이벤트에서의 문자열 패턴

공백 구분 패턴

공백으로 구분된 로그 이벤트에서 일치하는 문자열을 검색하도록 패턴을 생성합니다.

공백 구분 패턴 예시(1)

다음은 공백으로 구분된 로그 이벤트의 예시입니다.

2023-10-27T10:00:01Z [INFO] 1234 login success 192.168.1.1

위 로그 이벤트는 timestamp, logLevel, user_id, action, status, ip를 포함한 공백으로 구분되는 로그 이벤트입니다. 대괄호([]) 와 큰따옴표("") 사이의 문자는 단일 필드로 간주됩니다.

공백으로 구분된 로그 이벤트에서 일치하는 문자열을 검색하는 패턴을 생성하려면 패턴을 대괄호([])로 묶고 쉼표(,)로 이름이 구분된 필드를 지정합니다. 다음 패턴은 6개의 필드를 구문 분석합니다.

[timestamp, logLevel, user_id, action, status = success, ip]와 같은 패턴은 5번째 필드인 statussuccess인 로그 이벤트를 찾을 수 있습니다.

공백 구분 패턴 예시(2)
abc xxx.log james 2023-10-27T10:00:01Z POST 400 1024
abc xxx.log name 2023-10-27T10:00:02Z POST 410 512

위 로그 이벤트는 host, logName, user, timestamp, request, statusCode, size를 포함하는 공백으로 구분되는 로그 이벤트입니다.

[host, logName, user, timestamp, request, statusCode=4*, size]와 같은 패턴은 6번째 필드인 statusCode가 4로 시작하는 로그 이벤트를 찾을 수 있습니다.

공백으로 구분된 로그 이벤트에서 필드 수를 정확히 알지 못하는 경우 말줄임표()를 사용할 수 있습니다. […, statusCode=4*, size]와 같은 패턴은 처음 5개의 필드를 말줄임표로 표현한 패턴입니다.

AND(&&) 연산자와 OR(||) 연산자를 사용하여 복합 표현식을 만들 수도 있습니다. […, statusCode=400 || statusCode=410, size]와 같은 패턴은 6번째 필드인 statusCode400 이거나 410인 로그 이벤트를 찾을 수 있습니다.

정규식으로 사용하여 패턴에 조건을 제공할 수 있습니다. [host, logName, user, timestamp, request, statusCode=%4[0-9]{2}%, size]와 같은 패턴은 6번째 필드인 statusCode4로 시작하는 숫자인 로그 이벤트를 찾을 수 있습니다.

JSON 형식 패턴

JSON 로그 이벤트에서 일치하는 문자열 또는 숫자값을 검색하도록 패턴을 생성할 수 있습니다. 패턴은 중괄호({})로 묶습니다.

문자열 기반 JSON 형식 패턴
  • $.를 활용하여 JSON의 필드를 표현합니다.
  • 연산자는 = 또는 !=를 사용할 수 있습니다.
  • 필드와 비교할 문자열은 큰따옴표("")로 묶을 수 있습니다. 영숫자 이외의 형식과 밑줄 기호가 포함된 문자열은 큰따옴표로 묶어야 합니다. 별표(*)를 와일드카드로 사용하여 텍스트와 일치시킵니다.
{ $.resourceType = "trail" }
{ $.resourceType = "%trail%" }
{ $.arrayKey[0] = "value" }
숫자 값을 검색하는는 JSON 형식 패턴
  • $.를 활용하여 JSON의 필드를 표현합니다.
  • 숫자 연산자를 사용할 수 있습니다.
    • 보다 큼(>), 보다 작음(<), 같음(=), 같지 않음(!=), 이상(>=), 이하(<=)
  • 더하기(+) 또는 빼기(-) 기호를 포함할 수 있습니다. 별표(*)를 와일드카드로 사용할 수 있습니다.
{ $.errorCode = 400} 
{ $.errorCode >= 400} 
{ $.errorCode != 500 }
{ $.sourceIPAddress != 123.123.* }

로그 그룹 내보내기

로그 그룹에서 Object Storage로 로그 데이터를 내보내서 로그 보관 및 로그 분석에 사용할 수 있습니다. 동일한 Account에 있는 로그 데이터에 대해 로그 그룹 내보낼 수 있습니다.

로그 그룹 내보내기를 시작하려면 Object Storage 버킷을 생성해서 로그 데이터를 저장해야 합니다.

로그 그룹 내보내기 작업은 로그 양에 따라 시간이 오래 걸릴 수 있습니다. 로그 그룹 내보내기할 때 로그 그룹 내에 특정 스트림을 지정하거나, 시간 범위를 지정하여 로그 그룹 내보내기 작업 시간을 줄일 수 있습니다.

로그 그룹 내보내기는 동일한 Account에 한 번에 1건만 실행할 수 있습니다. 다른 로그 그룹 내보내기를 실행하려면 현재 진행중인 내보내기 작업이 완료되어야 합니다.

로그 그룹 내보내기 이력을 삭제는 내보내기 성공 또는 내보내기 취소 완료 후, 삭제할 수 있습니다. 로그 그룹 내보내기 취소는 로그 그룹을 내보낸 저장 파일이 삭제되는 것은 아닙니다. 로그 그룹을 내보낸 저장 파일을 삭제하려면 Object Storage에서 저장된 파일을 직접 삭제하세요.

로그 그룹 내보내기 상태설명
Success로그 그룹 내보내기 작업이 성공적으로 완료되었습니다.
Pending로그 그룹 내보내기 작업 대기 중입니다.
In progress로그 그룹 내보내기 작업이 진행 중입니다.
Failed로그 그룹 내보내기 작업이 실패했습니다.
Canceling로그 그룹 내보내기 작업을 취소 중입니다. 취소 요청이 실패한 경우 Failed 상태로 변경됩니다.
Canceled로그 그룹 내보내기 작업이 취소 완료되었습니다.
표. 로그 그룹 내보내기 상태
경보
이벤트