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 にはアクセスできないため、実機検証はまだできていない状況です。
なにか考慮事項や、他に良い解法がありましたらご教示ください。
解決済! 解決策の投稿を見る。
AS_Queueのスキーマを見る限りは、情報とってこれそうな雰囲気はあります。明日以降に、AS_Queueのデータの中身がどうなってるか見てみますね。
細かいですが、監視用のWFは、監視対象のワーカNodeとは別のNodeで実行する、というケアは必要な気がします(監視用WFが渋滞に巻き込まれないように)
更に細かいですが、停滞時間の計算をするのであれば、各々のワーカNodeのサーバのローカルタイムの設定も合わせる必要あり、です。
ありがとうございます。
> 監視用のWFは、監視対象のワーカNodeとは別のNodeで実行する、というケアは必要な気がします(監視用WFが渋滞に巻き込まれないように)
確かにそうですね。比較的空いているNodeで外から監視するようにします。
ローカルタイムのご指摘もありがとうございます。
AlteryxのDateTime型だとTimeZoneを表現できないので、注意が必要ですね。
(DateTimeとは別に ISO FormatとかUnix Timeで表現されたFieldがあると良いのですが)
AS_Queueには、他にもStatusなどもあるので、StatusがCompleteになっていないものを抽出することができそうです。
ところで、そもそもQueueに長時間溜まるというところの方が気になりますね・・・。長時間動くワークフローが処理を専有しているのでしょうか?そこの解消も必要な気がしました。
コメントありがとうございます。
> StatusがCompleteになっていないものを抽出することができそうです
(準)リアルタイムのQueue Lengthの監視目的としてはNot Completeのものだけで十分そうですね。
別途、全体のQueue処理状況を事後的に見るために、CompleteのJobを抽出してQueue Lengthの時系列グラフの開発も考えています。
> そもそもQueueに長時間溜まるというところ
これは Engine Log から長時間かかるWorkflowは特定できています。
ただ、「結構な量のデータからP値を計算しなさい」という処理なので、単純に処理時間を短縮するのが難しく、
Job Priorityを下げて(他JobのPriorityを上げて)運用することを検討しております。
時間がかかってるJobの視覚化はよさそうですね。
そもそも長居するワークフローは、、、どうしようもないですね、、、すいている時間帯に流すとかの工夫が良いのでしょうかね・・・。
AS_Queueのデータを眺めてみました。
@AkimasaKajitani も書かれているように、Statusの値で判別すると簡単に判別できそうですね。CreatinDateTimeには、必ず値が入ってました。
確認できた限りのステータスです
Status="Queued" 順番待ち
Status="Running" 実行中
Status="Complete" 実行完了
Status="Error" エラー
※Initializingというステータスも発見したのですが、キューに行く直前の一時的な状態みたいなので、対象外にしました
ありがとうございました。
とりあえず MongoDB へのアクセス権は入手できる見込みになりました。
アクセスできたところで、ご教示いただいた内容を参考にQueue監視データを取得してみたいと思います。
よかったです!
ちなみに、さくっとmongoDBの中身のぞきたいなら、GUIのツールもあるので便利です。
https://www.mongodb.com/ja-jp/products/tools/compass
@Yoshiro_Fujimori @AkimasaKajitani @gawa
弊社ではPower BIでScheduleの実行状況の見える化をしています。
Tableau用のAlteryx WFが提供されている様で、それをCustomizeしてレポートを出力してPower BIに取り込んでいます。
(下記はQueを表示した物)
@Tokimatsu さんがここら辺詳しいです。