# Парсинг логов в Logstash с помощью grok

**URL:** <https://discuss.elastic.co/t/logstash-grok/155037>\
**Category:** Вопросы на русском языке\
**Created:** [November 1, 2018, 3:00pm UTC](https://discuss.elastic.co/t/logstash-grok/155037 "2018-11-01T15:00:07Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![artem33region](https://avatars.discourse-cdn.com/v4/letter/a/f07891/32.png) [@artem33region](https://discuss.elastic.co/u/artem33region)\
**Post date:** [November 1, 2018, 3:00pm UTC](https://discuss.elastic.co/t/logstash-grok/155037/1 "2018-11-01T15:00:07Z")

</div>

Всем привет, пытаюсь в grok debugger распарсить лог, и впринципе все получается, но...  
Есть лог:  
`"11/01/2018 11:41:36","767","<8F753F80AA7E5221FDF8B1086CD4FC58@domain.ru>","info@domain.ru","ma@domain.ru","", **"Аудиокниги ""Модель для сборки"" - Самая полная и качественная коллекция. 09_09_2018 02_10 201694"** ,"68870","KAS_STATUS_SPAM","","","01.11.2018 11:36:25","01.11.2018 11:41:36","SmtpAntispam","AntispamScanner","Block","Email","01.11.2018 11:28:00","","Shikari rule","","External"`

Каждый параметр выделен в кавычки и разделен запятой.  
1 проблема: то что выделено это тема письма и она уникальная, столкнулся с проблемой, например в теме есть ковычки, как мне их игнорировать и забирать значение до запятой?  
2 проблема: некоторые параметры пустые, это просто двойные кавычки, например ,"",  
как это обойти и что бы значение было просто пустым?  
Спасибо.

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [November 1, 2018, 3:43pm UTC](https://discuss.elastic.co/t/logstash-grok/155037/2 "2018-11-01T15:43:28Z")

</div>

A ` **` вокруг `**"Аудиокниги ""Модель для сборки"" - Самая полная и качественная коллекция. 09_09_2018 02_10 201694"**` это у вас в логе, или это вы тут добавили?

---

<div class="post-metadata">

**Author:** ![artem33region](https://avatars.discourse-cdn.com/v4/letter/a/f07891/32.png) [@artem33region](https://discuss.elastic.co/u/artem33region)\
**Post date:** [November 2, 2018, 5:49am UTC](https://discuss.elastic.co/t/logstash-grok/155037/3 "2018-11-02T05:49:48Z")

</div>

Это тема письма, она всегда разная.  
Лог выглядит так:  
"11/01/2018 11:41:36","767","[8F753F80AA7E5221FDF8B1086CD4FC58@domain.ru](mailto:8F753F80AA7E5221FDF8B1086CD4FC58@domain.ru)","info@domain.ru","ma@domain.ru","","Аудиокниги ""Модель для сборки"" - Самая полная и качественная коллекция. 09\_09\_2018 02\_10 201694","68870","KAS\_STATUS\_SPAM","","","01.11.2018 11:36:25","01.11.2018 11:41:36","SmtpAntispam","AntispamScanner","Block","Email","01.11.2018 11:28:00","","Shikari rule","","External"

---

<div class="post-metadata">

**Author:** ![artem33region](https://avatars.discourse-cdn.com/v4/letter/a/f07891/32.png) [@artem33region](https://discuss.elastic.co/u/artem33region)\
**Post date:** [November 2, 2018, 6:46am UTC](https://discuss.elastic.co/t/logstash-grok/155037/4 "2018-11-02T06:46:30Z")

</div>

Создал кастомный паттерн %{RUS\_MSG:MessageId}  
Но он парсит только до второй кавычки:  
{  
"MessageId": "Аудиокниги "  
}

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [November 2, 2018, 1:20pm UTC](https://discuss.elastic.co/t/logstash-grok/155037/5 "2018-11-02T13:20:39Z")

</div>

> [@artem33region](#):
>
> Лог выглядит так:

То есть это нормальный CSV файл? Если это так, то вам принципиально использовать только grok? Если нет, то может лучше воспользоваться [CSV фильтром](https://www.elastic.co/guide/en/logstash/6.4/plugins-filters-csv.html) и потом обрабатывать индивидуальные поля через grok?

---

<div class="post-metadata">

**Author:** ![artem33region](https://avatars.discourse-cdn.com/v4/letter/a/f07891/32.png) [@artem33region](https://discuss.elastic.co/u/artem33region)\
**Post date:** [November 2, 2018, 1:34pm UTC](https://discuss.elastic.co/t/logstash-grok/155037/6 "2018-11-02T13:34:32Z")

</div>

Это csv файл.  
Нет, не принципиально, если есть способ распарсить лог, то без разницы чем это делать)  
Кстати, нужно еще учесть, что в поле темы сообщения, тоже возможны запятые.

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [November 2, 2018, 1:59pm UTC](https://discuss.elastic.co/t/logstash-grok/155037/7 "2018-11-02T13:59:35Z")

</div>

С такой конфигурацией:

```auto
input { stdin { } }

filter {
  csv {
  }
}

output {
  stdout { codec => rubydebug }
}

```

если заменить `и` на `,` в теме сообщения то получается:

```auto
{
       "message" => "\"11/01/2018 11:41:36\",\"767\",\"<8F753F80AA7E5221FDF8B1086CD4FC58@domain.ru>\",\"info@domain.ru\",\"ma@domain.ru\",\"\",\"Аудиокниги \"\"Модель для сборки\"\" - Самая полная, качественная коллекция. 09_09_2018 02_10 201694\",\"68870\",\"KAS_STATUS_SPAM\",\"\",\"\",\"01.11.2018 11:36:25\",\"01.11.2018 11:41:36\",\"SmtpAntispam\",\"AntispamScanner\",\"Block\",\"Email\",\"01.11.2018 11:28:00\",\"\",\"Shikari rule\",\"\",\"External\"",
          "host" => "bumblebee",
       "column8" => "68870",
      "column19" => "",
      "column15" => "AntispamScanner",
       "column7" => "Аудиокниги \"Модель для сборки\" - Самая полная, качественная коллекция. 09_09_2018 02_10 201694",
      "column21" => "",
      "@version" => "1",
      "column18" => "01.11.2018 11:28:00",
      "column14" => "SmtpAntispam",
      "column16" => "Block",
       "column6" => "",
      "column12" => "01.11.2018 11:36:25",
      "column20" => "Shikari rule",
       "column2" => "767",
       "column3" => "<8F753F80AA7E5221FDF8B1086CD4FC58@domain.ru>",
      "column10" => "",
       "column5" => "ma@domain.ru",
       "column9" => "KAS_STATUS_SPAM",
      "column11" => "",
       "column4" => "info@domain.ru",
      "column13" => "01.11.2018 11:41:36",
       "column1" => "11/01/2018 11:41:36",
      "column22" => "External",
      "column17" => "Email",
    "@timestamp" => 2018-11-02T13:57:47.154Z
}

```

---

<div class="post-metadata">

**Author:** ![artem33region](https://avatars.discourse-cdn.com/v4/letter/a/f07891/32.png) [@artem33region](https://discuss.elastic.co/u/artem33region)\
**Post date:** [November 2, 2018, 2:06pm UTC](https://discuss.elastic.co/t/logstash-grok/155037/8 "2018-11-02T14:06:17Z")

</div>

А почему input stdin?  
Данные передаю через Filebeat.

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [November 2, 2018, 2:07pm UTC](https://discuss.elastic.co/t/logstash-grok/155037/9 "2018-11-02T14:07:37Z")

</div>

> [@artem33region](#):
>
> А почему input stdin?

Потому что мне так проще тестировать 🙂

---

<div class="post-metadata">

**Author:** ![artem33region](https://avatars.discourse-cdn.com/v4/letter/a/f07891/32.png) [@artem33region](https://discuss.elastic.co/u/artem33region)\
**Post date:** [November 2, 2018, 2:08pm UTC](https://discuss.elastic.co/t/logstash-grok/155037/10 "2018-11-02T14:08:42Z")

</div>

То есть input beats?

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [November 2, 2018, 2:09pm UTC](https://discuss.elastic.co/t/logstash-grok/155037/11 "2018-11-02T14:09:06Z")

</div>

Input и output может быть как угодно.

---

<div class="post-metadata">

**Author:** ![artem33region](https://avatars.discourse-cdn.com/v4/letter/a/f07891/32.png) [@artem33region](https://discuss.elastic.co/u/artem33region)\
**Post date:** [November 2, 2018, 2:09pm UTC](https://discuss.elastic.co/t/logstash-grok/155037/12 "2018-11-02T14:09:29Z")

</div>

Ок, спасибо!

---

<div class="post-metadata">

**Author:** ![artem33region](https://avatars.discourse-cdn.com/v4/letter/a/f07891/32.png) [@artem33region](https://discuss.elastic.co/u/artem33region)\
**Post date:** [November 2, 2018, 2:10pm UTC](https://discuss.elastic.co/t/logstash-grok/155037/13 "2018-11-02T14:10:04Z")

</div>

Можно еще вопрос?

---

<div class="post-metadata">

**Author:** ![artem33region](https://avatars.discourse-cdn.com/v4/letter/a/f07891/32.png) [@artem33region](https://discuss.elastic.co/u/artem33region)\
**Post date:** [November 2, 2018, 2:13pm UTC](https://discuss.elastic.co/t/logstash-grok/155037/14 "2018-11-02T14:13:48Z")

</div>

Я уже использую winlogbeat, и мне нужно еще использовать filebeat, как мне его завернуть в elasticsearch через logstash?  
Вот мой конфиг, но в elasticsearch вижу только индекс winlog beat:

```auto
input {
  beats {
    port => 5044
    tags => ["winlogbeat"]
  }
  beats {
    port => 5045
    tags => ["filebeat"]
  }
  tcp {
    port => 5000
    type => syslog
  }
  udp {
    port => 5000
    type => syslog
  }
}
output {
   if "winlogbeat" in [tags] {
      elasticsearch {
      hosts => "IP:9200"
      index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
   }
 }
}

output {
   if "filebeat" in [tags] {
      elasticsearch {
      hosts => "IP:9200"
      index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
   }
 }
}

output {
   if [type] == "syslog" {
      elasticsearch {
      hosts => "IP:9200"
   }
 }
}

```

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [November 2, 2018, 2:18pm UTC](https://discuss.elastic.co/t/logstash-grok/155037/15 "2018-11-02T14:18:42Z")

</div>

A как filebeat настроен?

---

<div class="post-metadata">

**Author:** ![artem33region](https://avatars.discourse-cdn.com/v4/letter/a/f07891/32.png) [@artem33region](https://discuss.elastic.co/u/artem33region)\
**Post date:** [November 2, 2018, 2:20pm UTC](https://discuss.elastic.co/t/logstash-grok/155037/16 "2018-11-02T14:20:42Z")

</div>

Передача логов в логсташ

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [November 2, 2018, 2:21pm UTC](https://discuss.elastic.co/t/logstash-grok/155037/17 "2018-11-02T14:21:53Z")

</div>

На какой порт?

---

<div class="post-metadata">

**Author:** ![artem33region](https://avatars.discourse-cdn.com/v4/letter/a/f07891/32.png) [@artem33region](https://discuss.elastic.co/u/artem33region)\
**Post date:** [November 2, 2018, 2:22pm UTC](https://discuss.elastic.co/t/logstash-grok/155037/18 "2018-11-02T14:22:08Z")

</div>

5045

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [November 2, 2018, 2:34pm UTC](https://discuss.elastic.co/t/logstash-grok/155037/19 "2018-11-02T14:34:00Z")

</div>

Вы уверены, что filebeat настроен правильно и пытается что-нибудь послать в logstash? В его логах что-нибудь есть?

---

<div class="post-metadata">

**Author:** ![artem33region](https://avatars.discourse-cdn.com/v4/letter/a/f07891/32.png) [@artem33region](https://discuss.elastic.co/u/artem33region)\
**Post date:** [November 2, 2018, 2:37pm UTC](https://discuss.elastic.co/t/logstash-grok/155037/20 "2018-11-02T14:37:42Z")

</div>

Уверен на 100%, так как если выводить логи в эластиксерч логи видно.

Составил конфиг, правильный ли он?

```
input {
  beats {
    port => 5045
    tags => ["filebeat"]
  }
}

#Filebeat
filter {
  if "filebeat" in [tags] {
    csv {
      convert => {
      "column1" => "UTC time"
      "column2" => "Duration"
      "column3" => "Message Id"
      "column4" => "From"
      "column5" => "To"
      "column6" => "Cc"
      "column7" => "Subject"
      "column8" => "Message Size"
      "column9" => "Verdict"
      "column10" => "Verdict Name"
      "column11" => "File name"
      "column12" => "Submit time"
      "column13" => "Delivery time"
      "column14" => "Interceptor"
      "column15" => "Handler"
      "column16" => "Action"
      "column17" => "Object type"
      "column18" => "Base issue date"
      "column19" => "Path"
      "column20" => "Detect Method"
      "column21" => "Path"
      "column22" => "Vsapi Scan Type"
      "column23" => "Sender Type"
      }
    }
  }
}

output {
   if "filebeat" in [tags] {
      elasticsearch {
      hosts => "IP5:9200"
      index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
   }
 }
}
```

[Next page](https://discuss.elastic.co/t/logstash-grok/155037.md?page=2)
