1. 前言
安装使用PHP SDK可以帮助开发者快速接入使用天翼云的日志服务相关功能,目前支持同步上传等功能。
2. 使用条件
2.1. 先决条件
用户需要具备以下条件才能够使用LTS SDK PHP版本:
1、购买并订阅了天翼云的云日志服务,并创建了日志项目和日志单元,获取到相应编码(logProject、logUnit)。
2、已获取AccessKey 和 SecretKey。
3、已安装PHP 7.2及以上 运行环境。
2.2. 下载及安装
下载ctyun_lts_php_sdk.zip压缩包,放到相应位置后并解压。“ctyun_lts_php_sdk/example”目录中samplePutlogs.php为SDK的使用示例代码。
2.2.1. 编译使用
1、php sdk 使用前需安装composer。
2、从 getcomposer.org 下载 Composer 的安装脚本,并通过 PHP 执行它。下载完成后,你通常会看到一个名为 composer.phar 的文件。为了全局访问 Composer,你可以将它移动到 /usr/local/bin/ 目录下,并给它重命名为 composer:
sudo mv composer.phar /usr/local/bin/composer
3、这样你您就可以在任何地方通过 composer 命令来访问 Composer 了。
composer --version
4、进行项目文件,在composer.json的目录,执行安装命令。
composer install
5、更新依赖。
composer update
之后,进入example目录,运行samplePutlogs.php。
php samplePutlogs.php
3. SDK使用设置
3.1. 基本使用
使用 SDK访问云日志服务,需要设置正确的 AccessKey、SecretKey 和endpoint,所有的服务可以使用同一 key 凭证来进行访问,但不同的服务地区需要使用不同的 endpoint 进行访问,详情参考天翼云官网-SDK接入概述。在调用前SDK,需要已知以下参数:
- 云日志服务访问地址。详情请查看访问地址(Endpoint)。
- key凭证:accessKey和secretKey 。详情请查看如何获取访问密钥(AK/SK)。
- 日志项目编码:logProject,在使用SDK前,需要确保您有至少一个已经存在的日志项目。
- 日志单元编码:logUnit,在使用SDK前,需要确保日志项目中有至少一个已经存在的日志单元。
- 待上传的日志:logItem,在使用SDK前,需要确保日志已按照特定格式组织。
参数 | 参数类型 | 描述 | 是否必须 |
---|---|---|---|
endpoint | string | 域名 | 是 |
accessKey | string | AccessKey,简称ak | 是 |
secretKey | string | SecretKey ,简称sk | 是 |
logProject | string | 日志项目编码 | 是 |
logUnit | string | 日志单元编码 | 是 |
示例代码:SDK使用示例
<?php
require_once realpath( __DIR__ . "/../vendor/autoload.php");
use Ctyun\Log\LogItem;
use Ctyun\Log\LogException;
use Ctyun\Log\LogClient;
use Ctyun\Log\LogResponse;
$logItems = [];
for($i = 0; $i < 10; $i++){ //create 10 logItem
$logItem = new LogItem( "php sdk test message." . strval($i));
$logItem->contentsPushBack("contentint", 123456);
$logItem->contentsPushBack("contentmessage", "php sdk");
$logItem->contentsPushBack("contentdouble", 3.1415);
$logItem->labelsPushBack("user_tag", "string");
$logItems[] = $logItem;
}
$accessKey = "your accessKey";
$secretKey = "your secretKey";
$endpoint = "endpoint";
$logProject = "your logProject";
$logUnit = "your logUnit";
try{
$logClient = new LogClient($accessKey, $secretKey, $endpoint);
for($i = 0; $i < 10; $i++){ //send 10 times
$logResponse = $logClient->putLogs($logProject, $logUnit, $logItems);
printf(strval($i) . ",statusCpde:%s , message:%s , errorCode:%s \n", $logResponse->getStatusCode(), $logResponse->getMessage(), $logResponse->getErrorCode() );
}
}catch(LogException $e){
printf("putLogs failed, code:%d, message:%s\n", $e->getCode(), $e->getMessage() );
}
4. LTS服务代码示例
4.1. 关于Client的操作
4.1.1. LogClient()
此操作是初始化client,client包含的配置信息如下:
参数 | 参数类型 | 描述 | 是否必须 |
---|---|---|---|
endpoint | string | 域名 | 是 |
accessKey | string | AccessKey,简称ak | 是 |
secretKey | string | SecretKey ,简称sk | 是 |
logProject | string | 日志单元编码 | 是 |
userAgent | string | 使用的SDK信息标识 | 否 |
securityToken | LogToken | 获取的token信息 | 否 |
httpClient | GuzzleHttp\Client | 定义的CURL ,用于http请求 | 否 |
示例代码:初始化创建Client
$logClient = new LogClient($accessKey, $secretKey, $endpoint);
4.1.2. akskToToken()
此操作是为client注入token信息,这一步需要使用ak和sk信息换取临时凭证TokenInfo,其中包含了token随机串和过期时间两个参数。这一步需要去访问CTIAM的api接口,调用api接口,传入ak/sk/endpoint信息,返回token信息。
TokenInfo信息如下:
参数 | 类型 | 描述 |
---|---|---|
token | string | token 随机串 |
expireTime | int | 过期时间,默认30分钟 |
获取TokenInfo这一步在Client 初始化时会自动调用。用户默认可以不用进行这一步操作。
4.2. 关于Log的操作
4.2.1. logItem()
此操作用于生成待上传的日志,其中LogItem
参数 | 类型 | 描述 | 是否必须 |
---|---|---|---|
logTimestamp | int | 时间戳,单位纳秒 | 是 |
originMsg | string | 原始日志内容 | 是 |
contents | [] | kv类型,日志分词,可用于索引 | 否 |
labels | [] | kv类型,自定义label | 否 |
注意:其中Contents和Labels的key的长度不超过64字符,仅支持数字、字母、下划线、连字符(-)、点(.),且必须以字母开头。value类型最好使用字符串(string)和数字类型(int,double),其他类型建议先转为字符串类型,并且value值不能为空或空字符串。
示例代码:组装生成10条日志
$logItems = [];
for($i = 0; $i < 10; $i++){ //create 10 logItem
$logItem = new LogItem( "php sdk test message." . strval($i));
$logItem->contentsPushBack("contentint", 123456);
$logItem->contentsPushBack("contentmessage", "php sdk");
$logItem->contentsPushBack("contentdouble", 3.1415);
$logItem->labelsPushBack("user_tag", "string");
$logItems[] = $logItem;
}
4.3. 关于日志上传的操作
4.3.1. putLogs()
此操作用于日志上传服务,需要传入的参数有三个,分别是logProject(日志项目编码),logUnit(日志单元编码),logItems(要上传的日志)。
参数 | 类型 | 描述 | 是否必须 |
---|---|---|---|
logProject | string | 日志项目编码 | 是 |
logUnit | string | 日志单元编码 | 是 |
logItems | [LogItem] | 日志信息 | 是 |
示例代码:上传日志
$logResponse = $logClient->putLogs($logProject, $logUnit, $logItems);
4.3.2. LogResponse
logResponse 是putlogs方法的返回响应体,如下表格式:
参数 | 类型 | 描述 | 示例 |
---|---|---|---|
statusCode | string | 返回码,取值范围:0:-正常、-1:严重错误,其他自定义 | |
message | string | 状态描述 | SUCCESS |
errorCode | string | 参考错误编码列表 |
示例代码:获取返回结果
$logResponse->getStatusCode();
$logResponse->getMessage();
$logResponse->getErrorCode();
日志服务相关错误编码(部分):
statusCode | error | message |
---|---|---|
-1 | LTS_8000 | 请求失败,请稍候重试,或提交工单反馈 |
-1 | LTS_8001 | 内容不合法,无法解析 |
-1 | LTS_8004 | 日志内容包含的日志必须小于[x] MB和[y]条 |
-1 | LTS_8006 | 日志内容解压失败 |
-1 | LTS_8007 | Token失效,请重新获取 |
-1 | LTS_8009 | 无云日志服务产品实例,请先开通云日志服务 |
-1 | LTS_8010 | 日志项目不存在 |
-1 | LTS_8011 | 日志单元不存在 |
-1 | LTS_8013 | 在1个日志项目下,写入流量最大限制:200MB/s |
-1 | LTS_8014 | 在1个日志项目下,写入次数最大限制:1000次/s |
-1 | LTS_8015 | 在1个日志单元下,写入流量最大限制:100MB/s |
-1 | LTS_8016 | 在1个日志单元下,写入次数最大限制:500次/s |
-1 | LTS_18000 | 调用ITIAM的接口失败 |