본문 바로가기
WIKI 기술 지식 베이스

Anomaly Detection APIs

원문 보기 위키 갱신

출처: 문서

본문

이상 탐지 API

이러한 이상 탐지 작업을 사용하여 프로그래밍 방식으로 탐지기를 생성하고 관리할 수 있어요.


목차

  • TOC {:toc}

이상 탐지기 생성

Introduced 1.0 {: .label .label-purple }

이상 탐지기를 생성해요.

이 명령은 value 필드의 합계를 기반으로 이상을 찾고 결과를 사용자 지정 opensearch-ad-plugin-result-test 인덱스에 저장하는 test-detector라는 단일 엔터티 탐지기를 생성해요.

요청 예시

POST _plugins/_anomaly_detection/detectors
{
  "name": "test-detector",
  "description": "Test detector",
  "time_field": "timestamp",
  "indices": [
    "server_log*"
  ],
  "feature_attributes": [
    {
      "feature_name": "test",
      "feature_enabled": true,
      "aggregation_query": {
        "test": {
          "sum": {
            "field": "value"
          }
        }
      }
    }
  ],
  "filter_query": {
    "bool": {
      "filter": [
        {
          "range": {
            "value": {
              "gt": 1
            }
          }
        }
      ],
      "adjust_pure_negative": true,
      "boost": 1
    }
  },
  "detection_interval": {
    "period": {
      "interval": 1,
      "unit": "Minutes"
    }
  },
  "window_delay": {
    "period": {
      "interval": 1,
      "unit": "Minutes"
    }
  },
  "result_index" : "opensearch-ad-plugin-result-test"
}

응답 예시

{
  "_id": "VEHKTXwBwf_U8gjUXY2s",
  "_version": 1,
  "_seq_no": 5,
  "anomaly_detector": {
    "name": "test-detector",
    "description": "Test detector",
    "time_field": "timestamp",
    "indices": [
      "server_log*"
    ],
    "filter_query": {
      "bool": {
        "filter": [
          {
            "range": {
              "value": {
                "from": 1,
                "to": null,
                "include_lower": false,
                "include_upper": true,
                "boost": 1
              }
            }
          }
        ],
        "adjust_pure_negative": true,
        "boost": 1
      }
    },
    "detection_interval": {
      "period": {
        "interval": 1,
        "unit": "Minutes"
      }
    },
    "window_delay": {
      "period": {
        "interval": 1,
        "unit": "Minutes"
      }
    },
    "shingle_size": 8,
    "schema_version": 0,
    "feature_attributes": [
      {
        "feature_id": "U0HKTXwBwf_U8gjUXY2m",
        "feature_name": "test",
        "feature_enabled": true,
        "aggregation_query": {
          "test": {
            "sum": {
              "field": "value"
            }
          }
        }
      }
    ],
    "last_update_time": 1633392680364,
    "user": {
      "name": "admin",
      "backend_roles": [
        "admin"
      ],
      "roles": [
        "own_index",
        "all_access"
      ],
      "custom_attribute_names": [],
      "user_requested_tenant": "__user__"
    },
    "detector_type": "SINGLE_ENTITY"
  },
  "_primary_term": 1
}

카테고리 필드를 지정하여 높은 카디널리티 탐지기를 생성하려면:

요청 예시

POST _plugins/_anomaly_detection/detectors
{
  "name": "test-hc-detector",
  "description": "Test detector",
  "time_field": "timestamp",
  "indices": [
    "server_log*"
  ],
  "feature_attributes": [
    {
      "feature_name": "test",
      "feature_enabled": true,
      "aggregation_query": {
        "test": {
          "sum": {
            "field": "value"
          }
        }
      }
    }
  ],
  "filter_query": {
    "bool": {
      "filter": [
        {
          "range": {
            "value": {
              "gt": 1
            }
          }
        }
      ],
      "adjust_pure_negative": true,
      "boost": 1
    }
  },
  "detection_interval": {
    "period": {
      "interval": 1,
      "unit": "Minutes"
    }
  },
  "window_delay": {
    "period": {
      "interval": 1,
      "unit": "Minutes"
    }
  },
  "category_field": [
    "ip"
  ]
}

응답 예시

{
  "_id": "b0HRTXwBwf_U8gjUw43R",
  "_version": 1,
  "_seq_no": 6,
  "anomaly_detector": {
    "name": "test-hc-detector",
    "description": "Test detector",
    "time_field": "timestamp",
    "indices": [
      "server_log*"
    ],
    "filter_query": {
      "bool": {
        "filter": [
          {
            "range": {
              "value": {
                "from": 1,
                "to": null,
                "include_lower": false,
                "include_upper": true,
                "boost": 1
              }
            }
          }
        ],
        "adjust_pure_negative": true,
        "boost": 1
      }
    },
    "detection_interval": {
      "period": {
        "interval": 1,
        "unit": "Minutes"
      }
    },
    "window_delay": {
      "period": {
        "interval": 1,
        "unit": "Minutes"
      }
    },
    "shingle_size": 8,
    "schema_version": 0,
    "feature_attributes": [
      {
        "feature_id": "bkHRTXwBwf_U8gjUw43K",
        "feature_name": "test",
        "feature_enabled": true,
        "aggregation_query": {
          "test": {
            "sum": {
              "field": "value"
            }
          }
        }
      }
    ],
    "last_update_time": 1633393165265,
    "category_field": [
      "ip"
    ],
    "user": {
      "name": "admin",
      "backend_roles": [
        "admin"
      ],
      "roles": [
        "own_index",
        "all_access"
      ],
      "custom_attribute_names": [],
      "user_requested_tenant": "__user__"
    },
    "detector_type": "MULTI_ENTITY"
  },
  "_primary_term": 1
}

최대 두 개의 카테고리 필드를 지정할 수 있어요.

"category_field": [
  "ip"
]
"category_field": [
  "ip", "error_type"
]

다음 옵션을 지정할 수 있어요.

옵션 설명 유형 필수
name 탐지기의 이름이에요. string 예
description 탐지기에 대한 설명이에요. string 아니요
time_field 시간 필드의 이름이에요. string 예
indices 데이터 소스로 사용할 인덱스 목록이에요. list 예
feature_attributes feature_name을 지정하고 enabled 매개변수를 true로 설정한 후 집계 쿼리를 지정해요. list 예
filter_query 특성에 대한 선택적 필터 쿼리를 제공해요. object 아니요
detection_interval 이상 탐지기의 시간 간격이에요. object 예
window_delay 데이터 수집을 위한 추가 처리 시간을 추가해요. object 아니요
category_field 차원으로 데이터를 분류하거나 슬라이스해요. SQL의 GROUP BY와 유사해요. list 아니요

탐지기 검증

Introduced 1.2 {: .label .label-purple }

탐지기 구성에 OpenSearch가 탐지기를 생성하지 못하게 할 수 있는 문제가 있는지 여부를 반환해요.

탐지기를 생성하기 전에 탐지기 구성의 문제를 식별하기 위해 탐지기 검증 API 작업을 사용할 수 있어요.

요청 본문은 탐지기 구성으로 구성되며 탐지기 생성 API의 요청 본문과 동일한 형식을 따라요.

다음과 같은 검증 옵션이 있어요.

  • 탐지기 구성에 대해서만 검증하고 탐지기 생성을 완전히 차단하는 문제를 찾아요.
POST _plugins/_anomaly_detection/detectors/_validate
POST _plugins/_anomaly_detection/detectors/_validate/detector
  • 소스 데이터에 대해 검증하여 탐지기가 모델 학습을 완료할 가능성을 확인해요.
POST _plugins/_anomaly_detection/detectors/_validate/model

이 API 작업의 응답은 탐지기 유형 응답으로 차단 문제를 반환하거나 모델 학습이 성공적으로 완료될 가능성을 높이기 위해 수정할 수 있는 필드를 나타내는 응답을 반환해요. 모델 유형 문제는 탐지기 생성이 성공하기 위해 수정할 필요는 없지만, 해결되지 않으면 탐지기가 학습에 성공하지 못할 가능성이 있어요.

요청 예시

POST _plugins/_anomaly_detection/detectors/_validate
POST _plugins/_anomaly_detection/detectors/_validate/detector
{
  "name": "test-detector",
  "description": "Test detector",
  "time_field": "timestamp",
  "indices": [
    "server_log*"
  ],
  "feature_attributes": [
    {
      "feature_name": "test",
      "feature_enabled": true,
      "aggregation_query": {
        "test": {
          "sum": {
            "field": "value"
          }
        }
      }
    }
  ],
  "filter_query": {
    "bool": {
      "filter": [
        {
          "range": {
            "value": {
              "gt": 1
            }
          }
        }
      ],
      "adjust_pure_negative": true,
      "boost": 1
    }
  },
  "detection_interval": {
    "period": {
      "interval": 1,
      "unit": "Minutes"
    }
  },
  "window_delay": {
    "period": {
      "interval": 1,
      "unit": "Minutes"
    }
  }
}

탐지기 검증 API가 탐지기 구성에서 문제를 찾지 못하면 빈 응답을 반환해요.

응답 예시

{}

탐지기 검증 API가 구성 문제를 찾으면 문제를 설명하는 메시지를 반환해요. 이 예에서는 특성 쿼리가 데이터 소스에 존재하지 않는 필드에 대해 집계해요.

응답 예시

{
  "detector": {
    "feature_attributes": {
      "message": "Feature has invalid query returning empty aggregated data: average_total_rev",
      "sub_issues": {
        "average_total_rev": "Feature has invalid query returning empty aggregated data"
      }
    }
  }
}

다음 요청은 모델 학습이 성공할 수 있는지 확인하기 위해 소스 데이터에 대해 검증해요. 이 예에서는 데이터가 5분마다 수집되고 탐지기 간격이 1분으로 설정되어 있어요.

