Назад | Перейти на главную страницу

Настройка производительности Elasticsearch

В одноузловом эластичном поиске вместе с logstash мы протестировали парсинг файлов размером 20 и 200 МБ для эластичного поиска на разных типах экземпляров AWS, например Medium, Large и Xlarge.

Конфигурация logstash

input {
   file {

  }

}

filter {
  mutate
  {
    gsub => ["message", "\n", " "]
  }
 mutate
 {
    gsub => ["message", "\t", " "]
 }
 multiline
   {
        pattern => "^ "
        what => "previous"
   }

grok { match => [ "message", "%{TIME:log_time}\|%{WORD:Message_type}\|%{GREEDYDATA:Component}\|%{NUMBER:line_number}\| %{GREEDYDATA:log_message}"] 
     match => [ "path" , "%{GREEDYDATA}/%{GREEDYDATA:loccode}/%{GREEDYDATA:_machine}\:%{DATE:logdate}.log"]

         break_on_match => false
}


#To check location is S or L
  if [loccode] == "S"  or [loccode] == "L" {
 ruby {   
        code => " temp = event['_machine'].split('_')
              if  !temp.nil? || !temp.empty?
          event['_machine'] = temp[0]
        end"
   } 
 }
 mutate {

    add_field => ["event_timestamp", "%{@timestamp}" ]
    replace => [ "log_time", "%{logdate} %{log_time}" ]
    # Remove the 'logdate' field since we don't need it anymore.
   lowercase=>["loccode"]
   remove => "logdate"

  }
# to get all site details (site name, city and co-ordinates)
sitelocator{sitename => "loccode"  datafile=>"vendor/sitelocator/SiteDetails.csv"}
date {  locale=>"en"
    match => [ "log_time", "yyyy-MM-dd HH:mm:ss", "MM-dd-yyyy HH:mm:ss.SSS","ISO8601" ] }

}

output {
elasticsearch{
     }

}

Сведения о среде: средний экземпляр 3,75 ОЗУ 1 ядро ​​Хранилище: твердотельный накопитель 4 ГБ 64-разрядная сетевая производительность: средний экземпляр, работающий с: Logstash, эластичным поиском

Сценарий: 1

**With default settings** 
Result :
20mb logfile 23 mins Events Per/second 175
200mb logfile 3 hrs 3 mins Events Per/second 175


Added the following to settings:
Java heap size : 2GB
bootstrap.mlockall: true
indices.fielddata.cache.size: "30%"
indices.cache.filter.size: "30%"
index.translog.flush_threshold_ops: 50000
indices.memory.index_buffer_size: 50%

# Search thread pool
threadpool.search.type: fixed
threadpool.search.size: 20
threadpool.search.queue_size: 100

**With added settings** 
Result:
20mb logfile 22 mins Events Per/second 180
200mb logfile 3 hrs 07 mins Events Per/second 180

Сценарий 2

Сведения о среде: R3 Большой 15,25 ОЗУ 2 ядра Хранение: 32 ГБ SSD 64-разрядная Сетевая производительность: умеренная Работа экземпляра с: Logstash, эластичным поиском

**With default settings** 
Result :
  20mb logfile 7 mins Events Per/second 750
  200mb logfile 65 mins Events Per/second 800

Added the following to settings:
Java heap size: 7gb
other parameters same as above

**With added settings** 
Result:
20mb logfile 7 mins Events Per/second 800
200mb logfile 55 mins Events Per/second 800

Сценарий 3

Сведения о среде: R3 High-Memory Extra Large r3.xlarge 30,5 RAM 4 ядра Хранение: 32 ГБ SSD 64-разрядная сетевая производительность: умеренная Работа экземпляра с: Logstash, эластичным поиском

**With default settings** 
  Result:
  20mb logfile 7 mins Events Per/second 1200
  200mb logfile 34 mins Events Per/second 1200

 Added the following to settings:
    Java heap size: 15gb
    other parameters same as above

**With added settings** 
Result:
    20mb logfile 7 mins Events Per/second 1200
    200mb logfile 34 mins Events Per/second 1200

Я хотел знать

  1. Какой эталон производительности?
  2. Соответствует ли производительность эталону или ниже эталона
  3. Почему даже после того, как я увеличил JVM elasticsearch, я не могу найти разницу?
  4. как мне отслеживать Logstash и улучшать его производительность?

ценю любую помощь в этом, поскольку я новичок в logstash и эластичном поиске.

Как мы отслеживаем logstash:

1) Отслеживайте эластичность напрямую: сделайте простой вызов about / info для ES api (если ES выходит из строя, вы не работаете)

2) Следите за эластичной статистикой. Зависит от того, как вы используете. Вы можете искать активность (количество документов, размер индекса и т. Д.) Или другую статистику, которая имеет значение для вашего env. Если вы видите, что статистика движется, вы знаете, что logstash успешно отправляет сообщения в ES.

3) Сам Logstash: просто выберите порт, который он прослушивает. Если порт гаснет ... logstash умер / не работает.

1- Если вы хотите прокомментировать свою производительность, нам нужно увидеть конфигурацию вашего фильтра logstash.

Производительность Logstash - это сочетание настроек фильтра / вывода / рабочего.

Больше фильтра = меньше событий / секунд.

Хорошая идея - широко масштабировать, если у вас есть проблемы с logstash perf. Больше рабочих экземпляров может увеличить производительность событий / секунд. Люди работают с отправителем в очередь rabbimq и масштабируют узел logstash позади.

2- см. 1

3- есть ограничения ввода-вывода, и иногда лучше иметь больше узлов. Elasticsearch предназначен для работы с шардом / узлом и т. Д.

4- logstash мониторинг - это пока только мониторинг процесса. Есть некоторые подсказки о том, как это сделать с помощью отладчика java, но вы должны найти информацию в группе пользователей logstash. Для elasticsearch есть чудо, чтобы контролировать ваш кластер elasticsearch.