AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 459303
Accepted
Tom O'Connor
Tom O'Connor
Asked: 2012-12-20 03:40:18 +0800 CST2012-12-20 03:40:18 +0800 CST 2012-12-20 03:40:18 +0800 CST

扩展 Logstash(使用 redis/elasticsearch)

  • 772

在超过 12 个 centos 5.8 服务器的集群上,我使用本地 logstash shipper 部署了 logstash,它发送/var/log/*/*.log回中央 logstash 服务器。

我们尝试使用 rsyslogd 作为发送者,但是由于 rsyslogd 的 ImFile 模块中的错误,如果远程端没有回复,日志将堆积在内存中。

我们目前使用 Redis 作为传输机制,因此 logstash01 已在本地运行 redis,绑定到用于这些日志的 VLAN 的 IP。

所以 logstash-shipper 发送到 logstash01 上的 redis。logstash01 发送到在单独进程中运行的 Elasticsearch。

这就是我们所看到的。Elasticsearch 有 141 个阻塞线程。跟踪 elasticsearch 父级显示:

futex(0x7f4ccd1939d0, FUTEX_WAIT, 26374, NULL

这是来自 elasticsearch 的 jstack

这是来自 logstash 的 jstack

所以.. 昨晚,一些网络服务器(其日志由 logstash 跟踪)变得疯狂,平均负载超过 500。

在 logstash01 上,有这个

Dec 19 00:44:45 logstash01 kernel: [736965.925863] Killed process 23429 (redis-server) total-vm:5493112kB, anon-rss:4248840kB, file-rss:108kB

所以 OOM-killer 杀死了 redis-server,这意味着日志堆积在服务器上的内存中,这些服务器正在运送东西。这不知何故意味着 apache 得到了它的内裤。(坦率地说,我不确定如何,我只是假设它正在跟踪日志)..

这是我对事件如何展开的理论:

  1. 我们遇到了流量高峰。
  2. 生成了大量日志。
  3. 这些堆积在 Redis 中,因为 logstash/elasticsearch 似乎只能每秒处理 300-400 个新事件。
  4. Redis 已经完全填满,以至于 OOM-killer 毫无意义地杀死了它。
  5. Redis 停止接受新项目。
  6. 项目现在开始堆积在远程主机端。
  7. 一切都变得疯狂。Apache 停止接受请求。(为什么?)。

问题是这些:

  1. 为什么 apache 会发疯,如果只是有一些东西拖在它的日志后面。是不是尾随它的东西阻止了 apache 的写入?

  2. 有没有一种明智的方法可以使 elasticsearch 更快/更好/更有弹性?

  3. 有没有一种明智的方法可以使 redis 具有弹性并且不会因为 OOM 而死

  4. 我设置的方式是否存在根本缺陷,或者每个人都有这个问题?

- 编辑 -

@lusis 的一些规范。

admin@log01:/etc/init$ free -m
             total       used       free     shared    buffers     cached
Mem:          7986       6041       1944          0        743       1157
-/+ buffers/cache:       4140       3845
Swap:         3813       3628        185

Filesystem             Size  Used Avail Use% Mounted on
/dev/sda2               19G  5.3G   13G  31% /
udev                   3.9G  4.0K  3.9G   1% /dev
tmpfs                  1.6G  240K  1.6G   1% /run
none                   5.0M     0  5.0M   0% /run/lock
none                   3.9G     0  3.9G   0% /run/shm
/dev/sda1               90M   72M   14M  85% /boot
/dev/mapper/data-disk  471G  1.2G  469G   1% /data

/dev/sda2 on / type ext3 (rw,errors=remount-ro)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
none on /sys/fs/fuse/connections type fusectl (rw)
none on /sys/kernel/debug type debugfs (rw)
none on /sys/kernel/security type securityfs (rw)
udev on /dev type devtmpfs (rw,mode=0755)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620)
tmpfs on /run type tmpfs (rw,noexec,nosuid,size=10%,mode=0755)
none on /run/lock type tmpfs (rw,noexec,nosuid,nodev,size=5242880)
none on /run/shm type tmpfs (rw,nosuid,nodev)
/dev/sda1 on /boot type ext2 (rw)
/dev/mapper/data-disk on /data type ext3 (rw)
/data/elasticsearch on /var/lib/elasticsearch type none (rw,bind)

log01:/etc/init$ top 
top - 14:12:20 up 18 days, 21:59,  2 users,  load average: 0.20, 0.35, 0.40
Tasks: 103 total,   1 running, 102 sleeping,   0 stopped,   0 zombie
Cpu0  :  3.0%us,  1.0%sy,  0.0%ni, 95.7%id,  0.0%wa,  0.0%hi,  0.3%si,  0.0%st
Cpu1  : 12.0%us,  1.0%sy,  0.0%ni, 86.6%id,  0.0%wa,  0.0%hi,  0.3%si,  0.0%st
Cpu2  :  4.7%us,  0.3%sy,  0.0%ni, 94.9%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu3  :  5.6%us,  1.3%sy,  0.0%ni, 93.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu4  :  5.3%us,  1.3%sy,  0.0%ni, 93.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu5  :  6.4%us,  1.0%sy,  0.0%ni, 92.3%id,  0.0%wa,  0.0%hi,  0.3%si,  0.0%st
Mem:   8178120k total,  6159036k used,  2019084k free,   761780k buffers
redis
  • 1 1 个回答
  • 13907 Views

1 个回答

  • Voted
  1. Best Answer
    lusis
    2013-01-08T06:06:25+08:002013-01-08T06:06:25+08:00

    您的帖子没有描述太多规格(LS 索引器上的内存、日志量或其他),但我会先尽力回答您的问题。免责声明:我是 logstash 开发者之一 -

    1. Apache 发疯可能是 logstash 进程出现问题的副作用。我暂时把它放在一边。

    2. 使 ES f/b/s 正常的方法是添加更多 ES 节点。这真的很容易。它们甚至可以根据网络拓扑自动发现彼此。在这个行业工作了 17 年后,我从未见过像 ElasticSearch 这样容易横向扩展的东西。

    3. 对于 f/b/s Redis,不要使用任何 redis 集群。较新版本的 Logstash 可以在内部执行 Redis 负载平衡。Redis 输出支持插件配置中的 Redis 主机列表,并且即将在输入端添加支持以匹配该列表。在此期间,您可以在索引器/消费者端使用多个 Redis 输入定义。

    4. 我无法回答这个问题,只能说这听起来像是你想用一个单一的(可能是动力不足的主机)做很多事情。

    任何良好的扩展过程都始于将并置的组件分解为不同的系统。除了 logstash“瓶颈”在过滤器中的地方,我没有在任何地方看到你的配置要点。根据您进行的转换次数,它可能会对 Logstash 进程的内存使用产生影响。

    Logstash 的工作原理很像乐高积木。您可以使用一块 2x4 积木,也可以使用两块 2x2 积木来完成相同的任务。除了 logstash 之外,使用小块实际上比一块大块更坚固。

    我们通常给出的一些一般性建议是:

    • 尽可能快地从边缘传送日志如果您可以使用纯网络传输而不是写入磁盘,那很好但不是必需的。Logstash 是基于 JVM 的,这有好有坏。使用替代托运人。我写了一个基于 python 的 ( https://github.com/lusis/logstash-shipper ),但我建议人们改用 Beaver ( https://github.com/josegonzalez/beaver )。

    • 以需要尽可能少的过滤的格式生成日志(json 或最佳 json-event 格式)这并不总是可能的。我写了一个 log4j appender 来做这个(https://github.com/lusis/zmq-appender)并最终将模式布局分解到它自己的 repo(https://github.com/lusis/log4j-jsonevent-layout ). 这意味着我不必在 logstash 中为这些日志做任何过滤。我只是将输入类型设置为“json-event”

    对于 apache,您可以尝试这种方法:http ://cookbook.logstash.net/recipes/apache-json-logs/

    • 将事物分解成多个组件 在我所做的关于 logstash 的每一次谈话中,我都将其描述为类固醇的 unix 管道。您可以根据需要使管道尽可能长或尽可能短。您可以通过水平转移职责来扩展 logstash。这可能意味着使管道更长,但我们并不是在谈论任何与延迟开销相关的统计数据。如果您可以更好地控制您的网络(即不在 EC2 上),您可以使用标准流量隔离来做一些令人惊奇的事情。

    另请注意,logstash 邮件列表非常活跃,因此您应该始终从那里开始。清理并整理您的配置,因为这是最好的起点。

    有些公司(如 Sonian)将 ElasticSearch 扩展到 PB 级别,而公司(如 Mailchimp 和 Dreamhost)也将 Logstash 扩展到疯狂的级别。可以办到。

    • 22

相关问题

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve