要说我这些年摸爬滚打,最让我觉得顺手的“家伙事儿”,那肯定得是ELK这套组合拳了。这东西真就是我的“拿手英雄”,当年要没它,我估计早就被各种线上问题给折磨疯了。
刚开始那会儿,我们项目组出了名的糙。代码写完就上线,服务一跑起来,日志就跟瀑布一样往外流。出了问题?那就登录服务器,tail -f 一通看,眼珠子都快盯瞎了。要是碰上多个服务,那简直是噩梦。一台一台机器跳,一个一个文件翻,等找到点蛛丝马迹,半夜三更都过去了。
有一次,一个核心业务突然报了个错,用户那边反馈一片哀嚎。我当时都懵了,跑过去看日志,几十台机器,每个机器上还跑着好几个服务,日志路径都不一样。我当时心想,这可怎么整?手动一个个找,那找到猴年马月都找不出来。整个团队都急得团团转,老板电话一个接一个地打过来催。那一个晚上,我感觉比我一年写的代码还多,全是汗水和焦虑。硬是花了整整六个小时,才从浩如烟海的日志文件里,揪出来一个不起眼的配置错误。这事儿之后,我真是被搞怕了,发誓再也不能这么瞎搞了。
痛苦的开端,也是转机
那次事件之后,我开始琢磨,有没有个什么法子,能把这些散落在各处的日志都给收拢起来,最好还能一目了然地看出来哪里出了问题。当时网上各种方案满天飞,有自己写脚本收集的,有商业软件的。我这个人比较抠,也喜欢自己折腾,就想着找个开源的试试。
东拼西凑地查了一堆资料,偶然间看到了ELK这个名字。说是 Elasticsearch、Logstash 和 Kibana 的组合。听起来就挺洋气,一堆人吹得神乎其神。我当时也没多想,就想着死马当活马医,先学着搭一套看看效果。
最开始那是真的难,光是把这三个玩意儿给安装起来,就费了我九牛二虎之力。记得那时候,Elasticsearch 装不上去,不是内存不够就是端口冲突。Logstash 配置文件写错一个标点符号,立马就跑不起来。Kibana 界面打开是打开了,可一点数据都没有,光秃秃的。我当时简直想砸电脑,觉得这东西太反人类了。
慢慢摸索,逐渐上手
不过人就是这样,越挫越勇。我硬着头皮,一个一个组件地啃。从最基本的概念开始学,啥是文档,啥是索引,啥是字段。慢慢地,终于把 Elasticsearch 给折腾起来了,也学会了怎么往里面丢数据。
然后是 Logstash,这玩意儿是日志收集和处理的核心。我一开始就是把它当个日志搬运工,从文件里读出来,原封不动地丢给 Elasticsearch。但很快我就发现,原始日志直接丢进去,根本没法看。各种奇形怪状的日志格式,让人头大。我开始学习 Logstash 的过滤器(filter),尤其是那个叫 Grok 的东西。这玩意儿简直是神器!能从一堆乱七八糟的文本里,把我想关心的那些字段给抠出来,比如请求耗时、错误码、用户ID啥的。我写第一个成功的 Grok 规则时,那种成就感,不亚于我第一次成功编译C语言程序。
再后来就是 Kibana 了。数据进去了,怎么可视化,怎么看?Kibana 就是那个画图的。我开始学着建索引模式,然后是各种图表:折线图看请求趋势,饼图看错误类型分布,数据表格看详细日志。我发现,把这些图表拼在一起,就是一个活生生的监控大屏。以前需要熬夜翻日志才能发现的问题,现在扫一眼大屏就能找到异常点。
我的“操作技巧”
用了ELK几年下来,我也总结出了一些自己的“操作技巧”,算是我的独家秘笈。我觉得最重要的有几点:
- 日志格式标准化:这是根本。如果日志打得一团糟,ELK再强大也只是个垃圾场。我们后来强制要求服务必须输出 JSON 格式的日志,每个字段都有明确的含义。这样 Logstash 就不需要费力去解析了,直接结构化数据,效率高,也准。
- Logstash 过滤器精细化:光有 JSON 不够,有时候日志里还有些嵌套,或者需要从某个字段里再提取信息。我会写复杂的 Grok 结合 mutate 规则,把数据清洗得干干净净,该转数字的转数字,该改名字的改名字。有时候还会用条件判断(if-else)来处理不同类型的日志,比如正常请求日志和慢查询日志,处理方式就不一样。
- Elasticsearch 索引优化:刚开始我不懂,所有日志都丢一个大索引里。时间长了,查询起来慢得要死。后来我学会了按天、按业务创建索引,这样查询特定时间范围或者特定业务的日志时,就能精准命中,效率大大提升。而且老旧的日志可以定期删除或者归档,节省存储。
- Kibana 仪表板定制:我会根据不同的用户角色,定制不同的仪表板。比如给开发看服务的性能指标和错误日志,给运维看机器的资源使用和系统日志,给产品看用户的行为轨迹。每个仪表板都围绕着特定的业务目标来设计,确保信息准确、直观。
- 告警机制:虽然ELK本身没有很强的告警功能(或者说我当时没折腾明白),但我会结合一些外部工具,比如写个脚本定时查Kibana的API,如果发现错误率异常升高,或者某个指标突破阈值,就自动发邮件或者推送到钉钉。虽然有点土,但是很管用。
这些年,ELK就像我的一个老伙计,陪我度过了无数个排查问题的夜晚。当年那个熬夜翻日志的惨样,现在再回想起来,简直就是天方夜谭。我现在解决问题,大部分时候只需要打开 Kibana 仪表板,几分钟就能定位到问题根源。真的,如果你还在为日志发愁,不妨也试试我的这个“拿手英雄”,好好琢磨琢磨它的“操作技巧”,肯定能让你少掉不少头发。


