You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 01:35:04