从日志到双十一大屏只要一步:LOG/SLS+DataV 打通

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
对象存储 OSS,内容安全 1000次 1年
简介: 简介 日志服务从5月份开始提供了SQL查询功能,可以在1秒内快速分析1亿条日志。强大的统计分析能力,加上一些可视化手段,可以帮助开发者快速分析自己的日志。 在双十一这一个关键的节点,我们需要实时的关注自己的业务量,这时候配置一个可视化大屏就很关键,在一个大屏里展示所有的指标。

提到双十一人人都会想到天猫霸气的实时大屏。说起实时大屏,都会想到最典型的流式计算架构:

  • 数据采集:将来自各源头数据实时采集
  • 中间存储:利用类Kafka Queue进行生产系统和消费系统解耦
  • 实时计算:环节中最重要环节,订阅实时数据,通过计算规则对窗口中数据进行运算
  • 结果存储:计算结果数据存入SQL和NoSQL
  • 可视化:通过API调用结果数据进行展示

在阿里集团内,有大量成熟的产品可以完成此类工作,一般可供选型的产品如下:

image.png

​ 除这种方案外,今天给大家介绍一种新的方法:通过日志服务(LOG,原SLS)查询分析LogSearch/Analytics API 直接对接DataV进行大屏展示。

image.png

2017年9月日志服务(原SLS)加强日志实时分析功能(LogSearch/Analytics),可以使用查询+SQL92语法对日志进行实时分析。在结果分析可视化上,除了使用自带Dashboard外,还支持Grafana、Tableua(JDBC)等对接方式

两种方式差别

计算一般根据数据量、实时性和业务需求会分为两种方式:实时计算(流计算)、离线计算(数据仓库+离线计算),日志服务(原SLS)对实时采集数据提供两种方式对接。

image.png

除此之外,对于数据量偏大,对实时性有要求的日志分析场景,我们提供实时索引LogHub中数据机制,之后可通过LogSearch/Anlaytics直接进行查询分析。这种方法好处是什么:

  • 快速:API传入Query立马拿到结果,无需等待和预计算结果
  • 实时:日志产生到反馈大屏99.9%情况下1秒内
  • 动态:无论修改统计方法、补数据能立马刷新结果,不需要等待重新计算

当然没有一个计算系统是万能的,这种方式限制如下:

  • 数据量:单次计算数据量在百亿以下,超过需要限定时间段
  • 计算灵活度:目前计算限于SQL92语法,不支持自定义UDF

实际案例:不断调整统计口径下实时大屏

云栖大会期间有个临时需求,统计线上(网站)在全国各地访问量。由于之前采集全量日志数据并且在日志服务中打开了查询分析,所以只要写一个查询分析Query即可。以统计UV为例子:我们对所有访问日志中nginx下forward字段获取10月11日到目前唯一计数:

* | select approx_distinct(forward) as uv

线上已跑了1天需求变更了,只需要统计yunqi这个域名下的数据。我们增加了一个过滤条件(host),立马拿到结果:

host:yunqi.aliyun.com | select approx_distinct(forward) as uv

后来发现Nginx访问日志中有多个IP情况,默认情况下只要第一个ip即可,在查询中对Query进行处理

host:yunqi.aliyun.com | select approx_distinct(split_part(forward,',',1)) as uv

到第三天接到需求,针对访问计算中需要把uc中广告访问去掉,于是我们加上一个过滤条件(not …)既马上算到最新结果:

host:yunqi.aliyun.com not url:uc-iflow  | select approx_distinct(split_part(forward,',',1)) as uv

Nov-16-2017 14-10-49.gif

最后大屏效果如下:

image.png

使用说明:SLS对接DataV

主要分3个步骤:

  1. 数据采集,参考文档
  2. 索引设置 与控制台查询,参考索引设置与可视化,或最佳实践中网站日志分析案例
  3. 对接DataV插件,将实时查询SQL转化为视图

我们主要演示步骤3,在做完1、2步骤后,在查询页面可以看到原始日志:

image.png

创建dataV数据源

image.png

image.png

类型指定『简单日志服务-SLS』

名称自定义

AK ID和AK Secret填写主账号,或者有权限读取日志服务的子帐号的AK。

Endpoint填写 日志服务的project所在region的地址。图中为杭州的region地址。

创建一个折线图

创建一个折线图,在折线图的数据配置中,数据源类型选择『简单日志服务-SLS』,然后选择刚刚创建的数据源『log_service_api』在查询中输入参数。

