7.5 日志收集控制

    应用运行过程中所有的服务调用、资源访问等信息都将保存到埋点日志中,如果在记录这些日志信息的过程中,给应用带来性能的影响,则一定会受到来自应用开发和运营团队的抵触,所以阿里巴巴中间件团队花了大量的功夫优化日志生成所需的系统消耗,将给应用带来的性能影响降到最低,取得的成绩也非常显著。

    但我们发现,有些类型的服务对打印和传输日志带来的性能影响确实非常敏感,特别是在大促秒杀的场景下,短期内产生的海量日志信息确实给整个系统的网络和磁盘IO都带来了不小的冲击。针对这样的情况,我们采用了控制日志收集的方法,也就是在遇到大量请求时只记录其中一部分数据,而不是像平时那样做全量的数据记录。

    任何给定进程的消耗和每个进程单位时间的日志采样率成正比,也就是采样率越高,则进程用于日志处理的消耗越高。通过对采样率的调整,可以动态设置针对某一应用实例产生的日志采样率。你可能会有疑问,如果只收集部分日志信息,会不会有些问题平台就无法捕捉到?从理论上讲,不是100%的日志采样率确实存在漏掉对出现问题的服务调用,但从实际来看,对阿里巴巴这样高吞吐量的线上服务来说是非常有用的,因为那些感兴趣的事件(在大吞吐量的情况下)仍然很有可能经常出现,并且通常足以捕捉到。

    在较低采样率和较低传输负载下,可能会导致错过重要事件,而想用较高的采样率就需要能接受一定的性能损耗。所以在实际的使用中,结合服务调用的频率和业务的访问量,调整适合的日志采样率,找到事件捕捉和性能损耗的平衡点,也是此类跟踪平台需要考虑的问题。