全部产品

调用统计及监控报警

更新时间:2018-11-26 10:30:38

日志服务支持函数计算调用统计记录,并对采集到的函数计算调用进行实时查询与分析统计、通过多种可视化方式进行分析结果的直观展示。用户可以通过制定自己的LogStore,将函数调用信息统计实时导入该LogStore,通过阿里云日志服务的查询分析、以及图表展示来实时了解函数调用的情况,帮助用户更好地掌控函数服务状态。

概述

本文将介绍以下几个内容:

  • 日志收集导入
  • 日志查询及分析
  • 模板表盘使用
  • 个性化表盘配置
  • 报警规则设定

日志收集导入

前提条件

  • 已开通函数计算服务,并成功创建了服务。

  • 已开通日志服务,并创建好和函数计算服务同一地域下的LogProjectLogStore

操作步骤

  1. 登录 函数计算控制台首页

  2. 单击控制台概览页的 日志处理

    console_guide.png

  3. 在日志分析管理界面单击 新建关联

    new_ref.png

  4. 自定义日志分析页面:

    1. 选择该地域中已经创建好的 LogProject 及 LogStore。

    2. 选择需要关联的服务,此处可以管理多个服务到同一个 LogStore。

    3. 角色创建方式 中,选择 新建角色

    4. 单击 确认

      config_ref.png

  5. 授权日志:信息核对无误后,直接点击下方的 确认

    auth.png

日志查询分析与字段解读

点开的 LogStore 名字跳转到查询界面

我们可以在关联的 LogStore 输入查询语句分析日志

  • 我们可以通过requestID 来获得一个请求被调用的详细信息,如:
  1. requestID:e9870cbd-2ab2-6c78-3486-cd164015b889
  • 查询异步调用请求
  1. mode:async and operation:InvokeFunction
  • 查询调用时长超过5000毫秒的请求信息
  1. operation:InvokeFunction and durationMs > 5000

日志字段详细解释

名字 类型 说明 示例
accountID String 用户ID 1234567890
asyncInvocationFinished String 调用完成 true
concurrentCount Long 当前实际并发度 10
concurrentReqLimit Long 最大并发度 100
durationMs Double 函数执行耗时 5012.025
errorType String 错误类型 HandledError
externalServiceVersion String 使用的服务版本 1
fcStatus Long 内部状态码 200
forwardedFor String 原始IP,使用CDN trigger时该IP代表端IP 200.100.100.100
functionErrors Long 用户函数错误 0
functionName String 函数名 ReservedFunction
functionTimeoutInSec Long 函数超时限制 300
host String 请求host 1234567890.cn-shanghai.fc.aliyun-inc.com
isDarkLaunch String 是否使用了别名灰度版本 true
ip String 请求客户端IP 172.16.0.198
isHTTPS String 是否使用HTTPS协议 false
isHTTPTrigger String 是否为HTTP trigger触发 false
latency Double 函数调用延迟(毫秒) 5017.347
maxMemoryUsage Double 函数实例最大使用内存(MB) 17.25
memoryLimitInMB Long 函数实例内存使用限制(MB) 512
meteredRespSize Long 计费流量(字节) 0
method String HTTP 请求方法 POST
mode String 调用类型(同步:sync/异步:async) sync
operation String 日志分类 InvokeFunction
path String 函数调用URL path /2016-08-15/services/MeteringService/functions/ReservedFunction/invocations
qualifier String 使用的服务版本信息 版本号或者别名
region String 集群所在区域 cn-shanghai
requestID String 函数requestID e9870cbd-2ab2-6c78-3486-cd164015b889
requestOriginalURI String 原始URI(使用域名绑定后无/2016-08-15等字样) /2016-08- 15/services/MeteringService/functions/ReservedFunction/invocations
requestSize Long 函数请求大小(字节) 912
resolveQualifierLatency Long 解析服务版本使用的时间 0
responseSize Long 函数返回大小(字节) 0
runtime String 函数runtime python2.7
serviceName String 服务名 test-service-name
status Long 客户端将收到的 HTTP 状态码 200
timestamp Long 函数开始处理请求时间戳 1538137847
userAgent String 请求端userAgent go-sdk-0.1

表盘使用与数据指标解读

在日志服务的控制面板中,在左侧的表盘中,点击新添加的dashboard fc-invocation-metrics,可以看到如下相关图表

dashboard-1.png

dashboard-2.png

dashboard-3.png

计费调用次数

  • 用户函数被执行的次数。除了正确执行,还包含函数内部异常的调用。