image.png

查询参数样例如下:

{
    "projectName": "dashboard-demo",
    "logStoreName": "access-log",
    "topic": "",
    "from": ":from",
    "to": ":to",
    "query": "*| select approx_distinct(remote_addr) as uv ,count(1) as pv , date_format(from_unixtime(date_trunc('hour',__time__) ) ,'%Y/%m/%d %H:%i:%s')   as time group by time  order by time limit 1000" ,
    "line": 100,
    "offset": 0
  }

projectName填写自己的project。

logstoreName填写日志的logstore。

from和to分别是日志的起始和结束时间。

注意,上文的我们填写的是:from和:to。 在测试时,可以先填写unix time,例如1509897600。等发布之后,换成:from和:to这种形式,然后我们可以在url参数里控制这两个数值的具体时间范围。例如,预览是的url是http://datav.aliyun.com/screen/86312, 打开http://datav.aliyun.com/screen/86312?from=1510796077&to=1510798877后,会按照指定的时间进行计算,如果需要动态获取时间范围,请参考下文的回调ID部分。

query填写查询的条件,query的语法参考分析语法文档。样例中是展示每分钟的pv数。 query中的时间格式,一定要是2017/07/11 12:00:00这种,所以采用date_format(from_unixtime(date_trunc('hour',__time__) ) ,'%Y/%m/%d %H:%i:%s') 把时间对齐到整点,再转化成目标格式。

其他参数采用默认值。

配置完成后,点击『查看数据响应结果』:

image.png

点击上方『使用过滤器』,然后新建一个过滤器:

image.png

过滤器内容填写:

return Object.keys(data).map((key) => {
  let d= data[key];
  d["pv"] = parseInt(d["pv"]);
  return d;
}
)

在过滤器中,要把y轴用到的结果变成int类型,上述样例中,y轴是pv,所以需要转换pv列。

能看到在结果中有t和pv两列,那么我们在x轴配置为t,y轴配置成pv。

配置一个饼状图

image.png

查询填写:

{
    "projectName": "dashboard-demo",
    "logStoreName": "access-log",
    "topic": "",
    "from": 1509897600,
    "to": 1509984000,
    "query": "*| select count(1) as pv ,method group by method" ,
    "line": 100,
    "offset": 0
  }

在查询中,我们计算不同method的占比。

添加一个过滤器,过滤器填写:

return Object.keys(data).map((key) => {
  let d= data[key];
  d["pv"] = parseInt(d["pv"]);
  return d;
}
)

饼图的type填写method, value填写pv。

回调ID动态获取时间范围

这里演示如何动态的显示15分钟的日志。
首先,创建一个静态数据源,里面的值默认就可以,然后为其添加一个过滤器。代码如下

return [{
  value: Math.round(Date.now() / 1000)
}];
return [{
  value: Math.round((Date.now() - 24 * 60 * 60 * 1000) / 1000)
}];

然后启用他们对应的响应事件,并将value绑定到你命名的变量中(这里是from)

image.png

这里有个小技巧,我们新增的这两个变量只是要用来生成对应的时间变量,而不是真正需要他展示出来,那么该怎么隐藏他们呢,答案是把他们透明度调增为100%,这样他们就在你的大盘里隐身了,对就是这么暴力。

接下来,就可以在数据视图,通过:from和:to引用这个回调ID了,样例:

{
    "projectName": "dashboard-demo",
    "logStoreName": "access-log",
    "topic": "",
    "from": ":from",
    "to": ":to",
    "query": "*|  select count(1) as pv , referer  group by referer order by pv desc limit 30" ,
    "line": 100,
    "offset": 0
  }

预览和发布

点击预览和发布,一个大屏就创建成功了。开发者和业务同学可以在双十一当天实时看到自己的业务访问情况!

附上:Demo1地址。url中的参数from和to, Demo2地址
大家可以随意切换成任意时间。

image.png

image.png

image.png

