名称: gcp-logs 描述: 使用gcloud CLI读取和查询GCP日志以进行Hyperlane代理的调试和分析。适用于调查relayer、validator或scraper日志、调试消息处理或分析操作问题。提供高效的过滤和上下文管理策略。
GCP 日志查询技能
何时使用
- 调查relayer、validator或scraper的行为
- 调试消息处理问题
- 分析操作事件
- 在代理日志中寻找特定错误或模式
先决条件
- 安装并认证
gcloudCLI - 访问
abacus-labs-devGCP项目
基础查询模板
Relayer (Omniscient)
gcloud logging read 'resource.type="k8s_container" AND resource.labels.project_id="abacus-labs-dev" AND resource.labels.location="us-east1-c" AND resource.labels.cluster_name="hyperlane-mainnet" AND resource.labels.namespace_name="mainnet3" AND labels.k8s-pod/app_kubernetes_io/component="relayer" AND labels.k8s-pod/app_kubernetes_io/instance="omniscient-relayer" AND labels.k8s-pod/app_kubernetes_io/name="hyperlane-agent"' --project=abacus-labs-dev --limit=50 --format=json --freshness=1d
Validator
gcloud logging read 'resource.type="k8s_container" AND resource.labels.project_id="abacus-labs-dev" AND resource.labels.location="us-east1-c" AND resource.labels.cluster_name="hyperlane-mainnet" AND resource.labels.namespace_name="mainnet3" AND labels.k8s-pod/app_kubernetes_io/component="validator" AND labels.k8s-pod/app_kubernetes_io/name="hyperlane-agent"' --project=abacus-labs-dev --limit=50 --format=json --freshness=1d
Scraper
gcloud logging read 'resource.type="k8s_container" AND resource.labels.project_id="abacus-labs-dev" AND resource.labels.location="us-east1-c" AND resource.labels.cluster_name="hyperlane-mainnet" AND resource.labels.namespace_name="mainnet3" AND labels.k8s-pod/app_kubernetes_io/component="scraper3" AND labels.k8s-pod/app_kubernetes_io/instance="omniscient-scraper" AND labels.k8s-pod/app_kubernetes_io/name="hyperlane-agent"' --project=abacus-labs-dev --limit=50 --format=json --freshness=1d
噪声过滤
添加这些过滤器以减少无价值日志行对上下文的消耗:
-jsonPayload.fields.message="Found log(s) in index range"
-jsonPayload.fields.message="Dispatching get_public_key"
NOT "Instantiated AWS signer"
-jsonPayload.fields.message="Ingesting leaf"
-jsonPayload.fields.message="Message already marked as processed in DB"
-jsonPayload.fields.message="Message destined for self, skipping"
-jsonPayload.fields.message="Message has already been delivered, marking as submitted."
-jsonPayload.fields.message="Popped OpQueue operations"
-jsonPayload.fields.message="Validator returned latest index"
-jsonPayload.fields.message="Found signed checkpoint"
-jsonPayload.fields.return="Ok(None)"
-jsonPayload.fields.message="Fast forwarded current sequence"
-jsonPayload.fields.message="Cursor can't make progress, sleeping"
-jsonPayload.fields.message="fallback_request"
-jsonPayload.fields.message="No message found in DB for leaf index"
-jsonPayload.fields.message="Processor working on message"
-jsonPayload.fields.message="Message destined for unknown domain, skipping"
渐进式查询策略(令牌效率)
步骤 1:首先仅获取消息字段
为最小化上下文消耗,首先仅获取 message 字段:
gcloud logging read '[BASE_QUERY] AND "[search_term]"' --project=abacus-labs-dev --limit=30 --format='json(jsonPayload.fields.message,timestamp)' --freshness=1d
这提供了快速概览,无需完整日志负载。
步骤 2:为特定条目获取完整上下文
一旦识别出有趣的日志条目,获取完整详细信息:
gcloud logging read '[BASE_QUERY] AND "[specific_identifier]"' --project=abacus-labs-dev --limit=20 --format=json --freshness=1d
步骤 3:提取特定字段
当需要特定细节时,使用 jq 或 grep 提取:
gcloud logging read '[QUERY]' --format=json | jq '.[].jsonPayload.fields.error'
常见查询模式
按消息ID搜索
gcloud logging read '[BASE_QUERY] AND "0x[MESSAGE_ID]"' --project=abacus-labs-dev --limit=50 --format=json --freshness=1d
搜索错误/警告
gcloud logging read '[BASE_QUERY] AND severity>="WARNING"' --project=abacus-labs-dev --limit=50 --format=json --freshness=1d
按链/域搜索
gcloud logging read '[BASE_QUERY] AND jsonPayload.spans.domain:"[chain_name]"' --project=abacus-labs-dev --limit=50 --format=json --freshness=1d
搜索卡住消息(高重试计数)
gcloud logging read '[BASE_QUERY] AND jsonPayload.fields.num_retries>=5' --project=abacus-labs-dev --limit=30 --format=json --freshness=1d
搜索气体估算错误
gcloud logging read '[BASE_QUERY] AND "eth_estimateGas"' --project=abacus-labs-dev --limit=30 --format=json --freshness=1d
按应用上下文搜索
gcloud logging read '[BASE_QUERY] AND jsonPayload.fields.app_context:"[APP_CONTEXT]"' --project=abacus-labs-dev --limit=30 --format=json --freshness=1d
时间范围选项
--freshness=1h- 最后一小时--freshness=1d- 最后一天--freshness=7d- 最后一周- 或在过滤器中使用明确时间戳:
timestamp>="2026-01-27T00:00:00Z"
输出格式选项
--format=json- 完整JSON(详细,高上下文)--format='json(jsonPayload.fields.message,timestamp)'- 仅特定字段(高效)--format='value(jsonPayload.fields.message)'- 仅值,无结构
关键日志字段关注点
| 字段 | 描述 |
|---|---|
jsonPayload.fields.message |
主要日志消息 |
jsonPayload.fields.error |
错误详情 |
jsonPayload.spans[].domain |
涉及链 |
jsonPayload.fields.num_retries |
重试计数 |
jsonPayload.fields.operations |
待处理消息详情 |
jsonPayload.span.id |
消息ID在span上下文中 |
环境变体
| 环境 | 命名空间 | 集群 |
|---|---|---|
| mainnet3 | mainnet3 |
hyperlane-mainnet |
| testnet4 | testnet4 |
hyperlane-mainnet |
提示
- 始终从具体开始 - 首先搜索确切的消息ID或错误模式
- 使用噪声过滤器 - 基础日志非常嘈杂;始终过滤
- 限制结果 - 使用
--limit避免上下文过载 - 渐进式细节 - 从仅消息字段开始,根据需要扩展
- 时间限制查询 - 使用
--freshness或时间戳过滤器 - 管道到 grep/jq - 本地后处理大结果