Skonfiguruj zalecenia dotyczące hubów FinOps

Centra FinOps zbierają rekomendacje z wielu źródeł i importują je do zarządzanego zestawu danych Recommendations wraz z rekomendacjami dotyczącymi rezerwacji z eksportów rozwiązania Cost Management. Zalecenia pochodzą z Azure Resource Graph przy użyciu konfigurowalnego zestawu zapytań, które ściągają zalecenia Azure Advisor i identyfikują różne scenariusze optymalizacji na podstawie konfiguracji zasobów. Zapytania są zarządzane w prostych plikach JSON w magazynie, co ułatwia dodawanie własnych niestandardowych zaleceń przez przekazywanie plików zapytań do magazynu centrum.


Wymagania wstępne

Przed rozpoczęciem musisz mieć następujące elementy:

  • Wdrożono instancję centrum zarządzania FinOps.
  • Przypisz rolę Czytelnik do tożsamości zarządzanej usługi Data Factory na poziomie grup zarządzania lub subskrypcji, które chcesz odpytywać. To uprawnienie musi być skonfigurowane oddzielnie od wdrożenia centrum FinOps.

Jak są przetwarzane zalecenia

Potok rekomendacji działa codziennie i przetwarza pliki zapytań przechowywane w folderze config/queries w magazynie hubu:

  1. Wyzwalacz queries_DailySchedule jest uruchamiany raz dziennie.
  2. Potok queries_ExecuteETL przechodzi przez wszystkie pliki zapytań w folderze magazynu config/queries.
  3. Potok queries_ETL_ingestion wykonuje każde zapytanie względem Azure Resource Graph, deduplikuje wyniki i zapisuje dane jako parquet w folderze ingestion/Recommendations.
  4. W przypadku używania Azure Data Explorer dane są pozyskiwane do tabeli Recommendations_raw i przekształcane przy użyciu funkcji Recommendations_transform_v1_2().

Rekomendacje dotyczące usługi Hubs są łączone z rekomendacjami dotyczącymi rezerwacji z eksportami z usługi Cost Management w tym samym zarządzanym zestawie danych Recommendations. Źródła można rozróżnić przy użyciu kolumny x_SourceType .


Wbudowane zalecenia

Centra FinOps zawierają następujące zalecenia. Większość z tych opcji jest domyślnie włączona. Opcjonalne zalecenia mogą powodować zbędny szum w organizacjach, których nie dotyczą, i można je włączyć podczas wdrażania przy użyciu określonego parametru szablonu.

Compute

Databases

Zarządzanie + ład

Sieć

Magazyn

sieć Web

Aby wyłączyć określone zalecenie domyślne, usuń jego plik zapytania z folderu config/query w magazynie centrum. Potok przetwarzania przetwarza tylko te pliki zapytań, które istnieją.


Dodawanie niestandardowych zaleceń

Rekomendacje niestandardowe można dodać, przekazując pliki zapytań do folderu config/query w magazynie centrum. Potok przetwarzania automatycznie wykrywa nowe pliki zapytań przy następnym codziennym uruchomieniu.

Konwencja nazewnictwa plików

Nadaj plikom zapytań nazwę w formacie {dataset}-{provider}-{type}.json:

  • Dataset — docelowy zestaw danych (na przykład Recommendations).
  • Provider — dostawca danych usługi dotyczy (na przykład Microsoft, Contoso).
  • Type — identyfikator typu rekomendacji przy użyciu PascalCase (na przykład StoppedVMs, IdleCosmosDB).

Przykład: Recommendations-Contoso-IdleCosmosDB.json

Format pliku zapytania

Każdy plik zapytania jest plikiem JSON o następujących właściwościach:

