监控的初衷
社区版的storm除去storm UI可以提供一点信息外,实际上任务完全运行在一个黑盒子里,不仅不知道任务的运行情况,即使任务有问题时也无法及时通知用户来处理,事后排查问题又非常困难。为了解决这些问题,需要把任务运行的情况掌握起来。
监控的维度
任务维度监控
- 组件处理耗时,单位:毫秒
- 任务组件tps
- worker处理耗时,单位:毫秒
- worker tps
- worker.capacity【(number executed * average execute latency) / measurement time】
worker维度监控
- 1分钟内parnew gc 平均耗时,单位:毫秒
- 1分钟内concurrentmarksweep gc 平均耗时单位:毫秒
- 1分钟内parnew gc次数
- 1分钟内concurrentmarksweep gc次数
- 老年代内存使用比率
- gc吞吐,计算公式:(runTime - totalGCTime) / runTime
- worker线程活跃数
- worker日志文件个数
- worker线程峰值
- worker文件大小
- worker运行时长,单位:天
- worker进程使用的文件句柄数
- worker进程使用的cpu
- worker进程使用的swap
- worker进程user使用的cpu
- worker进程system使用的cpu
- worker内组件TPS监控
自助定问题
- jstack定时生成并提供下载
- 手动jmap堆信息并提供下载
管理员维度
- 集群tps
- 集群emit量
- 主机tps
- 主机emit量
灵活告警
- 针对用户的告警
- 邮件+短信
常见问题汇总
- 内存泄漏
- 线程泄漏
- 连接泄漏
- 任务并发设置不合理,worker不均衡
- 不合理的日志输出
- spout阻塞导致ticktuple停止
- 不合理的slot数导致cpu都用来gc
- 内核问题导致进程夯住
- 网络连接随机端口导致worker端口被占
- woker进程死锁
- 下游系统慢导致反压队列爆满而OOM
监控数据效果图