POST _plugins/_anomaly_detection/detectors/_validate/model
{
  "name": "test-detector",
  "description": "Test detector",
  "time_field": "timestamp",
  "indices": [
    "server_log*"
  ],
  "feature_attributes": [
    {
      "feature_name": "test",
      "feature_enabled": true,
      "aggregation_query": {
        "test": {
          "sum": {
            "field": "value"
          }
        }
      }
    }
  ],
  "filter_query": {
    "bool": {
      "filter": [
        {
          "range": {
            "value": {
              "gt": 1
            }
          }
        }
      ],
      "adjust_pure_negative": true,
      "boost": 1
    }
  },
  "detection_interval": {
    "period": {
      "interval": 1,
      "unit": "Minutes"
    }
  },
  "window_delay": {
    "period": {
      "interval": 1,
      "unit": "Minutes"
    }
  }
}

탐지기 검증 API가 구성에서 개선할 영역을 식별하면 모델 학습을 개선하기 위해 구성을 변경하기 위한 제안이 포함된 응답을 반환해요.

응답 예시

이 예에서는 탐지기 검증 API가 탐지기 간격 길이를 최소 4분으로 변경하면 모델 학습 성공 확률을 높일 수 있음을 나타내는 응답을 반환해요.

{
  "model": {
    "detection_interval": {
      "message": "The selected detector interval might collect sparse data. Consider changing interval length to: 4",
      "suggested_value": {
        "period": {
          "interval": 4,
          "unit": "Minutes"
        }
      }
    }
  }
}

또 다른 응답은 현재 필터링된 데이터가 모델이 올바르게 학습하기에는 너무 희소하기 때문에 filter_query(데이터 필터)를 변경할 수 있음을 나타낼 수 있어요. 이는 인덱스가 선택한 필터 외부에 있는 데이터도 수집하기 때문에 발생할 수 있어요. 다른 filter_query를 사용하면 데이터를 더 조밀하게 만들 수 있어요.

{
  "model": {
    "filter_query": {
      "message": "Data is too sparse after data filter is applied. Consider changing the data filter"
    }
  }
}

탐지기 가져오기

Introduced 1.0 {: .label .label-purple }

detector_id를 기반으로 탐지기에 대한 모든 정보를 반환해요.

요청 예시

GET _plugins/_anomaly_detection/detectors/{detectorId}

응답 예시

{
  "_id": "VEHKTXwBwf_U8gjUXY2s",
  "_version": 1,
  "_primary_term": 1,
  "_seq_no": 5,
  "anomaly_detector": {
    "name": "test-detector",
    "description": "Test detector",
    "time_field": "timestamp",
    "indices": [
      "server_log*"
    ],
    "filter_query": {
      "bool": {
        "filter": [
          {
            "range": {
              "value": {
                "from": 1,
                "to": null,
                "include_lower": false,
                "include_upper": true,
                "boost": 1
              }
            }
          }
        ],
        "adjust_pure_negative": true,
        "boost": 1
      }
    },
    "detection_interval": {
      "period": {
        "interval": 1,
        "unit": "Minutes"
      }
    },
    "window_delay": {
      "period": {
        "interval": 1,
        "unit": "Minutes"
      }
    },
    "shingle_size": 8,
    "schema_version": 0,
    "feature_attributes": [
      {
        "feature_id": "U0HKTXwBwf_U8gjUXY2m",
        "feature_name": "test",
        "feature_enabled": true,
        "aggregation_query": {
          "test": {
            "sum": {
              "field": "value"
            }
          }
        }
      }
    ],
    "last_update_time": 1633392680364,
    "user": {
      "name": "admin",
      "backend_roles": [
        "admin"
      ],
      "roles": [
        "own_index",
        "all_access"
      ],
      "custom_attribute_names": [],
      "user_requested_tenant": "__user__"
    },
    "detector_type": "SINGLE_ENTITY"
  }
}

_작업_은 주기적으로 실행하도록 예약하는 것이므로 실시간 이상 탐지에만 적용되며 한 번만 실행하는 히스토리 분석에는 적용되지 않아요.

실시간 탐지기를 시작하면 Anomaly Detection 플러그인이 작업을 생성하거나 작업이 이미 존재하면 업데이트해요. 실시간 탐지기를 시작하거나 다시 시작하면 플러그인이 탐지기 구성 스냅샷, 실시간 작업 상태(초기화 중/실행 중/중지됨), 초기화 진행률 등의 런타임 정보를 기록하는 새로운 실시간 작업을 생성해요.

단일 탐지기는 하나의 실시간 작업만 가질 수 있지만(작업 ID는 탐지기 ID와 동일), 실시간 작업을 다시 시작할 때마다 새 실시간 작업이 생성되므로 여러 실시간 작업을 가질 수 있어요. plugins.anomaly_detection.max_old_ad_task_docs_per_detector 설정으로 실시간 작업 수를 제한할 수 있어요.

히스토리 분석에는 연결된 작업이 없어요. 탐지기에 대한 히스토리 분석을 시작하거나 다시 실행하면 Anomaly Detection 플러그인이 상태, 조정/작업자 노드, 작업 진행률 등의 히스토리 분석 런타임 정보를 추적하는 새로운 히스토리 배치 작업을 생성해요. plugins.anomaly_detection.max_old_ad_task_docs_per_detector 설정으로 히스토리 작업 수를 제한할 수 있어요.

실시간 분석 작업 정보를 가져오려면 job=true를 사용해요.

요청 예시

GET _plugins/_anomaly_detection/detectors/{detectorId}?job=true

응답 예시

{
  "_id": "VEHKTXwBwf_U8gjUXY2s",
  "_version": 1,
  "_primary_term": 1,
  "_seq_no": 5,
  "anomaly_detector": {
    "name": "test-detector",
    "description": "Test detector",
    "time_field": "timestamp",
    "indices": [
      "server_log*"
    ],
    "filter_query": {
      "bool": {
        "filter": [
          {
            "range": {
              "value": {
                "from": 1,
                "to": null,
                "include_lower": false,
                "include_upper": true,
                "boost": 1
              }
            }
          }
        ],
        "adjust_pure_negative": true,
        "boost": 1
      }
    },
    "detection_interval": {
      "period": {
        "interval": 1,
        "unit": "Minutes"
      }
    },
    "window_delay": {
      "period": {
        "interval": 1,
        "unit": "Minutes"
      }
    },
    "shingle_size": 8,
    "schema_version": 0,
    "feature_attributes": [
      {
        "feature_id": "U0HKTXwBwf_U8gjUXY2m",
        "feature_name": "test",
        "feature_enabled": true,
        "aggregation_query": {
          "test": {
            "sum": {
              "field": "value"
            }
          }
        }
      }
    ],
    "last_update_time": 1633392680364,
    "user": {
      "name": "admin",
      "backend_roles": [
        "admin"
      ],
      "roles": [
        "own_index",
        "all_access"
      ],
      "custom_attribute_names": [],
      "user_requested_tenant": "__user__"
    },
    "detector_type": "SINGLE_ENTITY"
  },
  "anomaly_detector_job": {
    "name": "VEHKTXwBwf_U8gjUXY2s",
    "schedule": {
      "interval": {
        "start_time": 1633393656357,
        "period": 1,
        "unit": "Minutes"
      }
    },
    "window_delay": {
      "period": {
        "interval": 1,
        "unit": "Minutes"
      }
    },
    "enabled": true,
    "enabled_time": 1633393656357,
    "last_update_time": 1633393656357,
    "lock_duration_seconds": 60,
    "user": {
      "name": "admin",
      "backend_roles": [
        "admin"
      ],
      "roles": [
        "own_index",
        "all_access"
      ],
      "custom_attribute_names": [],
      "user_requested_tenant": "__user__"
    }
  }
}

실시간 및 히스토리 분석 작업 정보를 모두 가져오려면 task=true를 사용해요.

요청 예시

GET _plugins/_anomaly_detection/detectors/{detectorId}?task=true

응답 예시

