这篇会为你介绍云函数如何接入和使用博睿数据 APM。
一、前提条件
·已注册 博睿 Server 账号。
·已 创建云函数 并开启公网访问。
注意:说明:
注意:博睿探针目前支持 Python 和 Node.js 的多数主流框架,且仅在使用支持的框架时,博睿 smartAgent 才可自动捕获。详情请参见 博睿探针支持列表。
二、使用云函数控制台接入
你可以使用云函数控制台接入博睿,详细步骤如下:
三、绑定探针
你需要下载博睿探针,将该探针上传到层并绑定在函数上。
1. 下载 博睿 Serverless 版探针。
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 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 |
注意:说明:
注意:你可以在 博睿 Server – 探针下载&更新界面的右上角找到 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_agent region: ap-beijing runtimes: – 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-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. 你可以将多个函数上报后关联至同一个应用,便可查看调用链路情况。如下:
更多操作指导可以查看 博睿 Server 产品文档。
十、博睿探针支持列表
博睿探针目前支持以下主流框架和库:
PythonNode.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及以上 |