作者NullLife (接下来如何?)
看板java
标题[问题] 有办法不侵入式的执行code吗?
时间Fri Mar 10 22:53:18 2017
其实有点承上文,
我的需求是想控制Logstash(後称LS)这个东西,
它是Ruby写的东西,然後Run在JVM上面(JRuby),
因为有些状况,我想要侵入Logstash正在运行的JVM,
我想要控制它的Thread执行的速度,
在某些情况下,我必须要让LS慢下来不要跑这麽快。
我一开始是想透过我的程式当作进入点,
再导向LS主程序,这样我就可以控制了,
但尴尬的是我不懂Ruby,所以也就不晓得怎麽卡进去了。
後来我透过JMX,也看不出哪里可以让我插入执行的地方。
然後我又知道BTrace这东西,所以想利用它ASM的原理来完成我的需求。
我主要是不想动LS任何东西,就可以进入它的JVM做事情,
不晓得版上的大大对於这种需求有没有建议的方式?
--
你只是大大的世界中小小的一个岛屿
在你怀中长大的我们 从未忘记
我要用全部的力气唱出对你的深情
歌声中 只是真心的赞美
929 吴志宁
也有感谢和依恋 疼惜和忧烦
全心全意爱你
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.42.65.102
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/java/M.1489157602.A.181.html
1F:→ luoqr: 把LS多包一层当成自己的程式 然後自己插自己!(误) 03/10 23:33
2F:→ cowbaying: CLASSLOADER? 03/11 13:17
3F:→ qrtt1: 机器不给力时就该换机器啊 03/11 17:08
我想我得解释清楚一点(但说起来好累啊),
倒也不是机器给不给力的问题...
是我们使用ELKstack这个东西,
我们使用架构也如同官方说明:
https://www.elastic.co/guide/en/logstash/5.2/
deploying-and-scaling.html
#deploying-message-queueing
(抱歉...请自己接上连结,PTT缩址会被限制发文QQ)
整套ELKstack分散在四台机器上,跟各个要收log的host,
问题就在环境不稳,动不动就网路不通、或者硬碟突然被塞满、
甚至莫名其妙VM掉下来(不要问我为什麽,我也不想这样...)
任一个环节出问题,只要Queue满了,整条路都会不通,
不通之後LS这家伙从File收到的资料送不出去,
就会被当作错误而被丢弃,造成资料遗失...
而我想做的就是监控整个环节,
当异常的时候我需要控制所有shipper(约有20来个LS)停下来,
或者是繁忙的时候,我要让他们慢下来...
(我知道官方後来推Filebeat当作前端shipper,但目前无法更换架构...)
而我不想修改LS任何东西的原因在於未来升版的话会是一个麻烦点,
因为这样我的控制机制跟LS有过高的相依性,
所以我才想采用JMX或者是BTrace这种而外侵入的方式来做。
我是有想了很多偏方,就是监控透过SSH进去该台机器下指令停止,
或者LS启动TCP的input来接受讯号处理。
但我想既然他是JVM,那就透过JMX或其他JAVA的方法来做,比较实际。
一方面是私心想玩java的东西,一方面是如果透过Linux基础来做,
意味着如果未来有其他OS的log需要纳管,这招就会行不通...
说了这麽多,就是想像BTrace一样,一个JVM跑得好好的,
想随时插进去看状况甚至控制一些事情,不晓得这样各位大大有无好建议?
(仔细想想,这样好像变成骇客行为,而且一不小心就有漏洞出现QQ)
※ 编辑: NullLife (114.42.65.102), 03/11/2017 21:25:12
4F:→ qrtt1: jvm 无缘无故不见,很可能就是机器本的的资源不足了啊。 03/12 11:52
5F:→ qrtt1: 机器给不给力,不是单看它本身,还有一起共存的程式资源使 03/12 11:53
6F:→ qrtt1: 用量。剩余资源不够时(例如记忆体)就可能触发 oom-killer 03/12 11:54
7F:→ qrtt1: 另外,如果硬碟吃紧。应该优先考虑把档案弄上 storage, 03/12 11:54
8F:→ qrtt1: 不管是 aws s3 或其他 cloud provider 都有方案或社群的 03/12 11:55
9F:→ qrtt1: plugin 可以使用。不过说到底,这套东西本身就吃比较多资源 03/12 11:55
10F:→ qrtt1: 接 log 部分,可以为成 fluentd (native 版) 的,再导给 03/12 11:56
11F:→ qrtt1: elasticsearch + kibana 会比较顺一点。 03/12 11:56
感谢qrtt1大大,
可惜无奈现实考量,不是说缺马上就有硬体resource可以用的...
但我会研究一下fluentd,感谢<(_ _)>
※ 编辑: NullLife (114.42.68.46), 03/12/2017 19:51:53
12F:推 Killercat: nice他不就好了 o_oa 或者参照cgroups 03/15 14:25