【Logstash】UiPath 로그용 grok 패턴을 마음대로 해설

이전에 게시한 【UiPath】로봇 가동률을 보이게 한다(Orchestrator 없음)의 속편입니다.

Excel이 아닌 Elastic Search + Kibana로 멋지게 로그 가시화하려고 생각해, 미야이치 료히코씨라고 하는 대단한 쪽의 Medium 기사 를 참고로 했습니다만, ES 초보자의 자신에게는 Logstash의 filter 주위의 설정(특히 grok filter)을 이해하는 데 시간이 걸렸습니다.

여러가지 조사해 드디어 이해할 수 있었으므로, 똑같이 고민되고 있는 ES 초보자의 참고가 된다고 생각해, 실례라고 알면서 보충 해설하겠습니다.

해설 대상, 설정 인용원>
로봇 로그를 Logstash로 수집 > 설정 > logstash.conf의 필터 부분

filter로 하고 있는 일의 자세하게 해설



우선 UiPath의 실행 로그 1행은①15:19:44.0976 ②Info ③{"message":"XXXX の実行が開始しました","level":"Information",...}
  • ① 타임스탬프(단, 시분초만)
  • ②로그 레벨(Info/Error/...)
  • ③ 로그 메시지나 타임스탬프, 머신명 등의 상세 정보가 담긴 Json

  • 와 같이 크게 3블록으로 구성되어 있으므로, 각각을 field1, field2, field3라는 변수로 분해하고 있습니다.
    여기 match 패턴match => { "message" => "(?<field1>(\S+)) (?<field2>(\S+)) (?<field3>(.+))" }는 다음 장에서 설명합니다.

    그리고 분해한 ③의 field3을 Json 퍼스 해 ES에 건네주고, 후에는 Json중의 타임 스탬프의 포맷 지정이나 타임 존 지정을 하거나, ES에 보낼 필요가 없는 Field(message, field1, field2, field3, path )를 제거하고 있습니다.

    grok의 match 패턴 해설


    match => { "message" => "(?<field1>(\S+)) (?<field2>(\S+)) (?<field3>(.+))" }설명합니다.

    ES 공식 : Grok filter plugin > Custom Patterns에 따르면(?<field_name>pattern)라고 정의하면 원래의 message 중 pattern에 합치한 부분을 field_name에 격납해 준다, 라고.
    그럼 pattern이다 \S+ 라든지 .+ 란 무엇인가? 된다.

    Regular Expressions (Regex) 참조
  • 우선 \s는 반각 스페이스, 개행, 탭, 페이지 나누기 (\n\r\t\f) 어느 한 글자를 가리킨다
  • \S 대문자 반전으로 역의 의미 →반각 스페이스, 개행, 탭, 개 페이지가 아닌 1 문자
  • \S+ +는 1문자 이상의 반복→반각 스페이스, 개행, 탭, 개 페이지를 포함하지 않는 캐릭터 라인

  • 된다..는 "개행이 아닌 단일 문자"를 가리키므로 .+는 "개행이없는 문자열"이됩니다.

    field1, field2가 \S+이고, field3만 .+인 것은, field3의 대상이 되는 Json안에 반각 스페이스등이 들어오는 것을 상정되고 있다고 생각합니다. (사용자가 Log Message 활동으로 출력한 메시지도 들어오므로)

    이렇게 로그 ①②③ 각각의 블록을 편리하게 꺼낼 수 있다는 것입니다. 으~응, 과연.

    덧붙여서 아파치의 로그 등 자주 세상에서 사용되는 patten은 디폴트로 정의되고 있으며, 스스로 새로운 pattern을 정의하고 이름을 붙일 수도 있습니다.
    참고 > Grok patterns

    Logstash 결과



    설정의 의미를 이해할 수 있었으므로, 상기 Mediam 기사에 따라 Logstash 경유로 ES에 폴더에 모인 로그를 정리해 보냈습니다.

    Index가 생성되고 Json의 각 Field가 반영됩니다.


    Discovery 화면에서 레코드(Document)의 존재도 확인할 수 있었으므로 드디어 시각화 준비가 되었습니다.


    이번은 여기까지.
    생각대로 ES에 데이터를 넣기 위해서는 정규 표현의 이해가 중요하다는 것을 알았습니다.

    덧붙여서 가시화·효과 측정이라는 의미에서는 Forward III에서 본 UiPath Insights을 매우 기대하고 있어 서비스로서 Ready가 되면 회사에서 꼭 검증하고 싶습니다.

    좋은 웹페이지 즐겨찾기