使用Java SDK管理快速查询

当您需要频繁查看某一查询和分析结果时,可以将对应查询和分析语句另存为快速查询。本文通过代码示例介绍如何创建、修改、查询、删除快速查询等。

前提条件

  • 已开通日志服务。更多信息,请参见开通日志服务

  • 已创建RAM用户并完成授权。具体操作,请参见创建RAM用户并完成授权

  • 已配置环境变量ALIBABA_CLOUD_ACCESS_KEY_IDALIBABA_CLOUD_ACCESS_KEY_SECRET。具体操作,请参见在Linux、macOS和Windows系统配置环境变量

    重要
    • 阿里云账号的AccessKey拥有所有API的访问权限,建议您使用RAM用户的AccessKey进行API访问或日常运维。

    • 强烈建议不要把AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。

注意事项

本示例以华东1(杭州)的公网Endpoint为例,其公网Endpoint为https://cn-hangzhou.log.aliyuncs.com。如果您通过与Project同地域的其他阿里云产品访问日志服务,请使用内网Endpointhttps://cn-hangzhou-intranet.log.aliyuncs.com。关于日志服务支持的地域与Endpoint的对应关系,请参见服务入口

原始日志样例

body_bytes_sent:1750
host:www.example.com
http_referer:www.example.com
http_user_agent:Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; it-it) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27
http_x_forwarded_for:203.0.XX.XX
remote_addr:203.0.XX.XX
remote_user:p288
request_length:13741
request_method:GET
request_time:71
request_uri:/request/path-1/file-1
http_code:200
time_local:11/Aug/2021:06:52:27
upstream_response_time:0.66

创建快速查询示例代码

以下代码用于创建名为ali-test-savedsearch的快速查询。

import com.aliyun.openservices.log.Client;
import com.aliyun.openservices.log.common.SavedSearch;
import com.aliyun.openservices.log.exception.LogException;
import com.aliyun.openservices.log.request.CreateSavedSearchRequest;

public class CreateSavedSearch {
    public static void main(String[] args) throws LogException {
        // 本示例从环境变量中获取AccessKey ID和AccessKey Secret。
        String accessId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
        String accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
        // 输入Project名称。
        String projectName = "ali-test-project";
        // 设置日志服务的服务接入点。此处以杭州为例,其它地域请根据实际情况填写。
        String host = "https://cn-hangzhou.log.aliyuncs.com";

        // 创建日志服务Client。
        Client client = new Client(host, accessId, accessKey);

        try {
            // 输入Logstore名称。
            String logstoreName = "ali-test-logstore";

            // 设置快速查询名称。
            String savedSearchName = "ali-test-savedsearch";

            // 查询GET请求或POST请求失败的日志。
            String query = "(request_method:GET or request_method:POST) not status in [200 299]";
            System.out.println("ready to create savedsearch");

            SavedSearch savedSearch = new SavedSearch();
            // 设置Logstore。
            savedSearch.setLogstore(logstoreName);
            // 设置快速查询名称。
            savedSearch.setSavedSearchName(savedSearchName);
            // 设置快速查询的显示名称。
            savedSearch.setDisplayName("savedsearch-displayname");
            // 设置快速查询的查询语句。
            savedSearch.setSearchQuery(query);

            CreateSavedSearchRequest request = new CreateSavedSearchRequest(projectName, savedSearch);

            // 创建快速查询。
            client.createSavedSearch(request);

            System.out.println(String.format("create savedsearch %s success", savedSearchName));

        } catch (LogException e) {
            System.out.println("LogException e :" + e.toString());
            System.out.println("error code :" + e.GetErrorCode());
            System.out.println("error message :" + e.GetErrorMessage());
            throw e;
        }
    }
}            

预期结果如下:

ready to create savedsearch
create savedsearch ali-test-savedsearch success

修改快速查询示例代码

以下代码用于修改名为ali-test-savedsearch的快速查询。

import com.aliyun.openservices.log.Client;
import com.aliyun.openservices.log.common.SavedSearch;
import com.aliyun.openservices.log.exception.LogException;
import com.aliyun.openservices.log.request.UpdateSavedSearchRequest;

public class UpdateSavedSearch {
    public static void main(String[] args) throws LogException {
        // 本示例从环境变量中获取AccessKey ID和AccessKey Secret。
        String accessId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
        String accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
        // 输入Project名称。
        String projectName = "ali-test-project";
        // 设置日志服务的服务接入点。此处以杭州为例,其它地域请根据实际情况填写。
        String host = "https://cn-hangzhou.log.aliyuncs.com";

        // 创建日志服务Client。
        Client client = new Client(host, accessId, accessKey);

        try {
            // 输入Logstore名称。
            String logstoreName = "ali-test-logstore";

            // 输入快速查询名称。
            String savedSearchName = "ali-test-savedsearch";

            // 查询GET请求或POST请求失败的日志。
            String query = "(request_method:GET or request_method:POST) not status in [200 299]";
            System.out.println("ready to update savedsearch");
            
            SavedSearch savedSearch = new SavedSearch();
            // 设置Logstore。
            savedSearch.setLogstore(logstoreName);
            // 设置快速查询名称。
            savedSearch.setSavedSearchName(savedSearchName);
            // 更新快速查询的显示名称。
            savedSearch.setDisplayName("new-savedsearch-displayname");
            // 设置快速查询的查询语句。
            savedSearch.setSearchQuery(query);

            UpdateSavedSearchRequest request = new UpdateSavedSearchRequest(projectName, savedSearch);

            // 更新快速查询。
            client.updateSavedSearch(request);

            System.out.println(String.format("update savedsearch %s success", savedSearchName));

        } catch (LogException e) {
            System.out.println("LogException e :" + e.toString());
            System.out.println("error code :" + e.GetErrorCode());
            System.out.println("error message :" + e.GetErrorMessage());
            throw e;
        }
    }
}

