multithreading - LogStash 性能非常低

标签 multithreading elasticsearch logstash logstash-configuration

我有一个 LogStash 配置和一个 REDIS 代理,它在低流量(10 条消息/秒)下完美工作。每个ELK服务都运行在各自独立的2GB服务器上。

Tomcat(Log4j) -> LogStash -> Redis ->LogStash->ES->Kibana.. 我现在有一个新的记录要求(每秒 200 条消息)。

Tomcat->LogStash->Redis 工作得足够快(每秒 250 多条消息),但是第二个 LogStash 似乎不够快,无法从 Redis 每秒消耗 100 多条消息。目前它每秒处理大约 10 条消息。这可能是由于我的消息大小所致(我在每条消息中记录了 20kb Xml 字符串)。

我的第二个 lumberjack.conf 经过多次调整(我还在命令行中应用了 -w 10)以进行并行处理,如下所示。我还评论了所有多行过滤器,因为它们不是线程安全的。

    input {
     #Read Log4J messages from the Redis Broker (general errors).
     redis {
      host => "192.168.0.231"
      type => "qalogs"
      port => 6379
      data_type => "list"
      key => "lsqalogs"
      batch_count => 100
      threads => 8
      codec => "json"
    }
    output {
     if [type] == "avail" {
      if [push_index] {
        elasticsearch {
          index => "%{push_index}-%{push_type}-%{+YYYY.MM.dd}"
          hosts => ["192.168.0.230:9200"]
          flush_size => 50
          manage_template => false
          workers => 40
        }
      } else {
        elasticsearch {
          index => "log-%{type}-%{+YYYY.MM.dd}"
          hosts => ["192.168.0.230:9200"]
          flush_size => 50
          manage_template => false
          workers => 40
        }
      }
     }
   }

我已经为此工作了几个月,并且已经自动化了整个堆栈安装。我唯一的问题是性能很糟糕。

第二个 LogStash 服务器以 0.3 Load-Avg 运行,因此我相信它肯定可以处理 100+/条消息/秒的热量。

我在单独的 2GB 服务器上使用 LogStash 2.1v、ES 2.1、Redis3。我真的很希望了解这个领域的一些信息?

提前致谢。

最佳答案

尝试减少 Elasticsearch 输出中的工作人员。

来自blog post by elastic on Logstash optimization (强调我的):

...modify configuration variables on your output (most notably the “workers” option on the Elasticsearch output which will probably be best at the number of cores your machine has)...

本文提出的另一件事是瓶颈可能是您的 Elasticsearch。 2GB 内存对于 Elasticsearch 节点来说太小了,问题可能在于 Elasticsearch 资源阻塞,而不是 Logstash 配置错误。

关于multithreading - LogStash 性能非常低,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42348860/

相关文章:

elasticsearch - 如何使用Logstash和grok插件创建字段

c - 使用C和OpenMP进行并行编程

c# - 来自不同线程的统一更新变量

elasticsearch - 如何在嵌套复合聚合中排除术语

elasticsearch - 是否需要在 Elasticsearch 查询中转义保留字符?

php - PHP Elasticsearch 全文搜索-按相关性排序

python - 让工作线程在 GUI 线程中等待用户输入? Python/PyQt

multithreading - 类型错误 : req_con() takes 1 positional argument but 12 were given

python - 如何通过logstash将字段添加到kibana

elasticsearch - logstash - 过滤日志并发送到不同的 Elasticsearch 集群