2

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

目前,我非常坚持编译 proto 文件。每次尝试时,我都会遇到依赖问题(Import "fileNameHere" was not found 或有错误。)。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.

谢谢你的帮助。

4

2 回答 2

2

我的一位同事提供了答案......它隐藏在 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 文件,但仍会缺少依赖项。

于 2020-01-03T11:44:16.990 回答
0

我执行以下操作来获取 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
于 2022-02-25T23:09:16.760 回答