ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • ELK 구축 및 Filebeat로 로그 전송
    🔍 elastic search/💡 elk 2022. 11. 22. 11:23

    📌 Docker Compose 로 ELK 구축


    ELK 구축

    https://github.com/deviantony/docker-elk

    mkdir ~/workspace
    cd ~/workspace
    git clone https://github.com/deviantony/docker-elk.git

     

    Logstash 파이프라인 설정 추가

     

    Logstash 파이프라인 설정은 logstash/pipeline/logstash.conf 를 수정해주면 된다.

    Logstash 파이프라인 설정은 크게 다음의 3단계로 구성된다.

    • Input
    • Filter
    • Output
    input {
            # FileBeat를 통해 로그 수집
            beats {
                    port => 5000
                    host => "0.0.0.0"
                    ssl => false
            }
    
            tcp {
                    port => 4560
                    codec => json_lines
            }
    }
    
    ## Add your filters / logstash plugins configuration here
    filter {
            grok {
                    match => [
                            "message", "\\[%{LOGLEVEL:log_level}\\]"
                    ]
            }
    }
    
    output {
            # 처리한 로그를 Elastic 서버로 전송
            elasticsearch {
                    hosts => "elasticsearch:9200"
                    user => "elastic"
                    password => "changeme"
                    index => "logstash-%{+YYYY.MM.dd}"
            }
    }

     

    ❓Grok
    • 정규표현식을 이용해 원하는 데이터 영역만 추출하는 기능
    grok {
          match => [
                  "message", "\\[%{LOGLEVEL:log_level}\\]"
          ]
    }
    

    로그로 부터 Log Level를 파싱하여 관리하기 위해 사용

    • 로그 메세지에서 Log Level를 파싱하여 커스텀 필드인 log_level로 추가하는 부분이 match 부분이다.

    Log Level은 (INFO, DEBUG, WARN… 등)을 포함하는 사전에 정의된 패턴

    이에 매칭되는 값이 있는 경우 log_level 이라는 필드로 해당 값을 추가

     

    Dokcer Compose 실행

    docker-compose build && docker-compose up -d
    

    ELK 컴포넌트

    • Elasticsearch : 9200 / 9300
    • Logstash : 5000 / 9600
    • Kibana : 5601

    Kibana에서 로그를 확인하기 위해 먼저 축적되는 로그가 있어야 한다.

    • 해당 로그를 기반으로 설정
    • 로그를 받아 저장하기 위해 Filebeat를 사용

     

    📁 Filebeat로 로그 전송


    Filebeat 설치

    $ wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.12.0-x86_64.rpm
    $ rpm -vi filebeat-7.12.0-x86_64.rpm

     

    Filebeat 설정 변경

    sudo rm filebeat.yml
    sudo vi filebeat.yml
    
    // filebeat.yml
    
    filebeat.inputs:
    - type: log
      enabled: true
    
      paths:
        # 각자의 경로에 맞게 수정 ex) - /Users/beomsic/Documents/study/elk/logs/error/*.log
        - /home/로그경로...
        
      # custom fields가 필요한 경우 추가
      fields:
        env: "dev"
        project: "project"
    
      # multiline 설정
      multiline.pattern: ^[0-9]{4}-[0-9]{2}-[0-9]{2}[[:space:]][0-9]{2}:[0-9]{2}:[0-9]{2}[[:space:]]\\[
      multiline.negate: true
      multiline.match: after
    
    setup.kibana:
      # 각자의 서버 주소:5601로 설정
      host: "서버주소:5601"
    
    output.logstash:
      enabled: true
      # 각자의 서버 주소:5000로 설정
      hosts: ["서버주소:5000"]
    
    

    fields

    • fields 하위에는 custom 한 값들을 추가로 넘겨줄 수 있다.
    • 위의 코드에서는 현재 로그를 전송하려는 서버의 환경 정보, 프로젝트 명 추가

    multiline

    • 패턴을 구분자로 하여 여러 라인의 메시지를 1개의 메시지로 인식하도록 처리한다.
    • 이런 패턴을 multiline.pattern 으로 추가
    • multiline.negate 는 true
    • multiline.match 는 after로 주면 된다.
    • 이는 같은 패턴이 나올 때 까지 이전 로그에 붙인다는 것을 의미

     

    연결 테스트

    • 설정 정보 테스트
    filebeat test config
    
    • 연결 테스트
    filebeat test output
    

    시작 및 종료

    • 로드
    filebeat setup -e
    
    • 시작
    filebeat run
    

     

    📌 Kibana 설정 및 모니터링


    Kibana 설정

    index Pattern 설정

    Stack Management → Index Patterns → Create index pattern

    • 이때, Elastic으로 전송된 로그가 있어야 한다.

    Logstash output 설정에 작성한 인덱스 패턴을 추가.

    • Logstash output 설정에서 작성한 elk 로 시작하는 인덱스 패턴의 형태로 로그가 작성된다.

    로그 모니터링

    Discover 로 이동

    → 로그 확인

     

    참고자료

    https://mangkyu.tistory.com/197

    https://techblog.woowahan.com/2659/

    https://heodolf.tistory.com/23

    https://github.com/deviantony/docker-elk

     

    댓글

Designed by Tistory.