上篇写了如何开启springboot的accesslog来记录应用的接口访问时长,本篇基于上一篇日志收集来做分析,由于运维已经将accesslog加入了阿里云的日志服务,所以可通过SQL或SPL来进行日志分析或聚合,这个主要最终目的为了check是否和nginx日志对应上。
理论上是应该对应的,但之前几次报警发现应用日志并未报警(怀疑是否nginx或其他slb代理层有网络抖动或性能问题?),所以才开启应用的accesslog,才有了后面这一系列操作,按照nginx日志分析更方便,因为有指定的字段索引,而accesslog日志是整条日志作为一个content字符串进行处理,不过也可以分析。
小白经过一上午的尝试以及和阿里云客服沟通,得到以下结论
accesslog日志样例(其中/test/...部分代表接口url):
[21/May/2024:11:33:17 +0800] [XNIO-2 task-38] - 100.122.16.13 POST /test/... HTTP/1.1 200 (20 ms)
主要是红色部分的响应时间进行过滤,比如按整点1小时内超过800ms的统计一次
* and __tag__:__path__: "/opt/am/logs/access_log.log" and content :recipe/syn | extend timeStr = regexp_extract(content, '(\d+ ms)')
| extend time=regexp_extract(timeStr, '\d+') | where cast(time as int) > 50
但这个查询有时候查询扫描结果并不是100%(日志比较大的情况下,阿里云日志分析是分页进行检索匹配的,匹配到100条立马返回,或者没有匹配到任何结果但查询),所以需要手动的触发下一页的查询。