日志服务使用Java SDK快速入门指南

为快速开始使用Log Service Java SDK,请按照如下步骤进行:

创建阿里云账号

为了访问阿里云日志服务,你需要有一个阿里云账号。如果没有,可首先如下创建阿里云账号:

  1. 访问阿里云官方网站,点击页面上“注册”按钮。
  2. 按照屏幕提示完成注册流程并进行实名认证。

为了更好地使用阿里云服务,建议尽快完成实名认证,否则部分阿里云服务将无法使用。具体实名认证流程请参考这里

获取阿里云访问秘钥

为了使用Log SDK,你必须申请阿里云的访问秘钥:

  1. 登陆阿里云管理控制台。
  2. 访问阿里云秘钥管理页面。
  3. 选择一对用于SDK的访问秘钥对(如果没有请创建一对新访问秘钥),且保证它处于“启用”状态。

该秘钥对会在下面的步骤使用,且需要保管好,不能对外泄露。另外,你可以参考SDK配置了解更多SDK如何使用访问秘钥的信息。

创建一个日志服务项目(Project)和日志库(LogStore)

目前,Log SDK还无法管理日志项目(Project)和日志库(LogStore),所以用户需要在控制台上创建好日志库后才能使用SDK进行操作:

  1. 登陆阿里云管理控制台。
  2. 点击Log服务,进入Project管理界面。
  3. 点击“创建Project”按钮,弹出创建项目对话框。
  4. 按照屏幕提示填写Project名称、注释和所属区域并确认创建Project。创建成功后即可在“Project管理页面”看到该Project。
  5. 点击新创建的项目对应的“管理”操作。进入该项目的管理页面,选择“Logstore管理”标签页。
  6. 点击“创建LogStore”按钮,弹出创建日志库对话框。
  7. 按照屏幕提示填写Logstore名称,日志消费模式等,确认创建日志库。创建成功和即可在“Logstore管理”标签页上看到刚才创建的日志库。
  1. 请确保使用同一阿里云账号获取阿里云访问秘钥和创建日志项目及日志库
  2. 关于日志的项目、日志库等概念请参考Log核心概念。
  3. Log的Project名称为日志服务全局唯一,而Logstore名称在一个Project下面唯一。
  4. Log的Project一旦创建则无法更改它的所属区域。目前也不支持在不同阿里云Region间迁移Log Project。

安装Java开发环境

目前,Log Java SDK支持J2SE 6.0及以上的Java运行环境,你可以从Java官方网站下载并按说明安装Java开发环境。

安装Log Service Java SDK

在安装完Java开发环境后,你需要安装Log Service Java SDK。目前,我们提供两种方式安装日志服务的Java SDK:

  • 如果你在使用Apache Maven,你可以添加如下配置到你的Maven项目。
<dependency>
  <groupId>com.aliyun.openservices</groupId>
  <artifactId>aliyun-log</artifactId>
  <version>0.6.0</version>
</dependency>
  • 你也可以完整下载Java SDK软件包,然后在自己的Java项目中直接引用本地软件包

    1. 这里下载最新的Java SDK包。
    2. 解压完整下载的包到指定的目录即可。Java SDK是一个软件开发包,不需要额外的安装操作。
    3. 把SDK包中的所有Jar包(包括依赖的第三方包)添加到你Java工程(具体操作请参照不同的IDE文档)

开始一个新的Java项目

现在,你可以开始使用SDK Java SDK。使用任何文本编辑器或者Java IDE,运行如下示例代码即可与Log Service服务端交互并得到相应输出。

package sdksample;

import java.util.ArrayList;
import java.util.List;
import java.util.Vector;
import java.util.Date;

import com.aliyun.openservices.log.Client;
import com.aliyun.openservices.log.common.*;
import com.aliyun.openservices.log.exception.*;
import com.aliyun.openservices.log.request.*;
import com.aliyun.openservices.log.response.*;
import com.aliyun.openservices.log.common.LogContent;
import com.aliyun.openservices.log.common.LogGroupData;
import com.aliyun.openservices.log.common.LogItem;
import com.aliyun.openservices.log.common.Consts.CursorMode;

public class sdksample {

