Kuroko2でKuroko2のログレコードを削除する

プロジェクトで導入しているOSSのジョブ管理ツールKuroko2のログテーブルが肥大化してきたため、Kuroko2自身に古いレコードを削除させるジョブを追加してみました。

設定

新規にログテーブル削除用のジョブを作成し、Scriptを以下のように設定します。

expected_time: 10m
queue: admin
execute: sh -l -c 'mysql -h ${KUROKO2_DATABASE_HOST} -u ${KUROKO2_DATABASE_USER_NAME} -p${KUROKO2_DATABASE_PASSWORD} ${KUROKO2_DATABASE_NAME} -e"delete from kuroko2_logs where updated_at <= now() - INTERVAL 6 MONTH; alter table kuroko2_logs engine=InnoDB; delete from kuroko2_job_instances where updated_at <= now() - INTERVAL 6 MONTH; alter table kuroko2_job_instances engine=InnoDB;"'
execute: sh -l -c 'mysql -h ${KUROKO2_DATABASE_HOST} -u ${KUROKO2_DATABASE_USER_NAME} -p${KUROKO2_DATABASE_PASSWORD} ${KUROKO2_DATABASE_NAME} -e"delete from kuroko2_job_instances where updated_at <= now() - INTERVAL 6 MONTH; alter table kuroko2_job_instances engine=InnoDB;"'

設定のポイント

  • 削除対象のテーブルは肥大化しやすい、kuroko2_logskuroko2_job_instances
  • MySQLの接続情報はログインシェルの環境変数に設定しているため、shの-lオプションで参照できるようにする
  • 直近のログは見たいので、6ヶ月以上前の古いレコードを削除対象とする
  • 大量のレコードを一度に削除するとCPU使用率が結構上がるため、開発環境で削除するレコード数とCPU使用率を確認した上で調整する
  • expectedで指定している時間内に削除が完了するよう、削除対象レコードの期間を調整する
  • deleteしただけでは空きストレージ容量は増えないため、alter tableで最適化する

まとめ

無事、Kuroko2自身にログを削除させることができました。 なお、公式な対応方法ではないので、設定については自己責任でお願いします。

参考情報