FinOps Hubs 권장 사항 구성

FinOps 허브는 여러 원본에서 권장 사항을 수집하고 Cost Management 내보내기에서 예약 권장 사항과 함께 권장 사항 관리 데이터 세트 에 수집합니다. 권장 사항은 Azure Advisor 권장 사항을 끌어오고 리소스 구성에 따라 다양한 최적화 시나리오를 식별하는 구성 가능한 쿼리 집합을 사용하여 Azure Resource Graph 제공됩니다. 쿼리는 스토리지의 간단한 JSON 파일에서 관리되므로 허브 스토리지에 쿼리 파일을 업로드하여 사용자 지정 권장 사항을 쉽게 추가할 수 있습니다.


사전 요구 사항

시작하기 전에 다음이 필요합니다.

  • FinOps 허브 인스턴스배포했습니다.
  • 쿼리하려는 관리 그룹 또는 구독의 Data Factory 관리 ID에 읽기 권한자 역할을 할당했습니다. 이 권한은 FinOps 허브 배포와 별도로 구성해야 합니다.

권장 사항 처리 방법

권장 사항 파이프라인은 매일 실행되며 허브 스토리지의 구성/쿼리 폴더에 저장된 쿼리 파일을 처리합니다.

  1. queries_DailySchedule 트리거는 하루에 한 번 실행됩니다.
  2. queries_ExecuteETL 파이프라인은 구성/쿼리 스토리지 폴더의 모든 쿼리 파일을 반복합니다.
  3. queries_ETL_ingestion 파이프라인은 Azure Resource Graph에 대해 각 쿼리를 실행하고, 결과에서 중복을 제거한 다음, 데이터를 ingestion/Recommendations 폴더에 Parquet 형식으로 저장합니다.
  4. Azure Data Explorer 사용하는 경우 데이터는 Recommendations_raw 테이블에 수집되고 Recommendations_transform_v1_2() 함수를 사용하여 변환됩니다.

허브 권장 사항은 Cost Management 내보내기의 예약 권장 사항과 함께 동일한 Recommendations managed dataset에 결합됩니다. x_SourceType 열을 사용하여 소스를 구분할 수 있습니다.


기본 제공 권장 사항

FinOps 허브에는 다음 권장 사항이 포함됩니다. 대부분은 기본적으로 사용하도록 설정됩니다. 선택적 권장 사항은 해당되지 않는 조직에서는 불필요한 잡음을 유발할 수 있으며, 지정된 템플릿 매개 변수를 통해 배포 중에 활성화할 수 있습니다.

Compute

Databases

관리 및 거버넌스

네트워킹

스토리지

Web

특정 기본 권장 사항을 사용하지 않도록 설정하려면 허브 스토리지의 구성/쿼리 폴더에서 해당 쿼리 파일을 삭제합니다. 파이프라인은 존재하는 쿼리 파일만 처리합니다.


사용자 지정 권장 사항 추가

허브 스토리지의 구성/쿼리 폴더에 쿼리 파일을 업로드하여 사용자 지정 권장 사항을 추가할 수 있습니다. 파이프라인은 다음 매일 실행에서 새 쿼리 파일을 자동으로 선택합니다.

파일 명명 규칙

형식을 사용하여 쿼리 파일 이름을 지정합니다.{dataset}-{provider}-{type}.json

  • 데이터 세트 - 대상 데이터 세트(예: Recommendations)입니다.
  • 프로비더 — 서비스 데이터의 공급자(예: Microsoft, Contoso)입니다.
  • 유형 — PascalCase를 사용하는 권장 사항 유형 식별자입니다(예: StoppedVMs, IdleCosmosDB).

예를 들어: Recommendations-Contoso-IdleCosmosDB.json

쿼리 파일 형식

각 쿼리 파일은 다음 속성이 있는 JSON 파일입니다.

