Configurar recomendações dos hubs do FinOps

Os hubs FinOps coletam recomendações de várias fontes e as ingerem no conjunto de dados gerenciado de Recomendações , juntamente com as recomendações de reserva das exportações de Gerenciamento de Custos. As recomendações são obtidas do Azure Resource Graph usando um conjunto configurável de consultas que recuperam recomendações do Assistente do Azure e identificam diversos cenários de otimização com base na configuração dos recursos. As consultas são gerenciadas em arquivos JSON simples no armazenamento, facilitando a adição de suas próprias recomendações personalizadas carregando arquivos de consulta no armazenamento do hub.


Pré-requisitos

Antes de começar, você precisa ter:

  • Implantou uma instância do hub FinOps.
  • Atribuiu a função Leitor à identidade gerenciada do Data Factory nos grupos de gerenciamento ou assinaturas que você deseja consultar. Essa permissão deve ser configurada separadamente da implantação do hub FinOps.

Como as recomendações são processadas

O pipeline de recomendações é executado diariamente e processa arquivos de consulta armazenados na pasta de configuração/consultas no armazenamento do hub:

  1. O acionador queries_DailySchedule é executado uma vez por dia.
  2. O pipeline queries_ExecuteETL percorre todos os arquivos de consulta na pasta de armazenamento config/queries.
  3. O pipeline queries_ETL_ingestion executa cada consulta no Azure Resource Graph, remove resultados duplicados e salva os dados em formato parquet na pasta ingestion/Recommendations.
  4. Se estiver usando Azure Data Explorer, os dados serão ingeridos na tabela Recommendations_raw e transformados usando a função Recommendations_transform_v1_2().

As recomendações de Hubs são combinadas com as recomendações de reserva das exportações do Gerenciamento de Custos no mesmo conjunto de dados gerenciado Recommendations. Você pode distinguir entre fontes usando a x_SourceType coluna.


Recomendações integradas

Os hubs FinOps incluem as recomendações a seguir. A maioria está habilitada por padrão. Recomendações opcionais podem gerar ruído para organizações em que elas não se aplicam e podem ser habilitadas durante a implantação por meio do parâmetro de modelo especificado.

Computação

Databases

Gerenciamento e Governança

Rede

Armazenamento

web

Para desabilitar uma recomendação padrão específica, exclua seu arquivo de consulta da pasta de configuração/consultas no armazenamento do hub. O pipeline processa apenas os arquivos de consulta presentes.


Adicionar recomendações personalizadas

Você pode adicionar recomendações personalizadas carregando arquivos de consulta na pasta de configuração/consultas no armazenamento do hub. O pipeline detecta automaticamente novos arquivos de consulta na próxima execução diária.

Convenção de nomenclatura de arquivo

Nomeie arquivos de consulta usando o {dataset}-{provider}-{type}.json formato:

  • Conjunto de dados — o conjunto de dados de destino (por exemplo, Recommendations).
  • Provedor — O provedor dos dados do serviço (por exemplo, Microsoft, Contoso).
  • Tipo — O identificador de tipo de recomendação usando PascalCase (por exemplo, StoppedVMs, ). IdleCosmosDB

Por exemplo: Recommendations-Contoso-IdleCosmosDB.json

Formato de arquivo de consulta

Cada arquivo de consulta é um arquivo JSON com as seguintes propriedades:

{
  "dataset": "Recommendations",
  "provider": "Microsoft",
  "query": "<Azure Resource Graph query>",
  "queryEngine": "ResourceGraph",
  "scope": "Tenant",
  "source": "<descriptive source name>",
  "type": "<unique type identifier>",
  "version": "1.0"
}
Property Descrição
dataset Deve ser "Recommendations".
provider Nome do provedor (por exemplo, "Microsoft").
query A consulta do Azure Resource Graph a ser executada em uma única linha.
queryEngine Deve ser "ResourceGraph".
scope Escopo da consulta. Use "Tenant" para consultar todas as assinaturas às que a identidade gerenciada do Data Factory tem acesso dentro do locatário. Não há suporte para consultas entre locatários, mas os recursos delegados por meio de Azure Lighthouse são incluídos em consultas de escopo de locatário.
source Nome descritivo para a origem da recomendação (por exemplo, "Assistente do Azure" ou "FinOps hubs").
type Identificador programático para esse tipo de recomendação. Use um {provider}-{name} formato com caracteres alfanuméricos e hifens somente (por exemplo, "Contoso-IdleCosmosDB"). Esse valor é usado como parte do nome do arquivo de saída.
version Versão do esquema. Use "1.0".

Colunas de saída necessárias

Sua consulta deve retornar as seguintes colunas:

Coluna Descrição
ResourceId ID do recurso (em minúsculas).
ResourceName Nome do recurso (minúscula).
SubAccountId ID da assinatura.
SubAccountName Nome da assinatura. resourcecontainers Junte-se para preencher isso.
x_RecommendationCategory Categoria de recomendação. Usar "Cost", "HighAvailability", "OperationalExcellence", "Performance"ou "Security".
x_RecommendationDate Data da recomendação (uso now() para consultas pontuais).
x_RecommendationDescription Breve descrição do problema.
x_RecommendationDetails Cadeia de caracteres JSON com propriedades adicionais. Inclua x_RecommendationProvider, x_RecommendationSolution, x_RecommendationTypeIde x_ResourceType juntamente com quaisquer propriedades personalizadas específicas para a recomendação.
x_RecommendationId Identificador exclusivo para a recomendação (por exemplo, ID do recurso + sufixo).
x_ResourceGroupName Nome do grupo de recursos (minúsculas).

Dicas para escrever consultas

  • Para preencher o nome da assinatura, adicione resourcecontainers no final da sua consulta:

    | join kind=leftouter (
        resourcecontainers
        | where type == 'microsoft.resources/subscriptions'
        | project SubAccountName=name, SubAccountId=subscriptionId
    ) on SubAccountId
    | project-away SubAccountId1
    
  • Gere x_RecommendationId combinando a ID do recurso com um sufixo descritivo (por exemplo, strcat(tolower(id), '-idle')).

  • Crie x_RecommendationDetails usando tostring(bag_pack(...)) para produzir uma cadeia de caracteres JSON. Encapsular com tostring() é necessário porque o pipeline de dados não pode serializar objetos dinâmicos no formato Parquet; o valor deve ser uma cadeia de caracteres. Você também pode usar strcat() para criar uma cadeia de caracteres JSON manualmente, mas bag_pack() é recomendável porque ela manipula o escape automaticamente.

  • Inclua x_RecommendationTypeId como um GUID estável para identificar de forma exclusiva o tipo de recomendação em diferentes execuções.

Para obter exemplos, examine os arquivos de consulta internos no código-fonte do kit de ferramentas FinOps.


Fornecer comentários

Deixe-nos saber como estamos indo com uma avaliação rápida. Usamos essas revisões para melhorar e expandir ferramentas e recursos do FinOps.

Se você estiver procurando algo específico, vote em um existente ou crie uma ideia. Compartilhe ideias com outras pessoas para obter mais votos. Nós nos concentramos nas ideias com mais votos.