后端与接口
用 Dynatrace Smartscape 与 DQL…
在 Dynatrace 中通过 Smartscape 实体与 DQL 查询 GCP 资源(Compute Engine、GKE、Cloud Run、VPC/DNS、IAM、Pub/Sub 等),做资源清单、拓扑遍历、配置解析与标签归属分析。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
用 Dynatrace Smartsca特定
解决思路
- 按任务类型加载对应 reference 文件:资源清单与拓扑查询无需额外文件,直接套用核心查询模式;其余按下方条目加载。
- Compute Engine 实例、机型、IP 地址、磁盘 → 加载 `references/compute-instances.md`。
- GKE 集群、节点池、Pod、Deployment、Service、RBAC → 加载 `references/kubernetes-gke.md`。
- Cloud Run 服务、修订版本、执行记录 → 加载 `references/serverless-containers.md`。
- VPC 网络、子网、路由、DNS 记录 → 加载 `references/networking-dns.md`。
- Pub/Sub topic → 加载 `references/messaging-pubsub.md`。
- IAM 服务账号、角色、Secret Manager → 加载 `references/iam-security.md`。
- 监控仪表盘、日志、已保存查询 → 加载 `references/monitoring-logging.md`。
- GCP 项目、区域、组织层级 → 加载 `references/resource-management.md`。
- 资源归属、GCP 标签、组织结构 → 加载 `references/resource-ownership.md`。
- 用 `smartscapeNodes` 查询 GCP 实体,所有 GCP 实体类型带 `GCP_*` 前缀且由 Smartscape 自动发现建模。
- 按服务记住实体类型:计算类 `GCP_COMPUTE_GOOGLEAPIS_COM_INSTANCE`、`GCP_COMPUTE_GOOGLEAPIS_COM_ADDRESS`;网络类 `GCP_COMPUTE_GOOGLEAPIS_COM_NETWORK`、`..._SUBNETWORK`、`..._ROUTE`、`GCP_DNS_GOOGLEAPIS_COM_RESOURCERECORDSET`。
- Kubernetes/GKE 实体:`GCP_K8S_IO_POD`、`GCP_K8S_IO_NODE`、`GCP_K8S_IO_SERVICE`、`GCP_K8S_IO_SERVICEACCOUNT`、`GCP_K8S_IO_PERSISTENTVOLUMECLAIM`、`GCP_APPS_K8S_IO_DEPLOYMENT`、`GCP_APPS_K8S_IO_STATEFULSET`、`GCP_CONTAINER_GOOGLEAPIS_COM_NODEPOOL`、`GCP_RBAC_AUTHORIZATION_K8S_IO_CLUSTERROLEBINDING`、`GCP_RBAC_AUTHORIZATION_K8S_IO_ROLEBINDING`。
- Serverless 实体:`GCP_RUN_GOOGLEAPIS_COM_SERVICE`、`GCP_RUN_GOOGLEAPIS_COM_REVISION`、`GCP_RUN_GOOGLEAPIS_COM_EXECUTION`。
- IAM 与安全实体:`GCP_IAM_GOOGLEAPIS_COM_SERVICEACCOUNT`、`GCP_IAM_GOOGLEAPIS_COM_ROLE`、`GCP_SECRETMANAGER_GOOGLEAPIS_COM_SECRETVERSION`。
- 消息与运维实体:`GCP_PUBSUB_GOOGLEAPIS_COM_TOPIC`、`GCP_MONITORING_GOOGLEAPIS_COM_DASHBOARD`、`GCP_LOGGING_GOOGLEAPIS_COM_SAVEDQUERY`、`GCP_REGION`。
- 查询时使用通用字段:`gcp.project.id`、`gcp.region`、`gcp.zone`、`gcp.organization.id`、`gcp.resource.name`、`gcp.resource.type`、`gcp.asset.type`,以及存放完整资源 JSON 的 `gcp.object`。
- 按 GCP 层级组织查询范围:Organization → Folder → Project → Region/Zone。
- 模式 1 资源发现:`smartscapeNodes "GCP_COMPUTE_GOOGLEAPIS_COM_INSTANCE" | fields name, gcp.project.id, gcp.region, gcp.zone, gcp.resource.name`。
- 列举所有 GCP 资源类型:把实体名替换为 `"GCP_*"` 并追加 `| summarize count = count(), by: {type} | sort count desc`。
- 用 `| filter gcp.project.id == "<PROJECT_ID>"` 或 `| filter gcp.region == "<REGION>"` 缩小结果范围。
- 模式 2 配置解析:先 `parse gcp.object, "JSON:gcpjson"`,再用 `fieldsAdd machineType = gcpjson[configuration][resource][machineType], status = gcpjson[configuration][resource][status]` 提取字段。
- 配置字段位置:主要资源属性在 `gcpjson[configuration][resource][...]`,扩展属性在 `gcpjson[configuration][additionalAttributes][...]`。
- 模式 3 关系遍历:`smartscapeNodes "GCP_COMPUTE_GOOGLEAPIS_COM_INSTANCE" | traverse "*", "GCP_COMPUTE_GOOGLEAPIS_COM_SUBNETWORK" | fields name, gcp.project.id`。
- GCP 实体遍历时关系名一律用 `"*"`,因为 GCP 实体没有命名关系类型。
- 遍历时用 `fieldsKeep` 保留关键字段,用 `dt.traverse.history[-N]` 取祖先层级字段;复杂拓扑需要多次 traverse。
- 模式 4 基于标签的归属分析:`smartscapeNodes "GCP_*" | filter isNotNull(`tags:gcp_labels`) | fields name, gcp.project.id, `tags:gcp_labels``,把 `"GCP_*"` 换成具体类型可限定到单个服务。
- GCP 标签必须用反引号语法访问:`` `tags:gcp_labels` ``,并用 `isNotNull(`tags:gcp_labels`)` 做标签过滤、用 summarize 统计标签覆盖率。
- 配置解析后统一用 `isNotNull()` 做空值检查,并配合 `isNull()` 做优雅的空值处理。
- 按实体命名规范推导类型:`GCP_<SERVICE_API>_<RESOURCE>`,服务 API 即 Google API 域名把点号和连字符替换为下划线(如 `compute.googleapis.com` → `COMPUTE_GOOGLEAPIS_COM`),资源为具体类型(如 `INSTANCE`、`NETWORK`)。
- 能用具体实体类型时就不要用 `"GCP_*"` 通配符,以提升性能与准确性。
- 跨项目查询用 `gcp.organization.id`,单项目范围用 `gcp.project.id` 作为主过滤条件,位置分析用 `gcp.region` 和 `gcp.zone`。
- 性能与探索技巧:尽早按 project 和 region 过滤,大规模环境组合使用项目和区域过滤,用 `countDistinct()` 统计唯一资源数,探索阶段用 `| limit N` 限制结果量。
适用边界 · 注意事项
- 未接入 Dynatrace 或未配置 GCP 集成时不可用——此时 Smartscape 中不会出现 GCP 实体。
- 需要秒级反映 GCP 变更的场景不适用:Smartscape 数据来自最近一次扫描,GCP 变更与 Dynatrace 可见之间存在延迟。
- 目标 GCP 服务未被建模为实体类型,或资源本身未设置对应配置字段(可能为 null)时,查询会返回空/缺失结果。