    public static void main(String args[]) throws LogException,
            InterruptedException {
        String endpoint = "<log_service_endpoint>"; // 选择与上面步骤创建Project所属区域匹配的
                                                    // Endpoint
        String accessKeyId = "<your_access_key_id>"; // 使用你的阿里云访问秘钥AccessKeyId
        String accessKeySecret = "<your_access_key_secret>"; // 使用你的阿里云访问秘钥AccessKeySecret
        String project = "<project_name>"; // 上面步骤创建的项目名称
        String logstore = "<logstore_name>"; // 上面步骤创建的日志库名称

        // 构建一个客户端实例
        Client client = new Client(endpoint, accessKeyId, accessKeySecret);

        // 列出当前Project下的所有日志库名称
        int offset = 0;
        int size = 100;
        String logStoreSubName = "";
        ListLogStoresRequest req1 = new ListLogStoresRequest(project, offset,
                size, logStoreSubName);
        ArrayList<String> logStores = client.ListLogStores(req1).GetLogStores();
        System.out.println("ListLogs:" + logStores.toString() + "\n");

        // 写入日志
        String topic = "";
        String source = "";
        // 连续发送10个数据包,每个数据包有10条日志
        for (int i = 0; i < 10; i++) {
            Vector<LogItem> logGroup = new Vector<LogItem>();
            for (int j = 0; j < 10; j++) {
                LogItem logItem = new LogItem(
                        (int) (new Date().getTime() / 1000));
                logItem.PushBack("index", String.valueOf(i * 10 + j));
                logGroup.add(logItem);
            }
            PutLogsRequest req2 = new PutLogsRequest(project, logstore, topic,
                    source, logGroup);
            client.PutLogs(req2);
        }

        // 把0号shard中,最近1分钟写入的数据都读取出来。
        int shard_id = 0;
        long curTimeInSec = System.currentTimeMillis() / 1000;
        GetCursorResponse cursorRes = client.GetCursor(project, logstore,
                shard_id, curTimeInSec - 60);
        String beginCursor = cursorRes.GetCursor();

        cursorRes = client.GetCursor(project, logstore, shard_id,
                CursorMode.END);
        String endCursor = cursorRes.GetCursor();

        String curCursor = beginCursor;
        while (curCursor.equals(endCursor) == false) {
            int loggroup_count = 2; // 每次读取两个loggroup
            BatchGetLogResponse logDataRes = client.BatchGetLog(project,
                    logstore, shard_id, loggroup_count, curCursor);

            List<LogGroupData> logGroups = logDataRes.GetLogGroups();
            for (LogGroupData logGroup : logGroups) {
                System.out.println("Source:" + logGroup.GetSource());
                System.out.println("Topic:" + logGroup.GetTopic());
                for (LogItem log : logGroup.GetAllLogs()) {
                    System.out.println("LogTime:" + log.GetTime());
                    List<LogContent> contents = log.GetLogContents();
                    for (LogContent content : contents) {
                        System.out.println(content.GetKey() + ":"
                                + content.GetValue());
                    }
                }
            }
            String next_cursor = logDataRes.GetNextCursor();
            System.out.println("The Next cursor:" + next_cursor);
            curCursor = next_cursor;
        }

        // !!!重要提示 : 只有打开索引功能,才能调用一下接口 !!!

        // 等待1分钟让日志可查询
        try {
            Thread.sleep(60 * 1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        // 查询日志分布情况
        String query = "index";
        int from = (int) (new Date().getTime() / 1000 - 300);
        int to = (int) (new Date().getTime() / 1000);
        GetHistogramsResponse res3 = null;
        while (true) {
            GetHistogramsRequest req3 = new GetHistogramsRequest(project,
                    logstore, topic, query, from, to);
            res3 = client.GetHistograms(req3);
            if (res3 != null && res3.IsCompleted()) // IsCompleted()返回true,表示查询结果是准确的,如果返回false,则重复查询
            {
                break;
            }
            Thread.sleep(200);
        }

        System.out.println("Total count of logs is " + res3.GetTotalCount());
        for (Histogram ht : res3.GetHistograms()) {
            System.out.printf("from %d, to %d, count %d.\n", ht.GetFrom(),
                    ht.GetTo(), ht.GetCount());
        }

        // 查询日志数据
        long total_log_lines = res3.GetTotalCount();
        int log_offset = 0;
        int log_line = 10;
        while (log_offset <= total_log_lines) {
            GetLogsResponse res4 = null;
            // 对于每个log offset,一次读取10行log,如果读取失败,最多重复读取3次。
            for (int retry_time = 0; retry_time < 3; retry_time++) {
                GetLogsRequest req4 = new GetLogsRequest(project, logstore,
                        from, to, topic, query, log_offset, log_line, false);
                res4 = client.GetLogs(req4);
                if (res4 != null && res4.IsCompleted()) {
                    break;
                }
                Thread.sleep(200);
            }
            System.out.println("Read log count:"
                    + String.valueOf(res4.GetCount()));
            log_offset += log_line;
        }

    }
}

时间: 2024-12-25 11:02:16

日志服务使用Java SDK快速入门指南的相关文章

日志服务使用Python SDK快速入门指南

为快速开始使用日志服务Python SDK,请按照如下步骤进行: 创建阿里云账号 为了访问阿里云日志服务,你需要有一个阿里云账号.如果没有,可首先如下创建阿里云账号: 访问阿里云官方网站,点击页面上"注册"按钮. 按照屏幕提示完成注册流程并进行实名认证. 为了更好地使用阿里云服务,建议尽快完成实名认证,否则部分阿里云服务将无法使用.具体实名认证流程请参考这里 获取阿里云访问秘钥 为了使用SDK,你必须申请阿里云的访问秘钥: 登陆阿里云管理控制台. 访问阿里云秘钥管理页面. 选择一对用于

阿里云资源编排服务 Java SDK使用入门

阿里云资源编排服务 Java SDK使用入门 安装依赖 添加Maven库 <repositories> <repository> <id>sonatype-nexus-staging</id> <name>Sonatype Nexus Staging</name> <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url> &

Oracle RMAN快速入门指南_oracle

正在看的ORACLE教程是:Oracle RMAN快速入门指南.前言: 这篇文章主要介绍RMAN的常用方法,其中包含了作者一些自己的经验,里面的实验也基本全在WIN 2K和ORACLE 8.1.6环境下测试成功(因为这个环境比较容易实现). 本文借鉴了网上一些高手的相关文章,希望大侠们不要见怪,此处一并谢过. 这篇文章主要是在北京出差期间写的,回到家后整理修改了一下,时间比较仓促,同时因为篇幅有限,一些技术细节不能一一覆盖了,只希望能够帮助新手入门的作用,想真正熟练掌握RMAN,必须经过较长时间

OpenLDAP快速入门指南

以下是 OpenLDAP2.3 的一个快速入门指南,包括独立的LDAP 守护程序,slapd(8).这就意味着你可以通过一些必要的基本步骤来安装和配置 OpenLDAP 软件.它应该同本文档的其他章节.手册页以及随各发行版提供的其他材料(如安装文档)或在 OpenLDAP 网站上(尤其是 OpenLDAP 软件 FAQ).&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;如果您打算认真运行 OpenLDAP 软件的话

SQLite快速入门指南_数据库其它

1. 介绍 SQLite 是一个开源的嵌入式关系数据库,实现自包容.零配置.支持事务的SQL数据库引擎. 其特点是高度便携.使用方便.结构紧凑.高效.可靠. 与其他数据库管理系统不同,SQLite 的安装和运行非常简单,在大多数情况下 - 只要确保SQLite的二进制文件存在即可开始创建.连接和使用数据库.如果您正在寻找一个嵌入式数据库项目或解决方案,SQLite是绝对值得考虑. 2. 安装 SQLite on Windows     进入 SQL 下载页面:http://www.sqlite.

NetBeans IDE 4.1 快速入门指南

快速入门 Web 服务是分布式应用程序组件,它们符合一定的标准,因而可供外部使用.分布式环境的激增对企业提出了新的要求,企业必须能够通过开放式网络将某个应用程序的全部或部分功能向其他应用程序公开.使用 Web 服务,可以解决独立开发并在各种不同软件和硬件平台上运行的应用程序的集成问题. NetBeans IDE 4.1 与基于 JSR-109 的 Web 服务支持捆绑在一起,JSR-109 是一种开发范例,它适用于基于 JAX-RPC (JSR-101) 的 J2EE 开发.NetBeans I

教程:XSLT Designer快速入门指南

教程|快速入门 目录 概述 配置教程环境 创建 XSLT 模块项目 创建 XML 架构 创建 WSDL 文件 创建 XSL 样式表 创建和部署复合应用程序 测试 XSL 转换服务 概述 在本教程中,您将了解 NetBeans Enterprise Pack 5.5.1 Beta 版中附带的 XSLT Designer 的使用.XSLT Designer 用于开发.部署和测试 XSL 转换服务. XSL 转换服务用作一种 Web 服务.它从外部客户端接收消息,按照 XSL 样式表对消息进行转换,然

Oracle RMAN快速入门指南

oracle|快速入门 前言这篇文章主要介绍RMAN的常用方法,其中包含了作者一些自己的经验,里面的实验也基本全在WIN 2K和ORACLE 8.1.6环境下测试成功(因为这个环境比较容易实现). 本文借鉴了网上一些高手的相关文章,希望大侠们不要见怪,此处一并谢过. 这篇文章主要是在北京出差期间写的,回到家后整理修改了一下,时间比较仓促,同时因为篇幅有限,一些技术细节不能一一覆盖了,只希望能够帮助新手入门的作用,想真正熟练掌握RMAN,必须经过较长时间的实践磨练才可以,尤其需要在工程中获得宝贵的

(转)Oracle RMAN快速入门指南

oracle|快速入门 前言这篇文章主要介绍RMAN的常用方法,其中包含了作者一些自己的经验,里面的实验也基本全在WIN 2K和ORACLE 8.1.6环境下测试成功(因为这个环境比较容易实现). 本文借鉴了网上一些高手的相关文章,希望大侠们不要见怪,此处一并谢过. 这篇文章主要是在北京出差期间写的,回到家后整理修改了一下,时间比较仓促,同时因为篇幅有限,一些技术细节不能一一覆盖了,只希望能够帮助新手入门的作用,想真正熟练掌握RMAN,必须经过较长时间的实践磨练才可以,尤其需要在工程中获得宝贵的