日志的重要性
1、在Java项目调试时,日志可以追踪程序执行的过程,查看日志可以方便地知道当前程序的运行状态,输出的日志便于记录程序在之前的运行结果。
2、日志可以帮助我们快速定位错误位置,让我们快速做出解决办法。
3、日志能够进行追踪数据的变化,对数据进行统计和性能分析以及采集运行环境数据,日志中包含了大量的用户数据,包括点击行为,兴趣偏好,用户画像等对于公司下一步的战略方向有一定指引作用。
阿里云日志服务
一、什么是阿里云日志服务
日志服务(Log Service,简称 SLS)是针对日志类数据的一站式服务,在阿里巴巴集团经历大量大数据场景锤炼而成。无需开发就能快捷完成日志数据采集、消费、投递以及查询分析等功能,提升运维、运营效率,建立DT 时代海量日志处理能力。
二、阿里云日志服务所包含的内容
1、实时采集与消费(LogHub)
功能:
- 通过ECS、容器、移动端、开源软件、JS等接入实时日志数据(例如Metric、Event、BinLog、TextLog、Click等)。
- 提供实时消费接口,与实时计算及服务对接。
用途:数据清洗(ETL)、流计算(Stream Compute)、监控与报警、 机器学习与迭代计算。
2、查询与实时分析(Search/Analytics)
实时索引、查询分析数据。
功能:
- 查询:关键词、模糊、上下文、范围。
- 统计:SQL聚合等丰富查询手段。
- 视化:Dashboard + 报表功能。
- 对接:Grafana、JDBC/SQL92。
用途:DevOps/线上运维,日志实时数据分析,安全诊断与分析,运营与客服系统。
3、投递数仓(LogShipper)
稳定可靠的日志投递。将日志中枢数据投递至存储类服务进行存储。支持压缩、自定义Partition、以及行列等各种存储方式。 用途:数据仓库 + 数据分析、审计、推荐系统与用户画像。
阿里云日志服务的具体用法举例分析
- log4j是apache实现的一个开源日志组件。log4j可以控制日志信息输送到特定的目的地
- logback同样是由log4j的作者设计完成的,拥有更好的特性,用来取代log4j的一个日志框架。是slf4j的原生实现。(Native implementations)
日志服务的案例分析
1、假设我们想统计过去十五分钟各种级别日志产生的日志条数(统计日志条数),还有使用柱状图、饼状图;
代码如下:
select * from level,count(*) as count GROUP BY level ORDER BY count DESC
2、假设我们想统计过去一小时发生ERROR最多的三个位置(定位发生错误位置);
代码如下:
level: ERROR | select location,count(*) as count GROUP BY location ORDER BY count DESC LIMTI 3
3、对于任意一条日志通过日志服务能够精确还原原始日志上下文中的信息,点击上下文浏览按钮可以看到当前日志的上下文信息,还可以通过在搜索栏中输入特定的语句对上下文信息进行过滤;
例如输入Thread-1
;
4、网站在做异常行为检测时,常常需要执行某些统计 :
- 例如,统计过去一小时,登录次数最多的三个用户,通过login字段筛选出记录用户登录行为的日志,通过regexp_extract函数从message字段中抽出userID字段,根据userID进行分组,统计个数,并按count由大到小进行排序;
代码如下:
login | SELECT regexp_extract(message,'userID=(?<userID>[a-zA-Z\d+]',1)AS userID,count(*) as count GROUP BY userID ORDER BY count DESC LIMIT 3)
可以看到user1在过去一小时登录次数最多,达到了一小时110次
5、电商网站常常需要统计用户的购买金额
- 例如统计过去十五分钟,每个用户的付款总额,首先通过关键字ORDER筛选出记录用户购买行为的日志,通过regexp_extract函数从message字段中抽出userID字段,根据userID进行分组,通过regexp_extract函数从message字段中抽出amount字段,并将其转化为double类型,最后求和;
代码如下:
order | SELECT regexp_extract(message,'userID=(?<userID>[a-zA-Z\d+]',1)AS userID,sum(cast(regexp_extract(message,'userID=(?<userID>[a-zA-Z\d+]',1)AS double)) AS amount GROUP BY userID
可以看到user1在过去十五分钟内消费达到1000元