本文将为您介绍云函数如何接入和使用博睿数据 APM。
前提条件
已注册 博睿 Server 账号。
已 创建云函数 并开启公网访问。
说明:
操作步骤
使用云函数控制台接入
您可以使用云函数控制台接入博睿,详细步骤如下:
绑定探针
您需要下载博睿探针,将该探针上传到层并绑定在函数上。
1. 下载 博睿 Serverless 版探针。
2. 登录云函数控制台,选择左侧菜单栏中的 层。
3. 在层管理页面,单击新建。
4. 在新建层页面,根据提示信息进行配置。如下图所示:


层名称:输入层名称。只能包含字母、数字、下划线、连字符,以字母开头,以数字或字母结尾,2~60个字符。
提交方法:选择本地上传 zip 包。
层代码:选择步骤1下载的探针文件。
运行环境:根据实际运行环境进行选择。目前支持 Python 和 Node.js。
5. 单击确定即可创建层。
6. 选择左侧菜单栏中的函数服务,进入函数服务页面。
7. 单击需要绑定层的函数名称,进入函数管理页面。
8. 选择层管理 > 绑定,在绑定层窗口按照提示绑定上述步骤创建的层。如下图所示:


9. 单击确定即可完成探针的绑定。
引入探针
绑定层后,探针并不会自动启动,需要在代码入口引入探针。探针运行会占用少量内存,但不会影响您的业务运行。如业务代码本身占用了大量内存,探针将触发熔断机制以保障业务运行。目前提供 Nods.js 和 Python 引入:
在云函数的入口函数所在的文件
require
博睿探针。例如您可以在 sl_handler.js
文件中加入如下引入的代码:require("/opt/bonree/apm/agent/nodejs/serverless/Bonree/index.js");
在云函数的入口函数所在的文件
import
博睿探针。以 Flask 框架为例,您可以在 sl_handler.py
文件中添加如下代码:import syssys.path.insert(0, "/opt/bonree/apm/agent/python/serverless")try:from Bonree.autoinject import sitecustomizeexcept ImportError:pass
如下图所示:


增加云函数环境变量
您需要在每个绑定博睿探针的云函数中增加环境变量,探针将根据环境变量中的账户信息上报。需新增以下变量:
环境变量 Key | Value |
BONREE_SMARTAGENT_SDK_PATH | /opt/bonree/apm/agent/c/serverless/lib/libagentsdk-x64-linux.so |
BONREE_APM_ACCOUNT_GUID | 博睿账户 GUID |
使用 Serverless Cloud Framework 接入
您还可以使用 Serverless Cloud Framework 的 bonree component 上传博睿探针。本文以 Flask 框架为例,介绍如何使用 bonree component 来绑定和使用博睿探针。您也可以单独使用 bonree component 上传层,再进行 层绑定。
创建层并绑定至函数
1. 在 apm 目录下新建
serverless.yml
文件,serverless.yml
文件内容如下:component: bonreename: bonree_agentorg: tencentapp: tencentstage: devinputs:name: bonree_agentregion: ap-beijingruntimes:- Nodejs10.15- Python3.6
2. 同样在 src 目录下创建 Flask 的
serverless.yml
文件,在layers
参数填写 bonree component 的信息,在环境变量中填写博睿账号的GUID和SDK路径参数。serverless.yml
文件内容如下:component: flaskname: bonree_flaskorg: tencentapp: tencentstage: devinputs:region: ap-beijingruntime: Python3.6layers:- name: ${output:${stage}:${app}:bonree_agent.name}version: ${output:${stage}:${app}:bonree_agent.version}functionConf:memorySize: 128environment:variables:BONREE_APM_ACCOUNT_GUID: your_bonree_GUIDBONREE_SMARTAGENT_SDK_PATH: /opt/bonree/apm/agent/c/serverless/lib/libagentsdk-x64-linux.so
3. 查看目录结构,具体目录结构如下所示:
.├── apm│ └── serverless.yml└── src└── serverless.yml
4. 只使用 bonree component 便可以完成层的创建。在云函数中配置 layers 参数可以完成绑定操作,您也可以选择在云函数控制台手动绑定层。
5. 在根目录下执行以下命令,进行应用部署。
scf deploy
引入探针
1. 登录 Serverless 控制台,单击左侧导航栏的函数服务。
2. 在函数服务页面,单击对应的函数名称,进入函数管理页面。
3. 单击函数代码页签,在
sl_handler.py
文件中加入引入探针的代码,详细内容可参考上文 引入探针。使用博睿 Server
1. 登录 博睿 Server 控制台,待数据上报至博睿。
2. 在博睿 Server 控制台右上角中选择
> 部署状态,进入部署状态页面查看已进行数据上报的函数。如下图所示:



