Elasticsearch 性能调优

Elasticsearch 性能调优

在单节点 Elastic Search 和 logstash 中,我们在不同类型的 AWS 实例(即中型、大型和超大型)上测试了 20mb 和 200mb 文件解析到 Elastic Search。

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 RAM 1 核 存储:4 GB SSD 64 位 网络性能:中等 运行实例:Logstash、Elastic 搜索

场景: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 Large 15.25 RAM 2 核 存储:32 GB SSD 64 位 网络性能:中等 运行实例:Logstash、Elastic search

**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 高内存超大 r3.xlarge 30.5 RAM 4 核 存储:32 GB SSD 64 位 网络性能:中等 运行实例:Logstash、Elastic search

**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. 为什么即使我增加了 elasticsearch JVM 之后仍然找不到差异?
  4. 如何监控 Logstash 并提高其性能?

由于我对 logstash 和 elastic search 还不熟悉,所以非常感谢您的帮助。

答案1

1-如果您想对您的性能发表评论,我们需要查看您的 logstash 过滤器配置。

Logstash 性能是过滤器/输出/工作器设置的混合。

更多过滤器 = 更少事件/秒。

如果您有 logstash 性能问题,一个好主意是扩大规模。更多的工作者和更多的实例可以增加事件/秒的性能。人们与发送者合作到 rabbimq 队列并在后面扩展 logstash 节点。

2-参见1

3- 存在 IO 限制,有时最好有更多节点。Elasticsearch 旨在与分片/节点等配合使用。

4-logstash 监控目前只是进程监控。有一些关于使用 java 调试器执行此操作的线索,但您必须在 logstash 用户组中查找信息。对于 elasticsearch,有奇迹可以监控您的 elasticsearch 集群。

答案2

我们监控logstash的方式:

1)直接监控弹性:对 ES API 进行简单的 about/info 调用(如果 ES 发生故障,您就发生故障)

2) 监控弹性统计数据。取决于您如何使用。您可以查找活动(文档数量、索引大小等)或环境中有意义的其他统计数据。如果您看到统计数据在移动,则表明 logstash 已成功将消息发送到 ES

3) Logstash 本身:只需点击它正在监听的端口即可。如果端口变暗...logstash 已死机/未运行。

相关内容