博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何在函数计算中使用结构化的用户日志
阅读量:6886 次
发布时间:2019-06-27

本文共 2478 字,大约阅读时间需要 8 分钟。

目前函数计算默认会将用户的标准输出写入到用户指定的 logstore ,如果使用了 logger.log() console.log() 这类函数还会带上时间戳及requestID。

通常情况下,对于普通用户来说这已经可以做一些问题调查和调试了。

但在很多情况下,我们可能需要做自定义的特定字段的查询,例如比较数字大小,比较字符串长度,做柱状图、饼图,曲线图等等。本文会介绍如何在函数计算中使用创建 json 格式的日志来做结构化的日志输出和查询。

创建 logStore 并为 service 设置日志

本文假定您已经掌握了的创建函数、调用函数等基本功能。

我们可以参考,先开通日志服务,并为您的 service 增加日志记录。

用户函数如何记录日志

特别注意的是:我们需要将 json 格式的整个对象序列化为一行,并输出到标准输出。

在 python 中,我们可以使用 print 或者 sys.stdout.write,值得注意的是 sys.stdout.write 最后的换行符 \n 需要自己加上,否则上下文会串行导致解析失败。

我们先使用 python2.7 创建函数,复制下面的代码,粘贴到编辑框保存。

# -*- coding: utf-8 -*-import jsondef handler(event, context):    print "hello function compute"    print '{"name":"Amy", "sex":"female", "age":18, "city":"Beijing", "slogen":"function compute is awsome"}'    print '{"name":"Alex", "sex":"male", "age":25, "city":"Shanghai", "opts":{"phone":12345678, "hobby":"basketball"}}'    print '{"name":"Jack", "sex":"male", "age":35, "city":"Hangzhou", "opts":{"phone":23456789}}'    print json.dumps({"msg":"test message", "requestID": context.request_id})    return 'hello world'

可以看到,我们的5个 print 中有3个都是标准的 json 字符串。

其中还有一个是我们使用json.dumps 序列化的 json 字符串。

建议在后续的实际项目中使用 json.dumps 来做 json 字符串的序列化保证代码的正确性,避免使用 string format 来做序列化。

对于nodejs的用户,可以使用下面的代码

module.exports.handler = function(event, context, callback) {     process.stdout.write('hello function compute\n');    process.stdout.write('{"name":"Amy", "sex":"female", "age":18, "city":"Beijing", "slogen":"function compute is awsome"}\n');    process.stdout.write('{"name":"Alex", "sex":"male", "age":25, "city":"Shanghai", "opts":{"phone":12345678, "hobby":"basketball"}}\n');    process.stdout.write('{"name":"Jack", "sex":"male", "age":35, "city":"Hangzhou", "opts":{"phone":23456789}}\n');    process.stdout.write(JSON.stringify({"msg":"test message", "requestID": context.requestID }) + '\n');    callback(null, 'hello world'); };

注意的是,nodejs中,我们不能使用 console.log() 来做输出,而是使用process.stdout.write(),且需要加上最后的换行符。

配置日志索引

配置好函数后,我们来到对应的log store。

  • 点开查询分析属性>设置,如图:

setting.png

  • 如图,分别为各个字段创建索引

    • 为 message 创建 json 类型的索引
    • 为嵌套 json 类型 opts.hobby 创建 text 类型的索引

index_setting.png

  • 确认保存后我们可以尝试调用函数

结构化的日志查询和分析

函数调用成功后,我们使用日志查询,预期可以看到如下结果:

all_logs.png

关于如何使用日志服务的查询语言,可以详细参考[](。

指定requestID 查询

message.requestID: 7ec6a4bc-86fb-8dd9-7e1e-929a08316875

query_3.png

组合条件查询

message.age > 20 and message.sex = "male"

query_1.png

嵌套查询

message.opts.hobby = "basketball"

query_2.png

结合SQL查询分析

例如在上面的日志中,我们查询分析 message.age < 20message.age >= 20 的占比饼图

详细语法可参考

message.age >= 0 | SELECT case when "message.age" < 20 then '<20' else '>=20' end as age, count(1) group by age

pie_chart.png

转载地址:http://xfibl.baihongyu.com/

你可能感兴趣的文章
c# 进程间通信
查看>>
C# Web程序打包部署问题
查看>>
linux下面某些常用命令的用法【转】
查看>>
js table操作 ------ 拖拽行为并且使其自动贴附
查看>>
DDD为何叫好不叫座?兼论DCI与业务分析的方法论
查看>>
GNU make manual 翻译( 一百三十五)
查看>>
2012注定是收获的一年,奋斗才刚刚开始
查看>>
SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)...
查看>>
构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(16)-权限管理系统-漂亮的验证码...
查看>>
ASP.NET MVC5+EF6+EasyUI 后台管理系统(17)-LinQ动态排序
查看>>
ASPJpeg和ASPUpload组件的一些属性和方法
查看>>
SqlServer基础:Bit类型
查看>>
PostreSQL 的模式创建的代码位于何处
查看>>
java.lang.OutOfMemoryError: Java heap space 解决方法转测试可用
查看>>
linux内存分配方法总结【转】
查看>>
Javascript事件模型系列(四)我所理解的javascript自定义事件
查看>>
PostgreSQL 在何处真正开始写数据
查看>>
[LeetCode] Integer to Roman 整数转化成罗马数字
查看>>
Windows Mobile 6.x 市场将不再提供服务支持
查看>>
小知识~VS2012的xamarin加载失败解决
查看>>