구조화되지 않은 텍스트를 JSON으로 변환
IBM® Cloud Logs에서 구문 분석 규칙을 사용하여 구조화되지 않은 텍스트를 하나 이상의 JSON 필드로 변환할 수 있습니다.
시작하기 전에
구문 분석 규칙은 규칙 그룹내에서 구성됩니다. 각 그룹에는 이름과 이름 사이에 논리적 관계가 있는 규칙 세트가 있습니다. 로그는 규칙 그룹의 순서에 따라 처리됩니다 (처음부터 끝까지). 그런 다음 규칙 그룹 내에서 규칙의 순서에 따라 처리되고 이들 사이의 논리 연산자 (AND/OR) 에 따라 처리됩니다. 규칙은 로그 데이터를 처리, 구문 분석 및 재구성하여 모니터링 및 분석을 준비하는 데
도움이 됩니다. 자세한 정보는 규칙 그룹에 대한 작업 을 참조하십시오.
이름 지정된 캡처된 그룹을 사용하여 새 필드 정의
구문 분석 규칙은 RegEx 이름 지정된 캡처 그룹을 사용하여 새 필드를 정의합니다.
- 캡처된 그룹은 구문 분석된 로그 필드가 됩니다.
- 각 그룹과 연관된 값이 필드의 값이 됩니다.
- RegEx 는 전체 로그와 일치할 필요가 없습니다.
- RegEx 이름 지정된 캡처 그룹 (
< >내의 값) 및 캡처하는 값만 재구성된 로그의 일부입니다.
구문 분석 규칙 구성
다음 단계를 완료하여 1개의 구문 분석 규칙이 있는 규칙 그룹을 작성하십시오.
-
데이터 파이프라인 아이콘
> 구문 분석 규칙 을 클릭하고 새 규칙 그룹을 클릭하십시오.
-
세부사항 섹션에서 규칙 그룹 이름 및 규칙 그룹 설명을 입력하십시오.
-
규칙 일치 프로그램 섹션에서 규칙 그룹에 포함된 규칙을 적용할 로그를 정의하는 애플리케이션, 서브시스템 및 심각도를 구성하십시오.
-
규칙 섹션에서 구문 분석
을 선택하십시오.
-
이름을 입력하십시오.
-
선택적으로 설명을 입력하십시오.
-
소스 필드를 선택합니다. RegEx 가 적용되는 필드입니다.
-
대상 필드를 선택합니다. RegEx 표현식을 적용한 결과로 채워질 필드입니다.
-
정규식 (RegEx) 을 입력하십시오.
-
규칙을 사용하려면 상태를 활성 으로 전환하십시오.
-
-
규칙 추가 를 클릭하고 원하는 규칙 유형을 선택하여 추가 규칙 그룹을 추가하십시오. AND/OR 를 토글하여 추가 규칙을 처리할 방법을 선택하십시오.
-
규칙 그룹 만들기를 클릭합니다.
예제 로그 변환
다음 예제에서는 Heroku에서 전송된 Heroku L/H 유형 오류 로그를 구조화되지 않은 로그로 사용하고 이를 JSON 로그로 변환합니다.
원래 로그는 다음과 같습니다.
sock=client at=warning code=H27 desc="Client Request Interrupted" method=POST path="/submit/" host=myapp.herokuapp.com fwd=17.17.17.17 dyno=web.1 connect=1ms service=0ms status=499 bytes=0
RegEx 는 다음과 같습니다.
^(sock=)?(?P<sock>(\S*))\s*at=(?P<severity>\S*)\s*code=(?P<error_code>\S*)\s*desc="(?P<desc>[^"]*)"\s*method=(?P<method>\S*)\s*path="(?P<path>[^"]*)" host=(?P<host>\S*)\s* (request_id=)?(?P<request_id>\S*)\s*fwd="?(?P<fwd>[^"\s]*)"?\s*dyno=(?P<dyno>\S*)\s*connect=(?P<connect>\d*)(ms)?\s*service=(?P<service>\d*)(ms)?\s*status=(?P<status>\d*)\s* bytes=(?P<bytes>\S*)\s*(protocol=)?(?P<protocol>[^"\s]*)$
형식화된 로그는 다음과 같습니다.
{
"sock": "client",
"severity": "warning",
"error_code": "H27",
"desc": "Client Request Interrupted",
"method": "POST",
"path": "/submit/",
"host": "myapp.herokuapp.com",
"request_id": "",
"fwd": "17.17.17.17",
"dyno": "web.1",
"connect": "1",
"service": "0",
"status": "499",
"bytes": "0",
"protocol": ""
}