Ponto final dos relatórios de utilização

Os pontos finais dos relatórios de utilização são usados para analisar os padrões de utilização das instâncias do AWS EC2. A Análise de Utilização utiliza dados do Cloudwatch do AWS, que apresenta detalhes ao nível da instância, tais como a utilização média da CPU (percentagem), largura de banda e E/S do disco. A análise de utilização é excelente para visualizar a elasticidade geral e se suas instâncias precisam de um dimensionamento correto ou precisam ser desativadas.

As métricas de custo disponibilizadas no Utilization Analytics são calculadas em Cloudability usando taxas sob demanda e abrangem apenas a parte de computação da sua fatura (ou seja, as horas de instância faturáveis, mas não a largura de banda, o armazenamento etc.). Dessa forma, eles devem ser usados apenas para tendências, não para relatórios financeiros. Observe que a métrica é chamada de Custo (estimado).

Observe que, para que o Utilization Analytics possa acessar os dados de utilização, é necessário ter credenciais avançadas nas respectivas contas de membros, o que colocará em prática as permissões IAM adequadas.

A filtragem, a classificação e a seleção de medidas (dimensões e métricas) flexíveis estão disponíveis para criar resultados que atendam a necessidades específicas de relatórios. Como diretriz recomendada, há um máximo de 15 dimensões e 10 métricas que podem ser adicionadas a uma chamada de API. Por padrão, os resultados são retornados em JSON. Para obter resultados no formato CSV, certifique-se de definir o cabeçalho Accept com o valor text/csv. Observe que a paginação é implementada quando os resultados excedem 10.000 linhas, conforme descrito abaixo. Exemplos de chamadas de relatório são fornecidos na parte inferior deste documento.

Ponto final do relatório de utilização

  • /reporting/reports/util para listar os relatórios de utilização atuais
  • /reporting/util/run para executar relatórios de utilização
  • /reporting/util/measures para listar as medidas de relatórios de utilização disponíveis
  • /reporting/util/filters para listar os operadores de comparação disponíveis usados nos filtros
  • /reporting/util/enqueue para enfileirar relatórios utilitários
  • /reporting/reports/:id/state para verificar o estado dos relatórios enfileirados
  • /reporting/reports/:id/results para recuperar relatórios concluídos na fila
Observação: o ponto de extremidade reporting/ util/ enqueue está limitado a 20 solicitações por usuário. A "resposta 429" será retornada se uma nova solicitação for recebida nesse limite.

O objeto Relatório de utilização

  • results (array) - lista de objetos de linha de utilização, cada linha composta de dimensões e métricas relatadas
  • meta (objeto) - objeto que contém informações meta sobre o relatório que foi executado
    • dates (objeto) - cadeias de datas iniciais e finais que marcam o intervalo de datas do relatório
    • filters (array) - lista de filtros aplicados ao relatório com informações detalhadas
    • metrics (matriz) - lista de métricas retornadas no relatório com informações detalhadas
    • dimensions (matriz) - lista de dimensões retornadas no relatório com informações detalhadas
    • agregados (matriz) - lista de métricas agregadas com informações detalhadas para o relatório
    • offset (número) - Posição em que os resultados devem começar. O padrão é 0
    • limit (number) - Número máximo de linhas de utilização que podem ser retornadas
    • total_results (number) - Total de linhas de utilização retornadas para o relatório executado

Exemplo de objeto de relatório de utilização (exemplo de revisão)

{
  "results": [
    {
      "instance_identifier": "i-1237aa0e1587577f5",
      "max_cpu_utilization": "0.91925"
    },
    {
      "instance_identifier": "i-0007aa0e1587572c7",
      "max_cpu_utilization": "0.179183"
    }
  ],
  "meta": {
    "dates": {
      "start": "2022-08-30T00:00:00Z",
      "end": "2022-08-30T00:00:00Z"
    },
    "filters": [],
    "metrics": [
      {
        "name": "max_cpu_utilization",
        "label": "CPU Utilization (Max)",
        "description": "The maximum percentage of CPU Utilization...
        "data_type": "percentage",
        "type": "metric",
        "group": {
          "ID": 9,
          "Key": "compute",
          "Name": "Compute"
        },
        "sub_group": {
          "ID": 12,
          "Key": "processing",
          "Name": "Processing"
        }
      }
    ],
    "dimensions": [
      {
        "name": "instance_identifier",
        "label": "Instance ID",
        "description": "The ID associated with a particular AWS instance.",
        "data_type": "string",
        "type": "dimension",
        "group": {
          "ID": 9,
          "Key": "compute",
          "Name": "Compute"
        },
        "sub_group": {
          "ID": 1,
          "Key": "common",
          "Name": "Common"
        }
      }
    ],
    "aggregates": [
      {
        "name": "max_cpu_utilization",
        "label": "CPU Utilization (Max)",
        "description": "The maximum percentage of CPU Utilization...",
        "data_type": "percentage",
        "type": "metric",
        "value": "0.91925"
      }
    ]
  },
  "offset": 0,
  "limit": 2,
  "total_results": 2
}

