全部產品
Search
文件中心

Simple Log Service:通過API消費

更新時間:Aug 28, 2024

Log Service提供多語言SDK,而且都支援Log Service消費介面。本文介紹普通消費日誌的SDK樣本及控制台的消費預覽功能。

前提條件

  • 已開通Log Service。更多資訊,請參見開通Log Service

  • 已建立RAM使用者並完成授權。具體操作,請參見建立RAM使用者並完成授權

  • 已配置環境變數ALIBABA_CLOUD_ACCESS_KEY_IDALIBABA_CLOUD_ACCESS_KEY_SECRET。具體操作,請參見在Linux、macOS和Windows系統配置環境變數

    重要
    • 阿里雲帳號的AccessKey擁有所有API的存取權限,建議您使用RAM使用者的AccessKey進行API訪問或日常營運。

    • 強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。

使用SDK消費

SDK消費

步驟

本樣本中,調用介面讀取日誌資料,完成普通消費的示範。樣本如下所示。關於Log ServiceSDK的更多資訊,請參見SDK參考概述

  1. 添加Maven依賴。 在Java專案的根目錄下,開啟pom.xml檔案,添加以下代碼:

    <dependency>
      <groupId>com.google.protobuf</groupId>
      <artifactId>protobuf-java</artifactId>
      <version>2.5.0</version>
    </dependency>
    <dependency>
    <groupId>com.aliyun.openservices</groupId>
      <artifactId>aliyun-log</artifactId>
      <version>0.6.99</version>
    </dependency>
  2. 建立PullLogsWithSPLDemo.java檔案。

    import com.aliyun.openservices.log.Client;
    import com.aliyun.openservices.log.common.Consts;
    import com.aliyun.openservices.log.common.LogGroupData;
    import com.aliyun.openservices.log.common.Shard;
    import com.aliyun.openservices.log.exception.LogException;
    import com.aliyun.openservices.log.request.PullLogsRequest;
    import com.aliyun.openservices.log.response.ListShardResponse;
    import com.aliyun.openservices.log.response.PullLogsResponse;
    
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    public class PullLogsDemo {
        // Log Service的服務存取點。此處以杭州為例,其它地區請根據實際情況填寫
        private static final String endpoint = "cn-hangzhou.log.aliyuncs.com";
        // 本樣本從環境變數中擷取 AccessKey ID 和 AccessKey Secret。
        private static final String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
        private static final String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
        // Project 名稱
        private static final String project = "your_project";
        // LogStore 名稱
        private static final String logStore = "your_logstore";
    
        public static void main(String[] args) throws Exception {
            // 建立Log Service Client
            Client client = new Client(endpoint, accessKeyId, accessKeySecret);
            // 查詢 LogStore 的 Shard
            ListShardResponse resp = client.ListShard(project, logStore);
            System.out.printf("%s has %d shards\n", logStore, resp.GetShards().size());
            Map<Integer, String> cursorMap = new HashMap<Integer, String>();
            for (Shard shard : resp.GetShards()) {
                int shardId = shard.getShardId();
                // 從頭開始消費,擷取遊標。(如果是從尾部開始消費,使用 Consts.CursorMode.END)
                cursorMap.put(shardId, client.GetCursor(project, logStore, shardId, Consts.CursorMode.BEGIN).GetCursor());
            }
            try {
                while (true) {
                    // 從每個Shard中擷取日誌
                    for (Shard shard : resp.GetShards()) {
                        int shardId = shard.getShardId();
                        PullLogsRequest request = new PullLogsRequest(project, logStore, shardId, 1000, cursorMap.get(shardId));
                        PullLogsResponse response = client.pullLogs(request);
                        // 日誌都在日誌組(LogGroup)中,按照邏輯拆分即可。
                        List<LogGroupData> logGroups = response.getLogGroups();
                        System.out.printf("Get %d logGroup from logStore:%s:\tShard:%d\n", logGroups.size(), logStore, shardId);
                        // 完成處理拉取的日誌後,移動遊標。
                        cursorMap.put(shardId, response.getNextCursor());
                    }
                }
            } catch (LogException e) {
                System.out.println("error code :" + e.GetErrorCode());
                System.out.println("error message :" + e.GetErrorMessage());
                throw e;
            }
        }
    

SDK基於SPL消費

步驟

本樣本中,調用PullLog介面讀取日誌資料,完成使用Java SDK基於SPL消費日誌資料的示範。關於Log ServiceSDK的更多資訊,請參見SDK參考概述

  1. 添加Maven依賴。

    在Java專案的根目錄下,開啟pom.xml檔案,添加以下代碼:

    <dependency>
      <groupId>com.google.protobuf</groupId>
      <artifactId>protobuf-java</artifactId>
      <version>2.5.0</version>
    </dependency>
    <dependency>
    <groupId>com.aliyun.openservices</groupId>
      <artifactId>aliyun-log</artifactId>
      <version>0.6.99</version>
    </dependency>
  2. 建立PullLogsWithSPLDemo.java檔案。

    import com.aliyun.openservices.log.Client;
    import com.aliyun.openservices.log.common.*;
    import com.aliyun.openservices.log.common.Consts;
    import com.aliyun.openservices.log.exception.LogException;
    import com.aliyun.openservices.log.request.PullLogsRequest;
    import com.aliyun.openservices.log.response.ListShardResponse;
    import com.aliyun.openservices.log.response.PullLogsResponse;
    
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    public class PullLogsWithSPLDemo {
        // Log Service的服務存取點。此處以杭州為例,其它地區請根據實際情況填寫
        private static final String endpoint = "cn-hangzhou.log.aliyuncs.com";
        //  本樣本從環境變數中擷取 AccessKey ID 和 AccessKey Secret。
        private static final String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
        private static final String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
        // Project 名稱
        private static final String project = "your_project";
        // LogStore 名稱
        private static final String logStore = "your_logstore";
    
        public static void main(String[] args) throws Exception {
            // 建立Log Service Client
            Client client = new Client(endpoint, accessKeyId, accessKeySecret);
            // 查詢 LogStore 的 Shard
            ListShardResponse resp = client.ListShard(project, logStore);
            System.out.printf("%s has %d shards\n", logStore, resp.GetShards().size());
            Map<Integer, String> cursorMap = new HashMap<Integer, String>();
            for (Shard shard : resp.GetShards()) {
                int shardId = shard.getShardId();
                // 從頭開始消費,擷取遊標。(如果是從尾部開始消費,使用 Consts.CursorMode.END)
                cursorMap.put(shardId, client.GetCursor(project, logStore, shardId, Consts.CursorMode.BEGIN).GetCursor());
            }
            try {
                while (true) {
                    // 從每個Shard中擷取日誌
                    for (Shard shard : resp.GetShards()) {
                        int shardId = shard.getShardId();
                        PullLogsRequest request = new PullLogsRequest(project, logStore, shardId, 1000, cursorMap.get(shardId));
                        request.setQuery("* | where cast(body_bytes_sent as bigint) > 14000");
                        request.setPullMode("scan_on_stream");
                        PullLogsResponse response = client.pullLogs(request);
                        // 日誌都在日誌組(LogGroup)中,按照邏輯拆分即可。
                        List<LogGroupData> logGroups = response.getLogGroups();
                        System.out.printf("Get %d logGroup from logStore:%s:\tShard:%d\n", logGroups.size(), logStore, shardId);
    
                        // 完成處理拉取的日誌後,移動遊標。
                        cursorMap.put(shardId, response.getNextCursor());
                    }
                }
            } catch (LogException e) {
                System.out.println("error code :" + e.GetErrorCode());
                System.out.println("error message :" + e.GetErrorMessage());
                throw e;
            }
        }
    }

消費預覽

消費預覽也是一種日誌消費。Log Service控制台提供消費預覽功能,協助您通過控制台直接預覽Logstore中的部分日誌資料。

  1. 登入Log Service控制台

  2. 在Project列表地區,單擊目標Project。

    image

  3. 在控制台左側,單擊日誌儲存,在日誌庫列表中單擊目標Logstore。

    image

  4. 選擇目標Logstore右側的日誌預覽 > 消費預覽

  5. 消費預覽頁面,選擇指定預覽的Shard與時間段,單擊預覽

    消費預覽頁面向您展示指定時間區間開始的10個資料包的日誌資料。xiaofei