반응형

mongoDB 로그를 filter해서 kibana에서 봐야할 일이 생겼다.


shipper부분에서 filter grok 부분을 작성해줘야되는데, 커스터마이즈가 쉽지 않아서

이리저리 구글링하다가 정상적으로 동작하는 구문을 발견!


대충 아래처럼 적어주고 shipping 하면 redis로 잘 적재되고, elasticsearch가 indexing하는데 문제가 없었다.

mongoDB는 3.0버전을 사용하였고, 2.x버전에서는 잘 안될지도 모르겠다. match 구문에 보면 MONGO3라고 되어있기 때문이지..


[logstash.conf]


input {
  file {
    path => "/data/log/mongodb/mongod.log"
    type => mongodb
    start_position => "end" # rotate policy 같은건데, 별 차이 없으므로 default인 end로 그냥 놓는다.
# 자세한 설명은 공홈에... (https://www.elastic.co/guide/en/logstash/current/plugins-inputs-file.html)
  }
}

filter {
  grok {
       match => ["message","%{TIMESTAMP_ISO8601:timestamp}\s+%{MONGO3_SEVERITY:severity}\s+%{MONGO3_COMPONENT:component}%{SPACE}(?:\[%{DATA:context}\])?\s+%{GREEDYDATA:body}"]
  }
  if [body] =~ "ms$"  {
       grok {
        match => ["body",".*\}(\s+%{NUMBER:spend_time:int}ms$)?"]
       }
 }
 date {
   match => [ "timestamp", "ISO8601" ]
   #remove_field => [ "timestamp" ]
  }
}

output {
   if [type] == "mongodb" {
     redis {
       host => "서버 host"
       port => "포트"
       data_type => "list"
       key => "redis에 어떤 key로 넣을 것인지"
     }
   }
}
반응형
,