10.11杭州Clouder lab 十分钟搭建共享应用 2:如何通过日志服务实现用户的日志收集与分析

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
对象存储 OSS,内容安全 1000次 1年
简介: 场景描述 共享电动车企业使用函数服务搭建服务端。在函数服务中开启日志,把程序日志写到日志服务,同时在函数代码中使用SDK把运营日志写入到日志服务,使用日志服务进行日志分析。 在日志服务中,用户可以: 开发查看日志调试程序,确保程序的逻辑符合逻辑。

场景描述

共享电动车企业使用函数服务搭建服务端。在函数服务中开启日志,把程序日志写到日志服务,同时在函数代码中使用SDK把运营日志写入到日志服务,使用日志服务进行日志分析。

在日志服务中,用户可以:

  1. 开发查看日志调试程序,确保程序的逻辑符合逻辑。
  2. 运维设置监控和报警,监控服务状态是否正常。
  3. 客服调查用户投诉。
  4. 运营分析数据,创建漏斗,分析留存率、转化率。

实验步骤

1. 开通服务和上传代码包

首先需要开通函数计算、日志服务,开通步骤和准备工作见文档:函数服务实践文章

2. 确认日志服务Project和logstore已经被创建

打开日志服务控制台

可以看到华东2已经创建了一个project,以yunqi-demo-开头,这个project是在函数服务的代码里创建的。(注:如果已经在华东2创建了project,会使用用户创建的第一个project)

image.png

在logstore列表,我们能看到两个logstore,分别是fc-debug-log程序日志和ebike业务日志:

image.png

3. 配置函数服务的日志

打开函数服务控制台,选择刚刚创建的project和logstore, 选择AliyunLogFullAccess权限,点击保存:

Snip20180112_4

Snip20180112_8

进入 lock 这个函数:

Snip20180112_12

点击触发事件,输入事件的json,并且保存。然后点击执行:

事件样例:

{
    "Uid" : "abc",
    "DeviceId" : "abcdef",
    "Mobile" : "18612345678",
    "SessionId" : 23456,
    "Logitude": 120.0776645,
    "Latitude": 30.131852
}

同样可以尝试下unlock方法,事件样例:

{
      "Mobile" : "18612345678",
      "DeviceId" : 123456,
      "Logitude": 120.0776645,
      "Latitude": 30.131852
 }

4.查询

1. 在日志服务控制台,分别打开 两个标签,一个是fc-log,另一个是ebike:

image.png

2. 开发者调查函数调用情况。在 fc-log查询页面:输入lock ,点击查询:

image

此外,可以在ebike logstore中,查询op:unlock 或op:un* 或者unlock。

3. 客服收到用户投诉,某一次请求异常,那我们先找到userid:xxx, 然后找到requestid进入ebike查询: 查询userid:458 ,找到request id:

image.png

可以通过Request到其他系统中去找具体原因

5. 运维同学为了监控线上的异常情况,打开ebike查询页面,查看十分钟内开锁次数最多的用户,输入query:

query No. 1:

op : unlock| select count(1) as pv ,userid group by userid, __time__ - __time__% 600 order by pv desc 

image.png

点击查询,然后右上角点击『另存为快速查询』:

image.png

然后点击『添加到dashboard』,选择新建dashboard,名称为ebike-monitor:

image.png

右上角添加报警,选择刚刚保存的快速查询,输入相关参数和手机号码:

image.png

查看开锁和关锁的延时情况,修改query为:

query No. 2:

op:lock or op : unlock |  select date_format(from_unixtime(__time__ - __time__% 3600),'%m-%d %H:%i') as time, avg(latency)as avg_latency, approx_percentile(latency,0.9) as top_10_percent_latency ,approx_percentile(latency,0.8) as top_20_percent_latency  group by  time  order by time limit 10000

点击保存到dashboard,选择已经存在的dashboard: ebike_monitor:
image.png

为了快速查看延时的分布情况,我们把所有的延时均匀的划分到是个桶里,看每个桶中的均值是多少,以及对应的日志条数是多少?

image

image

查看函数服务每分钟的请求pv:

query No. 3:

op:lock or op : unlock |  select date_format(from_unixtime(__time__ - __time__% 3600),'%m-%d %H:%i') as time,count(1) as pv  group by time  order by time limit 10000

点击保存到dashboad,图表名称命名为ebike_pv

查看电池使用情况:

query No. 4:

op:lock | select sum(used_battery) as hourly_used_battery , date_format (from_unixtime(__time__ - __time__% 3600),'%m-%d %H:%i') as time  group by  time order by time limit 25

6. 运营同学需要日志数据做统计分析。在ebike查询页面,输入query:

query No. 5:

* | select sum(case when op = 'lock' then 1 else 0 end) as lock_pv, sum(case when op = 'unlock' then 1 else 0 end) as unlock_pv , date_format(from_unixtime(__time__ - __time__ % 3600),'%m-%d %H:%i') as time group by time order by time limit 100 

image.png

点击保存到dashboard,参考上文步骤,新建一个dashboard名称为ebike_dashboard:

输入更多query,保存到dashboard中:

查看不同省份的占比:

query No. 6:

* | select count(1) as count,  ip_to_province(ip) as province  group by province 

Snip20180112_14

查看不同城市的占比:

query No.7:

* | select count(1) as count,  ip_to_city(ip) as city  group by city 

image

查看不同网路运营商的占比:

query No.8:

* | select count(1) as count,  ip_to_provider(ip) as provider  group by provider

image

一天内的总收入:

query No. 9:

op : lock | select sum(money)    as income

用户的支付手段占比:

query No. 10:

op:lock | select count(1) as pv , pay_channel group by pay_channel

