:doc:`PrometheusService <../../amp>` / Client / put_anomaly_detector

********************
put_anomaly_detector
********************



.. py:method:: PrometheusService.Client.put_anomaly_detector(**kwargs)

  

  When you call ``PutAnomalyDetector``, the operation creates a new anomaly detector if one doesn't exist, or updates an existing one. Each call to this operation triggers a complete retraining of the detector, which includes querying the minimum required samples and backfilling the detector with historical data. This process occurs regardless of whether you're making a minor change like updating the evaluation interval or making more substantial modifications. The operation serves as the single method for creating, updating, and retraining anomaly detectors.

  

  See also: `AWS API Documentation <https://docs.aws.amazon.com/goto/WebAPI/amp-2020-08-01/PutAnomalyDetector>`_  


  **Request Syntax**
  ::

    response = client.put_anomaly_detector(
        workspaceId='string',
        anomalyDetectorId='string',
        evaluationIntervalInSeconds=123,
        missingDataAction={
            'markAsAnomaly': True|False,
            'skip': True|False
        },
        configuration={
            'randomCutForest': {
                'query': 'string',
                'shingleSize': 123,
                'sampleSize': 123,
                'ignoreNearExpectedFromAbove': {
                    'amount': 123.0,
                    'ratio': 123.0
                },
                'ignoreNearExpectedFromBelow': {
                    'amount': 123.0,
                    'ratio': 123.0
                }
            }
        },
        labels={
            'string': 'string'
        },
        clientToken='string'
    )
    
  :type workspaceId: string
  :param workspaceId: **[REQUIRED]** 

    The identifier of the workspace containing the anomaly detector to update.

    

  
  :type anomalyDetectorId: string
  :param anomalyDetectorId: **[REQUIRED]** 

    The identifier of the anomaly detector to update.

    

  
  :type evaluationIntervalInSeconds: integer
  :param evaluationIntervalInSeconds: 

    The frequency, in seconds, at which the anomaly detector evaluates metrics.

    

  
  :type missingDataAction: dict
  :param missingDataAction: 

    Specifies the action to take when data is missing during evaluation.

    .. note::    This is a Tagged Union structure. Only one of the     following top level keys can be set: ``markAsAnomaly``, ``skip``. 

  
    - **markAsAnomaly** *(boolean) --* 

      Marks missing data points as anomalies.

      

    
    - **skip** *(boolean) --* 

      Skips evaluation when data is missing.

      

    
  
  :type configuration: dict
  :param configuration: **[REQUIRED]** 

    The algorithm configuration for the anomaly detector.

    .. note::    This is a Tagged Union structure. Only one of the     following top level keys can be set: ``randomCutForest``. 

  
    - **randomCutForest** *(dict) --* 

      The Random Cut Forest algorithm configuration for anomaly detection.

      

    
      - **query** *(string) --* **[REQUIRED]** 

        The Prometheus query used to retrieve the time-series data for anomaly detection.

         

        .. warning::

           

          Random Cut Forest queries must be wrapped by a supported PromQL aggregation operator. For more information, see `Aggregation operators <https://prometheus.io/docs/prometheus/latest/querying/operators/#aggregation-operators>`__ on the *Prometheus docs* website.

           

          **Supported PromQL aggregation operators**: ``avg``, ``count``, ``group``, ``max``, ``min``, ``quantile``, ``stddev``, ``stdvar``, and ``sum``.

          

        

      
      - **shingleSize** *(integer) --* 

        The number of consecutive data points used to create a shingle for the Random Cut Forest algorithm. The default number is 8 consecutive data points.

        

      
      - **sampleSize** *(integer) --* 

        The number of data points sampled from the input stream for the Random Cut Forest algorithm. The default number is 256 consecutive data points.

        

      
      - **ignoreNearExpectedFromAbove** *(dict) --* 

        Configuration for ignoring values that are near expected values from above during anomaly detection.

        .. note::    This is a Tagged Union structure. Only one of the     following top level keys can be set: ``amount``, ``ratio``. 

      
        - **amount** *(float) --* 

          The absolute amount by which values can differ from expected values before being considered anomalous.

          

        
        - **ratio** *(float) --* 

          The ratio by which values can differ from expected values before being considered anomalous.

          

        
      
      - **ignoreNearExpectedFromBelow** *(dict) --* 

        Configuration for ignoring values that are near expected values from below during anomaly detection.

        .. note::    This is a Tagged Union structure. Only one of the     following top level keys can be set: ``amount``, ``ratio``. 

      
        - **amount** *(float) --* 

          The absolute amount by which values can differ from expected values before being considered anomalous.

          

        
        - **ratio** *(float) --* 

          The ratio by which values can differ from expected values before being considered anomalous.

          

        
      
    
  
  :type labels: dict
  :param labels: 

    The Amazon Managed Service for Prometheus metric labels to associate with the anomaly detector.

    

  
    - *(string) --* 

    
      - *(string) --* 

      


  :type clientToken: string
  :param clientToken: 

    A unique, case-sensitive identifier that you provide to ensure the idempotency of the request.

    This field is autopopulated if not provided.

  
  
  :rtype: dict
  :returns: 
    
    **Response Syntax**

    
    ::

      {
          'anomalyDetectorId': 'string',
          'arn': 'string',
          'status': {
              'statusCode': 'CREATING'|'ACTIVE'|'UPDATING'|'DELETING'|'CREATION_FAILED'|'UPDATE_FAILED'|'DELETION_FAILED',
              'statusReason': 'string'
          },
          'tags': {
              'string': 'string'
          }
      }
      
    **Response Structure**

    

    - *(dict) --* 
      

      - **anomalyDetectorId** *(string) --* 

        The unique identifier of the updated anomaly detector.

        
      

      - **arn** *(string) --* 

        The Amazon Resource Name (ARN) of the updated anomaly detector.

        
      

      - **status** *(dict) --* 

        The status information of the updated anomaly detector.

        
        

        - **statusCode** *(string) --* 

          The status code of the anomaly detector.

          
        

        - **statusReason** *(string) --* 

          A description of the current status of the anomaly detector.

          
    
      

      - **tags** *(dict) --* 

        The tags applied to the updated anomaly detector.

        
        

        - *(string) --* 

          The key of the tag. Must not begin with ``aws:``.

          
          

          - *(string) --* 

            The value of the tag.

            
    
  
  
  **Exceptions**
  
  *   :py:class:`PrometheusService.Client.exceptions.ThrottlingException`

  
  *   :py:class:`PrometheusService.Client.exceptions.ConflictException`

  
  *   :py:class:`PrometheusService.Client.exceptions.ValidationException`

  
  *   :py:class:`PrometheusService.Client.exceptions.AccessDeniedException`

  
  *   :py:class:`PrometheusService.Client.exceptions.InternalServerException`

  
  *   :py:class:`PrometheusService.Client.exceptions.ServiceQuotaExceededException`

  