Listar relatórios de utilização atuais

Recupera uma lista de relatórios de utilização pertencentes ou compartilhados com o usuário ou a organização.

curl 'https://api.cloudability.com/v3/reporting/reports/util' -u '[auth_token]:'

Exemplo de resposta

[
 {
  "id": 1,
  "author": {
  "id": 12345,
  "safe_name": "Test User"
  },
  "category": "Utilization",
  "custom": true,
  "description": "The number of instances running during each hour of the day over the last 7 days.",
  "dimensions": [
  {
  "name": "date",
  "label": "Date",
  "description": "The calendar date (e.g. YYYY-MM-DD).",
  "data_type": "date",
  "type": "dimension",
  "group": {
  "id": 9,
  "key": "compute",
  "name": "Compute"
  },
  "sub_group": {
  "id": 2,
  "key": "time",
  "name": "Time"
  }
   },
  {
  "name": "hour",
  "label": "Hour",
  "description": "The numeric hour of the day (e.g. 1pm => 13).",
  "data_type": "integer",
  "type": "dimension",
  "group": {
  "id": 9,
  "key": "compute",
  "name": "Compute"
  },
  "sub_group": {
  "id": 2,
  "key": "time",
  "name": "Time"
  }
   }
  ],
 "end_date": "23:59:59",
 "filters": [
 {
  "comparator": "==",
  "measure": {
  "name": "date",
  "label": "Date",
  "description": "The calendar date (e.g. YYYY-MM-DD).",
  "data_type": "date",
  "type": "dimension",
  "group": {
  "id": 9,
  "key": "compute",
  "name": "Compute"
  },
  "sub_group": {
  "id": 2,
  "key": "time",
  "name": "Time"
  }
   },
  "value": "2019-06-24"
  }
   ],
  "metrics": [
 {
  "name": "running_instances",
  "label": "Unique Instance Count",
  "description": "The total number of unique instances in a running state during a given time period.",
  "data_type": "integer",
  "type": "metric",
  "group": {
  "id": 9,
  "key": "compute",
  "name": "Compute"
  },
  "sub_group": {
  "id": 8,
  "key": "usage",
  "name": "Usage"
  }
   }
    ],
  "order": "asc",
  "owned_by_user": false,
  "shared_with_organization": false,
  "permission": {
  "actions": [
  "read"
  ]
   },
 "report_dimension_links": [],
 "secondary_end_date": null,
 "secondary_start_date": null,
 "shared": true,
 "shares": [],
 "sort_by": "date",
 "star": false,
 "start_date": "7 days ago at 00:00:00",
 "subscriptions": [],
 "title": "Elasticity - Running Instances per Hour"
  },
    ]

Obtenção de uma lista de medidas disponíveis

Recupera uma lista de medidas reconhecidas pelo servidor. As medidas incluem dimensões e métricas que podem ser usadas em relatórios. Basta executar um GET no ponto de extremidade das medidas.

curl ‘https://api.cloudability.com/v3/reporting/util/measures’ -u ‘[auth_token]:’

Exemplo de resposta

[
  {
    "name": "avg_cpu_utilization",
    "label": "CPU Utilization (Avg)",
    "description": "The average percentage of CPU Utilization...",
    "type": "metric",
    "group": {
      "id": 9,
      "key": "compute",
      "name": "Compute"
    },
    "sub_group": {
      "id": 12,
      "key": "processing",
      "name": "Processing"
    }
  },
  {
    "name": "utilization_hours",
    "label": "Utilization Hours",
    "description": "The total number of usage hours on an instance ...",
    "data_type": "integer",
    "type": "metric",
    "group": {
      "id": 9,
      "key": "compute",
      "name": "Compute"
    },
    "sub_group": {
      "id": 8,
      "key": "usage",
      "name": "Usage"
    }
  },
]

