티스토리 뷰

Elastic Stack

Logstash 로그 수집(1)

아나니리 2021. 1. 12. 21:43

Logstash를 이용한 서비스 로그 수집

 

www.elastic.co/guide/en/logstash/current/input-plugins.html

 

Input plugins | Logstash Reference [7.10] | Elastic

 

www.elastic.co

Logstash는 다양한 input plugin 제공

 

file 및 log4j 로 어플리케이션 로그를 수집했던 경험

 

1. file plugin

logstash-docker.yml 작성

metricbeat를 이용한 Logstash 모니터링이 최신 

monitoring 은 옵션

version: '3'

services:
  file-logstash:
    image: docker.elastic.co/logstash/logstash:${VERSION}
    container_name: file-logstash
    environment:
      - node.name=file-logstash
      - xpack.monitoring.enabled=true
      - xpack.monitoring.elasticsearch.hosts="모니터링 데이터를 보낼 host"
      - xpack.monitoring.elasticsearch.username=logstash_system
      - xpack.monitoring.elasticsearch.password=logstash
    ports:
      - 9600:9600
      - 9700:9700
      - 5044:5044
    volumes:
      - /home/centos/elasticsearch/logstash.conf:/usr/share/logstash/config/logstash.conf
    command: logstash -f /usr/share/logstash/config/logstash.conf

logstash.conf 작성

팀 마다 각각의 로그를 사용중이여서 관리하기가 어려웠음

 

로그 패턴 생성 : grokconstructor.appspot.com/do/match

 

index lifecycle management (ILM)으로 로그 인덱스를 관리

 

filter의 다양한 기능

- mutate : add_field, remove_field 필드 조작

- date : match, target 날짜 변환

- split : 리스트 분리

input {
    file {
        path => [ "log 파일 경로1" ]
        codec => multiline {
            pattern => "^%{TIME} "
            negate => true
            what => "previous"
        }
        start_position => "end"
        tags => ["service1"]
    }
    file {
        path => [ "log 파일 경로2" ]
        codec => multiline {
            pattern => "^\[%{TIMESTAMP_ISO8601} [0-9]*\] "
            negate => true
            what => "previous"
        }
        start_position => "end"
        tags => ["service2"]
    }
}
 
filter {
    grok {
        match => {
            message => [
            "%{TIME:log_time} \[%{LOGLEVEL:level}\s*\] \[%{DATA:thread_name}\] \[%{DATA:class_name}\] %{GREEDYDATA}"
            , "%{TIME:log_time} %{LOGLEVEL:level}\s* \[%{DATA:class_name}\] %{GREEDYDATA}"
            , "%{TIMESTAMP_ISO8601:log_time} *%{LOGLEVEL:level}* \[%{DATA:thread_name}\] %{GREEDYDATA}"
            ]}
    }
}
 
output {
    if "service1" in [tags] {
        elasticsearch {
            hosts => [elasticsearch 주소들]
            ilm_rollover_alias => "service1"
            ilm_pattern => "{now/M{yyyy.MM}}-000001"
            user => 'logstash_writer'
            password => 'writer!2'
        }
    }

    if "service2" in [tags] {
        elasticsearch {
            hosts => [elasticsearch 주소들]
            ilm_rollover_alias => "service2"
            ilm_pattern => "{now/M{yyyy.MM}}-000001"
            user => 'logstash_writer'
            password => 'writer!2'
        }
    }
}

logstash-docker.yml 실행

docker-compose -f logstash-docker.yml up

'Elastic Stack' 카테고리의 다른 글

Index 란?  (0) 2021.01.13
Elasticsearch + Docker + TLS  (1) 2021.01.11
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함