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_logsとkuroko2_job_instances
- MySQLの接続情報はログインシェルの環境変数に設定しているため、shの-lオプションで参照できるようにする
- 直近のログは見たいので、6ヶ月以上前の古いレコードを削除対象とする
- 大量のレコードを一度に削除するとCPU使用率が結構上がるため、開発環境で削除するレコード数とCPU使用率を確認した上で調整する
- expectedで指定している時間内に削除が完了するよう、削除対象レコードの期間を調整する
- deleteしただけでは空きストレージ容量は増えないため、alter tableで最適化する
まとめ
無事、Kuroko2自身にログを削除させることができました。 なお、公式な対応方法ではないので、設定については自己責任でお願いします。