2017-02-12 1 views
0

내 데이터베이스에서 감사를 읽으려고 logstash-input-mongodb 플러그인을 설정하려고하지만 모든 구문 분석 전략에 문제가있는 것으로 보이며 사용자 정의 방법이 표시되지 않습니다.logstash-input-mongodb : 출력 제어?

"flatten"parse_method는 매우 잘 작동하지만 mongodb 객체 ID를 무시하고 log_entry 필드를 제외하고 어디에도 출력하지 않습니다.

"간단한"parse_method에는 개체 ID가 포함되어 있지만 날짜 필터 (예 : "2017-02-12 16:30:00 UTC")를 구문 분석하는 방법을 알 수없는 방식으로 날짜가 출력됩니다. 그런 다음 적절한 타임 스탬프가없는 경우 플러그인은 현재 시간과 관련이없는 타임 스탬프를 자체적으로 생성하는 것으로 보입니다 (예 : 2022 년).

"dig"방법 나는 아직 알지 못했습니다.

그래서 내 질문 :

  • log_entry에서 데이터를 구문 분석하는 방법 (아래 예 참조) 필드 플러그인 출력은 있습니까? json 필터를 시도했지만 루비 형식이므로 json이 아닙니다.
  • 또는 개체 ID를 포함하는 "병합"메서드를 가져 오는 방법이 있습니까?
  • 또는 mongodb ISODate 필드의 형식을 올바르게 지정하는 "간단한"방법을 얻으려면 무엇이 있습니까?
  • 플러그 인이 처음부터 데이터를 읽지 못하도록 막는 방법이 있습니까? (마지막 날 또는 그 이상을 logstash에 넣기를 원합니다)?

    { 
         "audit-id" => "58a2edc916e057270065fa74", 
         "created" => "2017-02-14T11:45:13Z", 
          "type" => "mongodb-audit", 
         "audit-type" => "PaymentAudit", 
         "mongo_id" => "58a2edc916e057270065fa74", 
         "expiresAt" => "2017-05-15T11:45:13Z", 
        "lastUpdated" => "2017-02-14T11:45:13Z", 
         "@timestamp" => 2017-02-14T11:45:13.000Z, 
         "log_entry" => "{\"_id\"=>BSON::ObjectId('58a2edc916e057270065fa74'), \"order\"=>BSON::ObjectId('a8a2f205790858970046aa59'), \"_type\"=>\"PaymentAudit\", \"lastUpdated\"=>2017-02-14 11:45:13 UTC, \"created\"=>2017-02-14 11:45:13 UTC, \"payment\"=>BSON::ObjectId('58a2edc02eafcd560101ee5f'), \"organization\"=>BSON::ObjectId('56edde0ba33e1c03ff54a5ec'), \"status\"=>\"succeeded\", \"context\"=>{\"type\"=>\"order\", \"id\"=>BSON::ObjectId('58a2e205790852270046ab59')}, \"expiresAt\"=>2017-05-15 11:45:13 UTC, \"__v\"=>0}", 
         "logdate" => "2017-02-14T11:45:13+00:00", 
          "__v" => 0, 
         "@version" => "1", 
        "context_type" => "order", 
          "status" => "succeeded", 
         "timestamp" => "2017-02-14T11:45:13Z" 
    } 
    

    가 어떻게 위의 log_entry 필드에서 조직을 추출 할 수 있습니다 : log_entry 포함

    input { 
        mongodb { 
        uri => 'mongodb://localhost:27017/test' 
        placeholder_db_dir => '/elk/logstash-mongodb/' 
        placeholder_db_name => 'logstash_sqlite.db' 
        collection => 'auditcommunications' 
        batch_size => 1000 
        parse_method => "flatten" 
        } 
    } 
    
    filter { 
        date { 
        match => [ "timestamp", "ISO8601" ] 
        } 
    } 
    
    output { 
        stdout { codec => rubydebug } 
    } 
    

    예 데이터 :

여기 내 기본적인 하나의, 어떤 구성으로 재현 할 수 있습니까?

내가 해봤 다음

filter { 
    ruby { 
    code => "event.set('organization', eval(event.get('[log_entry]')))" 
    } 
} 

하지만 이것은 rubyexception 던졌습니다 : 오류 logstash.filters.ruby - 루비 예외가 발생했습니다 (평가) : 1 : 구문 오류, 예기치 tINTEGER을

+0

logstash 구성을 공유 할 수 있습니까? – Val

+0

@Val이 추가했습니다. 나는 여러 가지 방법으로 그걸 가지고 노는 시도를했는데 아무런 변화가없는 것 같아서 그게 적절하다고 생각하지 않습니다. – joniba

+0

네 번째 점에 대해서'since_ *'설정을 사용해 보셨습니까? – Val

답변

1

simple parse_method를 사용하는 경우 날짜 필터에 추가 할 수있는 yyyy-MM-dd HH:mm:ss ZZZ 패턴으로 쉽게 타임 스탬프를 파싱 할 수 있습니다. 마지막 점에 관해서는

filter { 
    date { 
    match => [ "timestamp", "yyyy-MM-dd HH:mm:ss ZZZ" ] 
    } 
} 

, 나는 당신이 이미 처리 된 무슨의 커서를 유지에만 다음 logstash 다시 시작할 때이 커서에서 시작하도록 허용 since_* 설정을 확인하는 것이 좋습니다.

+0

다시 말해, since_ * 설정이 고대 항목의 처리를 방해하는 것을 이해하지 못합니다. 예를 보여줄 수 있습니까? 그리고 "yyyy-MM-dd HH : mm : ss Z"는 간단한 파싱 메서드 (예 : "2017-02-12 16:30:00 UTC")에서 반환되는 날짜에 대해서는 작동하지 않습니다. _dateparsefailure 태그가 나타납니다. – joniba

+0

날짜 패턴이 작동하도록 내 대답을 수정했습니다. 나는 그 이후의 물건들과 함께 후속 조치 할 것이다. – Val

+0

감사, 날짜 필터가 작동하는 것 같다. 나는 그것을 영원히 엉망으로 만들었고 그것을 작동시키지 않았다. "log_entry"필드가있는 샘플 출력을 추가했습니다. 어떤 아이디어를 어떻게 개체 ID를 파싱 할 수 있습니까? 한 가지 방법이든 다른 방법이든, 내가 단순하거나 평평하게 사용하든이 필드에서 데이터를 추출해야한다는 것을 알 수 있습니다. – joniba

관련 문제