[logging] Logstash로 여러 이기종 입력을 처리하는 방법은 무엇입니까?

기술 및 비즈니스 로그와 같이 매우 다른 두 가지 유형의 로그가 있고 다음을 원한다고 가정 해 보겠습니다.

  • 원시 기술 로그는 gelf출력을 사용하여 graylog2 서버로 라우팅됩니다 .
  • json 비즈니스 로그는 전용 elasticsearch_http출력을 사용하여 elasticsearch 클러스터에 저장됩니다 .

내가 가진 것을 알고 Syslog-NG예를 들어, 구성 파일이 다음 파견되기 전에 별도로 처리 할 수있는 몇 가지 별개의 입력을 정의 할 수 있습니다; 어떻게 Logstash할 수없는 것 같다. 두 개의 특정 구성 파일로 하나의 인스턴스를 시작할 수 있더라도 모든 로그는 동일한 채널을 사용하고 동일한 처리를 적용하고 있습니다.

다른 유형의 로그가있는만큼 많은 인스턴스를 실행해야합니까?



답변

다른 유형의 로그가있는만큼 많은 인스턴스를 실행해야합니까?

아니! 다른 유형의 로그를 처리하기 위해 하나의 인스턴스 만 실행할 수 있습니다.

logstash 구성 파일에서 다른 유형으로 각 입력을 지정할 수 있습니다 . 그런 다음 필터에서 if 를 사용 하여 다른 처리를 구별 할 수 있으며 출력에서도 “if”출력을 다른 대상으로 사용할 수 있습니다.

input {
    file {
            type => "technical"
            path => "/home/technical/log"
    }
    file {
            type => "business"
            path => "/home/business/log"
    }
}
filter {
    if [type] == "technical" {
            # processing .......
    }
    if [type] == "business" {
            # processing .......
    }
}
output {
    if [type] == "technical" {
            # output to gelf
    }
    if [type] == "business" {
            # output to elasticsearch
    }
}

이것이 당신을 도울 수 있기를 바랍니다 🙂


답변

여러 파일 입력에 태그를 사용했습니다.

input {
    file {
        type => "java"
        path => "/usr/aaa/logs/stdout.log"
        codec => multiline {
            ...
        },
        tags => ["aaa"]
    }

    file {
        type => "java"
        path => "/usr/bbb/logs/stdout.log"
        codec => multiline {
                ...
        }
        tags => ["bbb"]
    }
}
output {
    stdout {
        codec => rubydebug
    }
    if "aaa" in [tags] {
        elasticsearch {
            hosts => ["192.168.100.211:9200"]
            index => "aaa"
            document_type => "aaa-%{+YYYY.MM.dd}"
        }
    }

    if "bbb" in [tags] {
        elasticsearch {
            hosts => ["192.168.100.211:9200"]
            index => "bbb"
            document_type => "bbb-%{+YYYY.MM.dd}"
        }
    }
}


답변

나는 logstash가 Input section에서 2 개 이상의 파일을 읽을 수 없다고 생각합니다. 아래를 시도하십시오

input {
    file {
            type => "technical"
            path => "/home/technical/log"
    }
    file {
            type => "business"
            path => "/home/business/log"
    }
 file {
            type => "business1"
            path => "/home/business/log1"
    }
}


답변