7. 打开保存的dashboard:

左侧选择新建标签:

image.png

在右侧弹出窗口中,选择刚刚创建的dashboard:

image.png
image.png

如果需要修改图表,点击每张图右上角的箭头;如果需要刷新页面,可以点击刷新按钮:

image.png

关注我们

欢迎添加VIP钉钉群进行咨询:

附录

函数触发事件:

{
    "Uid" : "abc",
    "DeviceId" : "abcdef",
    "Mobile" : "18612345678",
    "SessionId" : 23456,
    "Logitude": 120.0776645,
    "Latitude": 30.131852
}

本文所使用全部query:

op : unlock| select count(1) as pv ,userid group by userid, __time__ - __time__% 600 order by pv desc 

2.

op:lock or op : unlock |  select date_format(from_unixtime(__time__ - __time__% 3600),'%m-%d %H:%i') as time, avg(latency)as avg_latency, approx_percentile(latency,0.9) as top_10_percent_latency ,approx_percentile(latency,0.8) as top_20_percent_latency  group by time  order by time limit 10000

3.

op:lock or op : unlock |  select date_format(from_unixtime(__time__ - __time__% 3600),'%m-%d %H:%i') as time,count(1) as pv  group by time  order by time limit 10000

4.

op:lock | select sum(used_battery) as hourly_used_battery , date_format (from_unixtime(__time__ - __time__% 3600),'%m-%d %H:%i') as time  group by time  order by time limit 25

5.

* | select sum(case when op = 'lock' then 1 else 0 end) as lock_pv, sum(case when op = 'unlock' then 1 else 0 end) as unlock_pv , date_format(from_unixtime(__time__ - __time__ % 3600),'%m-%d %H:%i') as time group by time  order by time limit 100 

6.

* | select count(1) as count,  ip_to_province(ip) as province  group by province 

7.

* | select count(1) as count,  ip_to_city(ip) as city  group by city 

8.

* | select count(1) as count,  ip_to_provider(ip) as provider  group by provider

9.

op : lock | select sum(money)    as income

10.

op:lock | select count(1) as pv , pay_channel group by pay_channel
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
11天前
|
关系型数据库 MySQL 数据库
mysql数据库bin-log日志管理
mysql数据库bin-log日志管理
|
11天前
|
存储 关系型数据库 数据库
关系型数据库文件方式存储LOG FILE(日志文件)
【5月更文挑战第11天】关系型数据库文件方式存储LOG FILE(日志文件)
71 1
|
12天前
|
运维 监控 安全
Java一分钟之-Log4j与日志记录的重要性
【5月更文挑战第16天】Log4j是Java常用的日志框架,用于灵活地记录程序状态和调试问题。通过设置日志级别和过滤器,可避免日志输出混乱。为防止日志文件过大,可配置滚动策略。关注日志安全性,如Log4j 2.x的CVE-2021-44228漏洞,及时更新至安全版本。合理使用日志能提升故障排查和系统监控效率。
72 0
|
13天前
|
存储 监控 NoSQL
【MongoDB 专栏】MongoDB 的日志管理与分析
【5月更文挑战第11天】MongoDB日志管理与分析至关重要,包括系统日志和操作日志,用于监控、故障排查和性能优化。合理配置日志详细程度、存储位置和保留策略,使用日志分析工具提升效率,发现性能瓶颈和安全性问题。日志分析有助于优化查询、调整配置,确保数据安全,并可与其他监控系统集成。面对日志量增长的挑战,需采用新技术如分布式存储和数据压缩来保障存储和传输。随着技术发展,不断进化日志管理与分析能力,以支持MongoDB的稳定高效运行。
【MongoDB 专栏】MongoDB 的日志管理与分析
|
13天前
|
C++
JNI Log 日志输出
JNI Log 日志输出
56 1
|
13天前
|
存储 运维 大数据
聊聊日志硬扫描,阿里 Log Scan 的设计与实践
泛日志(Log/Trace/Metric)是大数据的重要组成,伴随着每一年业务峰值的新脉冲,日志数据量在快速增长。同时,业务数字化运营、软件可观测性等浪潮又在对日志的存储、计算提出更高的要求。
262 6
|
13天前
|
监控 安全 数据可视化
中间件应用日志记录和监控
【5月更文挑战第1天】中间件应用日志记录和监控
28 3
中间件应用日志记录和监控
|
13天前
|
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配置文件。最后,文章提到通过示例代码解释了日志格式中的各种占位符含义。
|
13天前
|
运维 监控 Go
Golang深入浅出之-Go语言中的日志记录:log与logrus库
【4月更文挑战第27天】本文比较了Go语言中标准库`log`与第三方库`logrus`的日志功能。`log`简单但不支持日志级别配置和多样化格式,而`logrus`提供更丰富的功能,如日志级别控制、自定义格式和钩子。文章指出了使用`logrus`时可能遇到的问题,如全局logger滥用、日志级别设置不当和过度依赖字段,并给出了避免错误的建议,强调理解日志级别、合理利用结构化日志、模块化日志管理和定期审查日志配置的重要性。通过这些实践,开发者能提高应用监控和故障排查能力。
95 1
|
13天前
|
存储 监控 关系型数据库
PHP编写的电脑监控软件:用户登录日志记录与分析
使用PHP编写简单但功能强大的电脑监控软件,记录用户登录日志并进行分析。代码示例展示了如何获取并存储用户IP地址和登录时间到数据库,然后进行登录数据的分析,如计算登录频率和常见登录时间。此外,还介绍了如何通过定时任务自动将监控数据提交到网站,以便实时监控用户活动,提升系统安全性和稳定性。
83 0

相关产品

  • 日志服务