使用 gcloud 客户端将日志写入 gcloud Vertex AI Endpoint 失败并显示 google.api_core.exceptions.MethodNotImplemented:

Posted

技术标签:

【中文标题】使用 gcloud 客户端将日志写入 gcloud Vertex AI Endpoint 失败并显示 google.api_core.exceptions.MethodNotImplemented: 501【英文标题】:Writing log to gcloud Vertex AI Endpoint using gcloud client fails with google.api_core.exceptions.MethodNotImplemented: 501 【发布时间】:2021-12-31 09:10:43 【问题描述】:

尝试使用 google logging client library 将日志写入 gcloud,具体来说,我有兴趣编写将附加到托管资源的日志,在本例中为 Vertex AI 端点:

代码示例:

import logging
from google.api_core.client_options import ClientOptions
import google.cloud.logging_v2 as logging_v2
from google.oauth2 import service_account


def init_module_logger(module_name: str) -> logging.Logger:

    module_logger = logging.getLogger(module_name)
    module_logger.setLevel(settings.LOG_LEVEL)
    credentials= service_account.Credentials.from_service_account_info(json.loads(SA_KEY_JSON))
    client = logging_v2.client.Client(
        credentials=credentials,
        client_options=ClientOptions(api_endpoint="us-east1-aiplatform.googleapis.com"),
    )
    handler = client.get_default_handler(
        resource=Resource(
            type="aiplatform.googleapis.com/Endpoint",
            labels="endpoint_id": "ENDPOINT_NUMBER_ID", 
            "location": "us-east1",
        )
    )
    #Assume we have the formatter
    handler.setFormatter(ENRICHED_FORMATTER)
    module_logger.addHandler(handler)
    return module_logger


logger = init_module_logger(__name__)
logger.info("This Fails with 501")

我得到了:

google.api_core.exceptions.MethodNotImplemented: 501 GRPC 目标 未在服务器、主机上实现: us-east1-aiplatform.googleapis.com,方法: /google.logging.v2.LoggingServiceV2/WriteLogEntries。已发送所有待处理 日志。

我认为我们需要启用 api,并被告知它已启用,并且我们有:https://www.googleapis.com/auth/logging.write 什么可能导致错误?

【问题讨论】:

我认为您不应该使用ClientOptions 覆盖日志记录端点。 us-east1-aiplatform.googleapis.com 没有 WriteLogEntries 方法。我认为你应该使用logging.googleapis.comwrite。见example 谢谢!这似乎有效 【参考方案1】:

正如评论中的@DazWilkin所述,错误是因为API端点us-east1-aiplatform.googleapis.com没有名为WriteLogEntries的方法。

上述端点用于向 Vertex AI 服务发送请求,而不是向 Cloud Logging。要使用的 API 端点是 logging.googleapis.com,如 entries.write 方法中所示。请参阅此documentation 了解更多信息。

ClientOptions() 函数应该有logging.googleapis.com 作为api_endpoint 参数。如果不指定client_options参数,则默认使用logging.googleapis.com

更改 api_endpoint 参数后,我能够成功写入日志条目。 ClientOptions() 如下:

client = logging_v2.client.Client(
        credentials=credentials,
        client_options=ClientOptions(api_endpoint="logging.googleapis.com"),
    )

【讨论】:

以上是关于使用 gcloud 客户端将日志写入 gcloud Vertex AI Endpoint 失败并显示 google.api_core.exceptions.MethodNotImplemented: 的主要内容,如果未能解决你的问题,请参考以下文章

zipfile 写入在 gcloud 中找不到文件

Gcloud 日志查看器 - 搜索子字符串过滤器不起作用

在 GAE 中使用 gcloud-python

ruby、openssl、unicorn、systemd (Gcloud) 的行为非常奇怪

将 gcloud 虚拟机实例监控数据提取到 BigQuery

无法将本地文件夹同步到 gcloud