Obter uma lista de operadores de filtro disponíveis

Recupere uma lista de operadores de filtro reconhecidos para solicitar dados

curl ‘https://api.cloudability.com/v3/reporting/util/filters’ -u ‘[auth_token]:’

Exemplo de resposta

[
  "<=",   # less than or equals
  "[]=",  # in*
  ">="    # greater than or equals
  "<",    # less than
  "=@",   # contains
  "^=",   # matches
  "===",  # strictly equals*
  "==",   # equals
  "!=@",  # does not contain
  "!=",   # not equals
  "!==",  # strictly not equals*
  ">",    # greater than
  "!^=",  # does not match
  "!$=",  #does not end with
  "[]!=", # not in*
  "$=",   #end with
]	

* Observe que esses operadores estão disponíveis somente por meio da API

Executar um relatório de utilização

Parâmetros de solicitação

Observação: Observação sobre os parâmetros de data de início/fim: Além das cadeias de datas estáticas no formato AAAA-MM-DD, esses pontos de extremidade também suportam datas relativas, como "início desta semana", "fim desta semana" Todas as cadeias de datas relativas compatíveis estão listadas abaixo desta tabela. Por exemplo, "7 days ago" na interface do usuário usaria uma data de início de "7 days ago at 00:00:00" e uma data de término de "today at 00:00:00" na API. Observe também que é importante que as cadeias de datas relativas abaixo codifiquem corretamente os espaços na cadeia usando um símbolo "+" ou "%20". Exemplo, "end+of+last+month" (fim do último mês). Se o caso de uso for compatível com a interface do usuário, ele também será compatível com a API
Argumento Descrição
start_date (obrigatório) A data de início do relatório de utilização. Formato: AAAA-MM-DD
end_date (obrigatório) A data final do relatório de utilização. Formato: AAAA-MM-DD
dimensões (obrigatório) Lista delimitada por vírgulas de dimensões a serem incluídas no relatório. Exemplo: dimensions=date,instance_size
métricas (obrigatório) Lista delimitada por vírgulas de métricas a serem incluídas no relatório. Exemplo: metrics=running_instances,utilization_hours
filtros Filtro a ser aplicado ao relatório. Os filtros podem ser baseados em dimensões ou métricas. Observação: o parâmetro de consulta filters serve apenas para um único filtro. Use vários parâmetros de consulta para vários filtros. Exemplo: filters=instance_size=@10xlarge

Importante: o operador de comparação geralmente deve ser codificado em URL (como acima) para evitar problemas com caracteres especiais

ordenar Lista de medidas delimitada por vírgulas, cada uma anexada com ASC ou DESC para indicar a ordem (a ordem é obrigatória). Exemplo: sort=avg_cpu_utilizationASC,regionDESC
limite O número máximo de linhas a serem retornadas. Exemplo: limit=50
offset Posição para iniciar os resultados. Exemplo: offset=100
diagrama Formatar os dados da linha para fins de gráfico (com base em datas). Exemplo: chart=1
ID da visualização Se omitido, a visualização padrão do usuário será aplicada. Usuários sem restrições podem definir view_id=0 para remover a visualização.

Observação: cadeias de datas relativas/dinâmicas compatíveis com o endpoint de relatório de custos v3 :

Cadeias de datas relativas/dinâmicas
"7 dias atrás, às 00:00:00"
"8 dias atrás, às 00:00:00"
"10 dias atrás, às 00:00:00"
"14 dias atrás, às 00:00:00"
"30 dias atrás, às 00:00:00"
"31 dias atrás, às 00:00:00"
"60 dias atrás, às 00:00:00"
"90 dias atrás, às 00:00:00"
"início do último dia"
"início da semana passada"
"início do mês passado", "0 do mês passado"
"início do último trimestre"
"início da última metade"
"início do ano passado"
"beginning of day" (início do dia), "beginning of this day" (início deste dia)
"início da semana", "início desta semana"
"início do mês", "início deste mês", "1º"
"início do período", "início deste período"
"início do trimestre", "início deste trimestre"
"início da metade", "início desta metade"
"início do ano", "início deste ano"
"início do dia seguinte"
"início da próxima semana"
"início do próximo mês"
"início do próximo trimestre"
"início da próxima metade"
"início do próximo ano"
"hoje às 00:00:00"
"00:00:00"
"23:59:59"
"ontem às 00:00:00"
"ontem às 23:59:59"
"fim do último dia"
"final da semana passada"
"final do mês passado"
"final do último trimestre"
"fim da última metade"
"final do ano passado"
"final da semana passada até a data"
"final do último mês até a data"
"final do último trimestre até a data"
"final do ano passado até a data"
"end of day", "end of this day" (fim do dia)
"final da semana", "final desta semana"
"fim do mês", "fim deste mês"
"final do trimestre", "final deste trimestre"
"end of half" (fim da metade), "end of this half" (fim desta metade)
"final do ano", "final deste ano"
"final do dia seguinte"
"final da próxima semana"
"final do próximo mês"
"final do próximo trimestre"
"fim da próxima metade"
"final do próximo ano"

