# Filebeat + logstash + asterisk log

**URL:** <https://discuss.elastic.co/t/filebeat-logstash-asterisk-log/100642>\
**Category:** Вопросы на русском языке\
**Created:** [September 15, 2017, 6:05am UTC](https://discuss.elastic.co/t/filebeat-logstash-asterisk-log/100642 "2017-09-15T06:05:03Z")\
**Posts on this page:** 15\
**Page:** 1

<div class="post-metadata">

**Author:** ![Makarenko](https://avatars.discourse-cdn.com/v4/letter/m/bbce88/32.png) [@Makarenko](https://discuss.elastic.co/u/Makarenko)\
**Post date:** [September 15, 2017, 6:05am UTC](https://discuss.elastic.co/t/filebeat-logstash-asterisk-log/100642/1 "2017-09-15T06:05:03Z")

</div>

Добрый день.  
Пытаюсь отправить лог звонков из asterisk в Elasticsearch  
Схема такая  
Asterisk складывает лог в файл /var/log/asterisk/cdr-csv/Master.csv  
с помощью filebeat пересылаю в logstash  
а logstash уже все записывает в elasticsearch

конфиг filebeat:

```auto
filebeat.prospectors:
- input_type: log
  paths:
    - /var/log/asterisk/cdr-csv/Master.csv
  fields: {log_type: cdr}
  encoding: utf-8
output.logstash:
  hosts: ["192.168.1.1:8083"]

```

конфиг Logstash:

```auto
input {
       tcp {
               port => 8083
               type => "asterisk"
                codec => plain {
                        charset => UTF-8
                }
       }
}

output {
       if [type] == "asterisk"{
               elasticsearch {
                       hosts => ["localhost:9200"]
                       sniffing => true
                       manage_template => false
                       index => "%{[type]}-%{+YYYY.MM.dd}"
               }
       }
}

```

```auto
file -bi /var/log/asterisk/cdr-csv/Master.csv
text/plain; charset= **utf-8**

```

в итоге все приходит примерно в таком виде \xD3\u001F

что делать? куда копать?

---

<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:** [September 15, 2017, 9:41am UTC](https://discuss.elastic.co/t/filebeat-logstash-asterisk-log/100642/2 "2017-09-15T09:41:04Z")

</div>

А как лог файл выглядит?

---

<div class="post-metadata">

**Author:** ![Makarenko](https://avatars.discourse-cdn.com/v4/letter/m/bbce88/32.png) [@Makarenko](https://discuss.elastic.co/u/Makarenko)\
**Post date:** [September 15, 2017, 11:09am UTC](https://discuss.elastic.co/t/filebeat-logstash-asterisk-log/100642/3 "2017-09-15T11:09:17Z")

</div>

```auto
"","1325","s","macro-dial-one","""Extn1325"" <1325>","SIP/avaya-out-0000948b","SIP/1503-0000948c","Dial","SIP/1503,,Ttr","2015-02-02 10:01:35","2015-02-02 10:01:37","2015-02-02 10:01:55",20,18,"ANSWERED","DOCUMENTATION","1422871295.257384",""

```

вот кусочек лога. это одна строка

---

<div class="post-metadata">

**Author:** ![Makarenko](https://avatars.discourse-cdn.com/v4/letter/m/bbce88/32.png) [@Makarenko](https://discuss.elastic.co/u/Makarenko)\
**Post date:** [September 19, 2017, 5:04am UTC](https://discuss.elastic.co/t/filebeat-logstash-asterisk-log/100642/5 "2017-09-19T05:04:12Z")

</div>

Точно такая же проблема и на windows.

```auto
filebeat.prospectors:

- input_type: log
  paths:
    - C:\orf1.log
output.logstash:
  hosts: ["192.168.0.1:8084"]

```

как поправить?  
я понимаю, что проблема в кодировке, но где ее править на стороне отправителя или получателя?  
как понимаю можно сразу писать в elastic, но тут тоже проблема. как только начинаю писать в elastic он сразу "встает" колом и перестает принимать данные.

---

<div class="post-metadata">

**Author:** ![Makarenko](https://avatars.discourse-cdn.com/v4/letter/m/bbce88/32.png) [@Makarenko](https://discuss.elastic.co/u/Makarenko)\
**Post date:** [September 19, 2017, 8:43am UTC](https://discuss.elastic.co/t/filebeat-logstash-asterisk-log/100642/6 "2017-09-19T08:43:42Z")

</div>

в логах logstash вот такие строки

```auto
[2017-09-19T10:04:58,272][WARN][logstash.codecs.line] Received an event that has a different character encoding than you configured. ", :expected_charset=>"UTF-8"}

```

---

<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:** [September 19, 2017, 4:18pm UTC](https://discuss.elastic.co/t/filebeat-logstash-asterisk-log/100642/7 "2017-09-19T16:18:21Z")

</div>

Похоже, что logstash не правильно [сконфигурирован](https://www.elastic.co/guide/en/beats/libbeat/5.6/logstash-installation.html#logstash-setup). `input` должен быть `beats` а не `tcp`. Я бы попробовал так

```auto
input {
  beats {
    port => 8083
    ....
  }
}

```

`tcp` никак не интерпретирует входящие сообщения. А beats используют lumberjack как протокол. Поэтому `tcp` и не работает.

---

<div class="post-metadata">

**Author:** ![Makarenko](https://avatars.discourse-cdn.com/v4/letter/m/bbce88/32.png) [@Makarenko](https://discuss.elastic.co/u/Makarenko)\
**Post date:** [September 19, 2017, 5:28pm UTC](https://discuss.elastic.co/t/filebeat-logstash-asterisk-log/100642/8 "2017-09-19T17:28:34Z")

</div>

Спасибо. проблема была именно в этом.  
пробовал отправить данные сразу в elastic. данные приходят, но одной строкой, а в логе у меня CSV формат.  
понимаю, что можно данные отправлять сначала в logstash, а уже в нем в filter с помощью csv{} разбить.  
но в logstash у меня данные не приходят. А в логах filebeat получаю

```auto
INFO No non-zero metrics in the last 30s

```

насколько я понимаю данное сообщение говорит об отсутствие новых данных в файле.  
я добавляю параметр

```auto
tail_file: false

```

и все равно не получаю данные.

что я упустил?

---

<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:** [September 19, 2017, 5:51pm UTC](https://discuss.elastic.co/t/filebeat-logstash-asterisk-log/100642/9 "2017-09-19T17:51:43Z")

</div>

> [@Makarenko](#):
>
> что я упустил?

Может [registry file](https://www.elastic.co/guide/en/beats/filebeat/5.6/configuration-global-options.html#_registry_file) показвает что эти файлы уже загружены?

> [@Makarenko](#):
>
> пробовал отправить данные сразу в elastic. данные приходят, но одной строкой, а в логе у меня CSV формат.

Elasticsearch тоже может немного [парсить](https://www.elastic.co/blog/indexing-csv-elasticsearch-ingest-node). Но для CSV специальный [плагин](https://github.com/johtani/elasticsearch-ingest-csv) нужен.

---

<div class="post-metadata">

**Author:** ![Makarenko](https://avatars.discourse-cdn.com/v4/letter/m/bbce88/32.png) [@Makarenko](https://discuss.elastic.co/u/Makarenko)\
**Post date:** [September 19, 2017, 6:03pm UTC](https://discuss.elastic.co/t/filebeat-logstash-asterisk-log/100642/10 "2017-09-19T18:03:56Z")

</div>

Про **registry file** читал. его при каждом перезапуски службы удалял.  
в лог файлах встречаются **ip адреса** хотел попробовать с картами поиграться, а как понимаю без logstash это не получится.

так же наткнулся на строчку в логах filebeat

```auto
ERR Failed to publish events caused by: write tcp X.X.X.X:56906->Y.Y.Y.Y:8084: wsasend: An existing connection was forcibly closed by the remote

```

но при уровне логирования debug

```auto
logging:
  level: debug

```

в логах пишит, что все отправлено

```auto
2017-09-19T21:38:09+04:00 DBG 2 events out of 2 events sent to logstash. Continue sending
2017-09-19T21:38:09+04:00 DBG send completed

```

---

<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:** [September 19, 2017, 6:19pm UTC](https://discuss.elastic.co/t/filebeat-logstash-asterisk-log/100642/11 "2017-09-19T18:19:05Z")

</div>

У вас в примерах в одном месте 8083, в другом 8084. Может в этом проблема? Если нет - пришлите по новой все установки, я посмотрю.

> [@Makarenko](#):
>
> в лог файлах встречаются ip адреса хотел попробовать с картами поиграться, а как понимаю без logstash это не получится.

Это тоже можно - [Ingest Geoip Processor Plugin | Elasticsearch Plugins and Integrations [5.6] | Elastic](https://www.elastic.co/guide/en/elasticsearch/plugins/5.6/ingest-geoip.html)

---

<div class="post-metadata">

**Author:** ![Makarenko](https://avatars.discourse-cdn.com/v4/letter/m/bbce88/32.png) [@Makarenko](https://discuss.elastic.co/u/Makarenko)\
**Post date:** [September 19, 2017, 6:26pm UTC](https://discuss.elastic.co/t/filebeat-logstash-asterisk-log/100642/12 "2017-09-19T18:26:24Z")

</div>

filebeat

```auto
filebeat.prospectors:
- input_type: log   
  paths:
    - C:\orf1.log
  tail_file: false
logging:
  level: debug
output:
  logstash:
    hosts: ["192.168.0.1:8084"]

```

Logstash

```auto
input {
       beats {
               port => 8084
               type => "tmg"
     }
}
filter {
       if [type] == "tmg" {
              csv {}
       }
}
output {
       if [type] == "tmg"{
               elasticsearch {
                       hosts => ["localhost:9200"]
                       index => "tmg"
               }
       }
}

```

---

<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:** [September 19, 2017, 8:20pm UTC](https://discuss.elastic.co/t/filebeat-logstash-asterisk-log/100642/13 "2017-09-19T20:20:17Z")

</div>

В logstash `beats` не поддерживает параметр `type`. Начните с более простой конфигурации:

```auto
input {
       beats {
               port => 8084
      }
}
filter {
     csv {}
}
output {
       elasticsearch {
               hosts => ["localhost:9200"]
               index => "tmg"
       }
}

```

---

<div class="post-metadata">

**Author:** ![Makarenko](https://avatars.discourse-cdn.com/v4/letter/m/bbce88/32.png) [@Makarenko](https://discuss.elastic.co/u/Makarenko)\
**Post date:** [September 20, 2017, 5:14am UTC](https://discuss.elastic.co/t/filebeat-logstash-asterisk-log/100642/14 "2017-09-20T05:14:09Z")

</div>

проблема была в

```auto
if [type] == "tmg"{

```

в обработке **output**.  
так как у меня данные собираются в другие индексы, и чтобы не получать лишние данные в индекс **TMG** я сделал

```auto
if [host] == "asu-006" {

```

но как понимаю это не очень правильное решение.  
есть ли способы записывать тэги на стороне filebeat для фильтрации данных?  
что то вроде

```auto
if [tag] == "mytag" {

```

---

<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:** [September 20, 2017, 3:40pm UTC](https://discuss.elastic.co/t/filebeat-logstash-asterisk-log/100642/15 "2017-09-20T15:40:46Z")

</div>

Похоже, что это [баг](https://github.com/logstash-plugins/logstash-input-beats/issues/131) в документации или в плагине. Пока выясняем - можно воспользоваться установкой [`document_type`](https://www.elastic.co/guide/en/beats/filebeat/5.6/configuration-filebeat-options.html#filebeat-document-type) или засунуть что-нибудь в [`tags`](https://www.elastic.co/guide/en/beats/filebeat/5.6/configuration-filebeat-options.html#_tags) или [`fields`](https://www.elastic.co/guide/en/beats/filebeat/5.6/configuration-filebeat-options.html#configuration-fields).

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [October 18, 2017, 3:40pm UTC](https://discuss.elastic.co/t/filebeat-logstash-asterisk-log/100642/16 "2017-10-18T15:40:58Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