{
  "_id": "VEHKTXwBwf_U8gjUXY2s",
  "_version": 1,
  "_primary_term": 1,
  "_seq_no": 5,
  "anomaly_detector": {
    "name": "test-detector",
    "description": "Test detector",
    "time_field": "timestamp",
    "indices": [
      "server_log*"
    ],
    "filter_query": {
      "bool": {
        "filter": [
          {
            "range": {
              "value": {
                "from": 1,
                "to": null,
                "include_lower": false,
                "include_upper": true,
                "boost": 1
              }
            }
          }
        ],
        "adjust_pure_negative": true,
        "boost": 1
      }
    },
    "detection_interval": {
      "period": {
        "interval": 1,
        "unit": "Minutes"
      }
    },
    "window_delay": {
      "period": {
        "interval": 1,
        "unit": "Minutes"
      }
    },
    "shingle_size": 8,
    "schema_version": 0,
    "feature_attributes": [
      {
        "feature_id": "U0HKTXwBwf_U8gjUXY2m",
        "feature_name": "test",
        "feature_enabled": true,
        "aggregation_query": {
          "test": {
            "sum": {
              "field": "value"
            }
          }
        }
      }
    ],
    "last_update_time": 1633392680364,
    "user": {
      "name": "admin",
      "backend_roles": [
        "admin"
      ],
      "roles": [
        "own_index",
        "all_access"
      ],
      "custom_attribute_names": [],
      "user_requested_tenant": "__user__"
    },
    "detector_type": "SINGLE_ENTITY"
  },
  "realtime_detection_task": {
    "task_id": "nkTZTXwBjd8s6RK4QlMq",
    "last_update_time": 1633393776375,
    "started_by": "admin",
    "error": "",
    "state": "RUNNING",
    "detector_id": "VEHKTXwBwf_U8gjUXY2s",
    "task_progress": 0,
    "init_progress": 1,
    "execution_start_time": 1633393656362,
    "is_latest": true,
    "task_type": "REALTIME_SINGLE_ENTITY",
    "coordinating_node": "SWD7ihu9TaaW1zKwFZNVNg",
    "detector": {
      "name": "test-detector",
      "description": "Test detector",
      "time_field": "timestamp",
      "indices": [
        "server_log*"
      ],
      "filter_query": {
        "bool": {
          "filter": [
            {
              "range": {
                "value": {
                  "from": 1,
                  "to": null,
                  "include_lower": false,
                  "include_upper": true,
                  "boost": 1
                }
              }
            }
          ],
          "adjust_pure_negative": true,
          "boost": 1
        }
      },
      "detection_interval": {
        "period": {
          "interval": 1,
          "unit": "Minutes"
        }
      },
      "window_delay": {
        "period": {
          "interval": 1,
          "unit": "Minutes"
        }
      },
      "shingle_size": 8,
      "schema_version": 0,
      "feature_attributes": [
        {
          "feature_id": "U0HKTXwBwf_U8gjUXY2m",
          "feature_name": "test",
          "feature_enabled": true,
          "aggregation_query": {
            "test": {
              "sum": {
                "field": "value"
              }
            }
          }
        }
      ],
      "last_update_time": 1633392680364,
      "user": {
        "name": "admin",
        "backend_roles": [
          "admin"
        ],
        "roles": [
          "own_index",
          "all_access"
        ],
        "custom_attribute_names": [],
        "user_requested_tenant": "__user__"
      },
      "detector_type": "SINGLE_ENTITY"
    },
    "estimated_minutes_left": 0,
    "user": {
      "name": "admin",
      "backend_roles": [
        "admin"
      ],
      "roles": [
        "own_index",
        "all_access"
      ],
      "custom_attribute_names": [],
      "user_requested_tenant": "__user__"
    }
  },
  "historical_analysis_task": {
    "task_id": "99DaTXwB6HknB84StRN1",
    "last_update_time": 1633393797040,
    "started_by": "admin",
    "state": "RUNNING",
    "detector_id": "VEHKTXwBwf_U8gjUXY2s",
    "task_progress": 0.89285713,
    "init_progress": 1,
    "current_piece": 1633328940000,
    "execution_start_time": 1633393751412,
    "is_latest": true,
    "task_type": "HISTORICAL_SINGLE_ENTITY",
    "coordinating_node": "SWD7ihu9TaaW1zKwFZNVNg",
    "worker_node": "2Z4q22BySEyzakYt_A0A2A",
    "detector": {
      "name": "test-detector",
      "description": "Test detector",
      "time_field": "timestamp",
      "indices": [
        "server_log*"
      ],
      "filter_query": {
        "bool": {
          "filter": [
            {
              "range": {
                "value": {
                  "from": 1,
                  "to": null,
                  "include_lower": false,
                  "include_upper": true,
                  "boost": 1
                }
              }
            }
          ],
          "adjust_pure_negative": true,
          "boost": 1
        }
      },
      "detection_interval": {
        "period": {
          "interval": 1,
          "unit": "Minutes"
        }
      },
      "window_delay": {
        "period": {
          "interval": 1,
          "unit": "Minutes"
        }
      },
      "shingle_size": 8,
      "schema_version": 0,
      "feature_attributes": [
        {
          "feature_id": "U0HKTXwBwf_U8gjUXY2m",
          "feature_name": "test",
          "feature_enabled": true,
          "aggregation_query": {
            "test": {
              "sum": {
                "field": "value"
              }
            }
          }
        }
      ],
      "last_update_time": 1633392680364,
      "user": {
        "name": "admin",
        "backend_roles": [
          "admin"
        ],
        "roles": [
          "own_index",
          "all_access"
        ],
        "custom_attribute_names": [],
        "user_requested_tenant": "__user__"
      },
      "detector_type": "SINGLE_ENTITY"
    },
    "detection_date_range": {
      "start_time": 1632788951329,
      "end_time": 1633393751329
    },
    "user": {
      "name": "admin",
      "backend_roles": [
        "admin"
      ],
      "roles": [
        "own_index",
        "all_access"
      ],
      "custom_attribute_names": [],
      "user_requested_tenant": "__user__"
    }
  }
}

탐지기 업데이트

Introduced 1.0 {: .label .label-purple }

설명 변경이나 특성 추가 또는 제거를 포함한 모든 변경 사항으로 탐지기를 업데이트해요.

탐지기를 업데이트하려면 먼저 실시간 탐지와 히스토리 분석을 모두 중지해야 해요.

카테고리 필드는 업데이트할 수 없어요. {: .note }

요청 예시

PUT _plugins/_anomaly_detection/detectors/{detectorId}
{
  "name": "test-detector",
  "description": "Test update detector",
  "time_field": "timestamp",
  "indices": [
    "server_log*"
  ],
  "feature_attributes": [
    {
      "feature_name": "test",
      "feature_enabled": true,
      "aggregation_query": {
        "test": {
          "sum": {
            "field": "value"
          }
        }
      }
    }
  ],
  "filter_query": {
    "bool": {
      "filter": [
        {
          "range": {
            "value": {
              "gt": 1
            }
          }
        }
      ],
      "adjust_pure_negative": true,
      "boost": 1
    }
  },
  "detection_interval": {
    "period": {
      "interval": 1,
      "unit": "Minutes"
    }
  },
  "window_delay": {
    "period": {
      "interval": 1,
      "unit": "Minutes"
    }
  }
}

응답 예시

{
  "_id": "VEHKTXwBwf_U8gjUXY2s",
  "_version": 2,
  "_seq_no": 7,
  "anomaly_detector": {
    "name": "test-detector",
    "description": "Test update detector",
    "time_field": "timestamp",
    "indices": [
      "server_log*"
    ],
    "filter_query": {
      "bool": {
        "filter": [
          {
            "range": {
              "value": {
                "from": 1,
                "to": null,
                "include_lower": false,
                "include_upper": true,
                "boost": 1
              }
            }
          }
        ],
        "adjust_pure_negative": true,
        "boost": 1
      }
    },
    "detection_interval": {
      "period": {
        "interval": 1,
        "unit": "Minutes"
      }
    },
    "window_delay": {
      "period": {
        "interval": 1,
        "unit": "Minutes"
      }
    },
    "shingle_size": 8,
    "schema_version": 0,
    "feature_attributes": [
      {
        "feature_id": "3kHiTXwBwf_U8gjUlY15",
        "feature_name": "test",
        "feature_enabled": true,
        "aggregation_query": {
          "test": {
            "sum": {
              "field": "value"
            }
          }
        }
      }
    ],
    "last_update_time": 1633394267522,
    "user": {
      "name": "admin",
      "backend_roles": [
        "admin"
      ],
      "roles": [
        "own_index",
        "all_access"
      ],
      "custom_attribute_names": [],
      "user_requested_tenant": "__user__"
    },
    "detector_type": "SINGLE_ENTITY"
  },
  "_primary_term": 1
}

탐지기 삭제

Introduced 1.0 {: .label .label-purple }

detector_id를 기반으로 탐지기를 삭제해요.

탐지기를 삭제하려면 먼저 실시간 탐지와 히스토리 분석을 모두 중지해야 해요.

요청 예시

DELETE _plugins/_anomaly_detection/detectors/{detectorId}

응답 예시

{
  "_index": ".opensearch-anomaly-detectors",
  "_id": "70TxTXwBjd8s6RK4j1Pj",
  "_version": 2,
  "result": "deleted",
  "forced_refresh": true,
  "_shards": {
    "total": 2,
    "successful": 2,
    "failed": 0
  },
  "_seq_no": 9,
  "_primary_term": 1
}

탐지기 미리보기

Introduced 1.0 {: .label .label-purple }

이상 탐지기에 날짜 범위를 전달하여 해당 날짜 범위 내의 이상을 반환해요.

단일 엔터티 탐지기를 미리보려면:

요청 예시

POST _plugins/_anomaly_detection/detectors/_preview
{
  "period_start": 1633048868000,
  "period_end": 1633394468000,
  "detector": {
    "name": "test-detector",
    "description": "Test update detector",
    "time_field": "timestamp",
    "indices": [
      "server_log*"
    ],
    "feature_attributes": [
      {
        "feature_name": "test",
        "feature_enabled": true,
        "aggregation_query": {
          "test": {
            "sum": {
              "field": "value"
            }
          }
        }
      }
    ],
    "filter_query": {
      "bool": {
        "filter": [
          {
            "range": {
              "value": {
                "gt": 1
              }
            }
          }
        ],
        "adjust_pure_negative": true,
        "boost": 1
      }
    },
    "detection_interval": {
      "period": {
        "interval": 1,
        "unit": "Minutes"
      }
    },
    "window_delay": {
      "period": {
        "interval": 1,
        "unit": "Minutes"
      }
    }
  }
}

응답 예시

{
  "anomaly_result": [
    {
      "detector_id": null,
      "data_start_time": 1633049280000,
      "data_end_time": 1633049340000,
      "schema_version": 0,
      "feature_data": [
        {
          "feature_id": "8EHmTXwBwf_U8gjU0Y0u",
          "feature_name": "test",
          "data": 0
        }
      ],
      "anomaly_grade": 0,
      "confidence": 0
    },
    ...
  ],
  "anomaly_detector": {
    "name": "test-detector",
    "description": "Test update detector",
    "time_field": "timestamp",
    "indices": [
      "server_log*"
    ],
    "filter_query": {
      "bool": {
        "filter": [
          {
            "range": {
              "value": {
                "from": 1,
                "to": null,
                "include_lower": false,
                "include_upper": true,
                "boost": 1
              }
            }
          }
        ],
        "adjust_pure_negative": true,
        "boost": 1
      }
    },
    "detection_interval": {
      "period": {
        "interval": 1,
        "unit": "Minutes"
      }
    },
    "window_delay": {
      "period": {
        "interval": 1,
        "unit": "Minutes"
      }
    },
    "shingle_size": 8,
    "schema_version": 0,
    "feature_attributes": [
      {
        "feature_id": "8EHmTXwBwf_U8gjU0Y0u",
        "feature_name": "test",
        "feature_enabled": true,
        "aggregation_query": {
          "test": {
            "sum": {
              "field": "value"
            }
          }
        }
      }
    ],
    "detector_type": "SINGLE_ENTITY"
  }
}