资源使用量

  • 函数实例内存 x 函数执行时间。

公网流出流量

  • 该部分流量仅计算函数返回所产生的计费流量,不包含函数内部通过TCP/UDP等client发起的请求所产生的流量。

流入流量

  • 仅计算函数接受请求所产生的流入流量,该流量不计入费用。

服务质量

  • 用户错误率:反应用户原因导致函数执行失败的比例。用户错误包括4xx错误(除去 429 流控错误)以及函数执行错误,正常值为0。
  • 流控错误率:反应流控导致函数执行失败的比例。流控错误包括用户配额导致的流控(429)和函数计算系统原因导致的流控(503),正常值为0。
  • 系统错误率:反应函数计算系统导致函数执行失败的比例。系统错误包括 5xx 错误(除去 503 流控),正常值为0。

计费执行及函数执行错误

  • 计费调用数:被实际执行并计费的函数调用;
  • 函数错误数:被实际执行了但由于用户原因导致执行失败的函数调用。

执行时间(毫秒)

  • 平均值:单位时间内,函数的平均执行时间。

函数并发度

  • 并发度限制:用户在该区域下账户的并发度配额;
  • 实际并发度:单位时间内实际使用最大并发数。

HTTP 函数状态

  • HTTP 函数执行返回给客户端的状态码。
  • 不同状态段代表各段状态码的返回总数目,例如 status_4xx 代表单位时间内 400<=httpStatus<=499 的总数。

Top N函数

默认按资源使用量从大到小排序

  • 资源使用量(GB-秒):见上述说明;
  • 公网流出流量(GB): 见上述说明;
  • 执行次数:函数调用执行次数;
  • 函数错误数: 用户函数错误数;
  • 最大内存(MB): 函数实际使用内存的最大值。

个性化 dashboard 定制指南

我们可以通过使用查询分析语句,得到图表后,将其添加为一个新的dashboard,方便后续查看。

更多配置可以参考:

以下查询语句及图表制作仅供参考,若作为商业使用请谨慎对待。

用户IP来源分析

  • 国内访问分布图

使用下列查询分析语句,并选择图表类型地图中的中国地图

  1. operation:InvokeFunction | SELECT ip_to_province(IF(forwardedFor = '', ip, forwardedFor)) AS "省份", approx_distinct(IF(forwardedFor = '', ip, forwardedFor)) AS "请求" GROUP BY "省份" LIMIT 50

province.png

  • 世界访问分布图

使用下列查询分析语句,并选择图表类型地图中的世界地图

  1. operation:InvokeFunction | SELECT ip_to_country(IF(forwardedFor = '', ip, forwardedFor)) AS "国家", approx_distinct(IF(forwardedFor = '', ip, forwardedFor)) AS "请求" GROUP BY "国家" LIMIT 50

world.png

  • 热力分布图

使用下列查询分析语句,并选择图表类型地图中的高德地图

  1. operation:InvokeFunction | SELECT ip_to_geo(IF(forwardedFor = '', ip, forwardedFor)) AS geo, count(1) AS count GROUP BY geo order BY count desc LIMIT 30

geo.png

userAgent 用户比例分析

使用下列查询分析语句,并选择图表类型中的饼图

  1. operation:InvokeFunction | SELECT userAgent, COUNT(userAgent) AS count GROUP BY userAgent ORDER BY count DESC LIMIT 20

user-agent.png

HTTP函数热门访问链接 Top 20

使用下列查询分析语句,并选择图表类型中的表格

  1. operation:InvokeFunction and isHTTPTrigger:true | SELECT requestOriginalURI, COUNT(requestOriginalURI) AS count GROUP BY requestOriginalURI ORDER BY count LIMIT 20

报警规则设定

为了更好地掌控函数健康程度,我们可以通过添加钉钉机器人,结合日志服务的报警规则来健康服务状况。

配置钉钉机器人

  • 我们可以在钉钉群设置中,添加钉钉机器人

add-robot.png

  • 配置钉钉机器人信息

config-robot.png

设置查询语句

  • 例如我们想对函数代码执行错误5xx报警,我们可以设置查询:
  1. fcStatus:200 and status>=500 | select arbitrary(serviceName) as serviceName, arbitrary(functionName) as functionName, count(1) as total
  • 然后在日志服务右上角点击另存为告警

例如下图中,我们每分钟查询一次数据,如果一分钟内,查询的5xx状态数大于10次,则产生钉钉报警。

我们按图中规则配置如下信息,并复制上图中的 WebHook 地址,粘贴到下图的地址中。

alert.png