网站构建秘籍:日志驱动的框架选型与设计原则
|
文章配图,仅供参考 去年清明节那会儿,我原以为就是个常规的日志框架升级,结果被甲方那帮人逼着在生产环境搞“优胜劣汰”——他们非要拿ELK和Loki对撞,说要看谁先扛不住每秒30万条的埋点数据。车间那台风扇一直在响,我蹲在服务器前拆日志采集器的配置,手套上还粘着前一天修Kafka集群时蹭的硬胶,手机在铁台上震了一下,是运维群在吐槽某云厂商的SLA又缩水了。先说结论:日志驱动的框架选型,真得靠“撞”出来。甲方那套理论听着漂亮,说ELK的ES分片策略能扛高并发,Loki的标签索引更轻量,但实际压测时,ES的JVM堆内存直接飙到80%,GC日志里全是Full GC的记录——我敢打包票,这锅得归到他们没调好index.number_of_replicas,硬把副本数设成2,活该内存炸。倒是Loki那边,Promtail的采集器突然掉链子,我蹲在机器前看日志,发现是配置文件里的`scrape_configs`字段写错了,把`static_configs`和`relabel_configs`的层级搞反了,这破事儿我修过三次,闭着眼都能摸到问题在哪儿。 旁边有人抖腿,是测试组的老张,他叼着烟说:“你们这压测数据太干净了,生产环境哪有这么规整?”我抬头看他一眼,没接话——他说的没错,甲方给的测试数据全是JSON格式的,字段长度、嵌套层级都控制得死死的,可实际生产里,用户浏览器传的日志能给你塞半行乱码,甚至还有直接丢Base64编码的,这种数据往ES里灌,分词器能直接卡死。其实我也没拆到底,Loki的Promtail在处理非结构化日志时,到底会不会触发内存泄漏,这个我说不准,要看运气——之前在某金融项目里,他们用Loki处理用户行为日志,结果连续跑两周后,Promtail的内存占用从200M涨到1.2G,重启后恢复正常,但根本原因到现在都没查出来,最后只能定时重启兜底。 中午盒饭里有块姜,我挑出来扔桌上,继续翻日志。甲方那边突然喊:“ES集群的写入延迟超过500ms了!”我冲过去看监控,发现是协调节点(Coordinating Node)的CPU打满了——他们把所有写入请求都怼到同一个节点上,其他节点闲得转风扇。我原以为调整`cluster.routing.allocation.balance.shard`参数就能解决,结果改完发现根本没用,最后是直接把写入请求的负载均衡策略从“轮询”改成“随机”,延迟才降下来。这破事儿让我想起三年前在某电商项目里,他们用Kafka当日志缓冲,结果消费者组(Consumer Group)的分区分配策略没调好,导致部分消费者饿死,日志积压了整整两天,最后还是我手动重平衡分区才救回来。 压测到第三天,Loki那边开始掉数据。我查Promtail的日志,发现是`max_backoff`参数设太小了——默认5秒的重试间隔,在生产环境根本不够,网络抖动一下就直接丢数据。我把参数改成30秒,结果甲方又跳出来说:“这样会影响实时性!”我直接怼回去:“你们要实时性,就别用Loki这种轻量级方案,老老实实上ELK,或者用ClickHouse当存储层。”他们不说话了,低头改需求文档——这种事儿我见多了,甲方总以为“既要又要”能实现,实际上日志系统就是个妥协的艺术,存储成本、查询性能、实时性,最多只能保两个。 修完Loki的问题,我自己都没底——Promtail的`max_backoff`改到30秒后,确实没再丢数据,但长期运行会不会触发其他问题?比如内存泄漏或者文件句柄泄漏?这个型号的Promtail我只在别人那儿见过,自己没深入调过,只能赌它没隐藏的坑。倒是ES那边,我把副本数从2改成1,写入延迟直接降了一半,但甲方又开始担心数据安全性——他们怕单副本丢了数据,我直接甩监控图:“你们看,ES的`unassigned_shards`一直是0,说明所有分片都正常分配,单副本在你们这种低价值日志场景里,完全够用。”他们不说话了,低头看手机,估计是去查ES的副本策略文档了。 最后压测结果出来:ELK扛住了每秒30万条的写入,但查询延迟超过2秒;Loki的写入延迟控制在500ms内,但查询性能比ES差了30%。甲方纠结了半天,选了Loki——他们说“查询性能差可以优化,但写入延迟高会影响业务监控”。我耸耸肩,心想这帮人还是太年轻——他们不知道,Loki的查询性能差,很多时候不是框架本身的问题,而是标签设计得烂。我之前在某游戏项目里,他们用Loki存玩家行为日志,结果标签设计得跟蜘蛛网似的,一个查询要匹配20多个标签,能不慢吗?最后还是我重新设计了标签体系,把查询性能提了上来。 现在回头看,那场“优胜劣汰”的压测,其实没分出绝对的胜负——ELK和Loki各有各的坑,选哪个都得填。日志驱动的框架选型,说白了就是看谁更能扛住生产环境的脏活累活,谁更少出幺蛾子。至于设计原则?我总结了三条:第一,别信厂商的PPT,自己压测;第二,日志格式尽量统一,别搞非结构化;第三,监控系统必须能实时告警,别等用户投诉了才发现日志丢了。至于第四条……我手机又震了,是运维群在吐槽某云厂商的日志服务又涨价了,得去看看怎么回事。 (编辑:应用网_常德站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


浙公网安备 33038102330457号