카테고리 필드를 지정하면 각 결과가 엔터티와 연결되어요.

요청 예시

POST _plugins/_anomaly_detection/detectors/_preview
{
  "period_start": 1633048868000,
  "period_end": 1633394468000,
  "detector": {
    "name": "test-detector",
    "description": "Test update detector",
    "time_field": "timestamp",
    "indices": [
      "server_log*"
    ],
    "feature_attributes": [
      {
        "feature_name": "test",
        "feature_enabled": true,
        "aggregation_query": {
          "test": {
            "sum": {
              "field": "value"
            }
          }
        }
      }
    ],
    "filter_query": {
      "bool": {
        "filter": [
          {
            "range": {
              "value": {
                "gt": 1
              }
            }
          }
        ],
        "adjust_pure_negative": true,
        "boost": 1
      }
    },
    "detection_interval": {
      "period": {
        "interval": 1,
        "unit": "Minutes"
      }
    },
    "window_delay": {
      "period": {
        "interval": 1,
        "unit": "Minutes"
      }
    },
    "category_field": [
      "error_type"
    ]
  }
}

응답 예시

{
  "anomaly_result": [
    {
      "detector_id": null,
      "data_start_time": 1633049280000,
      "data_end_time": 1633049340000,
      "schema_version": 0,
      "feature_data": [
        {
          "feature_id": "tkTpTXwBjd8s6RK4DlOZ",
          "feature_name": "test",
          "data": 0
        }
      ],
      "anomaly_grade": 0,
      "confidence": 0,
      "entity": [
        {
          "name": "error_type",
          "value": "error1"
        }
      ]
    },
    ...
  ],
  "anomaly_detector": {
    "name": "test-detector",
    "description": "Test update detector",
    "time_field": "timestamp",
    "indices": [
      "server_log*"
    ],
    "filter_query": {
      "bool": {
        "filter": [
          {
            "range": {
              "value": {
                "from": 1,
                "to": null,
                "include_lower": false,
                "include_upper": true,
                "boost": 1
              }
            }
          }
        ],
        "adjust_pure_negative": true,
        "boost": 1
      }
    },
    "detection_interval": {
      "period": {
        "interval": 1,
        "unit": "Minutes"
      }
    },
    "window_delay": {
      "period": {
        "interval": 1,
        "unit": "Minutes"
      }
    },
    "shingle_size": 8,
    "schema_version": 0,
    "feature_attributes": [
      {
        "feature_id": "tkTpTXwBjd8s6RK4DlOZ",
        "feature_name": "test",
        "feature_enabled": true,
        "aggregation_query": {
          "test": {
            "sum": {
              "field": "value"
            }
          }
        }
      }
    ],
    "category_field": [
      "error_type"
    ],
    "detector_type": "MULTI_ENTITY"
  }
}

탐지기 ID로 탐지기를 미리볼 수 있어요.

POST _plugins/_anomaly_detection/detectors/_preview
{
  "detector_id": "VEHKTXwBwf_U8gjUXY2s",
  "period_start": 1633048868000,
  "period_end": 1633394468000
}

또는:

POST _opendistro/_anomaly_detection/detectors/VEHKTXwBwf_U8gjUXY2s/_preview
{
  "period_start": 1633048868000,
  "period_end": 1633394468000
}

응답 예시

{
  "anomaly_result": [
    {
      "detector_id": "VEHKTXwBwf_U8gjUXY2s",
      "data_start_time": 1633049280000,
      "data_end_time": 1633049340000,
      "schema_version": 0,
      "feature_data": [
        {
          "feature_id": "3kHiTXwBwf_U8gjUlY15",
          "feature_name": "test",
          "data": 0
        }
      ],
      "anomaly_grade": 0,
      "confidence": 0,
      "user": {
        "name": "admin",
        "backend_roles": [
          "admin"
        ],
        "roles": [
          "own_index",
          "all_access"
        ],
        "custom_attribute_names": [],
        "user_requested_tenant": "__user__"
      }
    },
    ...
  ],
  "anomaly_detector": {
    "name": "test-detector",
    "description": "Test update detector",
    "time_field": "timestamp",
    "indices": [
      "server_log*"
    ],
    "filter_query": {
      "bool": {
        "filter": [
          {
            "range": {
              "value": {
                "from": 1,
                "to": null,
                "include_lower": false,
                "include_upper": true,
                "boost": 1
              }
            }
          }
        ],
        "adjust_pure_negative": true,
        "boost": 1
      }
    },
    "detection_interval": {
      "period": {
        "interval": 1,
        "unit": "Minutes"
      }
    },
    "window_delay": {
      "period": {
        "interval": 1,
        "unit": "Minutes"
      }
    },
    "shingle_size": 8,
    "schema_version": 0,
    "feature_attributes": [
      {
        "feature_id": "3kHiTXwBwf_U8gjUlY15",
        "feature_name": "test",
        "feature_enabled": true,
        "aggregation_query": {
          "test": {
            "sum": {
              "field": "value"
            }
          }
        }
      }
    ],
    "last_update_time": 1633394267522,
    "user": {
      "name": "admin",
      "backend_roles": [
        "admin"
      ],
      "roles": [
        "own_index",
        "all_access"
      ],
      "custom_attribute_names": [],
      "user_requested_tenant": "__user__"
    },
    "detector_type": "SINGLE_ENTITY"
  }
}

탐지기 작업 시작

Introduced 1.0 {: .label .label-purple }

실시간 또는 히스토리 이상 탐지기 작업을 시작해요.

실시간 탐지기 작업을 시작하려면:

요청 예시

POST _plugins/_anomaly_detection/detectors/{detectorId}/_start

응답 예시

{
  "_id": "VEHKTXwBwf_U8gjUXY2s",
  "_version": 3,
  "_seq_no": 6,
  "_primary_term": 1
}

_id는 실시간 작업 ID를 나타내며, 이는 탐지기 ID와 동일해요.

히스토리 분석을 시작하려면:

POST _plugins/_anomaly_detection/detectors/{detectorId}/_start
{
  "start_time": 1633048868000,
  "end_time": 1633394468000
}

응답 예시

{
  "_id": "f9DsTXwB6HknB84SoRTY",
  "_version": 1,
  "_seq_no": 958,
  "_primary_term": 1
}

_id는 히스토리 배치 작업 ID를 나타내며, 이는 임의의 UUID(범용 고유 식별자)예요.


탐지기 작업 중지

Introduced 1.0 {: .label .label-purple }

실시간 또는 히스토리 이상 탐지기 작업을 중지해요.

실시간 탐지기 작업을 중지하려면:

요청 예시

POST _plugins/_anomaly_detection/detectors/{detectorId}/_stop

응답 예시

{
  "_id": "VEHKTXwBwf_U8gjUXY2s",
  "_version": 0,
  "_seq_no": 0,
  "_primary_term": 0
}

히스토리 분석을 중지하려면:

Introduced 1.1 {: .label .label-purple }

POST _plugins/_anomaly_detection/detectors/{detectorId}/_stop?historical=true

응답 예시

{
  "_id": "f9DsTXwB6HknB84SoRTY",
  "_version": 0,
  "_seq_no": 0,
  "_primary_term": 0
}

탐지기 검색

Introduced 1.0 {: .label .label-purple }

검색 쿼리에 대한 모든 이상 탐지기를 반환해요.

server_log* 인덱스를 사용하여 탐지기를 검색하려면:

요청 예시

GET _plugins/_anomaly_detection/detectors/_search
POST _plugins/_anomaly_detection/detectors/_search
{
  "query": {
    "wildcard": {
      "indices": {
        "value": "server_log*"
      }
    }
  }
}

응답 예시

{
  "took": 2,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 4,
      "relation": "eq"
    },
    "max_score": 1,
    "hits": [
      {
        "_index": ".opensearch-anomaly-detectors",
        "_id": "Zi5zTXwBwf_U8gjUTfJG",
        "_version": 1,
        "_seq_no": 1,
        "_primary_term": 1,
        "_score": 1,
        "_source": {
          "name": "test",
          "description": "test",
          "time_field": "timestamp",
          "indices": [
            "server_log"
          ],
          "filter_query": {
            "match_all": {
              "boost": 1
            }
          },
          "detection_interval": {
            "period": {
              "interval": 5,
              "unit": "Minutes"
            }
          },
          "window_delay": {
            "period": {
              "interval": 1,
              "unit": "Minutes"
            }
          },
          "shingle_size": 8,
          "schema_version": 0,
          "feature_attributes": [
            {
              "feature_id": "ZS5zTXwBwf_U8gjUTfIn",
              "feature_name": "test_feature",
              "feature_enabled": true,
              "aggregation_query": {
                "test_feature": {
                  "sum": {
                    "field": "value"
                  }
                }
              }
            }
          ],
          "last_update_time": 1633386974533,
          "category_field": [
            "error_type"
          ],
          "user": {
            "name": "admin",
            "backend_roles": [
              "admin"
            ],
            "roles": [
              "own_index",
              "all_access"
            ],
            "custom_attribute_names": [],
            "user_requested_tenant": "__user__"
          },
          "detector_type": "MULTI_ENTITY"
        }
      },
      ...
    ]
  }
}

탐지기 작업 검색

Introduced 1.1 {: .label .label-purple }

탐지기 작업을 검색해요.

높은 카디널리티 탐지기에 대한 최신 탐지기 수준 히스토리 분석 작업을 검색하려면

요청 예시

GET _plugins/_anomaly_detection/detectors/tasks/_search
POST _plugins/_anomaly_detection/detectors/tasks/_search
{
  "query": {
    "bool": {
      "filter": [
        {
          "term": {
            "detector_id": "Zi5zTXwBwf_U8gjUTfJG"
          }
        },
        {
          "term": {
            "task_type": "HISTORICAL_HC_DETECTOR"
          }
        },
        {
          "term": {
            "is_latest": "true"
          }
        }
      ]
    }
  }
}

