PythonでJaeger GRPC Protoファイルをコンパイルする -- grpc フィールド と jaeger フィールド と grpc-python フィールド 関連 問題

Compiling Jaeger gRPC proto files with Python












1
vote

問題

日本語

私は現在 jaeger query としようとしています。 api 。これはGRPCを使用してその内容にアクセスします。私はGRPCに慣れていませんが、私の理解は私が関連するProtoファイルのPython GRPCコンパイラ(GRPCIO_Tools.protoc)を使用して便利なPython定義を得る必要があるということです。私がやろうとしているのは、フロントエンドのUIを使用せずに、APIによってJaegerクエリーにアクセスする方法を見つけることです。

現在、Protoファイルのコンパイルに非常に停止しています。試してみるたびに、依存関係の問題が発生します( "filenamehere"が見つからないかエラーが発生しました。)。 jaeger query.proto ファイルにインポートが含まれていますリポジトリ以外のファイルへの参照。私はこれらを見つけて手動でそれらを集めることができます、彼らはまた依存関係を持っています。私はこれらのそれぞれを迂回し、それを1つずつ収集するという印象を得ます。

ここで何か悪いことをしていますか? 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.

お願いします。

英語

I'm currently playing around with Jaeger Query and trying to access its content through the API, which uses gRPC. I'm not familiar with gRPC, but my understanding is that I need to use the Python gRPC compiler (grpcio_tools.protoc) on the relevant proto file to get useful Python definitions. What I'm trying to do is find out ways to access Jaeger Query by API, without the frontend UI.

Currently, I'm very stuck on compiling the proto files. Every time I try, I get dependency issues (Import "fileNameHere" was not found or has errors.). The Jaeger query.proto file contains import references to files outside the repo. Whilst I can find these and manually collect them, they also have dependencies. I get the impression that following through and collecting each of these one by one is not how this was intended to be done.

Am I doing something wrong here? The direct documentation through Jaeger is limited for this. The below is my basic terminal session, before including any manually found files (which themselves have dependencies I would have to go and find the files for).

$ 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. 

Thanks for any help.

</div
        
 
 

回答リスト

1
 
vote

鉱山の同僚は答えを提供しました...それはゴランを使わないように私のために働いていなかったメイクファイルに隠されていました(そしてそれはゴーランを取り付けるだけではより複雑でしたが、しかしそれはより複雑でしたが、私はDigress ...)。

次の.shはトリックをします。これはquery.protoファイルは以下のスクリプトと同じ場所からのサブディレクトリです.model / proto / api_v2 /(メインJaeger Repoに表示されるとき)の下のスクリプトと同じ場所からのサブディレクトリです。

 <コード> #!/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ファイルを生成しますが、それでも依存関係がないことです。

 

A colleague of mine provided the answer... It was hidden in the Makefile, which hadn't worked for me as I don't use Golang (and it had been more complex than just installing Golang and running it, but I digress...).

The following .sh will do the trick. This assumes the query.proto file is a subdirectory from the same location as the script below, under model/proto/api_v2/ (as it appears in the main Jaeger repo).

#!/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 

This will definitely generate the needed Python file, but it will still be missing dependencies.

</div
 
 

関連する質問

1  PythonのGRPCクライアントからGRPCサーバーをシャットダウンする方法  ( How to shutdown grpc server from grpc client in python ) 
> 私は、公式入門ガイド( https://grpc.io/)に表示されているGRPC HelloWorldサーバーを持っています。 Docs / QuickStart / Python / )。 私は今、クライアントからサーバーをシャットダウン/終了したい...

0  GRPC応答のサイズを測定する方法  ( How to measure the size of grpc response ) 
GRPCの4MBメッセージサイズ制限に対処するためのより良い方法を考えています。クライアント側で受信されたGRPC応答のサイズを測定する方法が必要です。レスポンスが4MB制限を超えると、GRPCのようなエラーメッセージが表示されます。 挨拶できませんでした...

0  Python GRPCクライアントスタブをより多くのスレッドで使用する場合、パフォーマンスを向上させることができますか?  ( Can i improve performance when using python grpc client stubs in more threads ) 
Python gRPC サーバーと対応するクライアントを持っているとします。 この質問同じGRPCチャネルそれぞれが異なるスレッドで実行されているクライアントスタブに渡されるように利用されます。 RPC関数 foo() はスレッドT1から呼び出され、応答...

0  Pythonのすべての/いくつかの接続クライアントへのGRPCサーバーからのブロードキャストメッセージ  ( Broadcasting message from grpc server to all some connected clients in python ) 
GRPCストリームの使い方にPythonでクライアントとサーバー間でメッセージを交換する方法を学びます。サーバーとクライアント間の単純なメッセージ送信を可能にする基本例を見つけました。 GRPCサーバーに接続されているすべてのクライアント(サーバー側)を追跡...

0  GRPCの_multithreadedRendezvousとそれを解析する方法とは  ( What is multithreadedrendezvous in grpc and how to parse it ) 
GRPCリクエストを送信しようとしていて、メッセージのストリームを受け取ることが期待されています。代わりに、私は&lt; _multithReadedRendezvousオブジェクト&gtとして返答を受けています。誰かが私がこれを受けている理由を理解するのを...

2  GRPC Pythonのカスケードタイムアウト伝搬  ( Cascading timeout propagation for grpc python ) 
初​​期クライアントタイムアウトのカスケード伝播がGRPC-Pythonでサポートされているのかどうか疑問に思っていますか? 私は意味します: クライアントはTimeout = 200 ms でGRPCをサーバ1に実行します。 Server-1は、タス...

1  Async呼び出しを行うときは、GRPCのフロー制御機能に依存できますか?  ( How can i rely on grpcs flow control features when making async calls ) 
は、Python GRPCクライアントが非同期的に単純な単数の呼び出しをサーバーがそれらを処理できるようにサーバーに非同期的にサーバーにしますが、ASYNC要求をクライアントの発信接続に書き込むことができない場合はブロックします。背圧のため? GRPC実装...

1  同じネットワーク上のGRPCサーバーにアクセスしようとしたときにGRPCクライアントDNSの解決が失敗しました  ( Grpc client dns resolution failed when trying to access grpc server on same netw ) 
Pythonクライアントから.NET Coreプロジェクトで実行されているGRPCサーバーを呼び出しようとしています。 localhost:5001 に対して稼働しているときは、 9988777661 のような同じネットワーク内からのマシンの実際のIPに...

0  Python GRPCクライアント側からの単項ストリーム通話をキャンセル  ( Python grpc cancel unary stream call from client side ) 
Python GRPCを使用して、 threading.Event が設定されているときに、クライアント側から長時間の単数ストリーム通話をキャンセルできるようにしたいと思います。 <事前> <コード> def application(stub: Stream...

3  GRPC-Gatewayの背後にあるPythonサービスからOK以外のステータスで応答メッセージを送信する方法  ( How to send response message with non ok status from a python service behind grp ) 
PythonでGRPC-Gatewayの背後にあるGRPCサービスを書いています。 実際に私の問題は、ステータスコード429を上げるために以下のコードブロックを使用したときに、応答メッセージを送信できません。 <事前> <コード> context.set_c...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有