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的接口失敗 |