내 데이터베이스에서 감사를 읽으려고 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을
logstash 구성을 공유 할 수 있습니까? – Val
@Val이 추가했습니다. 나는 여러 가지 방법으로 그걸 가지고 노는 시도를했는데 아무런 변화가없는 것 같아서 그게 적절하다고 생각하지 않습니다. – joniba
네 번째 점에 대해서'since_ *'설정을 사용해 보셨습니까? – Val