응답 예시

{
  "took": 1,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 1,
      "relation": "eq"
    },
    "max_score": 0,
    "hits": [
      {
        "_index": ".opensearch-anomaly-detection-state",
        "_id": "fm-RTXwBYwCbWecgB753",
        "_version": 34,
        "_seq_no": 928,
        "_primary_term": 1,
        "_score": 0,
        "_source": {
          "detector_id": "Zi5zTXwBwf_U8gjUTfJG",
          "error": "",
          "detection_date_range": {
            "start_time": 1630794960000,
            "end_time": 1633386960000
          },
          "task_progress": 1,
          "last_update_time": 1633389090738,
          "execution_start_time": 1633388922742,
          "state": "FINISHED",
          "coordinating_node": "2Z4q22BySEyzakYt_A0A2A",
          "task_type": "HISTORICAL_HC_DETECTOR",
          "execution_end_time": 1633389090738,
          "started_by": "admin",
          "init_progress": 0,
          "is_latest": true,
          "detector": {
            "category_field": [
              "error_type"
            ],
            "description": "test",
            "ui_metadata": {
              "features": {
                "test_feature": {
                  "aggregationBy": "sum",
                  "aggregationOf": "value",
                  "featureType": "simple_aggs"
                }
              },
              "filters": []
            },
            "feature_attributes": [
              {
                "feature_id": "ZS5zTXwBwf_U8gjUTfIn",
                "feature_enabled": true,
                "feature_name": "test_feature",
                "aggregation_query": {
                  "test_feature": {
                    "sum": {
                      "field": "value"
                    }
                  }
                }
              }
            ],
            "schema_version": 0,
            "time_field": "timestamp",
            "last_update_time": 1633386974533,
            "indices": [
              "server_log"
            ],
            "window_delay": {
              "period": {
                "unit": "Minutes",
                "interval": 1
              }
            },
            "detection_interval": {
              "period": {
                "unit": "Minutes",
                "interval": 5
              }
            },
            "name": "testhc",
            "filter_query": {
              "match_all": {
                "boost": 1
              }
            },
            "shingle_size": 8,
            "user": {
              "backend_roles": [
                "admin"
              ],
              "custom_attribute_names": [],
              "roles": [
                "own_index",
                "all_access"
              ],
              "name": "admin",
              "user_requested_tenant": "__user__"
            },
            "detector_type": "MULTI_ENTITY"
          },
          "user": {
            "backend_roles": [
              "admin"
            ],
            "custom_attribute_names": [],
            "roles": [
              "own_index",
              "all_access"
            ],
            "name": "admin",
            "user_requested_tenant": "__user__"
          }
        }
      }
    ]
  }
}

높은 카디널리티 탐지기의 히스토리 분석에 대한 최신 엔터티 수준 작업을 검색하려면:

요청 예시

GET _plugins/_anomaly_detection/detectors/tasks/_search
POST _plugins/_anomaly_detection/detectors/tasks/_search
{
  "query": {
    "bool": {
      "filter": [
        {
          "term": {
            "detector_id": "Zi5zTXwBwf_U8gjUTfJG"
          }
        },
        {
          "term": {
            "task_type": "HISTORICAL_HC_ENTITY"
          }
        },
        {
          "term": {
            "is_latest": "true"
          }
        }
      ]
    }
  },
  "sort": [
    {
      "execution_start_time": {
        "order": "desc"
      }
    }
  ],
  "size": 100
}

모든 엔터티 수준 히스토리 작업의 상태를 검색하고 집계하려면:

parent_task_id는 프로필 탐지기 API로 얻을 수 있는 작업 ID와 동일해요. GET _plugins/_anomaly_detection/detectors/<detector_ID>/_profile/ad_task. {: .note }

요청 예시

GET _plugins/_anomaly_detection/detectors/tasks/_search
POST _plugins/_anomaly_detection/detectors/tasks/_search
{
  "size": 0,
  "query": {
    "bool": {
      "filter": [
        {
          "term": {
            "detector_id": {
              "value": "Zi5zTXwBwf_U8gjUTfJG",
              "boost": 1
            }
          }
        },
        {
          "term": {
            "parent_task_id": {
              "value": "fm-RTXwBYwCbWecgB753",
              "boost": 1
            }
          }
        },
        {
          "terms": {
            "task_type": [
              "HISTORICAL_HC_ENTITY"
            ],
            "boost": 1
          }
        }
      ]
    }
  },
  "aggs": {
    "test": {
      "terms": {
        "field": "state",
        "size": 100
      }
    }
  }
}

응답 예시

{
  "took": 2,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 32,
      "relation": "eq"
    },
    "max_score": null,
    "hits": []
  },
  "aggregations": {
    "test": {
      "doc_count_error_upper_bound": 0,
      "sum_other_doc_count": 0,
      "buckets": [
        {
          "key": "FINISHED",
          "doc_count": 32
        }
      ]
    }
  }
}

탐지기 결과 검색

Introduced 1.0 {: .label .label-purple }

검색 쿼리에 대한 모든 결과를 반환해요.

다음과 같은 검색 옵션이 있어요.

  • 기본 결과 인덱스만 검색하려면 검색 API를 사용하면 돼요.

    POST _plugins/_anomaly_detection/detectors/results/_search/
    
  • 사용자 지정 결과 인덱스와 기본 결과 인덱스를 모두 검색하려면 사용자 지정 결과 인덱스를 검색 API에 추가하거나:

    POST _plugins/_anomaly_detection/detectors/results/_search/{custom_result_index}
    

    또는 사용자 지정 결과 인덱스를 추가하고 only_query_custom_result_index 매개변수를 false로 설정해요.

    POST _plugins/_anomaly_detection/detectors/results/_search/{custom_result_index}?only_query_custom_result_index=false
    
  • 사용자 지정 결과 인덱스만 검색하려면 사용자 지정 결과 인덱스를 검색 API에 추가하고 only_query_custom_result_index 매개변수를 true로 설정해요.

    POST _plugins/_anomaly_detection/detectors/results/_search/{custom_result_index}?only_query_custom_result_index=true
    

다음 예는 실시간 분석에 대해 등급이 0보다 큰 이상 결과를 검색해요.

요청 예시

GET _plugins/_anomaly_detection/detectors/results/_search/opensearch-ad-plugin-result-test
POST _plugins/_anomaly_detection/detectors/results/_search/opensearch-ad-plugin-result-test
{
  "query": {
    "bool": {
      "filter": [
        {
          "term": {
            "detector_id": "EWy02nwBm38sXcF2AiFJ"
          }
        },
        {
          "range": {
            "anomaly_grade": {
              "gt": 0
            }
          }
        }
      ],
      "must_not": [
        {
          "exists": {
            "field": "task_id"
          }
        }
      ]
    }
  }
}

이 예에서처럼 사용자 지정 결과 인덱스를 지정하면 검색 결과 API는 기본 결과 인덱스와 사용자 지정 결과 인덱스를 모두 검색해요.

사용자 지정 결과 인덱스를 지정하지 않고 _plugins/_anomaly_detection/detectors/results/_search URL만 사용하면 Anomaly Detection 플러그인은 기본 결과 인덱스만 검색해요.

실시간 탐지는 이상 결과에 작업 ID를 유지하지 않으므로 작업 ID는 null이 돼요.

응답 본문 필드에 대한 자세한 내용은 이상 결과 매핑을 참조해요.

응답 예시

{
  "took": 4,
  "timed_out": false,
  "_shards": {
    "total": 3,
    "successful": 3,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 90,
      "relation": "eq"
    },
    "max_score": 0,
    "hits": [
      {
        "_index": ".opensearch-anomaly-results-history-2021.10.04-1",
        "_id": "686KTXwB6HknB84SMr6G",
        "_version": 1,
        "_seq_no": 103622,
        "_primary_term": 1,
        "_score": 0,
        "_source": {
          "detector_id": "EWy02nwBm38sXcF2AiFJ",
          "confidence": 0.918886275269358,
          "model_id": "EWy02nwBm38sXcF2AiFJ_entity_error16",
          "schema_version": 4,
          "anomaly_score": 1.1093755891885446,
          "execution_start_time": 1633388475001,
          "data_end_time": 1633388414989,
          "data_start_time": 1633388114989,
          "feature_data": [
            {
              "feature_id": "ZS5zTXwBwf_U8gjUTfIn",
              "feature_name": "test_feature",
              "data": 0.532
            }
          ],
          "relevant_attribution": [
            {
              "feature_id": "ZS5zTXwBwf_U8gjUTfIn",
              "data": 1.0
            }
          ],
          "expected_values": [
            {
              "likelihood": 1,
              "value_list": [
                {
                  "feature_id": "ZS5zTXwBwf_U8gjUTfIn",
                  "data": 2
                }
              ]
            }
          ],
          "execution_end_time": 1633388475014,
          "user": {
            "backend_roles": [
              "admin"
            ],
            "custom_attribute_names": [],
            "roles": [
              "own_index",
              "all_access"
            ],
            "name": "admin",
            "user_requested_tenant": "__user__"
          },
          "anomaly_grade": 0.031023547546561225,
          "entity": [
            {
              "name": "error_type",
              "value": "error16"
            }
          ]
        }
      },
      ...
    ]
  }
}

히스토리 분석은 원하는 만큼 여러 번 실행할 수 있어요. 따라서 동일한 탐지기에 대해 여러 작업이 존재할 수 있어요.

최신 히스토리 배치 작업을 먼저 검색한 다음 히스토리 배치 작업 결과를 검색할 수 있어요.

task_id로 히스토리 분석에 대해 grade가 0보다 큰 이상 결과를 검색하려면:

요청 예시

