ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Jenkins] Elasticsearch-Kibana를 이용한 로그 모니터링 (2)
    IT 발자취.../서버운영 2020. 4. 9. 15:28

    https://gintrie.tistory.com/45?category=389204

     

    [Jenkins] Elasticsearch-Kibana를 이용한 로그 모니터링

    https://towardsdatascience.com/jenkins-events-logs-and-metrics-7c3e8b28962b Jenkins Events, Logs, and Metrics How to collect information about Jenkins for analysis and data visualization towardsdata..

    gintrie.tistory.com

    1번에서 한 젠킨스 설정이 끝나면 플러그인이 Build가 발생할 때, Logstash 서버로 http 메세지를 전송한다.

     

    Logstash 설정

    9600번 포트로 받는 데이터 입력을 정제 (filter) 하여 표준 입출력과 elasticsearch 서버로 전송

    정제 ( filter )

    • builds.artifactors 는 다양한 결과물이 다량으로 생길 수 있으므로 필드를 제거한다. ( 7번 라인 )
    • header.request_path에서 위에서 설정한 DataSet을 추출 한다. ( 10번 라인 )
      • logstash의 grok 필터를 사용함
      • http header에서 request_path 값을 사용 ( request_path 입력 값 예시 > "request_path" => "/jenkins-build/", )
      • reg_exp를 사용하여 원하는 데이터를 추출 한다. (?<field_name>reg_exp) : Logstash 문법
    • jenkins-queue type을 가진 데이터셋중 queueCauses라는 필드는 array로 되어있음
    "queueCauses" => [
            [0] {
                        "exitTime" => nil,
                       "entryTime" => 1585797986822,
                "reasonForWaiting" => "Waiting for next available executor on ‘RND_Innovation_Team’",
                            "type" => "buildable"
            }
    ]
    • array 형식의 데이터는 split 필터를 이용하여 처리해준다. 이때, 다른 데이터셋에는 queueCauses라는 필드가 없기 때문에 오류가 발생한다.

    • 그러므로 type field 가 jenkins-queue와 일치할 경우, split 필터를 사용하도록 한다.

    jenkins_log.conf

    input {
      http {
        port => 9600
      }
    }
    filter {
      mutate {
        remove_field => [ "[builds][artifactors]" ]
      }
      grok {
        match => ["[headers][request_path]", "(?<type>\b[\w\-]+\b)"]
      }
      if [type] =~ "jenkins-queue" {
        split {
          field => "[queueCauses]"
        }
      }
    }
    output {
      stdout {
        codec => rubydebug
      }
      elasticsearch {
        hosts => "http://127.0.0.1:9200"
        index => "jbuilds_log-%{+YYYY.MM.dd}"
        codec => "json"
        timeout => 120
      }
    }

    Kibana 설정 ( 시각화 )

    logstash가 엘라스틱 서치에 jbuilds_log-<date> 형식으로 인텍스를 생성

    생성된 인덱스의 데이터를 활용하여 의미 있는 데이터를 시각화 ( 단순 노동 첨가 )

     

    데이터 잘 쌓이는지 확인

    kibana > Discover 에서 데이터가 정상적으로 들어오고 있는지 확인

    인덱스가 정상적으로 생성되고 있더라도 해당 인덱스를 사용하려면 Index pattern을 설정해 주어야 한다.

    Kibana > Management > Index Patterns 

     

     

    이미 생성된 index를 사용하여 index pattern을 생성해 준다.

    같은 형식의 index들이 많다면 <index_name>-*로 전체 지정을 해준다.

    Next step > Time filter를 지정해주면 index pattern이 생성된다.

    Index pattern을 생성하면 다음과 같이 들어온 데이터를 확인할 수 있다.

    Discover 설정

    의미 있는 데이터를 추출하기 위해 필요한 필드를 볼 수 있도록 설정

    저장된 추출된 데이터를 jenkins-*_log로 저장

     

    댓글

Designed by Gintire