3. 将该函数关联一个应用,即可查看应用运行的情况。如下图所示:


4. 您可以将多个函数上报后关联至同一个应用,便可查看调用链路情况。如下图所示:


博睿探针支持列表
博睿探针目前支持以下主流框架和库:
Python 支持的框架及库如下:
框架 | 版本 |
Flask | 0.10及以上/1.1.2 |
Django | 1.5及以上/3.1 |
Tornado | 3.0及以上/6.1 |
Web.py | 0.33及以上/0.6.2 |
Pyramid | 1.3及以上/1.10.5 |
Bottle | 0.12及以上/0.12.19 |
Cherrypy | 10.0及以上/18.6.0 |
Sanic | 0.5.0及以上/20.9.1 |
Odoo | 8.0及其以上/14.0 |
fastapi | 0.23.0及以0.63.0 |
quart | 0.11.0及以0.14.1 |
starlette | 0.12.0及以上0.14.1 |
Pymysql | 0.7.1及以上/0.10.1 |
mysqlclient | 1.3.0及以上/2.0.1 |
mysql-connector-python | 8.0.5及以上/8.0.22 |
psycopg2 | 2.6.2及以上/2.8.6 |
Cx-Oracle | 6.0及以上/8.0.1 |
pyhive | 0.1.6及以上/0.6.3 |
Pymongo | 3.3.0及以上/3.11.1 |
python-memcached | 1.57及以上/1.5.9 |
pyssdb | 0.4.0及以上/0.4.2 |
redis | 2.10.0及以上/3.5.3 |
redis-py-cluster | 0.1.0及以上/2.1.0 |
urllib3 | 1.18及以上/1.26.2 |
requests | 2.12.0及以上/2.25.0 |
httplib/http | 标准库 |
tornado_httpclient | 3.1及以上6.1 |
elasticsearch | 5.2.0及以上/7.10.0 |
grpcio | 1.0.0及以上/1.33.2 |
xmlrpclib | python 2.6/2.7 |
xmlrpc | python3.4+ |
thrift | 0.10.0及以上/0.13.0 |
aiohttp | 3.0.0及以上/3.7.3 |
kafka-python | 1.3.0及以上/2.0.2 |
stomp.py | 4.1.20及以上/6.1.0 |
kombu | 3.0.30及以上/5.0.2 |
librabbitmq | 1.6.0及以上2.0.0 |
Logging | 标准库 |
logbook | 1.3.0及以上/1.5.3 |
Eliot | 0.8.0及以上/1.12.0 |
celery | 3.1.0及以上/5.0.2 |
Node.js 支持的框架及库如下:
框架 | 版本 |
Express | 3.4.8及以上 |
Koa | 2.2.0及以上 |
Hapi | 17.0.0及以上 |
Promise | 8.0.1及以上 |
Bluebird | 3.5.1及以上 |
when | 3.7.8及以上 |
Async | 2.6.0及以上 |
q | 1.5.1及以上 |
request | 2.18.0 |
superagent | 3.6.0及以上 |
mysql | 2.13.0及以上 |
pg | 6.2.4及以上 |
ioredis | 2.5.0及以上 |
redis | 2.8.0及以上 |
hiredis | 0.5.0及以上 |
mongodb | 2.2.31及以上 |
mongoose | 5.0.10及以上 |
rabbit.js | 0.4.4及以上 |
amqplib | 0.5.2及以上 |