Java SDK快速入門
本文介紹如何快速使用日志服務(wù)Java SDK完成常見操作,包括創(chuàng)建項目(Project)、創(chuàng)建日志庫(Logstore)、寫入日志和查詢?nèi)罩镜取?/p>
前提條件
已開通日志服務(wù)。更多信息,請參見開通日志服務(wù)。
已創(chuàng)建RAM用戶并完成授權(quán)。具體操作,請參見創(chuàng)建RAM用戶并完成授權(quán)。
已配置環(huán)境變量ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET。具體操作,請參見在Linux、macOS和Windows系統(tǒng)配置環(huán)境變量。
重要阿里云賬號的AccessKey擁有所有API的訪問權(quán)限,建議您使用RAM用戶的AccessKey進行API訪問或日常運維。
強烈建議不要把AccessKey ID和AccessKey Secret保存到工程代碼里,否則可能導(dǎo)致AccessKey泄露,威脅您賬號下所有資源的安全。
已安裝Java開發(fā)環(huán)境。
日志服務(wù)Java SDK支持JRE 6.0及以上的Java運行環(huán)境,您可以執(zhí)行
java -version
命令檢查您已安裝的Java版本。如果未安裝,可以從Java官方網(wǎng)站下載安裝包并完成安裝。已安裝日志服務(wù)Java SDK。具體操作,請參見安裝Java SDK。
示例代碼
本示例中,創(chuàng)建一個SlsQuickStart.java文件,并調(diào)用接口分別完成創(chuàng)建Project、創(chuàng)建Logstore、創(chuàng)建索引、寫入日志數(shù)據(jù)和查詢?nèi)罩緮?shù)據(jù)。示例如下:
import com.aliyun.openservices.log.common.Index;
import com.aliyun.openservices.log.common.LogContent;
import com.aliyun.openservices.log.common.LogItem;
import com.aliyun.openservices.log.common.LogStore;
import com.aliyun.openservices.log.common.QueriedLog;
import com.aliyun.openservices.log.exception.LogException;
import com.aliyun.openservices.log.response.GetLogsResponse;
import com.aliyun.openservices.log.Client;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
public class SlsQuickStart {
/**
* 本示例從環(huán)境變量中獲取AccessKey ID和AccessKey Secret。
*/
static String accessId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
static String accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
/**
* 日志服務(wù)的服務(wù)接入點。此處以杭州為例,其它地域請根據(jù)實際情況填寫。
*/
static String host = "cn-hangzhou.log.aliyuncs.com";
/**
* 創(chuàng)建日志服務(wù)Client。
*/
static Client client = new Client(host, accessId, accessKey);
/**
* // Project名稱。
*/
static String projectName = "aliyun-test-gs-project";
/**
* Logstore名稱。
*/
static String logstoreName = "aliyun-test-logstore";
/**
* 查詢語句。
*/
static String query = "*| select * from " + logstoreName;
/**
* 創(chuàng)建Project。
*
* @throws LogException
* @throws InterruptedException
*/
static void createProject() throws LogException, InterruptedException {
String projectDescription = "project description";
System.out.println("ready to create project");
client.CreateProject(projectName, projectDescription);
System.out.println(String.format("create project %s success", projectName));
TimeUnit.SECONDS.sleep(60 * 2);
}
/**
* 創(chuàng)建Logstore。
*
* @throws LogException
* @throws InterruptedException
*/
static void createLogstore() throws LogException, InterruptedException {
System.out.println("ready to create logstore");
int ttlInDay = 3; // 數(shù)據(jù)保存時間。如果配置為3650,表示永久保存。單位為天。
int shardCount = 2; // Shard數(shù)量。
LogStore store = new LogStore(logstoreName, ttlInDay, shardCount);
client.CreateLogStore(projectName, store);
System.out.println(String.format("create logstore %s success", logstoreName));
TimeUnit.SECONDS.sleep(60);
}
/**
* 為Logstore創(chuàng)建索引。
*
* @throws LogException
* @throws InterruptedException
*/
static void createIndex() throws LogException, InterruptedException {
System.out.println(String.format("ready to create index for %s", logstoreName));
String logstoreIndex = "{\"line\": {\"token\": [\",\", \" \", \"'\", \"\\\"\", \";\", \"=\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", \"?\", \"@\", \"&\", \"<\", \">\", \"/\", \":\", \"\\n\", \"\\t\", \"\\r\"], \"caseSensitive\": false, \"chn\": false}, \"keys\": {\"dev\": {\"type\": \"text\", \"token\": [\",\", \" \", \"'\", \"\\\"\", \";\", \"=\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", \"?\", \"@\", \"&\", \"<\", \">\", \"/\", \":\", \"\\n\", \"\\t\", \"\\r\"], \"caseSensitive\": false, \"alias\": \"\", \"doc_value\": true, \"chn\": false}, \"id\": {\"type\": \"long\", \"alias\": \"\", \"doc_value\": true}}, \"log_reduce\": false, \"max_text_len\": 2048}";
Index index = new Index();
index.FromJsonString(logstoreIndex);
client.CreateIndex(projectName, logstoreName, index);
System.out.println(String.format("create index for %s success", logstoreName));
TimeUnit.SECONDS.sleep(60);
}
/**
* 向Logstore寫入數(shù)據(jù)。為了提高您系統(tǒng)的IO效率,請盡量不要直接使用該方式往日志服務(wù)中寫數(shù)據(jù),此方式僅為功能舉例。在大數(shù)據(jù)、高并發(fā)場景下建議使用Aliyun Log Java Producer方式寫入日志數(shù)據(jù)。
*
* @throws LogException
* @throws InterruptedException
*/
static void pushLogs() throws LogException, InterruptedException {
System.out.println(String.format("ready to push logs for %s", logstoreName));
List<LogItem> logGroup = new ArrayList<LogItem>();
for (int i = 0; i < 100; ++i) {
LogItem logItem = new LogItem();
logItem.PushBack("id", String.valueOf(i));
logItem.PushBack("dev", "test_push");
logGroup.add(logItem);
}
client.PutLogs(projectName, logstoreName, "", logGroup, "");
System.out.println(String.format("push logs for %s success", logstoreName));
TimeUnit.SECONDS.sleep(5);
}
/**
* 通過SQL查詢?nèi)罩尽? *
* @throws LogException
*/
static void queryLogs() throws LogException {
System.out.println(String.format("ready to query logs from %s", logstoreName));
// fromTime和toTime表示查詢?nèi)罩镜臅r間范圍,Unix時間戳格式。
int fromTime = (int) (System.currentTimeMillis() / 1000 - 3600);
int toTime = fromTime + 3600;
GetLogsResponse getLogsResponse = client.GetLogs(projectName, logstoreName, fromTime, toTime, "", query);
for (QueriedLog log : getLogsResponse.getLogs()) {
for (LogContent mContent : log.mLogItem.mContents) {
System.out.println(mContent.mKey + " : " + mContent.mValue);
}
System.out.println("********************");
}
}
public static void main(String[] args) throws LogException, InterruptedException {
/**
* 創(chuàng)建Project。
*/
createProject();
/**
* 創(chuàng)建Logstore。
*/
createLogstore();
/**
* 創(chuàng)建索引。
*/
createIndex();
/**
* 寫入日志數(shù)據(jù)。
*/
pushLogs();
/**
* 查詢?nèi)罩尽? */
queryLogs();
}
}
更多示例代碼,請參見Aliyun Log Java SDK。
返回結(jié)果
返回結(jié)果示例如下:
ready to create project
create project aliyun-test-project success
ready to create logstore
create logstore aliyun-test-logstore success
ready to create index for aliyun-test-logstore
create index for aliyun-test-logstore success
ready to push logs for aliyun-test-logstore
push logs for aliyun-test-logstore success
ready to query logs from aliyun-test-logstore
dev : test_push
id : 0
********************
dev : test_push
id : 1
********************
dev : test_push
id : 2
********************
dev : test_push
id : 3
********************
dev : test_push
id : 4
********************
........
相關(guān)文檔
在調(diào)用API接口過程中,若服務(wù)端返回結(jié)果中包含錯誤信息,則表示調(diào)用API接口失敗。您可以參考API錯誤碼對照表查找對應(yīng)的解決方法。更多信息,請參見API錯誤處理對照表。
阿里云OpenAPI開發(fā)者門戶提供調(diào)試、SDK、示例和配套文檔。通過OpenAPI,您無需手動封裝請求和簽名操作,就可以快速對日志服務(wù)API進行調(diào)試。更多信息,請參見OpenAPI開發(fā)者門戶。
為滿足越來越多的自動化日志服務(wù)配置需求,日志服務(wù)提供命令行工具CLI(Command Line Interface)。更多信息,請參見日志服務(wù)命令行工具CLI。
更多示例代碼,請參見Aliyun Log Java SDK on GitHub。
更多示例代碼,請參見Aliyun Log Python SDK on GitHub。