{
  "dataset": "Recommendations",
  "provider": "Microsoft",
  "query": "<Azure Resource Graph query>",
  "queryEngine": "ResourceGraph",
  "scope": "Tenant",
  "source": "<descriptive source name>",
  "type": "<unique type identifier>",
  "version": "1.0"
}
재산 Description
dataset "Recommendations"이어야 합니다.
provider 공급자 이름(예: "Microsoft").
query 한 줄로 실행할 Azure Resource Graph 쿼리입니다.
queryEngine "ResourceGraph"이어야 합니다.
scope 쿼리 범위입니다. "Tenant"를 사용하여 Data Factory 관리형 ID가 테넌트 내에서 액세스할 수 있는 모든 구독을 조회합니다. 테넌트 간 쿼리는 지원되지 않지만 Azure Lighthouse 통해 위임된 리소스는 테넌트 범위 쿼리에 포함됩니다.
source 권장 사항 원본의 설명이 포함된 이름입니다(예: "Azure Advisor" 또는 "FinOps hubs").
type 이 권장 사항 유형에 대한 프로그래밍 방식 식별자입니다. 영숫자 {provider}-{name} 문자와 하이픈만 있는 형식을 사용합니다(예: "Contoso-IdleCosmosDB"). 이 값은 출력 파일 이름의 일부로 사용됩니다.
version 스키마 버전. "1.0"을 사용합니다.

필수 출력 열

쿼리는 다음 열을 반환해야 합니다.

Column Description
ResourceId 리소스 ID (소문자)
ResourceName 리소스 이름(소문자).
SubAccountId 구독 ID
SubAccountName 구독 이름입니다. resourcecontainers와 조인하여 이를 채우세요.
x_RecommendationCategory 권장 사항 범주입니다. 사용 "Cost", "HighAvailability", "OperationalExcellence", "Performance"또는 "Security".
x_RecommendationDate 권장 날짜(지정 시간 쿼리에 사용 now() ).
x_RecommendationDescription 문제에 대한 간단한 설명입니다.
x_RecommendationDetails 추가 속성이 있는 JSON 문자열입니다. 권장 사항과 관련된 모든 사용자 지정 속성과 함께 x_RecommendationProvider, x_RecommendationSolution, x_RecommendationTypeIdx_ResourceType를 포함합니다.
x_RecommendationId 권장 사항의 고유 식별자입니다(예: 리소스 ID + 접미사).
x_ResourceGroupName 리소스 그룹 이름(소문자).

쿼리 작성 팁

  • 구독 이름을 채우려면 쿼리 끝에 resourcecontainers를 사용해 조인하세요:

    | join kind=leftouter (
        resourcecontainers
        | where type == 'microsoft.resources/subscriptions'
        | project SubAccountName=name, SubAccountId=subscriptionId
    ) on SubAccountId
    | project-away SubAccountId1
    
  • 리소스 ID를 설명용 접미사(예: strcat(tolower(id), '-idle'))와 결합하여 x_RecommendationId를 생성합니다.

  • tostring(bag_pack(...))을 사용하여 JSON 문자열을 생성하는 x_RecommendationDetails을 빌드합니다. 데이터 파이프라인은 동적 객체를 Parquet 형식으로 직렬화할 수 없으므로 tostring()로 감싸는 것이 필요합니다. 값은 문자열이어야 합니다. JSON 문자열을 수동으로 빌드하는 데 사용할 strcat() 수도 있지만 bag_pack() 이스케이프를 자동으로 처리하므로 권장됩니다.

  • 여러 실행에 걸쳐 권장 사항 유형을 고유하게 식별할 수 있도록 안정적인 GUID로 x_RecommendationTypeId를 포함하세요.

예를 들어 FinOps 도구 키트 소스 코드 기본 제공 쿼리 파일을 검토합니다.


피드백 제공

빠른 검토를 통해 어떻게 하고 있는지 알려주세요. 이러한 검토를 사용하여 FinOps 도구 및 리소스를 개선하고 확장합니다.

특정 항목을 찾고 있는 경우 기존 항목에 투표하거나 새 아이디어를 만듭니다. 다른 사용자와 아이디어를 공유하여 더 많은 표를 얻습니다. 우리는 가장 많은 표를 가진 아이디어에 초점을 맞추고 있습니다.