2016-07-24 9 views
2

У меня есть сценарий питона, который пишет JSON объекты (построчно) в /var/log/myLog.json с следующим форматом:Logstash фильтрация

{"timestamp":"2016-07-21T01:20:04.392799-0400","in_iface":"docker0","event_type":"alert","src_ip":"172.17.0.2","dest_ip":"172.17.0.3","proto":"ICMP","icmp_type":0,"icmp_code":0,"alert":{"action":"allowed","**gid**":2,"signature_id":2,"rev":0,"signature":"ICMP msg","category":"","severity":3},"payload":"hFuQVwAA","payload_printable":"kk"} 

Я хотел бы использовать Logstash для того, чтобы:

  1. Read объекты JSON, строка за строкой, от /var/log/myLog.json

  2. парсить GID и вперед на другую машину в качестве UDP MSG (данный конкретный IP-адрес + порт) - Например: if gid == 2th ен вперед этот объект JSON в 172.123.10.3:10001

Кроме того, я хотел бы иметь возможность обновлять этот файл конфигурации Logstash динамический фильтр (AKA, чтобы иметь возможность добавить еще одно правило, как: «если GID == x затем запустите этот json-объект для другого IP-адреса).

Как это сделать?

Как должен выглядеть файл (ы) Logstash? И как выглядит команда вставки/удаления динамических фильтров?

Спасибо, ребята.

ответ

0

Вы можете запустить логсташ в качестве поддержки. , и я проверил два примера данных json.

{"timestamp":"2016-07-21T01:20:04.392799-0400","in_iface":"docker0","event_type":"alert","src_ip":"172.17.0.2","dest_ip":"172.17.0.3","proto":"ICMP","icmp_type":0,"icmp_code":0,"alert":{"action":"allowed","gid":2,"signature_id":2,"rev":0,"signature":"ICMP msg","category":"","severity":3},"payload":"hFuQVwAA","payload_printable":"kk"} 
{"timestamp":"2016-07-21T01:20:04.392799-0400","in_iface":"docker0","event_type":"alert","src_ip":"172.17.0.2","dest_ip":"172.17.0.3","proto":"ICMP","icmp_type":0,"icmp_code":0,"alert":{"action":"allowed","gid":3,"signature_id":2,"rev":0,"signature":"ICMP msg","category":"","severity":3},"payload":"hFuQVwAA","payload_printable":"kk"} 



input { 
    file { 
     path => "/etc/logstash/jsonSample.log" 
     start_position => "beginning" 
     sincedb_path => "/dev/null" 
    } 
} 

filter { 
       json { 
         source => "message" 
         target => "doc" 
         add_field => {"alert.gid" => "%{[doc][alert][gid]}"} 
         add_tag => ["tagName_%{[doc][alert][gid]}"] 
       } 


} 


output { 
if "tagName_2" in [tags] { 
stdout {codec => rubydebug} 
}else if "tagName_3" in [tags] { 
} 

} 

Тогда вы можете увидеть результат

{ 
     "message" => "{\"timestamp\":\"2016-07-21T01:20:04.392799-0400\",\"in_iface\":\"docker0\",\"event_type\":\"alert\",\"src_ip\":\"172.17.0.2\",\"dest_ip\":\"172.17.0.3\",\"proto\":\"ICMP\",\"icmp_type\":0,\"icmp_code\":0,\"alert\":{\"action\":\"allowed\",\"gid\":2,\"signature_id\":2,\"rev\":0,\"signature\":\"ICMP msg\",\"category\":\"\",\"severity\":3},\"payload\":\"hFuQVwAA\",\"payload_printable\":\"kk\"}", 
     "@version" => "1", 
    "@timestamp" => "2016-07-25T04:41:11.980Z", 
      "path" => "/etc/logstash/jsonSample.log", 
      "host" => "baklava", 
      "doc" => { 
       "timestamp" => "2016-07-21T01:20:04.392799-0400", 
       "in_iface" => "docker0", 
       "event_type" => "alert", 
        "src_ip" => "172.17.0.2", 
        "dest_ip" => "172.17.0.3", 
        "proto" => "ICMP", 
       "icmp_type" => 0, 
       "icmp_code" => 0, 
        "alert" => { 
        "action" => "allowed", 
        "gid" => 2, 
      "signature_id" => 2, 
        "rev" => 0, 
       "signature" => "ICMP msg", 
       "category" => "", 
       "severity" => 3 
     }, 
        "payload" => "hFuQVwAA", 
     "payload_printable" => "kk" 
    }, 
    "alert.gid" => 2, 
      "tags" => [ 
     [0] "tagName_2" 
    ] 
} 

Вы также можете изменить конфигурацию, которое применяется над ним.

С уважением.

Вы можете передать конфигурацию событийного и JSon фильтра https://www.elastic.co/guide/en/logstash/current/event-dependent-configuration.html

https://www.elastic.co/guide/en/logstash/current/plugins-filters-json.html

+0

Привет, спасибо за вашу помощь! Я не получил, как перенаправить этот объект на определенный IP-адрес. Вы упомянули: выход { если "tagName_2" в [теги] { STDOUT {кодек => rubydebug}} еще, если "tagName_3" в [теги] { } но где раздел сказать Logstash отправить объект на другой адрес? –

 Смежные вопросы

  • Нет связанных вопросов^_^