使用 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.com
write
。见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: 的主要内容,如果未能解决你的问题,请参考以下文章
ruby、openssl、unicorn、systemd (Gcloud) 的行为非常奇怪