Free Trial

ディスカッション

答えを見つけ、質問し、Alteryx の専門知識を共有してください。
解決済み

Alteryx ServerのJob Queue監視

Yoshiro_Fujimori
オーロラ

Alteryx Server有識者の方にお伺いいたします。


Alteryx ServerのCuratorをやっていると、「JobがQueueに滞留して長時間待たされた」という苦情(?)が寄せられるため
何らかの方法でJob Queueの監視を行いたいと考えています。

 

Engine Logには Jobの開始時刻はありますが、JobがQueueに投入された時刻はないようです。
一方、ヘルプページのServerのMongoDBのSchemaを見ると AS_Queue という Collection があり
以下の情報が取れるようです。

 

UserName: (String) Username or MongoDB user ID of the user associated with the job.
AppName: (String) Workflow name.
CreationDateTime: (DateTime) Date-time job was created.
CompletionDateTime: (DateTime) Date-time job was completed.
ExecutionTime: (Double) The runtime of the job.

 

この情報があれば


IF CompletionDateTime = Null()
THEN WaitingTime = DateTimeNow() - CreationDateTime // 未完了Job
ELSE WaitingTime = CreationDateTime - (CompletionDateTime - ExecutionTime) // 完了済Job
ENDIF

 

で Job投入からJob開始までの待ち時間を計算するワークフローを組み

15分ごとにスケジュール実行すればよいかなと考えておりますがいかがでしょうか。


現在 私は Engine Log は見れるのですが、MongoDB にはアクセスできないため、実機検証はまだできていない状況です。

 

なにか考慮事項や、他に良い解法がありましたらご教示ください。

 

14件の返信14
gawa
16 - Nebula
16 - Nebula

@Yoshiro_Fujimori 

AS_Queueのスキーマを見る限りは、情報とってこれそうな雰囲気はあります。明日以降に、AS_Queueのデータの中身がどうなってるか見てみますね。

 

細かいですが、監視用のWFは、監視対象のワーカNodeとは別のNodeで実行する、というケアは必要な気がします(監視用WFが渋滞に巻き込まれないように)

更に細かいですが、停滞時間の計算をするのであれば、各々のワーカNodeのサーバのローカルタイムの設定も合わせる必要あり、です。

Yoshiro_Fujimori
オーロラ

@gawa 

ありがとうございます。

> 監視用のWFは、監視対象のワーカNodeとは別のNodeで実行する、というケアは必要な気がします(監視用WFが渋滞に巻き込まれないように)

確かにそうですね。比較的空いているNodeで外から監視するようにします。

 

ローカルタイムのご指摘もありがとうございます。

AlteryxのDateTime型だとTimeZoneを表現できないので、注意が必要ですね。

(DateTimeとは別に ISO FormatとかUnix Timeで表現されたFieldがあると良いのですが)

 

AkimasaKajitani
17 - Castor
17 - Castor

AS_Queueには、他にもStatusなどもあるので、StatusがCompleteになっていないものを抽出することができそうです。

 

ところで、そもそもQueueに長時間溜まるというところの方が気になりますね・・・。長時間動くワークフローが処理を専有しているのでしょうか?そこの解消も必要な気がしました。

 

 

Yoshiro_Fujimori
オーロラ

@AkimasaKajitani 

コメントありがとうございます。

 

StatusがCompleteになっていないものを抽出することができそうです

(準)リアルタイムのQueue Lengthの監視目的としてはNot Completeのものだけで十分そうですね。

別途、全体のQueue処理状況を事後的に見るために、CompleteのJobを抽出してQueue Lengthの時系列グラフの開発も考えています。

 

そもそもQueueに長時間溜まるというところ

これは Engine Log から長時間かかるWorkflowは特定できています。

ただ、「結構な量のデータからP値を計算しなさい」という処理なので、単純に処理時間を短縮するのが難しく、

Job Priorityを下げて(他JobのPriorityを上げて)運用することを検討しております。

AkimasaKajitani
17 - Castor
17 - Castor

@Yoshiro_Fujimori さん

 

時間がかかってるJobの視覚化はよさそうですね。

 

そもそも長居するワークフローは、、、どうしようもないですね、、、すいている時間帯に流すとかの工夫が良いのでしょうかね・・・。

 

 

gawa
16 - Nebula
16 - Nebula

@Yoshiro_Fujimori 

AS_Queueのデータを眺めてみました。

@AkimasaKajitani も書かれているように、Statusの値で判別すると簡単に判別できそうですね。CreatinDateTimeには、必ず値が入ってました。

確認できた限りのステータスです

Status="Queued" 順番待ち

Status="Running" 実行中

Status="Complete" 実行完了

Status="Error" エラー

※Initializingというステータスも発見したのですが、キューに行く直前の一時的な状態みたいなので、対象外にしました

image.png

image.png

Yoshiro_Fujimori
オーロラ

@gawa @AkimasaKajitani 

ありがとうございました。

とりあえず MongoDB へのアクセス権は入手できる見込みになりました。

アクセスできたところで、ご教示いただいた内容を参考にQueue監視データを取得してみたいと思います。

AkimasaKajitani
17 - Castor
17 - Castor

@Yoshiro_Fujimori さん

 

よかったです!

ちなみに、さくっとmongoDBの中身のぞきたいなら、GUIのツールもあるので便利です。

https://www.mongodb.com/ja-jp/products/tools/compass

 

DaisukeTsuchiya
パルサー

@Yoshiro_Fujimori  @AkimasaKajitani @gawa 
弊社ではPower BIでScheduleの実行状況の見える化をしています。
Tableau用のAlteryx WFが提供されている様で、それをCustomizeしてレポートを出力してPower BIに取り込んでいます。
(下記はQueを表示した物)

@Tokimatsu さんがここら辺詳しいです。

スクリーンショット 2024-03-14 162005.png