如何通过Ballerina代码执行Azure Log Analytics查询?
用Ballerina执行Azure Log Analytics查询的实现方案
一、前置准备
- 得先有Azure Log Analytics工作区,提前备好这俩信息:
- Workspace ID:Azure门户里找Log Analytics工作区→概述就能看到
- Primary/Secondary Key:工作区的「代理管理」或「密钥」选项卡下获取
- 安装最新版Ballerina(建议1.20及以上版本)
二、手动调用REST API实现(最灵活)
Azure Log Analytics提供了REST API用于执行查询,Ballerina可以通过http:Client直接调用,核心是处理Shared Key身份验证。
完整代码示例
import ballerina/http; import ballerina/crypto; import ballerina/time; import ballerina/log; public function main() returns error? { // 替换成你的实际配置 string workspaceId = "your-workspace-id"; string apiKey = "your-primary-or-secondary-key"; string kqlQuery = "AzureActivity | take 10"; // 换成你要执行的KQL查询 // 构建API请求地址 string baseUrl = string.format("https://%s.api.loganalytics.io/v1/workspaces/%s/query", workspaceId, workspaceId); // 生成Shared Key认证所需的签名 string utcDate = time:format(time:utcNow(), "EEE, dd MMM yyyy HH:mm:ss 'GMT'"); string signContent = string.format("POST\n%s\n/api/logs/query", utcDate); crypto:HashDigest hmacDigest = crypto:sha256Hmac(signContent, apiKey); string signature = base64:encode(hmacDigest); string authHeader = string.format("SharedKey %s:%s", workspaceId, signature); // 构造请求体 json requestBody = { "query": kqlQuery }; // 发送请求并处理响应 http:Client logAnalyticsClient = check new (baseUrl); http:Response response = check logAnalyticsClient->post("/", requestBody, headers = { "Content-Type": "application/json", "Authorization": authHeader, "x-ms-date": utcDate, "Log-Analytics-Client-Id": "Ballerina-Custom-Client" // 自定义客户端标识,可选 }); if response.statusCode == 200 { json result = check response.getJsonPayload(); log:printInfo("查询成功,结果:", result = result); // 可进一步解析result.tables字段获取具体数据 } else { string errorDetail = check response.getTextPayload(); log:printError("查询失败", statusCode = response.statusCode, errorInfo = errorDetail); } }
三、简化方案:使用社区包
如果不想手动处理签名和HTTP细节,可以用Ballerina社区维护的Azure Log Analytics包,代码会简洁很多:
示例代码
import ballerinax/azure.loganalytics; import ballerina/log; public function main() returns error? { loganalytics:ClientConfig clientConfig = { workspaceId: "your-workspace-id", apiKey: "your-api-key" }; loganalytics:Client client = check new (clientConfig); loganalytics:QueryResponse queryResult = check client->executeQuery("AzureActivity | take 10"); log:printInfo("查询结果表格:", tables = queryResult.tables); }
安装包的命令:bal pull ballerinax/azure.loganalytics
四、关键注意点
- 查询语法:用的是Kusto查询语言(KQL),和Azure门户里写的查询完全一致
- 权限校验:确保你的API密钥对应的账号有Log Analytics工作区的「读取」权限
- 错误排查:如果返回401,大概率是签名生成错误或者密钥/Workspace ID填错;返回400则可能是KQL语法有误
内容的提问来源于stack exchange,提问作者Dulmina
相关产品推荐
相关产品推荐