GET _plugins/_anomaly_detection/detectors/results/_search
POST _plugins/_anomaly_detection/detectors/results/_search
{
  "query": {
    "bool": {
      "filter": [
        {
          "term": {
            "detector_id": "Zi5zTXwBwf_U8gjUTfJG"
          }
        },
        {
          "range": {
            "anomaly_grade": {
              "gt": 0
            }
          }
        },
        {
          "term": {
            "task_id": "fm-RTXwBYwCbWecgB753"
          }
        }
      ]
    }
  }
}

응답 예시

{
  "took": 915,
  "timed_out": false,
  "_shards": {
    "total": 3,
    "successful": 3,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 4115,
      "relation": "eq"
    },
    "max_score": 0,
    "hits": [
      {
        "_index": ".opensearch-anomaly-results-history-2021.10.04-1",
        "_id": "VRyRTXwBDx7vzPBV8jYC",
        "_version": 1,
        "_seq_no": 149657,
        "_primary_term": 1,
        "_score": 0,
        "_source": {
          "detector_id": "Zi5zTXwBwf_U8gjUTfJG",
          "confidence": 0.9642989263957601,
          "task_id": "fm-RTXwBYwCbWecgB753",
          "model_id": "Zi5zTXwBwf_U8gjUTfJG_entity_error24",
          "schema_version": 4,
          "anomaly_score": 1.2260712437521946,
          "execution_start_time": 1633388982692,
          "data_end_time": 1631721300000,
          "data_start_time": 1631721000000,
          "feature_data": [
            {
              "feature_id": "ZS5zTXwBwf_U8gjUTfIn",
              "feature_name": "test_feature",
              "data": 10
            }
          ],
          "execution_end_time": 1633388982709,
          "user": {
            "backend_roles": [
              "admin"
            ],
            "custom_attribute_names": [],
            "roles": [
              "own_index",
              "all_access"
            ],
            "name": "admin",
            "user_requested_tenant": "__user__"
          },
          "anomaly_grade": 0.14249628345655782,
          "entity": [
            {
              "name": "error_type",
              "value": "error1"
            }
          ]
        }
      },
      ...
    ]
  }
}

상위 이상 검색

Introduced 1.2 {: .label .label-purple }

높은 카디널리티 탐지기에 대한 상위 이상 결과를 범주형 필드 값으로 버킷팅하여 반환해요.

실시간 결과 또는 히스토리 결과를 분석할지 지정하려면 historical 부울 매개변수를 전달할 수 있어요.

요청 예시

GET _plugins/_anomaly_detection/detectors/{detectorId}/results/_topAnomalies?historical=false
{
  "size": 3,
  "category_field": [
    "ip"
  ],
  "order": "severity",
  "task_id": "example-task-id",
  "start_time_ms": 123456789000,
  "end_time_ms": 987654321000
}

응답 예시

{
  "buckets": [
    {
      "key": {
        "ip": "1.2.3.4"
      },
      "doc_count": 10,
      "max_anomaly_grade": 0.8
    },
    {
      "key": {
        "ip": "5.6.7.8"
      },
      "doc_count": 12,
      "max_anomaly_grade": 0.6
    },
    {
      "key": {
        "ip": "9.10.11.12"
      },
      "doc_count": 3,
      "max_anomaly_grade": 0.5
    }
  ]
}

다음 옵션을 지정할 수 있어요.

옵션 설명 유형 필수
size 보려는 상위 버킷 수를 지정해요. 기본값은 10이에요. 최대 개수는 10,000이에요. integer 아니요
category_field 집계하려는 범주형 필드 집합을 지정해요. 기본값은 탐지기의 모든 범주형 필드예요. list 아니요
order severity(이상 등급) 또는 occurrence(이상 횟수)를 지정해요. 기본값은 severity예요. string 아니요
task_id 특정 작업의 결과만 보려면 히스토리 작업 ID를 지정해요. historical=true인 경우에만 사용하고, 그렇지 않으면 Anomaly Detection 플러그인이 이 매개변수를 무시해요. string 아니요
start_time_ms 결과 분석을 시작할 시간을 Epoch 밀리초 단위로 지정해요. long 예
end_time_ms 결과 분석을 종료할 시간을 Epoch 밀리초 단위로 지정해요. long 예

탐지기 통계 가져오기

Introduced 1.0 {: .label .label-purple }

이 플러그인이 어떻게 작동하는지에 대한 정보를 제공해요.

모든 통계를 가져오려면:

요청 예시

GET _plugins/_anomaly_detection/stats

응답 예시

{
  "anomaly_detectors_index_status": "green",
  "anomaly_detection_state_status": "green",
  "single_entity_detector_count": 2,
  "detector_count": 5,
  "multi_entity_detector_count": 3,
  "anomaly_detection_job_index_status": "green",
  "models_checkpoint_index_status": "green",
  "anomaly_results_index_status": "green",
  "nodes": {
    "2Z4q22BySEyzakYt_A0A2A": {
      "ad_execute_request_count": 95,
      "models": [
        {
          "detector_id": "WTBnTXwBjd8s6RK4b1Sz",
          "model_type": "rcf",
          "last_used_time": 1633398197185,
          "model_id": "WTBnTXwBjd8s6RK4b1Sz_model_rcf_0",
          "last_checkpoint_time": 1633396573679
        },
        ...
      ],
      "ad_canceled_batch_task_count": 0,
      "ad_hc_execute_request_count": 75,
      "ad_hc_execute_failure_count": 0,
      "model_count": 28,
      "ad_execute_failure_count": 1,
      "ad_batch_task_failure_count": 0,
      "ad_total_batch_task_execution_count": 27,
      "ad_executing_batch_task_count": 3
    },
    "SWD7ihu9TaaW1zKwFZNVNg": {
      "ad_execute_request_count": 12,
      "models": [
        {
          "detector_id": "Zi5zTXwBwf_U8gjUTfJG",
          "model_type": "entity",
          "last_used_time": 1633398375008,
          "model_id": "Zi5zTXwBwf_U8gjUTfJG_entity_error13",
          "last_checkpoint_time": 1633392973682,
          "entity": [
            {
              "name": "error_type",
              "value": "error13"
            }
          ]
        },
        ...
      ],
      "ad_canceled_batch_task_count": 1,
      "ad_hc_execute_request_count": 0,
      "ad_hc_execute_failure_count": 0,
      "model_count": 15,
      "ad_execute_failure_count": 2,
      "ad_batch_task_failure_count": 0,
      "ad_total_batch_task_execution_count": 27,
      "ad_executing_batch_task_count": 4
    },
    "TQDUXEzyTJyV0H6_T4hYUw": {
      "ad_execute_request_count": 0,
      "models": [
        {
          "detector_id": "Zi5zTXwBwf_U8gjUTfJG",
          "model_type": "entity",
          "last_used_time": 1633398375004,
          "model_id": "Zi5zTXwBwf_U8gjUTfJG_entity_error24",
          "last_checkpoint_time": 1633388177359,
          "entity": [
            {
              "name": "error_type",
              "value": "error24"
            }
          ]
        },
        ...
      ],
      "ad_canceled_batch_task_count": 0,
      "ad_hc_execute_request_count": 0,
      "ad_hc_execute_failure_count": 0,
      "model_count": 22,
      "ad_execute_failure_count": 0,
      "ad_batch_task_failure_count": 0,
      "ad_total_batch_task_execution_count": 28,
      "ad_executing_batch_task_count": 3
    }
  }
}

model_count 매개변수는 각 노드의 메모리에서 실행 중인 모델의 총 개수를 보여줘요. 히스토리컬 분석을 위해 다음 필드의 값을 볼 수 있어요:

  • ad_total_batch_task_execution_count
  • ad_executing_batch_task_count
  • ad_canceled_batch_task_count
  • ad_batch_task_failure_count

히스토리컬 분석을 실행하지 않은 경우 이 값은 0으로 표시돼요.

특정 노드의 모든 통계를 가져오려면:

요청 예시

GET _plugins/_anomaly_detection/{nodeId}/stats

노드의 특정 통계를 가져오려면:

요청 예시

GET _plugins/_anomaly_detection/{nodeId}/stats/{stat}

예를 들어, SWD7ihu9TaaW1zKwFZNVNg 노드의 ad_execute_request_count 값을 가져오려면:

GET _plugins/_anomaly_detection/SWD7ihu9TaaW1zKwFZNVNg/stats/ad_execute_request_count

응답 예시

{
  "nodes": {
    "SWD7ihu9TaaW1zKwFZNVNg": {
      "ad_execute_request_count": 12
    }
  }
}

특정 유형의 통계를 가져오려면:

요청 예시

GET _plugins/_anomaly_detection/stats/{stat}

예를 들어:

GET _plugins/_anomaly_detection/stats/ad_executing_batch_task_count

응답 예시

{
  "nodes": {
    "2Z4q22BySEyzakYt_A0A2A": {
      "ad_executing_batch_task_count": 3
    },
    "SWD7ihu9TaaW1zKwFZNVNg": {
      "ad_executing_batch_task_count": 3
    },
    "TQDUXEzyTJyV0H6_T4hYUw": {
      "ad_executing_batch_task_count": 4
    }
  }
}

탐지기 프로파일

Introduced 1.0 {: .label .label-purple }

탐지기 문제 해결을 돕기 위해 현재 오류 및 샤인글 크기를 포함한 탐지기의 현재 상태와 메모리 사용량에 대한 정보를 반환해요.

이 명령은 각 탐지기에 대해 이상 탐지 작업을 실행하는 노드를 식별하여 로그를 찾는 데 도움을 줘요.

또한 초기화 비율, 필요한 샤인글, 예상 남은 시간을 추적하는 데 도움을 줘요.

요청 예시

GET _plugins/_anomaly_detection/detectors/{detectorId}/_profile/
GET _plugins/_anomaly_detection/detectors/{detectorId}/_profile?_all=true
GET _plugins/_anomaly_detection/detectors/{detectorId}/_profile/{type}
GET _plugins/_anomaly_detection/detectors/{detectorId}/_profile/{type1},{type2}

응답 예시

GET _plugins/_anomaly_detection/detectors/{detectorId}/_profile