{
  "dataset": "Recommendations",
  "provider": "Microsoft",
  "query": "<Azure Resource Graph query>",
  "queryEngine": "ResourceGraph",
  "scope": "Tenant",
  "source": "<descriptive source name>",
  "type": "<unique type identifier>",
  "version": "1.0"
}
Majątek Description
dataset Musi mieć wartość "Recommendations".
provider Nazwa dostawcy (na przykład "Microsoft").
query Zapytanie Azure Resource Graph do wykonania w jednym wierszu.
queryEngine Musi mieć wartość "ResourceGraph".
scope Zakres zapytania. Użyj "Tenant", aby wykonać zapytanie dotyczące wszystkich subskrypcji, do których tożsamość zarządzana usługi Data Factory ma dostęp w tej dzierżawie. Zapytania obejmujące wiele dzierżaw nie są obsługiwane, ale zasoby delegowane za pośrednictwem Azure Lighthouse są uwzględniane w zapytaniach dotyczących zakresu dzierżawy.
source Opisowa nazwa źródła rekomendacji (na przykład "Azure Advisor" lub "FinOps hubs").
type Identyfikator programowy dla tego typu rekomendacji. {provider}-{name} Użyj formatu tylko ze znakami alfanumerycznymi i łącznikami (na przykład "Contoso-IdleCosmosDB"). Ta wartość jest używana jako część nazwy pliku wyjściowego.
version Wersja schematu. Użyj "1.0".

Wymagane kolumny wyjściowe

Zapytanie musi zwrócić następujące kolumny:

Column Description
ResourceId ID zasobu (małe litery).
ResourceName Nazwa zasobu (małe litery).
SubAccountId Identyfikator subskrypcji.
SubAccountName Nazwa subskrypcji. Połącz z resourcecontainers, aby to uzupełnić.
x_RecommendationCategory Kategoria rekomendacji. Użyj "Cost", , "HighAvailability", "OperationalExcellence", "Performance"lub "Security".
x_RecommendationDate Data rekomendacji (użyj now() w przypadku zapytań dotyczących określonego momentu).
x_RecommendationDescription Krótki opis problemu.
x_RecommendationDetails Ciąg JSON z dodatkowymi właściwościami. Dołącz x_RecommendationProvider, x_RecommendationSolution, x_RecommendationTypeId i x_ResourceType wraz z wszelkimi właściwościami niestandardowymi specyficznymi dla rekomendacji.
x_RecommendationId Unikatowy identyfikator rekomendacji (na przykład identyfikator zasobu i sufiks).
x_ResourceGroupName Nazwa grupy zasobów (małe litery).

Porady dotyczące pisania zapytań

  • Aby uzupełnić nazwę subskrypcji, na końcu zapytania dołącz resourcecontainers:

    | join kind=leftouter (
        resourcecontainers
        | where type == 'microsoft.resources/subscriptions'
        | project SubAccountName=name, SubAccountId=subscriptionId
    ) on SubAccountId
    | project-away SubAccountId1
    
  • Wygeneruj x_RecommendationId , łącząc identyfikator zasobu z sufiksem opisowym (na przykład strcat(tolower(id), '-idle')).

  • Skompiluj x_RecommendationDetails przy użyciu polecenia tostring(bag_pack(...)) , aby utworzyć ciąg JSON. Użycie elementu tostring() do opakowania jest wymagane, ponieważ potok danych nie może serializować obiektów dynamicznych do formatu Parquet; wartość musi być ciągiem znaków. Możesz również użyć strcat() polecenia , aby ręcznie utworzyć ciąg JSON, ale bag_pack() jest zalecany, ponieważ obsługuje automatyczne ucieczkę.

  • Uwzględnij x_RecommendationTypeId jako stabilny identyfikator GUID, aby jednoznacznie identyfikować typ rekomendacji między kolejnymi uruchomieniami.

Aby zapoznać się z przykładami, zapoznaj się z wbudowanymi plikami zapytań w kodzie źródłowym zestawu narzędzi FinOps.


Prześlij opinię

Daj nam znać, jak nam idzie, zostawiając krótką opinię. Te recenzje służą do ulepszania i rozszerzania narzędzi i zasobów FinOps.

Jeśli szukasz czegoś konkretnego, zagłosuj na istniejący lub utwórz nowy pomysł. Podziel się pomysłami z innymi osobami, aby uzyskać więcej głosów. Skupiamy się na pomysłach z największą większością głosów.