有奖捉虫:行业应用 & 管理与支持文档专题 HOT
本文将为您介绍云函数如何接入和使用博睿数据 APM。

前提条件

已注册 博睿 Server 账号。
创建云函数 并开启公网访问。
说明
博睿探针目前支持 Python 和 Node.js 的多数主流框架,且仅在使用支持的框架时,博睿 smartAgent 才可自动捕获。详情请参见 博睿探针支持列表

操作步骤

使用云函数控制台接入

您可以使用云函数控制台接入博睿,详细步骤如下:

绑定探针

您需要下载博睿探针,将该探针上传到层并绑定在函数上。
2. 登录云函数控制台,选择左侧菜单栏中的
3. 在“层”管理页面,单击新建
4. 在“新建层”页面,根据提示信息进行配置。如下图所示:


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


9. 单击确定即可完成探针的绑定。

引入探针

绑定层后,探针并不会自动启动,需要在代码入口引入探针。探针运行会占用少量内存,但不会影响您的业务运行。如业务代码本身占用了大量内存,探针将触发熔断机制以保障业务运行。目前提供 Nods.js 和 Python 引入:
Node.js 的引入
Python 的引入
在云函数的入口函数所在的文件 require 博睿探针。例如您可以在 sl_handler.js 文件中加入如下引入的代码:
require("/opt/bonree/apm/agent/nodejs/serverless/Bonree/index.js");

在云函数的入口函数所在的文件 import 博睿探针。以 Flask 框架为例,您可以在 sl_handler.py 文件中添加如下代码:
import sys

sys.path.insert(0, "/opt/bonree/apm/agent/python/serverless")
try:
from Bonree.autoinject import sitecustomize
except ImportError:
pass

如下图所示:



增加云函数环境变量

您需要在每个绑定博睿探针的云函数中增加环境变量,探针将根据环境变量中的账户信息上报。需新增以下变量:
环境变量 Key
Value
BONREE_SMARTAGENT_SDK_PATH
/opt/bonree/apm/agent/c/serverless/lib/libagentsdk-x64-linux.so
BONREE_APM_ACCOUNT_GUID
博睿账户 GUID
说明
您可以在博睿 Server 产品的右上角找到 GUID 信息。如下图所示:



使用 Serverless Cloud Framework 接入

您还可以使用 Serverless Cloud Framework 的 bonree component 上传博睿探针。本文以 Flask 框架为例,介绍如何使用bonree component来绑定和使用博睿探针。您也可以单独使用 bonree component 上传层,再进行 层绑定

创建层并绑定至函数

1. 在 apm 目录下新建 serverless.yml 文件,serverless.yml 文件内容如下:
component: bonree
name: bonree_agent
org: tencent
app: tencent
stage: dev
inputs:
name: bonree_agent
region: ap-beijing
runtimes:
- Nodejs10.15
- Python3.6


2. 同样在 src 目录下创建 Flask 的 serverless.yml 文件,在layers参数填写 bonree component 的信息,在环境变量中填写博睿账号的GUID和SDK路径参数。serverless.yml 文件内容如下:
component: flask
name: bonree_flask
org: tencent
app: tencent
stage: dev
inputs:
region: ap-beijing
runtime: Python3.6
layers:
- name: ${output:${stage}:${app}:bonree_agent.name}
version: ${output:${stage}:${app}:bonree_agent.version}
functionConf:
memorySize: 128
environment:
variables:
BONREE_APM_ACCOUNT_GUID: your_bonree_GUID
BONREE_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. 您可以将多个函数上报后关联至同一个应用,便可查看调用链路情况。如下图所示:
image-20210120212212888


更多操作指导可以查看 博睿 Server 产品文档

博睿探针支持列表

博睿探针目前支持以下主流框架和库:
Python
Node.js
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及以上