Heartbeat
Heartbeatは、Gatewayが所有するProfile単位の軽量な健全性ループです。定期的に健全性を記録し、有効なCronジョブの最終実行に失敗がないかを調べます。各tickでアシスタントのプロンプトやモデルを実行することはありません。
実行内容とタイミング
Gatewayは起動時に1回tickを記録します。有効な場合は設定間隔で継続し、無効な場合はdisabled状態を記録して反復ループを開始しません。HeartbeatはCronとは独立しており、そのジョブ一覧にも表示されません。
| 設定 | 既定値 |
|---|---|
| 有効 | はい |
| tick間隔 | 1分 |
| 表示される失敗クールダウン | 15分 |
| 有効な通知先 | Gatewayイベントバス |
| Role / Workspaceラベル | default / default |
正常なtickではメッセージを送りません。HeartbeatはジョブIDと最終実行時刻で失敗を比較します。同じジョブの新たな失敗実行も含め、新しく観測した失敗の組み合わせを報告します。時間が経過しただけで、変化のない失敗を繰り返し通知しません。
v0.1.107ではfailure_cooldownは読み込まれ状態に表示されますが、検出は失敗の組み合わせの変化に基づきます。このフィールドは新たに変わった失敗を遅延させたり、変わらない失敗の通知を繰り返し予約したりしません。HeartbeatはProfile内の有効なCronジョブ全体を走査し、Role/Workspaceラベルは走査のフィルターではありません。
状態を確認する
anyy heartbeat status
anyy heartbeat status --json
結果には有効状態、状態、間隔、表示上のクールダウン、Role、Workspace、配信先、失敗Cronジョブ数、最終tick時刻が含まれます。anyy --profile work heartbeat statusのように、Profileの選択を統一してください。
Heartbeatは次にも表示されます。
anyy status
anyy doctor
okはtickによる観測が正常に完了したことを意味します。失敗数はcron_failed_jobsで確認します。すべてのCronジョブが成功したという意味ではありません。degradedは走査または通知のエラーを示します。
Heartbeatを設定する
- Profileに従って対象のProfileホームを特定します。
config.yamlをバックアップしてheartbeatブロックを編集します。- 同じProfileで
anyy doctorを実行します。 anyy gateway restartでそのProfileのGatewayを再起動し、anyy heartbeat statusと次のtickを確認します。全コマンドで同じ--profileを使います。
heartbeat:
enabled: true
tick_interval: 1m
failure_cooldown: 15m
delivery_targets:
- gateway
role_id: default
workspace_id: default
間隔には30sや5mのような正のGo durationを使います。公開のheartbeat setや手動のheartbeat tickコマンドはありません。設定は常駐ランタイム起動時に読み込まれるため、編集した間隔は再起動で適用します。
通知の配信
現在のランタイムの出力先はgatewayだけを扱います。Profileレベルのライブイベントを発行し、この通知にChannelアダプタールートやセッションの紐付けはありません。delivery_targetsにプラットフォーム名を追加しても宛先は設定されず、Heartbeat通知は会話に保存されたシステム通知履歴にも入りません。
通知を調べるにはDashboard → Cronで該当ジョブと実行履歴を開き、原因を直します。Heartbeatは失敗を観測するだけで、再試行や修復はしません。Anyyに自動化の再実行を依頼するか、次の予定実行を待って結果を確認してください。
トラブルシューティング
| 症状 | 確認する項目 |
|---|---|
状態がunknownのまま | 対象ProfileのGatewayが実行中かを確認し、起動後に再確認 |
okなのにCronジョブが失敗している | cron_failed_jobsとCron履歴を確認。okは健全性の観測を表す |
| クールダウンを変えても再通知がない | 変化のない失敗は再送しない。クールダウンは反復リマインダーではない |
| 同じジョブに新しい通知が出る | 次の失敗実行で最終実行時刻が変わった可能性 |
| 外部メッセージが届かない | Heartbeatは現在Gatewayだけに発行。設定済みChannel宛先には予約自動化を使用 |
| 間隔を編集しても変わらない | そのProfileのGatewayを再起動して表示間隔を確認 |