{
  "state": "DISABLED",
  "error": "Stopped detector: AD models memory usage exceeds our limit."
}

GET _plugins/_anomaly_detection/detectors/{detectorId}/_profile?_all=true&pretty

{
  "state": "RUNNING",
  "error": "",
  "models": [
    {
      "model_id": "3Dh6TXwBwf_U8gjURE0F_entity_KSLSh0Wv05RQXiBAQHTEZg",
      "entity": [
        {
          "name": "ip",
          "value": "192.168.1.1"
        },
        {
          "name": "error_type",
          "value": "error8"
        }
      ],
      "model_size_in_bytes": 403491,
      "node_id": "2Z4q22BySEyzakYt_A0A2A"
    },
    ...
  ],
  "total_size_in_bytes": 12911712,
  "init_progress": {
    "percentage": "100%"
  },
  "total_entities": 33,
  "active_entities": 32,
  "ad_task": {
    "ad_task": {
      "task_id": "D3I5TnwBYwCbWecg7lN9",
      "last_update_time": 1633399993685,
      "started_by": "admin",
      "state": "RUNNING",
      "detector_id": "3Dh6TXwBwf_U8gjURE0F",
      "task_progress": 0,
      "init_progress": 0,
      "execution_start_time": 1633399991933,
      "is_latest": true,
      "task_type": "HISTORICAL_HC_DETECTOR",
      "coordinating_node": "2Z4q22BySEyzakYt_A0A2A",
      "detector": {
        "name": "testhc-mc",
        "description": "test",
        "time_field": "timestamp",
        "indices": [
          "server_log"
        ],
        "filter_query": {
          "match_all": {
            "boost": 1
          }
        },
        "detection_interval": {
          "period": {
            "interval": 5,
            "unit": "Minutes"
          }
        },
        "window_delay": {
          "period": {
            "interval": 1,
            "unit": "Minutes"
          }
        },
        "shingle_size": 8,
        "schema_version": 0,
        "feature_attributes": [
          {
            "feature_id": "2zh6TXwBwf_U8gjUQ039",
            "feature_name": "test",
            "feature_enabled": true,
            "aggregation_query": {
              "test": {
                "sum": {
                  "field": "value"
                }
              }
            }
          }
        ],
        "ui_metadata": {
          "features": {
            "test": {
              "aggregationBy": "sum",
              "aggregationOf": "value",
              "featureType": "simple_aggs"
            }
          },
          "filters": []
        },
        "last_update_time": 1633387430916,
        "category_field": [
          "ip",
          "error_type"
        ],
        "user": {
          "name": "admin",
          "backend_roles": [
            "admin"
          ],
          "roles": [
            "own_index",
            "all_access"
          ],
          "custom_attribute_names": [],
          "user_requested_tenant": "__user__"
        },
        "detector_type": "MULTI_ENTITY"
      },
      "detection_date_range": {
        "start_time": 1632793800000,
        "end_time": 1633398600000
      },
      "user": {
        "name": "admin",
        "backend_roles": [
          "admin"
        ],
        "roles": [
          "own_index",
          "all_access"
        ],
        "custom_attribute_names": [],
        "user_requested_tenant": "__user__"
      }
    },
    "node_id": "2Z4q22BySEyzakYt_A0A2A",
    "task_id": "D3I5TnwBYwCbWecg7lN9",
    "task_type": "HISTORICAL_HC_DETECTOR",
    "detector_task_slots": 10,
    "total_entities_count": 32,
    "pending_entities_count": 22,
    "running_entities_count": 10,
    "running_entities": [      """[{"name":"ip","value":"192.168.1.1"},{"name":"error_type","value":"error9"}]""",
          ...],
    "entity_task_profiles": [
      {
        "shingle_size": 8,
        "rcf_total_updates": 1994,
        "threshold_model_trained": true,
        "threshold_model_training_data_size": 0,
        "model_size_in_bytes": 1593240,
        "node_id": "2Z4q22BySEyzakYt_A0A2A",
        "entity": [
          {
            "name": "ip",
            "value": "192.168.1.1"
          },
          {
            "name": "error_type",
            "value": "error7"
          }
        ],
        "task_id": "E3I5TnwBYwCbWecg9FMm",
        "task_type": "HISTORICAL_HC_ENTITY"
      },
      ...
    ]
  },
  "model_count": 32
}

GET _plugins/_anomaly_detection/detectors/{detectorId}/_profile/total_size_in_bytes

{
  "total_size_in_bytes": 13369344
}

히스토리컬 분석에서만 ad_task 필드를 볼 수 있어요.

model_count 매개변수는 탐지기가 각 노드의 메모리에서 실행하는 모델의 총 개수를 보여줘요. 클러스터에서 여러 모델을 실행 중이고 그 개수를 알고 싶을 때 유용해요.

카테고리 필드를 구성한 경우 필드의 고유 값 개수와 메모리에서 모델이 실행 중인 모든 활성 엔터티를 볼 수 있어요.

이 데이터를 사용하여 이상 탐지에 필요한 메모리 양을 추정할 수 있으므로 클러스터 크기를 결정하는 데 도움이 돼요. 예를 들어, 탐지기에 백만 개의 엔터티가 있고 그중 10개만 메모리에서 활성 상태인 경우 클러스터를 확장하거나 추가해야 해요.

단일 엔터티 탐지기의 경우:

응답 예시

{
  "state": "INIT",
  "total_size_in_bytes": 0,
  "init_progress": {
    "percentage": "0%",
    "needed_shingles": 128
  },
  "ad_task": {
    "ad_task": {
      "task_id": "cfUNOXwBFLNqSEcxAlde",
      "last_update_time": 1633044731640,
      "started_by": "admin",
      "state": "RUNNING",
      "detector_id": "qL4NOXwB__6eNorTAKtJ",
      "task_progress": 0.49603173,
      "init_progress": 1,
      "current_piece": 1632739800000,
      "execution_start_time": 1633044726365,
      "is_latest": true,
      "task_type": "HISTORICAL_SINGLE_ENTITY",
      "coordinating_node": "bCtWtxWPThq0BIn5P5I4Xw",
      "worker_node": "dIyavWhmSYWGz65b4u-lpQ",
      "detector": {
        "name": "detector1",
        "description": "test",
        "time_field": "timestamp",
        "indices": [
          "server_log"
        ],
        "filter_query": {
          "match_all": {
            "boost": 1
          }
        },
        "detection_interval": {
          "period": {
            "interval": 5,
            "unit": "Minutes"
          }
        },
        "window_delay": {
          "period": {
            "interval": 1,
            "unit": "Minutes"
          }
        },
        "shingle_size": 8,
        "schema_version": 0,
        "feature_attributes": [
          {
            "feature_id": "p74NOXwB__6eNorTAKss",
            "feature_name": "test-feature",
            "feature_enabled": true,
            "aggregation_query": {
              "test_feature": {
                "sum": {
                  "field": "value"
                }
              }
            }
          }
        ],
        "ui_metadata": {
          "features": {
            "test-feature": {
              "aggregationBy": "sum",
              "aggregationOf": "value",
              "featureType": "simple_aggs"
            }
          },
          "filters": []
        },
        "last_update_time": 1633044725832,
        "user": {
          "name": "admin",
          "backend_roles": [
            "admin"
          ],
          "roles": [
            "own_index",
            "all_access"
          ],
          "custom_attribute_names": [],
          "user_requested_tenant": "__user__"
        },
        "detector_type": "SINGLE_ENTITY"
      },
      "detection_date_range": {
        "start_time": 1632439925885,
        "end_time": 1633044725885
      },
      "user": {
        "name": "admin",
        "backend_roles": [
          "admin"
        ],
        "roles": [
          "own_index",
          "all_access"
        ],
        "custom_attribute_names": [],
        "user_requested_tenant": "__user__"
      }
    },
    "shingle_size": 8,
    "rcf_total_updates": 1994,
    "threshold_model_trained": true,
    "threshold_model_training_data_size": 0,
    "model_size_in_bytes": 1593240,
    "node_id": "dIyavWhmSYWGz65b4u-lpQ",
    "detector_task_slots": 1
  }
}

total_entities 매개변수는 탐지기의 카테고리 필드 수를 포함한 총 엔터티 수를 보여줘요.

엔터티의 총 개수를 가져오는 것은 둘 이상의 카테고리 필드가 있는 탐지기의 실시간 분석에 비용이 많이 드는 작업이에요. 기본적으로 실시간 탐지 프로파일의 경우 탐지기는 최대 10,000개까지 엔터티 수를 계산해요. 히스토리컬 분석의 경우 Anomaly Detection 플러그인은 기본적으로 상위 1,000개의 엔터티만 감지하고 상위 엔터티를 메모리에 캐시하므로 히스토리컬 분석을 위해 엔터티의 총 개수를 가져오는 데 비용이 많이 들지 않아요.

profile 작업은 또한 각 엔터티에 대한 정보를 제공해요. 예를 들어 엔터티의 last_sample_timestamp 및 last_active_timestamp와 같은 정보요. last_sample_timestamp는 엔터티를 포함하는 입력 데이터 소스 인덱스의 마지막 문서를 보여주고, last_active_timestamp는 엔터티의 모델이 모델 캐시에서 마지막으로 확인된 타임스탬프를 보여줘요.

엔터티에 대한 이상 결과가 없는 경우 엔터티에 샘플 데이터가 없거나 메모리 및 디스크 IO와 같은 리소스가 엔터티 수에 비해 제한되어 있기 때문이에요.

요청 예시

GET _plugins/_anomaly_detection/detectors/{detectorId}/_profile?_all=true
{
  "entity": [
    {
      "name": "host",
      "value": "i-00f28ec1eb8997686"
    }
  ]
}

응답 예시

{
  "is_active": true,
  "last_active_timestamp": 1604026394879,
  "last_sample_timestamp": 1604026394879,
  "init_progress": {
    "percentage": "100%"
  },
  "model": {
    "model_id": "TFUdd3UBBwIAGQeRh5IS_entity_i-00f28ec1eb8997686",
    "model_size_in_bytes": 712480,
    "node_id": "MQ-bTBW3Q2uU_2zX3pyEQg"
  },
  "state": "RUNNING"
}

