如何在函式計算中使用結構化的使用者日誌

2021-09-20 04:27:01 字數 2472 閱讀 9614

目前函式計算缺省會將使用者的標準輸出寫入到使用者指定的 logstore ,如果使用了logger.log()console.log()這類函式還會帶上時間戳及requestid。

通常情況下,對於普通使用者來說這已經可以做一些問題調查和除錯了。

但在很多情況下,我們可能需要做自定義的特定欄位的查詢,例如比較數字大小,比較字串長度,做柱狀圖、餅圖,曲線圖等等。本文會介紹如何在函式計算中使用阿里雲日誌服務建立 json 格式的日誌來做結構化的日誌輸出和查詢。

本文假定您已經掌握了函式計算控制台的建立函式、呼叫函式等基本功能。

我們可以參考這篇文章,先開通日誌服務,並為您的 service 增加日誌記錄。

特別注意的是:我們需要將 json 格式的整個物件序列化為一行,並輸出到標準輸出。

在 python 中,我們可以使用print或者sys.stdout.write,值得注意的是sys.stdout.write最後的換行符\n需要自己加上,否則上下文會序列導致解析失敗。

我們先使用 python2.7 建立函式,複製下面的**,貼上到編輯框儲存。

# -*- coding: utf-8 -*-

import json

def handler(event, context):

print "hello function compute"

print ''

print '}'

print '}'

print json.dumps()

return 'hello world'

可以看到,我們的5個 print 中有3個都是標準的 json 字串。

其中還有乙個是我們使用json.dumps序列化的 json 字串。

建議在後續的實際專案中使用json.dumps來做 json 字串的序列化保證**的正確性,避免使用 string format 來做序列化。

module.exports.handler = function(event, context, callback) \n');

process.stdout.write('}\n');

process.stdout.write('}\n');

process.stdout.write(json.stringify() + '\n');

callback(null, 'hello world');

};

注意的是,nodejs中,我們不能使用console.log()來做輸出,而是使用process.stdout.write(),且需要加上最後的換行符。

配置好函式後,我們來到對應的log store。

函式呼叫成功後,我們使用日誌查詢,預期可以看到如下結果:

關於如何使用日誌服務的查詢語言,可以詳細參考(

例如在上面的日誌中,我們查詢分析message.age < 20message.age >= 20的佔比餅圖

詳細語法可參考實時分析簡介

用指向函式的指標作為函式的引數,實現結構化程式設計

用指向函式的指標實現結構化程式設計 include intmain intmax int a,int b return a int min int a,int b return a int add int a,int b void process int a,int b,int p int,int ...

Python程式設計如何在遞迴函式中使用迭代器

首先,想要實現的功能是遞迴遍歷資料夾,遇到滿足條件的檔案時,用yield返回該檔案的位置。如果不用遞迴器,可以這樣實現 path list def get one cage root str,cook folder name str for item in os.listdir root copy ...

如何在STL的map中使用結構體作為鍵值

這裡首先給出容器map的原型 template class key,class t,class compare less,class alloc alloc class map 可以看到模板引數一共有四個,第乙個就是key,即鍵 第二個就是值 第四個就是空間配置器,預設使用alloc 隨stl版本不...