预期结果如下:

ready to update savedsearch
update savedsearch ali-test-savedsearch success

查询所有快速查询示例代码

以下代码用于查询目标Project下的所有快速查询。

import com.aliyun.openservices.log.Client;
import com.aliyun.openservices.log.common.SavedSearch;
import com.aliyun.openservices.log.exception.LogException;
import com.aliyun.openservices.log.request.ListSavedSearchRequest;
import com.aliyun.openservices.log.response.ListSavedSearchResponse;

public class ListSavedSearch {
    public static void main(String[] args) throws LogException {
        // 本示例从环境变量中获取AccessKey ID和AccessKey Secret。
        String accessId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
        String accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
        // 输入Project名称。
        String projectName = "ali-test-project";
        // 设置日志服务的服务接入点。此处以杭州为例,其它地域请根据实际情况填写。
        String host = "https://cn-hangzhou.log.aliyuncs.com";

        // 创建日志服务Client。
        Client client = new Client(host, accessId, accessKey);

        try {
            System.out.println("ready to list savedsearch");

            // 查看所有快速查询。
            ListSavedSearchRequest request = new ListSavedSearchRequest(projectName, 0, 10);
            ListSavedSearchResponse response = client.listSavedSearch(request);
            for (SavedSearch savedSearch : response.getSavedSearches()){
                // 输出快速查询。
                System.out.println("the savedsearch is :" + savedSearch.getDisplayName());
            }

            System.out.println(String.format("list savedsearch from project %s success", projectName));

        } catch (LogException e) {
            System.out.println("LogException e :" + e.toString());
            System.out.println("error code :" + e.GetErrorCode());
            System.out.println("error message :" + e.GetErrorMessage());
            throw e;
        }
    }
}

预期结果如下:

ready to list savedsearch
the savedsearch is :savedsearch-displayname
the savedsearch is :savedsearch-displayname2
list savedsearch from project ali-test-project success

查询指定快速查询示例代码

以下代码用于查询指定快速查询信息。

import com.aliyun.openservices.log.Client;
import com.aliyun.openservices.log.common.SavedSearch;
import com.aliyun.openservices.log.exception.LogException;
import com.aliyun.openservices.log.request.GetSavedSearchRequest;
import com.aliyun.openservices.log.response.GetSavedSearchResponse;

public class GetSavedSearch {
    public static void main(String[] args) throws LogException {
        // 本示例从环境变量中获取AccessKey ID和AccessKey Secret。
        String accessId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
        String accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
        // 输入Project名称。
        String projectName = "ali-test-project";
        // 设置日志服务的服务接入点。此处以杭州为例,其它地域请根据实际情况填写。
        String host = "https://cn-hangzhou.log.aliyuncs.com";

        // 创建日志服务Client。
        Client client = new Client(host, accessId, accessKey);

        try {
            // 输入快速查询名称。
            String savedSearchName = "ali-test-savedsearch";
            System.out.println("ready to get savedsearch");

            // 查看指定快速查询。
            GetSavedSearchRequest request = new GetSavedSearchRequest(projectName, savedSearchName);
            GetSavedSearchResponse response = client.getSavedSearch(request);
            SavedSearch savedSearch = response.getSavedSearch();

            // 输出快速查询详细配置。
            System.out.println("the savedsearch name is :" + savedSearch.getSavedSearchName());
            System.out.println("the savedsearch displayname is :" + savedSearch.getDisplayName());
            System.out.println("the savedsearch query is :" + savedSearch.getSearchQuery());

            System.out.println(String.format("get savedsearch from project %s success", projectName));

        } catch (LogException e) {
            System.out.println("LogException e :" + e.toString());
            System.out.println("error code :" + e.GetErrorCode());
            System.out.println("error message :" + e.GetErrorMessage());
            throw e;
        }
    }
}

预期结果如下:

ready to get savedsearch
the savedsearch name is :ali-test-savedsearch
the savedsearch displayname is :savedsearch-displayname
the savedsearch query is :(request_method:GET or request_method:POST) not status in [200 299]
get savedsearch from project ali-test-project success

删除快速查询示例代码

以下代码用于删除目标Project下的快速查询。

import com.aliyun.openservices.log.Client;
import com.aliyun.openservices.log.exception.LogException;
import com.aliyun.openservices.log.request.DeleteSavedSearchRequest;

public class DeleteSavedSearch {
    public static void main(String[] args) throws LogException {
        // 本示例从环境变量中获取AccessKey ID和AccessKey Secret。
        String accessId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
        String accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
        // 输入Project名称。
        String projectName = "ali-test-project";
        // 设置日志服务的服务接入点。此处以杭州为例,其它地域请根据实际情况填写。
        String host = "https://cn-hangzhou.log.aliyuncs.com";

        // 创建日志服务Client。
        Client client = new Client(host, accessId, accessKey);

        try {
            // 输入快速查询名称。
            String savedSearchName = "ali-test-savedsearch";
            System.out.println("ready to delete savedsearch");

            // 删除指定快速查询。
            DeleteSavedSearchRequest request = new DeleteSavedSearchRequest(projectName, savedSearchName);
            client.deleteSavedSearch(request);

            System.out.println(String.format("delete savedsearch from project %s success", projectName));

        } catch (LogException e) {
            System.out.println("LogException e :" + e.toString());
            System.out.println("error code :" + e.GetErrorCode());
            System.out.println("error message :" + e.GetErrorMessage());
            throw e;
        }
    }
}

预期结果如下:

ready to delete savedsearch
delete savedsearch from project ali-test-project success

相关文档