概要
Cloud Dataflowで、WorkerのGCEインスタンスにStackdriver Monitoring agentを起動し、追加のメトリクスを取得する。
Cloud Dataflowでジョブを起動するとジョブに関するメトリクスがStackdriver経由で収集されるが、workerとして起動されるGCEインスタンスのメモリ使用量やJVMに関するメトリクスはデフォルトでは見ることができない。
背景
「Dataflow、Python SDK、ストリーミング」の組み合わせでパイプラインを実行していたが、定期的に処理が停止してしまう問題が発生した。
原因として、メモリを使い切っている可能性があり、その調査のためにメモリ使用量を継続的に取得したかった。
ちなみに使っているapache-beamのPython SDKのバージョンは2.6.0および2.7.0。2.7.0にバージョンを上げたら問題が悪化したため(停止する頻度が高まった)、2.6.0に戻して使っている。
方法
ドキュメントにある通り、パイプラインの起動をオプションに--experiments=enable_stackdriver_agent_metrics
を追加する。
PythonのPipelineOptions
あたりのオブジェクトから--experiments
を設定するには、DebugOptions
を使う必要があるっぽい。
https://github.com/apache/beam/blob/master/sdks/python/apache_beam/options/pipeline_options.py#L570
余談
最近のリリースでJVMのメトリクスも取れるようになったようです。(未検証)
以上です。