您可以调用PHP SDK操作阿里云日志服务。

背景信息

该SDK下载地址:GitHub

操作步骤

  1. 创建阿里云账号。

    具体方法请参见阿里云账号注册流程

    为了更好地使用阿里云服务,建议尽快完成实名认证,否则部分阿里云服务将无法使用。

  2. 获取阿里云访问密钥。
    使用日志服务PHP SDK时,必须申请阿里云访问密钥,详情请参见访问密钥(AccessKey)
    说明 后续将使用该密钥对,请勿对外泄露,妥善保管。
  3. 创建日志服务项目和日志库。
    您可以通过控制台创建项目和日志库,详情请参见 准备流程
    说明
    • 请确保使用同一阿里云账号获取阿里云访问密钥以及创建日志项目和日志库。
    • 创建项目成功后无法更改它的所属地域,并且也不支持在不同地域间迁移项目。
    • 您可以根据地域信息获取Endpoint,详情请参见服务入口
  4. 安装PHP开发环境。
    PHP SDK支持PHP 5.2.1及以上版本,您可以在本地安装SDK所支持的任何PHP版本并搭建相应的PHP开发环境。
  5. 下载并安装PHP SDK。
    1. GitHub下载最新的PHP SDK包。
    2. 下载完成后,解压到指定的目录。
      PHP SDK是一个软件开发包,不需要额外的安装操作。整个软件开发包除了SDK自身的代码外,还有一组第三方依赖包和一个 autoloader类帮助您简化使用流程。
  6. 执行如下代码操作日志服务(如:采集数据、查询日志等)。
    /* 使用autoloader类自动加载所有需要的PHP模块。注意使用合适的路径指向autoloader类所在文件*/
    require_once realpath(dirname(__FILE__) . '/../Log_Autoload.php');
    $endpoint = 'cn-hangzhou.sls.aliyuncs.com'; // 选择与上面步骤创建项目所属地域匹配的Endpoint
    $accessKeyId = 'your_access_key_id';        // 使用你的阿里云访问密钥AccessKeyId
    $accessKey = 'your_access_key';             // 使用你的阿里云访问密钥AccessKeySecret
    $project = 'your_project';                  // 上面步骤中创建的项目名称
    $logstore = 'your_logstore';                // 上面步骤中创建的日志库名称
    $client = new Aliyun_Log_Client($endpoint, $accessKeyId, $accessKey);
    #列出当前project下的所有日志库名称
    $req1 = new Aliyun_Log_Models_ListLogstoresRequest($project);
    $res1 = $client->listLogstores($req1);
    var_dump($res1);
    #创建logstore
    $req2 = new Aliyun_Log_Models_CreateLogstoreRequest($project,$logstore,3,2);
    $res2 = $client -> createLogstore($req2);
    #等待logstore生效
    sleep(60);
    #写入日志
    $topic = "";
    $source = "";
    $logitems = array();
    for ($i = 0; $i < 5; $i++)
    {
        $contents = array('index1'=> strval($i));
        $logItem = new Aliyun_Log_Models_LogItem();
        $logItem->setTime(time());
        $logItem->setContents($contents);
        array_push($logitems, $logItem);
    }
    $req2 = new Aliyun_Log_Models_PutLogsRequest($project, $logstore, $topic, $source, $logitems);
    $res2 = $client->putLogs($req2);
    var_dump($res2);
    #实时采集数据
    #首先遍历有哪些shardId
    $listShardRequest = new Aliyun_Log_Models_ListShardsRequest($project,$logstore);
    $listShardResponse = $client -> listShards($listShardRequest);
    foreach($listShardResponse-> getShardIds()  as $shardId)
    {
        #对每一个ShardId,先获取Cursor
        $getCursorRequest = new Aliyun_Log_Models_GetCursorRequest($project,$logstore,$shardId,null, time() - 60);
        $response = $client -> getCursor($getCursorRequest);
        $cursor = $response-> getCursor();
        $count = 100;
        while(true)
        {
            #从cursor开始读数据
            $batchGetDataRequest = new Aliyun_Log_Models_BatchGetLogsRequest($project,$logstore,$shardId,$count,$cursor);
            var_dump($batchGetDataRequest);
            $response = $client -> batchGetLogs($batchGetDataRequest);
            if($cursor == $response -> getNextCursor())
            {
                break;
            }
            $logGroupList = $response -> getLogGroupList();
            foreach($logGroupList as $logGroup)
            {
                print ($logGroup->getCategory());
                foreach($logGroup -> getLogsArray() as $log)
                {
                    foreach($log -> getContentsArray() as $content)
                    {
                        print($content-> getKey().":".$content->getValue()."\t");
                    }
                    print("\n");
                }
            }
            $cursor = $response -> getNextCursor();
        }
    }
    #等待1分钟后对日志进行查询
    sleep(60);
    #查询日志分布情况询(注意,要查询日志,必须保证已经创建了索引,PHP SDK不提供该接口,请在控制台创建索引。)
    $topic = "";
    $query='';
    $from = time()-3600;
    $to = time();
    $res3 = NULL;
    while (is_null($res3) || (! $res3->isCompleted()))
    {
        $req3 = new Aliyun_Log_Models_GetHistogramsRequest($project, $logstore, $from, $to, $topic, $query);
        $res3 = $client->getHistograms($req3);
    }
    var_dump($res3);
    #查询日志数据
    $res4 = NULL;
    while (is_null($res4) || (! $res4->isCompleted()))
    {
        $req4 = new Aliyun_Log_Models_GetLogsRequest($project, $logstore, $from, $to, $topic, $query, 5, 0, False);
        $res4 = $client->getLogs($req4);
    }
    var_dump($res4);