相关实践学习
基于Hologres轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
阿里云实时数仓实战 - 项目介绍及架构设计
课程简介 1)学习搭建一个数据仓库的过程,理解数据在整个数仓架构的从采集、存储、计算、输出、展示的整个业务流程。 2)整个数仓体系完全搭建在阿里云架构上,理解并学会运用各个服务组件,了解各个组件之间如何配合联动。 3 )前置知识要求   课程大纲 第一章 了解数据仓库概念 初步了解数据仓库是干什么的 第二章 按照企业开发的标准去搭建一个数据仓库 数据仓库的需求是什么 架构 怎么选型怎么购买服务器 第三章 数据生成模块 用户形成数据的一个准备 按照企业的标准,准备了十一张用户行为表 方便使用 第四章 采集模块的搭建 购买阿里云服务器 安装 JDK 安装 Flume 第五章 用户行为数据仓库 严格按照企业的标准开发 第六章 搭建业务数仓理论基础和对表的分类同步 第七章 业务数仓的搭建  业务行为数仓效果图  
目录
相关文章
|
4天前
|
C++
JNI Log 日志输出
JNI Log 日志输出
13 1
|
4天前
|
存储 运维 大数据
聊聊日志硬扫描,阿里 Log Scan 的设计与实践
泛日志(Log/Trace/Metric)是大数据的重要组成,伴随着每一年业务峰值的新脉冲,日志数据量在快速增长。同时,业务数字化运营、软件可观测性等浪潮又在对日志的存储、计算提出更高的要求。
|
11天前
|
XML Java Maven
Springboot整合与使用log4j2日志框架【详解版】
该文介绍了如何在Spring Boot中切换默认的LogBack日志系统至Log4j2。首先,需要在Maven依赖中排除`spring-boot-starter-logging`并引入`spring-boot-starter-log4j2`。其次,创建`log4j2-spring.xml`配置文件放在`src/main/resources`下,配置包括控制台和文件的日志输出、日志格式和文件切分策略。此外,可通过在不同环境的`application.yml`中指定不同的log4j2配置文件。最后,文章提到通过示例代码解释了日志格式中的各种占位符含义。
|
11天前
|
运维 监控 Go
Golang深入浅出之-Go语言中的日志记录:log与logrus库
【4月更文挑战第27天】本文比较了Go语言中标准库`log`与第三方库`logrus`的日志功能。`log`简单但不支持日志级别配置和多样化格式,而`logrus`提供更丰富的功能,如日志级别控制、自定义格式和钩子。文章指出了使用`logrus`时可能遇到的问题,如全局logger滥用、日志级别设置不当和过度依赖字段,并给出了避免错误的建议,强调理解日志级别、合理利用结构化日志、模块化日志管理和定期审查日志配置的重要性。通过这些实践,开发者能提高应用监控和故障排查能力。
87 1
|
12天前
|
弹性计算 运维 Shell
|
1月前
|
安全 Linux 网络安全
/var/log/secure日志详解
Linux系统的 `/var/log/secure` 文件记录安全相关消息,包括身份验证和授权尝试。它涵盖用户登录(成功或失败)、`sudo` 使用、账户锁定解锁及其他安全事件和PAM错误。例如,SSH登录成功会显示"Accepted password",失败则显示"Failed password"。查看此文件可使用 `tail -f /var/log/secure`,但通常只有root用户有权访问。
108 4
|
1月前
|
运维 监控 数据可视化
日志服务 HarmonyOS NEXT 日志采集最佳实践
鸿蒙操作系统(HarmonyOS)上的日志服务(SLS)SDK 提供了针对 IoT、移动端到服务端的全场景日志采集、处理和分析能力,旨在满足万物互联时代下应用的多元化设备接入、高效协同和安全可靠运行的需求。
116780 10
|
1月前
|
监控 Linux 网络安全
/var/log/auth.log日志说明
`/var/log/auth.log`是Linux系统记录身份验证和授权事件的日志文件,包括登录尝试、SSH连接、sudo操作等。系统管理员可通过它监控用户登录、检查失败尝试、跟踪SSH活动、查看sudo/su操作及PAM活动。日志内容可能因系统配置而异,可能存在于其他日志文件中。分析这些日志可使用`tail`、`grep`等命令或专用日志分析工具。了解系统和其服务详情有助于提取有用信息。
53 2
|
1月前
|
安全 Ubuntu Unix
/var/log/syslog日志说明
`/var/log/syslog`是Unix和Linux的日志文件,记录系统事件和消息,由`syslogd`或`rsyslogd`生成。日志条目含时间戳、主机名、PID、日志级别(如DEBUG、ERROR)和事件描述。内容涵盖系统启动/关闭、硬件错误、网络、用户登录、安全事件等。查看日志可使用`cat`、`tail`、`less`或`grep`命令。不过,不同Linux发行版可能有变,如Ubuntu使用`journald`和`journalctl`。
58 3
|
1月前
|
Java
使用Java代码打印log日志
使用Java代码打印log日志
254 1

相关产品

  • 日志服务