Configurar as recomendações dos hubs FinOps

Os hubs FinOps recolhem recomendações de múltiplas fontes e integram-nas no conjunto de dados gerido por Recomendações , juntamente com recomendações de reservas provenientes das exportações de Gestão de Custos. As recomendações são obtidas do Azure Resource Graph, utilizando um conjunto configurável de consultas que recolhem recomendações do Assistente do Azure e identificam vários cenários de otimização com base na configuração dos recursos. As consultas são geridas em ficheiros JSON simples no armazenamento, facilitando adicionar as suas próprias recomendações personalizadas ao carregar os ficheiros de consulta para o armazenamento central.


Pré-requisitos

Antes de começar, você deve ter:

  • Implantada uma instância de hub FinOps.
  • Atribua a função Leitor à identidade gerida do Data Factory nos grupos de gestão ou subscrições que pretende consultar. Esta permissão deve ser configurada separadamente da implementação do hub FinOps.

Como são processadas as recomendações

O pipeline de recomendações corre diariamente e processa ficheiros de consulta armazenados na pasta config/queries no armazenamento do hub:

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

As recomendações dos hubs são combinadas com recomendações de reservas das exportações de Gestão de Custos no mesmo conjunto de dados gerido por Recomendações. Pode distinguir entre fontes usando a x_SourceType coluna.


Recomendações incorporadas

Os hubs FinOps incluem as seguintes recomendações. A maioria está ativada por defeito. Recomendações opcionais podem gerar ruído para organizações onde não se aplicam e podem ser ativadas durante a implementação através do parâmetro modelo especificado.

Computação

Databases

Gestão e Governação

Rede

Armazenamento

Web

Para desativar uma recomendação padrão específica, apague o ficheiro de consulta da pasta config/queries no armazenamento do hub. O pipeline processa apenas os ficheiros de consulta existentes.


Adicione recomendações personalizadas

Pode adicionar recomendações personalizadas carregando ficheiros de consulta para a pasta config/queries no armazenamento do hub. O pipeline deteta automaticamente novos ficheiros de consulta na execução diária seguinte.

Convenção de nomenclatura de arquivos

Atribua nomes aos ficheiros de consulta utilizando o formato {dataset}-{provider}-{type}.json:

  • Conjunto de dados — O conjunto de dados alvo (por exemplo, Recommendations).
  • Fornecedor — O fornecedor de onde provêm os 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 ficheiro de consulta

Cada ficheiro de consulta é um ficheiro 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"
}
Propriedade Description
dataset Deve ser "Recommendations".
provider Nome do fornecedor (por exemplo, "Microsoft").
query A consulta do Azure Resource Graph a executar, numa única linha.
queryEngine Deve ser "ResourceGraph".
scope Âmbito da consulta. Use "Tenant" para consultar todas as subscrições a que a identidade gerida pela Data Factory tem acesso dentro do tenant. As consultas entre locatários não são suportadas, mas os recursos delegados através do Azure Lighthouse são incluídos nas consultas ao nível do locatário.
source Nome descritivo para a fonte da recomendação (por exemplo, "Assistente do Azure" ou "FinOps hubs").
type Identificador programático para este tipo de recomendação. Use um {provider}-{name} formato apenas com caracteres alfanuméricos e hífens (por exemplo, "Contoso-IdleCosmosDB"). Este valor é usado como parte do nome do ficheiro de saída.
version Versão do esquema. Utilize "1.0".

Colunas de saída obrigatórias

A sua consulta deve devolver as seguintes colunas:

Coluna Description
ResourceId Identificador do recurso (em minúsculas).
ResourceName Nome do recurso (minúscula).
SubAccountId ID da Subscrição.
SubAccountName Nome da subscrição. Associe-se a resourcecontainers para preencher isto.
x_RecommendationCategory Categoria de recomendação. Use "Cost", "HighAvailability", "OperationalExcellence", "Performance", ou "Security".
x_RecommendationDate Data de recomendação (usar now() para consultas num ponto no tempo).
x_RecommendationDescription Breve descrição do problema.
x_RecommendationDetails String JSON com propriedades adicionais. Inclua x_RecommendationProvider, x_RecommendationSolution, x_RecommendationTypeId, e x_ResourceType juntamente com quaisquer propriedades personalizadas específicas da recomendação.
x_RecommendationId Identificador único para a recomendação (por exemplo, ID de recurso + sufixo).
x_ResourceGroupName Nome do grupo de recursos (minúscula).

Dicas para escrever consultas

  • Para preencher o nome da subscrição, junte 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
    
  • Gerar x_RecommendationId combinando o ID do recurso com um sufixo descritivo (por exemplo, strcat(tolower(id), '-idle')).

  • Construa x_RecommendationDetails utilizando tostring(bag_pack(...)) para produzir uma cadeia JSON. O encapsulamento com tostring() é necessário porque o pipeline de dados não consegue serializar objetos dinâmicos para Parquet; o valor tem de ser uma string. Também podes usar strcat() para construir uma string JSON manualmente, mas bag_pack() é recomendado porque gere o escape automaticamente.

  • Inclua x_RecommendationTypeId como um GUID estável para identificar de forma única o tipo de recomendação entre execuções.

Para exemplos, reveja os ficheiros de consulta incorporados no código-fonte do toolkit FinOps.


Enviar comentários

Informe-nos sobre o nosso desempenho com uma avaliação rápida. Usamos essas análises para melhorar e expandir as ferramentas e os recursos do FinOps.

Se você está procurando algo específico, vote em uma ideia existente ou crie uma nova. Partilhe ideias com outras pessoas para obter mais votos. Focamo-nos nas ideias mais votadas.