childe / gohangout

使用 golang 模仿的 Logstash。用于消费 Kafka 数据,处理后写入 ES、Clickhouse 等。
MIT License
1.01k stars 234 forks source link

[功能需求] es output 支持特定节点名的 sniffer #117

Closed zcola closed 3 years ago

zcola commented 3 years ago

最早使用hangout 是直接写 es client 节点,业务量大且多索引多实例hangout 时候,即使调整bulk size 也很容易将 es client 节点写到 oom,后面采用写 es hot 节点方式,运行半年没有问题,但是我们只有 es client ip 是静态的,也就是说重启es 后,hot 节点ip 有可能会变,造成运维上不便,希望支持,谢谢 logstassh 实现说明,希望比logstash 功能更进一步,支持node name 过滤。

sniffing Value type is boolean Default value is false This setting asks Elasticsearch for the list of all cluster nodes and adds them to the hosts list. For Elasticsearch 1.x and 2.x any nodes with http.enabled (on by default) will be added to the hosts list, including master-only nodes! For Elasticsearch 5.x and 6.x any nodes with http.enabled (on by default) will be added to the hosts list, excluding master-only nodes.

另外一个思路就是启动时访问另外一个列表来获取es host

并希望能定时刷新这个es 列表,因为不知道 es 什么时候会重启。

childe commented 3 years ago

31a3779672626c8c210a098db9420b67647a95b8 实现 我这边没有测试环境了, 推到了 sniff-in-es-output 分支, 还没敢合 master

zcola commented 3 years ago

好。我自己抽空编译一个试试,谢谢

childe commented 3 years ago

@zcola 期待你的反馈~ :)

zcola commented 3 years ago

用了1个多月,没发现有什么问题,另外一个疑问顺便问问,如果控制gohangout 的内存使用量,发现如果es 比较繁忙,内存占用量回答到6g多,配置是这个,worker 开4个

    concurrent: 4
        bulk_actions: 36000
        bulk_size: 30
        flush_interval: 60
childe commented 3 years ago

还要看你的input的配置有多少并发。 一个并发的话,大概内存是 4530m = 600m 再考虑上go 内存回收机制,大概是1.2g吧(这里我不太确定系数是多少了) 如果你input 配置并发是5,总内存会到6g。 这里只是es output占用内存。还没有算kafka的。

发自我的iPhone

------------------ 原始邮件 ------------------ 发件人: ZhangRui <notifications@github.com> 发送时间: 2021年2月21日 11:27 收件人: childe/gohangout <gohangout@noreply.github.com> 抄送: childe <rmself@qq.com>, State change <state_change@noreply.github.com> 主题: 回复:[childe/gohangout] [功能需求] es output 支持特定节点名的 sniffer (#117)

用了1个多月,没发现有什么问题,另外一个疑问顺便问问,如果控制gohangout 的内存使用量,发现如果es 比较繁忙,内存占用量回答到6g多,配置是这个,worker 开4个 concurrent: 4 bulk_actions: 36000 bulk_size: 30 flush_interval: 60
— You are receiving this because you modified the open/close state. Reply to this email directly, view it on GitHub, or unsubscribe.

zcola commented 3 years ago

input 都是 1,是这样的,目前只闲置了进程的cpu,如果限制了内存,es 繁忙的时候很容易oom,所以旧不知道限制多少合适,logstash 就不会有这种问题,请问是不是gohanout 没有实现背压的机制,不过我没细看好像hangout 日志也没有es 429 日志,可能只是比平常慢结果内存就堆起来了

childe commented 3 years ago

没有这个机制。 topic下面的配置,只配置了一个线程? 那我觉得6个 G 有点太多了,还是有一点怀疑 Input 线程不是1 。。。 如果确认是1的话,那就得开 Pprof 看一下内存用在哪里了。

zcola commented 3 years ago

好,下次遇到开 pprof ,求合并到master

childe commented 3 years ago

已经合了

zcola commented 2 years ago

@childe 问个事,sniff: refresh_interval: 3600 现在这么配,直接调小比如 10分钟会有什么影响?

zcola commented 2 years ago

我又看了下logstash 实现,默认5秒,看起来没啥问题才对 sniffing_delayedit Value type is number Default value is 5 How long to wait, in seconds, between sniffing attempts