만두네 민박

Kibana에서 Log 분석하기

by pmj6541

해당 카테고리에서 Kibana - ElasticSearch - Logstash - filebeat 를 통해 Log 분석을 위한 ELK Stack 을 구성하였다.

또한 아래의 글에서 분석하기 위한 Log 들을 저장히기 위해 Spring 설정을 해주었다. 이제 남은건 넘어온 Log 들을 어떻게 분석하고, 시각화 하는지 알아내는 것이다.

 

Spring에서 Log 저장

ELK Stack은 Log들을 분석하기 위해 만들어졌다. 그렇다면 이 Log들은 어떻게 얻는가? 나는 Spring 환경의 Log들을 분석하기 위해 ELK Stack을 구성하고 있기 때문에, Spring에서 쌓이는 Log들을 파일로 저장

pmj6541.tistory.com

솔직히 이 과정이 젤 힘들었다.. Kibana 에서 볼때는 너무 많은 내용이 있고, filebeat 에서는 어떻게 로그들을 넘기고 하는게 보이지 않고 구조가 잡히지 않았기 때문이다.. 그래도 다시 보면 이해할 수 있게 최대한 쉽게 적어보자!


filebeat 에서 log를 읽어 logstash로 전송한다.

첫번째 과정은 파일로 저장된 log들을 읽는것부터 시작된다. filebeat.yml 에서 정해준 filebeat.inputs: paths: <지정한 경로> 내의 로그 파일들을 읽어서 Logstash 로 전송한다. 이때 어떻게 전송이 되는가를 잘 보아야 한다.


{
           "ecs" => {
        "version" => "8.0.0"
    },
      "@version" => "1",
          "host" => {
                "name" => "===========",
                  "id" => "======================",
            "hostname" => "======================",
                 "mac" => [
            [0] "======================",
            [1] "======================",
            [2] "======================",
            [3] "======================"
        ],
        "architecture" => "x86_64",
                  "os" => {
              "kernel" => "======================",
                "name" => "===========",
            "platform" => "windows",
              "family" => "windows",
               "build" => "22621.1413",
                "type" => "windows",
             "version" => "10.0"
        },
                  "ip" => [
            [0] "====================",
            [1] "====================",
            [2] "====================",
            [3] "====================",
            [4] "====================",
            [5] "====================",
            [6] "====================",
            [7] "===================="
        ]
    },
           "log" => {
        "offset" => ======,
          "file" => {
            "path" => "<로그 파일 경로>"
        }
    },
         "event" => {
        "original" => "2023-05-03 17:30:38.860 INFO  27015272 --- [ SpringApplicationShutdownHook ] c.z.h.HikariDataSource : HikariPool-1 - Shutdown initiated..."
    },
       "message" => "2023-05-03 17:30:38.860 INFO  27015272 --- [ SpringApplicationShutdownHook ] c.z.h.HikariDataSource : HikariPool-1 - Shutdown initiated...",
         "agent" => {
             "version" => "8.7.0",
                "name" => "DESKTOP-493G649",
                "type" => "filebeat",
        "ephemeral_id" => "b3395cad-dc35-4448-bcc7-4dc46bdada61",
                  "id" => "18dc0bfa-c39b-442d-a3c5-ef6a88b0bbac"
    },
    "@timestamp" => 2023-05-04T00:14:24.922Z,
         "input" => {
        "type" => "filestream"
    },
          "tags" => [
        [0] "beats_input_codec_plain_applied",
        [1] "_grokparsefailure"
    ]
}


다음은 filebeat로 전송하는 log 한줄의 json 이다. 개인정보로 취급되는 내용들은 "======" 으로 변경하였다. 우리가 분석하고자 하는 log 한줄은 original 과 message 에 탑재되어있다.


Logstash는 전송받은 json을 다시 파싱한다.

logstash 에서 주목할 점은 filter에 있다. 위의 내용을 받은 logstash는 message 항목에서 유효한 정보를 얻어내기 위해 파싱 작업을 해야 하고, 이는 filter를 통해 진행된다.  

Logstash config 파일 내 filter 내용

filter 항목 내 grok를 활용해 message에 해당하는 정보 내에서 양식에 맞게파싱해준다.

grok 패턴 테스트 사이트에서 로그 한줄과 위 그림에서 match의 값에 해당하는 내용을 넣어주면 파싱이 잘 됨을 확인할 수 있다. 추후 본인 로그 양식에 맞게 수정하도록 하자.

 

Test grok patterns

 

grokconstructor.appspot.com

파싱을 완료한 뒤 message 필드는 필요 없으니 삭제해준다.

그 후 logstash는 elastic search 로 해당 json을 전송한다.


Logstash는 elasticsearch로 전송할때 index로 이름을 지정한다.

Logstash config 파일 내 output 내용

elasticsearch 로 파싱한 내용을 전송할 때 index를 통해 구분할 수 있도록 한다. 전송한 로그의 제목이라고 생각하면 된다. 현재 나는 일자별로 다른 index를 부여하고자 하였기 때문에 name-%{+YYYY.MM.dd} 로 index 명을 정하였다.


마무리! Kibana 에서 전송받은 내용을 확인하자.

kibana 페이지 우측 하단을 보면 Manage index lifecycles 가 있다.

Manage index lifecycles

좌측 메뉴 탭에서 Index Management로 들어간다.

참고 이미지 - Index Management

이곳에 내가 index로 명명한 내용으로 log 들이 쌓여 있는것을 볼 수 있다. 이것을 확인 했다면 다음은 시각화!

다시 홈으로 가서 이번엔 Analytics - Discover를 클릭한다.

Kibana Analytics 탭
Kibana Discover 탭

이곳에서 전송받은 index 들을 선택하여 시각화 할 수 있다!

Discover 탭 내 Data View 선택 화면

현재는 test로 설정되어 있는 모습니다. 여기서 내가 원하는 Data View 를 새로 생성하자.

test 옆의 화살표를 누르면 다음과 같은 화면을 볼 수 있다. 여기서 Create a data view 를 클릭해주자. 

Data views 생성 화면

클릭하게 되면 다음과 같이 Data view 를 생성할 수 있고, 아래 화면의 우측에 전송받은 index 들이 나열되어 있을 것이다. 

index pattern에 원하는 내용을 입력한 후 아래 Save data view to Kibana 를 누르게 되면 Data view가 생성된다.

Data View 생성 화면

마지막으로 Available fields 항목에서 이전에 파싱하였던 필드들을 찾아 추가해주면 해당 항목들을 기준으로 데이터 뷰들을 보여주게 된다!

끝!

'Java Backend > Elk stack' 카테고리의 다른 글

filebeat 연결  (1) 2023.05.03
LogStash, ElasticSearch, Kibana 연결  (0) 2023.04.27
ELK 설치 - Kibana, ElasticSearch  (0) 2023.04.26
Log 관리를 더 쉽게 - ELK란?  (0) 2023.04.25

블로그의 정보

만두네민박

pmj6541

활동하기