Фильтрация логов

У меня есть скрипт python, который записывает объекты JSON (построчно) в /var/log/myLog.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"}

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

  1. Прочитайте объекты json построчно из /var/log/myLog.json.

  2. Проанализируйте gid и перешлите на другой компьютер как udp msg (учитывая определенный IP-адрес + порт). Например: если gid==2, перенаправьте этот объект json на 172.123.10.3:10001.

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

Как я могу это сделать?

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

Спасибо, парни.


person Efrat Levy    schedule 24.07.2016    source источник


Ответы (1)


Вы можете запустить logstash в соответствии с приведенной ниже конфигурацией. и я протестировал два образца данных 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

person Tw K    schedule 25.07.2016
comment
Привет, спасибо за вашу помощь! Я не понял, как перенаправить этот объект на определенный IP-адрес. Вы упомянули: output {if tagName_2 in [tags] { stdout {codec =› rubydebug} } else if tagName_3 in [tags] {}, но где раздел, чтобы указать Logstash отправить объект на другой адрес? - person Efrat Levy; 26.07.2016