
关于
使用 Azure AI 异常检测器 Java SDK 构建异常检测应用。适用于实现单变量/多变量异常检测、时间序列分析或 AI 驱动的监控。
name: azure-ai-anomalydetector-java description: "使用 Azure AI 异常检测器 SDK for Java 构建异常检测应用。适用于实现单变量/多变量异常检测、时间序列分析或 AI 驱动的监控。" risk: unknown source: community date_added: "2026-02-27"
Azure AI 异常检测器 SDK for Java
使用 Azure AI 异常检测器 SDK for Java 构建异常检测应用。
安装
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-ai-anomalydetector</artifactId>
<version>3.0.0-beta.6</version>
</dependency>
创建客户端
同步和异步客户端
import com.azure.ai.anomalydetector.AnomalyDetectorClientBuilder;
import com.azure.ai.anomalydetector.MultivariateClient;
import com.azure.ai.anomalydetector.UnivariateClient;
import com.azure.core.credential.AzureKeyCredential;
String endpoint = System.getenv("AZURE_ANOMALY_DETECTOR_ENDPOINT");
String key = System.getenv("AZURE_ANOMALY_DETECTOR_API_KEY");
// 多变量客户端,用于多个相关信号
MultivariateClient multivariateClient = new AnomalyDetectorClientBuilder()
.credential(new AzureKeyCredential(key))
.endpoint(endpoint)
.buildMultivariateClient();
// 单变量客户端,用于单变量分析
UnivariateClient univariateClient = new AnomalyDetectorClientBuilder()
.credential(new AzureKeyCredential(key))
.endpoint(endpoint)
.buildUnivariateClient();
使用 DefaultAzureCredential
import com.azure.identity.DefaultAzureCredentialBuilder;
MultivariateClient client = new AnomalyDetectorClientBuilder()
.credential(new DefaultAzureCredentialBuilder().build())
.endpoint(endpoint)
.buildMultivariateClient();
核心概念
单变量异常检测
- 批量检测:一次性分析整个时间序列
- 流式检测:对最新数据点进行实时检测
- 变化点检测:检测时间序列中的趋势变化
多变量异常检测
- 可检测 300+ 个相关信号中的异常
- 使用图注意力网络(Graph Attention Network)处理变量间关联
- 三步流程:训练 → 推理 → 获取结果
核心模式
单变量批量检测
import com.azure.ai.anomalydetector.models.*;
import java.time.OffsetDateTime;
import java.util.List;
List<TimeSeriesPoint> series = List.of(
new TimeSeriesPoint(OffsetDateTime.parse("2023-01-01T00:00:00Z"), 1.0),
new TimeSeriesPoint(OffsetDateTime.parse("2023-01-02T00:00:00Z"), 2.5),
// ... 更多数据点(最少需要 12 个点)
);
UnivariateDetectionOptions options = new UnivariateDetectionOptions(series)
.setGranularity(TimeGranularity.DAILY)
.setSensitivity(95);
UnivariateEntireDetectionResult result = univariateClient.detectUnivariateEntireSeries(options);
// 检查异常
for (int i = 0; i < result.getIsAnomaly().size(); i++) {
if (result.getIsAnomaly().get(i)) {
System.out.printf("在索引 %d 处检测到异常,值为 %.2f%n",
i, series.get(i).getValue());
}
}
单变量最新点检测(流式)
UnivariateLastDetectionResult lastResult = univariateClient.detectUnivariateLastPoint(options);
if (lastResult.isAnomaly()) {
System.out.println("最新数据点为异常!");
System.out.printf("期望值: %.2f, 上界: %.2f, 下界: %.2f%n",
lastResult.getExpectedValue(),
lastResult.getUpperMargin(),
lastResult.getLowerMargin());
}
变化点检测
UnivariateChangePointDetectionOptions changeOptions =
new UnivariateChangePointDetectionOptions(series, TimeGranularity.DAILY);
UnivariateChangePointDetectionResult changeResult =
univariateClient.detectUnivariateChangePoint(changeOptions);
for (int i = 0; i < changeResult.getIsChangePoint().size(); i++) {
if (changeResult.getIsChangePoint().get(i)) {
System.out.printf("在索引 %d 处检测到变化点,置信度 %.2f%n",
i, changeResult.getConfidenceScores().get(i));
}
}
多变量模型训练
import com.azure.ai.anomalydetector.models.*;
import com.azure.core.util.polling.SyncPoller;
// 使用 Blob 存储数据准备训练请求
ModelInfo modelInfo = new ModelInfo()
.setDataSource("https://storage.blob.core.windows.net/container/data.zip?sasToken")
.setStartTime(OffsetDateTime.parse("2023-01-01T00:00:00Z"))
.setEndTime(OffsetDateTime.parse("2023-06-01T00:00:00Z"))
.setSlidingWindow(200)
.setDisplayName("MyMultivariateModel");
// 训练模型(长时间运行操作)
AnomalyDetectionModel trainedModel = multivariateClient.trainMultivariateModel(modelInfo);
String modelId = trainedModel.getModelId();
System.out.println("模型 ID: " + modelId);
// 检查训练状态
AnomalyDetectionModel model = multivariateClient.getMultivariateModel(modelId);
System.out.println("状态: " + model.getModelInfo().getStatus());
兼容工具
Claude CodeCursor
标签
后端开发