히스토리컬 분석에 대해서만 프로파일 정보를 가져오려면 ad_task를 지정해요. _all을 지정하는 것은 다중 카테고리 고카디널리티 탐지기에 비용이 많이 드는 작업이에요.

요청 예시

GET _plugins/_anomaly_detection/detectors/{detectorId}/_profile?_all
GET _plugins/_anomaly_detection/detectors/{detectorId}/_profile/ad_task

응답 예시

{
  "ad_task": {
    "ad_task": {
      "task_id": "CHI0TnwBYwCbWecgqgRA",
      "last_update_time": 1633399648413,
      "started_by": "admin",
      "state": "RUNNING",
      "detector_id": "3Dh6TXwBwf_U8gjURE0F",
      "task_progress": 0,
      "init_progress": 0,
      "execution_start_time": 1633399646784,
      "is_latest": true,
      "task_type": "HISTORICAL_HC_DETECTOR",
      "coordinating_node": "2Z4q22BySEyzakYt_A0A2A",
      "detector": {
        "name": "testhc-mc",
        "description": "test",
        "time_field": "timestamp",
        "indices": [
          "server_log"
        ],
        "filter_query": {
          "match_all": {
            "boost": 1
          }
        },
        "detection_interval": {
          "period": {
            "interval": 5,
            "unit": "Minutes"
          }
        },
        "window_delay": {
          "period": {
            "interval": 1,
            "unit": "Minutes"
          }
        },
        "shingle_size": 8,
        "schema_version": 0,
        "feature_attributes": [
          {
            "feature_id": "2zh6TXwBwf_U8gjUQ039",
            "feature_name": "test",
            "feature_enabled": true,
            "aggregation_query": {
              "test": {
                "sum": {
                  "field": "value"
                }
              }
            }
          }
        ],
        "ui_metadata": {
          "features": {
            "test": {
              "aggregationBy": "sum",
              "aggregationOf": "value",
              "featureType": "simple_aggs"
            }
          },
          "filters": []
        },
        "last_update_time": 1633387430916,
        "category_field": [
          "ip",
          "error_type"
        ],
        "user": {
          "name": "admin",
          "backend_roles": [
            "admin"
          ],
          "roles": [
            "own_index",
            "all_access"
          ],
          "custom_attribute_names": [],
          "user_requested_tenant": "__user__"
        },
        "detector_type": "MULTI_ENTITY"
      },
      "detection_date_range": {
        "start_time": 1632793800000,
        "end_time": 1633398600000
      },
      "user": {
        "name": "admin",
        "backend_roles": [
          "admin"
        ],
        "roles": [
          "own_index",
          "all_access"
        ],
        "custom_attribute_names": [],
        "user_requested_tenant": "__user__"
      }
    },
    "node_id": "2Z4q22BySEyzakYt_A0A2A",
    "task_id": "CHI0TnwBYwCbWecgqgRA",
    "task_type": "HISTORICAL_HC_DETECTOR",
    "detector_task_slots": 10,
    "total_entities_count": 32,
    "pending_entities_count": 22,
    "running_entities_count": 10,
    "running_entities" : [
      """[{"name":"ip","value":"192.168.1.1"},{"name":"error_type","value":"error9"}]""",
      ...
    ],
    "entity_task_profiles": [
      {
        "shingle_size": 8,
        "rcf_total_updates": 994,
        "threshold_model_trained": true,
        "threshold_model_training_data_size": 0,
        "model_size_in_bytes": 1593240,
        "node_id": "2Z4q22BySEyzakYt_A0A2A",
        "entity": [
          {
            "name": "ip",
            "value": "192.168.1.1"
          },
          {
            "name": "error_type",
            "value": "error6"
          }
        ],
        "task_id": "9XI0TnwBYwCbWecgsAd6",
        "task_type": "HISTORICAL_HC_ENTITY"
      },
      ...
    ]
  }
}

탐지기 결과 삭제

Introduced 1.1 {: .label .label-purple }

쿼리를 기반으로 탐지기의 결과를 삭제해요.

탐지기 결과 삭제 API는 기본 결과 인덱스의 이상 결과 문서만 삭제해요. 사용자 정의 결과 인덱스에 저장된 이상 결과 문서는 삭제를 지원하지 않아요.

사용자 정의 결과 인덱스에서 필요하지 않은 이상 결과 문서는 수동으로 삭제해야 해요.

요청 예시

DELETE _plugins/_anomaly_detection/detectors/results
{
  "query": {
    "bool": {
      "filter": [
        {
          "term": {
            "detector_id": {
              "value": "rlDtOHwBD5tpxlbyW7Nt"
            }
          }
        },
        {
          "term": {
            "task_id": {
              "value": "TM3tOHwBCi2h__AOXlyQ"
            }
          }
        },
        {
          "range": {
            "data_start_time": {
              "lte": 1632441600000
            }
          }
        }
      ]
    }
  }
}

응답 예시

{
  "took": 48,
  "timed_out": false,
  "total": 28,
  "updated": 0,
  "created": 0,
  "deleted": 28,
  "batches": 1,
  "version_conflicts": 0,
  "noops": 0,
  "retries": {
    "bulk": 0,
    "search": 0
  },
  "throttled_millis": 0,
  "requests_per_second": -1,
  "throttled_until_millis": 0,
  "failures": []
}

모니터 생성

Introduced 1.0 {: .label .label-purple }

탐지기에 대한 알림을 설정하기 위해 모니터를 생성해요.

요청 예시

POST _plugins/_alerting/monitors
{
  "type": "monitor",
  "name": "test-monitor",
  "enabled": true,
  "schedule": {
    "period": {
      "interval": 20,
      "unit": "MINUTES"
    }
  },
  "inputs": [
    {
      "search": {
        "indices": [
          ".opensearch-anomaly-results*"
        ],
        "query": {
          "size": 1,
          "query": {
            "bool": {
              "filter": [
                {
                  "range": {
                    "data_end_time": {
                      "from": "{{period_end}}||-20m",
                      "to": "{{period_end}}",
                      "include_lower": true,
                      "include_upper": true,
                      "boost": 1
                    }
                  }
                },
                {
                  "term": {
                    "detector_id": {
                      "value": "m4ccEnIBTXsGi3mvMt9p",
                      "boost": 1
                    }
                  }
                }
              ],
              "adjust_pure_negative": true,
              "boost": 1
            }
          },
          "sort": [
            {
              "anomaly_grade": {
                "order": "desc"
              }
            },
            {
              "confidence": {
                "order": "desc"
              }
            }
          ],
          "aggregations": {
            "max_anomaly_grade": {
              "max": {
                "field": "anomaly_grade"
              }
            }
          }
        }
      }
    }
  ],
  "triggers": [
    {
      "name": "test-trigger",
      "severity": "1",
      "condition": {
        "script": {
          "source": "return ctx.results[0].aggregations.max_anomaly_grade.value != null && ctx.results[0].aggregations.max_anomaly_grade.value > 0.7 && ctx.results[0].hits.hits[0]._source.confidence > 0.7",
          "lang": "painless"
        }
      },
      "actions": [
        {
          "name": "test-action",
          "destination_id": "ld7912sBlQ5JUWWFThoW",
          "message_template": {
            "source": "This is my message body."
          },
          "throttle_enabled": false,
          "subject_template": {
            "source": "TheSubject"
          }
        }
      ]
    }
  ]
}

응답 예시

{
  "_id": "OClTEnIBmSf7y6LP11Jz",
  "_version": 1,
  "_seq_no": 10,
  "_primary_term": 1,
  "monitor": {
    "type": "monitor",
    "schema_version": 1,
    "name": "test-monitor",
    "enabled": true,
    "enabled_time": 1589445384043,
    "schedule": {
      "period": {
        "interval": 20,
        "unit": "MINUTES"
      }
    },
    "inputs": [
      {
        "search": {
          "indices": [
            ".opensearch-anomaly-results*"
          ],
          "query": {
            "size": 1,
            "query": {
              "bool": {
                "filter": [
                  {
                    "range": {
                      "data_end_time": {
                        "from": "{{period_end}}||-20m",
                        "to": "{{period_end}}",
                        "include_lower": true,
                        "include_upper": true,
                        "boost": 1
                      }
                    }
                  },
                  {
                    "term": {
                      "detector_id": {
                        "value": "m4ccEnIBTXsGi3mvMt9p",
                        "boost": 1
                      }
                    }
                  }
                ],
                "adjust_pure_negative": true,
                "boost": 1
              }
            },
            "sort": [
              {
                "anomaly_grade": {
                  "order": "desc"
                }
              },
              {
                "confidence": {
                  "order": "desc"
                }
              }
            ],
            "aggregations": {
              "max_anomaly_grade": {
                "max": {
                  "field": "anomaly_grade"
                }
              }
            }
          }
        }
      }
    ],
    "triggers": [
      {
        "id": "NilTEnIBmSf7y6LP11Jr",
        "name": "test-trigger",
        "severity": "1",
        "condition": {
          "script": {
            "source": "return ctx.results[0].aggregations.max_anomaly_grade.value != null && ctx.results[0].aggregations.max_anomaly_grade.value > 0.7 && ctx.results[0].hits.hits[0]._source.confidence > 0.7",
            "lang": "painless"
          }
        },
        "actions": [
          {
            "id": "NylTEnIBmSf7y6LP11Jr",
            "name": "test-action",
            "destination_id": "ld7912sBlQ5JUWWFThoW",
            "message_template": {
              "source": "This is my message body.",
              "lang": "mustache"
            },
            "throttle_enabled": false,
            "subject_template": {
              "source": "TheSubject",
              "lang": "mustache"
            }
          }
        ]
      }
    ],
    "last_update_time": 1589445384043
  }
}

더 알아보기 (Learn more)