【问题标题】:Compiling Jaeger gRPC proto files with Python使用 Python 编译 Jaeger gRPC proto 文件
【发布时间】:2020-01-03 11:16:07
【问题描述】:

我目前正在使用 Jaeger Query 并尝试通过使用 gRPC 的 API 访问其内容。我对 gRPC 不熟悉,但我的理解是我需要在相关的 proto 文件上使用 Python gRPC 编译器(grpcio_tools.protoc)才能获得有用的 Python 定义。我正在尝试做的是找出通过 API 访问 Jaeger Query 的方法,而无需前端 UI。

目前,我非常坚持编译 proto 文件。每次尝试时,我都会遇到依赖问题(Import "fileNameHere" 未找到或有错误。)。 Jaeger query.proto 文件包含对 repo 外部文件的导入引用。虽然我可以找到这些并手动收集它们,但它们也有依赖关系。我的印象是,逐一收集和收集这些内容并不是本打算这样做的。

我在这里做错了吗?通过 Jaeger 提供的直接文档仅限于此。下面是我的基本终端会话,在包含任何手动找到的文件之前(它们本身有依赖项,我必须去寻找文件)。

$ python -m grpc_tools.protoc --grcp_python_out=. --python_out=. --proto_path=. query.proto
model.proto: File not found.
gogoproto/gogo.proto: File not found.
google/api/annotations.proto: File not found.
protoc-gen-swagger/options/annotations.proto: File not found.
query.proto:20:1: Import "model.proto" was not found or had errors.
query.proto:21:1: Import "gogoproto/gogo.proto" was not found or had errors.
query.proto:22:1: Import "google/api/annotations.proto" was not found or had errors.
query.proto:25:1: Import "protoc-gen-swagger/options/annotations.proto" was not found or had errors.
query.proto:61:12: "jaeger.api_v2.Span" is not defined.
query.proto:137:12: "jaeger.api_v2.DependencyLink" is not defined.

感谢您的帮助。

【问题讨论】:

  • 我应该补充一点,到目前为止,the gRPC python tut 一直是我的圣经,我被困在生成客户端和服务器代码部分。

标签: grpc jaeger grpc-python


【解决方案1】:

我的一位同事提供了答案...它隐藏在 Makefile 中,这对我没有用,因为我不使用 Golang(而且它比安装 Golang 并运行它更复杂,但是我跑题了……)。

以下 .sh 可以解决问题。这假定 query.proto 文件是与以下脚本位于同一位置的子目录,在 model/proto/api_v2/ 下(如它出现在主 Jaeger 存储库中)。

#!/usr/bin/env sh
set +x

rm -rf ./js_out 2> /dev/null
mkdir ./js_out

PROTO_INCLUDES="
    -I model/proto \
    -I idl/proto \
    -I vendor/github.com/grpc-ecosystem/grpc-gateway \
    -I vendor/github.com/gogo/googleapis \
    -I vendor/github.com/gogo/protobuf/protobuf \
    -I vendor/github.com/gogo/protobuf"

python -m grpc_tools.protoc ${PROTO_INCLUDES} --grpc_python_out=./python_out --python_out=./python_out model/proto/api_v2/query.proto

这肯定会生成所需的 Python 文件,但仍会缺少依赖项。

【讨论】:

    【解决方案2】:

    我执行以下操作来获取 Jaeger gRPC Python API:

    git clone --recurse-submodules https://github.com/jaegertracing/jaeger-idl
    cd jaeger-idl/
    make proto
    

    使用proto-gen-python/中的文件。

    注意: 在导入生成的代码时,如果遇到错误:

    AttributeError: module 'google.protobuf.descriptor' has no attribute '_internal_create_key'
    

    做:

    pip3 install --upgrade pip
    pip3 install --upgrade protobuf
    

    【讨论】:

      猜你喜欢
      • 2018-01-07
      • 1970-01-01
      • 2020-04-09
      • 2020-01-03
      • 1970-01-01
      • 1970-01-01
      • 2021-03-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多