이 문서에서는 앱 토폴로지 쿼리의 구성요소와 쿼리 구문을 설명합니다.
쿼리 구성요소
앱 토폴로지 쿼리는 여러 구성요소로 구성됩니다.
노드 - 검색된 Google Cloud 리소스 또는 App Hub나 Agent Registry에 등록된 리소스입니다. 노드의 예는 다음과 같습니다.
- Compute Engine VM
- Artifact Registry의 컨테이너 이미지
- 상담사
- Cloud Monitoring 알림
- App Hub 애플리케이션, 서비스 또는 워크로드
- 취약점
쿼리할 수 있는 리소스는 선택한 도메인에 따라 다릅니다.
SRE도메인에는 지원되는 모든 리소스가 포함됩니다.속성: 쿼리를 구체화하는 데 사용할 수 있는 노드의 속성입니다. 예를 들어 특정 CVE ID가 있는 취약점을 쿼리할 수 있습니다.
에지: 두 노드 간의 방향 관계입니다.
쿼리 구조
이 섹션에서는 쿼리 구조를 간략하게 설명합니다. 자세한 내용은 generate_discovered_resources_topology 도구의 참고 문서를 확인하세요.
쿼리는 AIP-160 필터링 구문을 사용합니다.
쿼리의 주요 요소는 다음과 같습니다.
- 쿼리는 루트 노드를 지정하는
startingNode로 시작합니다. neighbor을 사용하여 루트startingNode와의 관계를 정의합니다.neighbor요소는 연결된 노드와 에지를 정의합니다.LabelPropertiesPattern는 일치 표현식을 지정합니다.label_matcher_expr- 노드 또는 에지 라벨의 일치 표현식입니다.property_matcher_expr- 노드 또는 가장자리의 특정 속성을 필터링하는 일치 표현식입니다.
direction필드를 사용하여 방향 관계를 정의합니다.
다음 예시는 프로젝트 web-project의 App Hub 워크로드 foo와 연결된 알림에 대한 쿼리를 보여줍니다. 또한 후속 표현식에서 더 쉽게 참조할 수 있도록 노드에 라벨을 지정하는 alias의 사용을 보여줍니다.
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "generate_discovered_resource_topology",
"arguments": {
"name": "projects/web-project/locations/global/discoveredResourcesTopology",
"topologyDomains": ["projects/web-project/locations/global/domains/SRE"],
"filter": {
"startingNode": {
"alias": "source",
"labelPropertiesPattern": {
"labelMatcherExpr": "Base/apphub.googleapis.com/Workload",
"propertyMatcherExpr": "source.Base/app/workloadReferenceUri = 'foo'"
}
},
"neighbors": [
{
"edge": {
"labelPropertiesPattern": {
"labelMatcherExpr": "Observability/HAS_ALERT"
},
"direction": "TO"
},
"graph": {
"startingNode": {
"alias": "alert",
"labelPropertiesPattern": {
"labelMatcherExpr": "Observability/Alert"
}
}
}
}
]
}
}
},
}
일치하는 노드
label_matcher_expr 일치 표현식을 사용하여 리소스 유형 (노드)을 지정합니다.
단일 노드 유형 또는 여러 유형을 일치시킬 수 있습니다.
label_matcher_expr은 OR 또는 AND 연산자를 사용할 수 있지만 단일 일치 표현식에서 두 유형의 연산자를 혼합할 수는 없습니다.
예:
- App Hub 워크로드 일치:
"Base/apphub.googleapis.com/Workload" - 탐색된 워크로드 또는 서비스 일치:
"Base/DiscoveredWorkload OR Base/DiscoveredService"
일치하는 숙박 시설
property_matcher_expr 일치 표현식을 사용하여 노드의 속성을 필터링합니다.
속성에는 두 가지 유형이 있습니다.
- 내장 시스템 속성 - 모든 노드와 에지에 적용되는 속성:
- 노드의 경우:
NodeName(노드의 경우) - 에지:
EdgeName(에지용)
- 노드의 경우:
라벨: 속성 필터 표현식과 함께 사용할 수 있는 노드 또는 에지의 라벨 목록입니다. 예를 들면 다음과 같습니다.
(CONTAINS_ANY(alias.Labels, "Base/MCPServer") AND alias.Base/agentregistry/urn = "foo") OR (CONTAINS_ANY(alias.Labels, "Base/Agent") AND alias.Base/agent/framework = "bar")도메인 스키마 속성 -
Base/location,Observability/errorRate,Base/app/state과 같은 리소스 유형에 특정한 속성입니다.GetSchema메서드는 이러한 속성을 반환합니다.예를 들어
us-central1리전에서 라벨이n인 리소스를 필터링하려면n.Base/location = "us-central1"표현식을 사용합니다.
속성 일치 표현식에서 지원되는 연산자 목록은 LabelPropertiesPattern을 참고하세요.
에지 방향
가장자리의 경우 edge.direction가 방향을 지정하며 기본값은 DIRECTION_UNSPECIFIED입니다. 다음 값 중 하나를 설정하여 소스 노드와 대상 노드 간의 관계를 나타낼 수 있습니다.
TO- 소스에서 대상으로FROM- 대상에서 소스로ANY- 노드 간 관계는 양방향입니다.
방향을 알고 있는 경우 TO 또는 FROM를 사용하세요. 양방향 쿼리 "ANY"는 순회 상태를 조합적으로 확장하고 API 지연 시간을 늘립니다.
제한사항
쿼리 및 토폴로지 크기:
- 쿼리 응답이 더 복잡한 경우 결과를 반환하는 데 시간이 더 오래 걸릴 수 있습니다.
여기에는 다음 조건이 포함됩니다.
propertyMatcherExpr에는 4개 이상의 비교가 포함됩니다.- 토폴로지 순회에 쿼리 실행 시 5개 이상의 홉이 포함됩니다.
- 반환된 토폴로지 데이터에는 페이지로 나누기가 지원되지 않습니다.
- API는 최대 1,000개의 고유 경로를 반환합니다.
- 관측 가능성 데이터의 경우 다음을 충족해야 합니다.
Observability/Alert노드는 같음 (=) 연산자만 지원합니다.Observability/SENDS_TRAFFIC가장자리는 속성 필터를 지원하지 않습니다.
데이터 가용성:
- Google Cloud Observability는 일부 App Hub 서비스 및 워크로드의 원격 분석을 지원하지 않습니다. 지원되는 인프라 리소스 목록은 애플리케이션 모니터링 지원 인프라를 참고하세요.
- App Hub 애플리케이션의 토폴로지를 볼 때 애플리케이션 간에 공유할 수 있는 리소스는 시각화에 포함되지 않습니다.
- Developer Connect 통계 이벤트를 삭제해도 며칠 동안은 앱 토폴로지 쿼리 결과에 이벤트가 표시될 수 있습니다.
- Security Command Center에서 제공하는 보안 및 규정 준수 데이터의 경우 다음을 충족해야 합니다.
- 제공된 데이터는 미리보기 버전입니다.
- 데이터는 조직의 프로젝트 및 애플리케이션에서만 사용할 수 있습니다. Google Cloud