本文介绍如何快速使用日志服务 Java SDK 实现基础的日志采集流程,包括创建日志项目、创建日志主题、写入日志和查询日志等操作。
VOLCENGINE_ACCESS_KEY_ID
等环境变量。环境变量的配置方式请参考配置身份认证信息。初始化 Client 实例之后,才可以向 TLS 服务发送请求。初始化时推荐通过环境变量动态获取火山引擎密钥等身份认证信息,以免 AccessKey 硬编码引发数据安全风险。
初始化代码如下:
ClientConfig clientConfig = new ClientConfig(System.getenv("VOLCENGINE_ENDPOINT"), System.getenv("VOLCENGINE_REGION"), System.getenv("VOLCENGINE_ACCESS_KEY_ID"), System.getenv("VOLCENGINE_ACCESS_KEY_SECRET"), System.getenv("VOLCENGINE_TOKEN")); TLSLogClient client = ClientBuilder.newClient(clientConfig);
本文档以日志服务的基本日志采集和检索流程为例,介绍如何使用日志服务 Java SDK 管理日志服务基础资源。本示例中,创建一个 test.java
文件,并调用接口分别完成创建项目、创建主题、创建索引、写入日志数据、消费日志和查询日志数据。
代码示例如下:
package com.volcengine.example.tls.demo; import com.volcengine.model.tls.*; import com.volcengine.model.tls.exception.LogException; import com.volcengine.model.tls.request.*; import com.volcengine.model.tls.response.*; import com.volcengine.service.tls.TLSLogClient; import java.util.ArrayList; import java.util.List; import static com.volcengine.model.tls.Const.LZ4; public class Demo { public static void main(String[] args) throws LogException, InterruptedException { // 初始化客户端,推荐通过环境变量动态获取火山引擎密钥等身份认证信息,以免 AccessKey 硬编码引发数据安全风险。详细说明请参考https://www.volcengine.com/docs/6470/1166455 // 使用 STS 时,ak 和 sk 均使用临时密钥,且设置 VOLCENGINE_TOKEN;不使用 STS 时,VOLCENGINE_TOKEN 部分传空 ClientConfig clientConfig = new ClientConfig(System.getenv("VOLCENGINE_ENDPOINT"), System.getenv("VOLCENGINE_REGION"), System.getenv("VOLCENGINE_ACCESS_KEY_ID"), System.getenv("VOLCENGINE_ACCESS_KEY_SECRET"), System.getenv("VOLCENGINE_TOKEN")); TLSLogClient client = ClientBuilder.newClient(clientConfig); // 创建日志项目 // 请根据您的需要,填写ProjectName和可选的Description;请您填写和初始化client时一致的Region; // CreateProject API的请求参数规范请参阅https://www.volcengine.com/docs/6470/112174 CreateProjectRequest createProjectRequest = new CreateProjectRequest("project-name", System.getenv("VOLCENGINE_REGION"), "description"); CreateProjectResponse createProjectResponse = client.createProject(createProjectRequest); String projectID = createProjectResponse.getProjectId(); // 创建日志主题 // 请根据您的需要,填写ProjectId、TopicName、Ttl、Description、ShardCount等参数值 // CreateTopic API的请求参数规范请参阅https://www.volcengine.com/docs/6470/112180 CreateTopicRequest createTopicRequest = new CreateTopicRequest(); createTopicRequest.setProjectId(projectID); createTopicRequest.setTopicName("topic-name"); createTopicRequest.setTtl(30); createTopicRequest.setDescription("description"); createTopicRequest.setShardCount(2); CreateTopicResponse createTopicResponse = client.createTopic(createTopicRequest); String topicID = createTopicResponse.getTopicId(); // 创建索引配置 // 请根据您的需要,填写TopicId,开启FullText全文索引或KeyValue键值索引或同时开启二者 // CreateIndex API的请求参数规范请参阅https://www.volcengine.com/docs/6470/112187 FullTextInfo fullText = new FullTextInfo(false, ",-;", false); ValueInfo textValueInfo = new ValueInfo(); textValueInfo.setValueType("text"); textValueInfo.setDelimiter(","); textValueInfo.setCaseSensitive(false); textValueInfo.setIncludeChinese(false); textValueInfo.setSqlFlag(false); List<KeyValueInfo> keyValue = new ArrayList<>(); keyValue.add(new KeyValueInfo("test-key", textValueInfo)); CreateIndexRequest createIndexRequest = new CreateIndexRequest(topicID, fullText, keyValue); CreateIndexResponse createIndexResponse = client.createIndex(createIndexRequest); // (不推荐)本文档以 PutLogs 接口同步请求的方式上传日志为例 // (推荐)在实际生产环境中,为了提高数据写入效率,建议通过 Java Producer 方式写入日志数据 // 如果选择使用PutLogs上传日志的方式,建议您一次性聚合多条日志后调用一次PutLogs接口,以提升吞吐率并避免触发限流 // 请根据您的需要,填写TopicId、Source、FileName和Logs列表,建议您使用lz4压缩 // PutLogs API的请求参数规范和限制请参阅https://www.volcengine.com/docs/6470/112191 List<LogItem> logs = new ArrayList<>(); for (int i = 0; i < 100; i++) { LogItem item = new LogItem(System.currentTimeMillis()); item.addContent("index", String.valueOf(i)); item.addContent("test-key", "test-value"); logs.add(item); } PutLogsRequestV2 request = new PutLogsRequestV2(logs, topicID, null, LZ4, "log-path", "127.0.0.1"); PutLogsResponse putLogsResponse = client.putLogsV2(request); Thread.sleep(30000); // 查询分析日志数据 // 请根据您的需要,填写TopicId、Query、StartTime、EndTime、Limit等参数值 // SearchLogs API的请求参数规范和限制请参阅https://www.volcengine.com/docs/6470/112195 SearchLogsRequest searchLogsRequest = new SearchLogsRequest(); searchLogsRequest.setTopicId("TopicId"); searchLogsRequest.setQuery("*"); searchLogsRequest.setStartTime(1346457600); searchLogsRequest.setEndTime(1630454400); searchLogsRequest.setLimit(20); SearchLogsResponseV2 searchLogsResponse = client.searchLogsV2(searchLogsRequest); // 打印SearchLogs接口返回值中的部分基本信息 // 请根据您的需要,自行处理返回值中的其他信息 System.out.println(searchLogsResponse.getResultStatus()); System.out.println(searchLogsResponse.getHitCount()); System.out.println(searchLogsResponse.getCount()); System.out.println(searchLogsResponse.isAnalysis()); } }