本文介紹如何快速使用Log Service.NET Core SDK完成常見操作,包括建立專案(Project)、建立日誌庫(Logstore)、寫入日誌和查詢日誌等。
前提條件
已建立RAM使用者並完成授權。具體操作,請參見建立RAM使用者並完成授權。
已配置環境變數ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET。具體操作,請參見在Linux、macOS和Windows系統配置環境變數。
重要阿里雲帳號的AccessKey擁有所有API的存取權限,建議您使用RAM使用者的AccessKey進行API訪問或日常營運。
強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。
已完成.NET Core SDK安裝。更多資訊,請參見安裝.NET Core SDK.
範例程式碼
本樣本中,建立一個SLSQuickStart.cs檔案,並調用介面分別完成建立Project、建立Logstore、建立索引、寫入日誌資料和查詢日誌資料。樣本如下:
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Aliyun.Api.LogService;
using Aliyun.Api.LogService.Domain.Log;
using Aliyun.Api.LogService.Domain.LogStore.Index;
using Aliyun.Api.LogService.Infrastructure.Protocol;
namespace Test
{
class SLSQuickStart
{
// Log Service的服務存取點。此處以杭州為例,其它地區請根據實際情況填寫。
private static string endpoint = "cn-hangzhou.log.aliyuncs.com";
// 本樣本從環境變數中擷取AccessKey ID和AccessKey Secret。
private static string accessKeyId = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID");
private static string accessKeySecret = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
// Project名稱。
private static string project = "aliyun-test-project";
// Logstore名稱。
private static string logstore = "aliyun-test-logstore";
// 建立Log ServiceClient。
private static ILogServiceClient client = BuildSimpleClient();
static async Task Main(string[] args)
{
// 建立Project。
var proRes = await client.CreateProjectAsync(project, "des");
check(proRes);
Console.WriteLine("Create project success");
Thread.Sleep(120 * 1000);
// 建立Logstore。
var storeRes = await client.CreateLogStoreAsync(logstore, 3, 2);
check(storeRes);
Console.WriteLine("Create logstore success");
Thread.Sleep(10 * 1000);
// 為Logstore建立索引。
var indRes = await client.CreateIndexAsync(logstore, new IndexLineInfo(new[] {' ', ','}));
check(indRes);
Console.WriteLine("Create Index success");
Thread.Sleep(60 * 1000);
// 向Logstore寫入資料。
await PostLogs();
Console.WriteLine("Post logs success");
Thread.Sleep(3000);
// 查詢日誌。
await GetLogs();
}
public static async Task GetLogs()
{
var logsRes = await client.GetLogsAsync(logstore, DateTimeOffset.UtcNow.AddMinutes(-1),
DateTimeOffset.UtcNow,
"test", "", 100, 0);
check(logsRes);
foreach (var log in logsRes.Result.Logs)
{
foreach (var key in log.Keys)
{
log.TryGetValue(key, out var value);
Console.WriteLine(key + " : " + value);
}
Console.WriteLine("======");
}
}
public static async Task PostLogs()
{
for (int i = 0; i < 10; i++)
{
var response = await client.PostLogStoreLogsAsync(logstore, new LogGroupInfo
{
Topic = "test",
Source = "127.0.0.1",
LogTags = new Dictionary<String, String>
{
{"Tag1", "t1"},
{"Tag2", String.Empty},
{"Tag3", "t3"}
},
Logs = new List<LogInfo>
{
new LogInfo
{
Time = DateTimeOffset.Now,
Contents = new Dictionary<String, String>
{
{"name", "zs"},
{"age", "18"},
{"address", String.Empty}
}
}
}
});
check(response);
}
}
public static ILogServiceClient BuildSimpleClient()
=> LogServiceClientBuilders.HttpBuilder
.Endpoint(endpoint, project)
.Credential(accessKeyId, accessKeySecret)
.Build();
public static void check(IResponse res)
{
if (!res.IsSuccess)
{
throw new ApplicationException(res.Error.ErrorMessage);
}
}
}
}更多範例程式碼,請參見Aliyun Log .NET Core SDK。
返回結果
返回結果樣本如下:
Create project success
Create logstore success
Create Index success
Post logs success
name : zs
age : 18
address :
__topic__ : test
__source__ : 127.0.0.1
__tag__:Tag1 : t1
__tag__:Tag2 :
__tag__:Tag3 : t3
__time__ : 1721728435
======
......