Manuseio de paginação

Para dar suporte ao desempenho da API, a paginação é implementada quando o número de linhas em um relatório retornado excede 10.000. Isso geralmente ocorre quando os usuários adicionam várias dimensões a um relatório com alta cardinalidade, como resource_identifier. O total_results com um valor de 10.000 e a presença de um objeto de paginação indicam que a paginação ocorreu.

Exemplo de objeto de paginação:

"pagination": {
  "next": "38bc18d0",
  "previous": "1d93c71e"

Para navegar para trás e para frente entre as páginas de um relatório, adicione um parâmetro de consulta de token ao final do relatório URL com o valor de token aplicável (por exemplo, token=38bc18d0 ).

Observação : Você pode aumentar a paginação automática para 64.000 linhas definindo limit=0 nos parâmetros da solicitação

Executar um relatório de utilização típico - tendências de utilização de longo prazo

curl ‘https://api.cloudability.com/v3/reporting/util/run?start_date=2022-01-01&end_date=2022-06-30&dimensions=date&metrics=total_bandwidth,avg_cpu_utilization&sort=dateASC&view_id=0’ -u ‘[auth_token]:’"

Exemplo de resposta (subconjunto dos resultados mostrados)

{
  "results": [
    {
      "avg_cpu_utilization": "0.84463",
      "estimated_cost": "393.12",
      "instance_identifier": "i-0a70f28b01f652f14",
      "instance_name": "common-operations-ondemand-r5-large-green-Node",
      "instance_size": "r5.large",
      "total_bandwidth": "2019199735862",
      "utilization_hours": "24",
      "vendor_account_name": "My Account Name"
    },
    {
      "avg_cpu_utilization": "0.830585",
      "estimated_cost": "1071.2",
      "instance_identifier": "i-0278b62c3679c7286",
      "instance_name": "production-operations-spot-16cpu-64gb-green-Node",
      "instance_size": "m5ad.4xlarge",
      "total_bandwidth": "864959230667",
      "utilization_hours": "9",
      "vendor_account_name": "My Account Name"
    }
  ],
  "meta": {
    "dates": {
      "start": "2022-08-30T00:00:00Z",
      "end": "2022-08-30T00:00:00Z"
    },
    "filters": [],
    "metrics": [
      {
        "name": "avg_cpu_utilization",
        "label": "CPU Utilization (Avg)",
        "description": "The average percentage of CPU Utilization...",
        "data_type": "percentage",
        "type": "metric",
        "group": {
          "ID": 9,
          "Key": "compute",
          "Name": "Compute"
        },
        "sub_group": {
          "ID": 12,
          "Key": "processing",
          "Name": "Processing"
        }
      }
    ],
    "dimensions": [
      {
        "name": "instance_identifier",
        "label": "Instance ID",
        "description": "The ID associated with a particular AWS instance.",
        "data_type": "string",
        "type": "dimension",
        "group": {
          "ID": 9,
          "Key": "compute",
          "Name": "Compute"
        },
        "sub_group": {
          "ID": 1,
          "Key": "common",
          "Name": "Common"
        }
      }
    ],
    "aggregates": [
      {
        "name": "avg_cpu_utilization",
        "label": "CPU Utilization (Avg)",
        "description": "The average percentage of CPU Utilization. For EC2, this is the average percentage of allocated EC2 compute units in use for an instance.",
        "data_type": "percentage",
        "type": "metric",
        "value": "0.840516"
      }
    ]
  },
  "offset": 0,
  "pagination": {
    "next": "02f296f8"
  },
  "limit": 2,
  "total_results": 2
}

Gerar um relatório de dados de utilização e recuperar os resultados posteriormente

Essa opção é excelente para relatórios que levam mais tempo para retornar (devido à alta cardinalidade ou ao período de tempo), acionando a geração do relatório e recuperando os resultados posteriormente. O ponto final do fluxo de relatório assíncrono usa os mesmos parâmetros do relatório de utilização síncrona, mas, em vez de aguardar e retornar o conteúdo do relatório, retorna um token de solicitação. O estado atual do processamento é recuperado por meio da solicitação do recurso de estado para o token fornecido. Quando o estado é dado como "concluído", o conteúdo do relatório pode ser recuperado solicitando o recurso de resultados para o token. Um exemplo do fluxo de dados completo segue a descrição do recurso de resultados.

curl ‘https://api.cloudability.com/v3/reporting/util/enqueue?start_date=2022-01-01&end_date=2022-06-30&dimensions=date&metrics=total_bandwidth,avg_cpu_utilization&sort=dateASC&view_id=0’ -u ‘[auth_token]:’
Ao gerar um relatório, os usuários podem decidir se as colunas exportadas do Mapeamento de Negócios devem usar o ID do Mapeamento de Negócios ou o Nome do Mapeamento como cabeçalho da coluna, usando a opção "useDimensionNames" (verdadeiro/falso) na solicitação:
curl ‘https://api.cloudability.com/v3/reporting/util/enqueue?start_date=2022-01-01&end_date=2022-06-30&dimensions=date&metrics=total_bandwidth,avg_cpu_utilization&sort=dateASC&view_id=0&useDimensionNames=true' -u ‘[auth_token]:’

Exemplo de resposta

{"id":31272850}

Consultar o estado de um relatório assíncrono

Os estados válidos de um relatório assíncrono incluem: enfileirado, em execução, com erro e concluído. O estado pode ser consultado com a seguinte chamada de API (substitua :id pelo ID do relatório, conforme retornado da chamada enqueue)

curl https://api.cloudability.com/v3/reporting/reports/:id/state -u ‘[auth_token]:’

Exemplo de resposta

{"status":"running"}

Recuperar um relatório gerado anteriormente pelo Enqueue

Os relatórios que têm um estado de concluído podem ser recuperados. Isso retorna um objeto de relatório de utilização padrão

curl ‘https://api.cloudability.com/v3/reporting/reports/:id/results’-u ‘[auth_token]:’]"

Observação importante sobre paginação: Os relatórios enfileirados implementam a paginação de maneira semelhante aos relatórios de utilização síncrona. A única diferença é que as páginas são dimensionadas para 30.000 linhas em vez de 10.000. Isso significa que os relatórios enfileirados não acionarão a paginação até que a contagem de linhas ultrapasse 30.000 linhas.

Lista de exemplos de relatórios

Abaixo estão alguns exemplos de relatórios que podem ajudá-lo com o uso da API de relatórios de utilização.

Relatório de utilização com datas relativas

curl ‘https://api.cloudability.com/v3/reporting/util/run?start_date=0+of+last+month&end_date=end+of+last+month&dimensions=date&metrics=total_bandwidth,avg_cpu_utilization&sort=dateASC&view_id=0’ -u ‘[auth_token]:’

Tendências de uso do tipo de instância, retornadas por meio de CSV

 curl -H ‘Accept: text/csv’ ‘https://api.cloudability.com/v3/reporting/util/run?start_date=2022-02-01&end_date=2022-02-28&dimensions=instance_size&metrics=utilization_hours,running_instances&sort=utilization_hoursDESC’ -u ‘[auth_token]:’

Instâncias otimizadas de computação subutilizadas (relatório com várias dimensões e filtros)

curl 'https://api.cloudability.com/v3/reporting/util/run?start_date=2022-02-01&end_date=2022-02-28&dimensions=instance_size&metrics=utilization_hours%2Crunning_instances&sort=utilization_hoursDESC' -u '[auth_token]:'

Relatório de utilização típica (relatório de dias desde o lançamento)


curl ‘https://api.cloudability.com/v3/reporting/util/run?dimensions=launch_date&end_date=2022-08-30&filters=product_name%3D%3DAmazon%20Elastic%20Compute%20Cloud&limit=2&metrics=avg_cpu_utilization&relativePeriods=custom&sort=launch_dateDESC&start_date=2022-08-22&viewId=0’ -u ‘[auth_token]:’