ReadyNAS

Rundeckの実行ログをpythonから削除する

投稿日:2020年5月12日 更新日:

目的

Rundeckはジョブを実行するたびに実行ログが生成されます。ログが残るのはありがたいですが、分や秒単位でログを実行すると大量のログが溜まってきます。これらの実行ログをpythonから削除してみました。

実行ログとは

実行ログはRundeckのジョブを実行した後にアクティビティタブにジョブのアクティビティとして残るログです。GUIからアクティビティを消すこともできますが、一度に削除できる件数は表示されている数までです。そのため、1000や1万などアクティビティが溜まると人力で消すのは大変になってきます。

また、アクティビティの数が原因でプロジェクトが削除できなくなる事象に遭遇したこともあります。ということで、定期的に不要なログは自動削除していきたい。

環境

python 3.7.3
Rundeck 3.1.0

Step1: pythonコード

ログを削除するためのpythonコードはありがたいことにgithubで見つかりました。このdeletelogs.pyを使用させて頂くことにします。

https://github.com/danifr/rundeckscripts/blob/master/py_scripts/deleteoldlogs.py

使い方としては以下の必要情報を埋め、実行するだけの様子です。非常に便利そうですね。

API_KEY='xx' #Rundeckユーザに紐づくのAPI token
RUNDECKSERVER = 'http://127.0.0.1' #Rundeckのホスト名
RUNDECKPORT='4440' #Rundeckのポート番号、デフォルトは4440
EXPIRE_DAYS = 20 #今日を含めて残す日数

Step2: APIキーの発行

コード実行に必要なAPIキーを取得します。

まず、右上のProfileを選択し、遷移した画面でUser API Tokensの右側の+ボタンをクリックします。

ウィンドウが現れますので、Token発行に必要な情報を埋めます。

今回は管理者ユーザとしてTokenを発行します。Expiration inを0にしておくと30日間有効のようですが、もし無期限にしたい場合はrundeck-config.propertiesファイル内にrundeck.api.tokens.duration.max = 0を記述しておけばOKです。
入力したら左下のNew Generation Tokenをクリックします。

すると新しく、Tokenが追加されます。Show Tokenをクリックして表示されるTokenをコピペして先ほどのコードに張り付ければOK。

Step3: pythonコード実行

必要情報を埋めてpythonコードを実行しましたが、以下のエラーが出ました。

SyntaxError: Missing parentheses in call to 'print'. Did you mean print('project:\t'+project)?

githubで公開されていたのはpython2系のコードだったということで・・・printが使われている箇所をprint()に修正しました。

projects = getProjectNames(listProjects())
for project in projects:
    print('project:\t'+project) #修正箇所
    jobids = getJobIDs(listJobsForProject(project))
    for jobid in jobids:
        print('\tjobid:\t'+jobid) #修正箇所
        checkDeletion(getExecutionDate(getExecutionsForAJob(jobid))) 

修正後に、再度実行。今度は以下のエラーが発生しました。

AttributeError: 'dict' object has no attribute 'iteritems'

どうやらfor文のiteritems()でエラーが発生しているらしい。dict型にiteritems()を使うな、とのこと。これもpython2系とpython3系の差異でしょうか?

ということで以下のように修正しました。

def checkDeletion(execid_dates):
    #for exec_id, exec_date in execid_dates.iteritems(): #修正前
    for exec_id, exec_date in execid_dates.items():       #修正後
        if isOlderThanExpireDays(int(exec_date), TODAY):
    	    deleteExecution(exec_id)

再度実行・・・今度は無事に動きました。

まとめ

エラーが出て少し躓きましたが、このpythonコードはかなり使い勝手良しです。これをrundeck ジョブとして回しておけば、ジョブアクティビティが溜まることなく快適に運用できるかと思います。

-ReadyNAS
-

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

NETGEAR ReadyNASの設置から初期設定まで

Contents1 目的2 ブツの確認3 NASへのHDD装着3.1 カバー開け3.2 ケースの取り外し3.3 HDD取り付け用カバーの取り外し3.4 カバーをHDDへ装着3.5 ケースへの再挿入4 …

NetGear ReadyNASへSubversionをインストールする

Contents1 概要2 環境3 Step 1 : subversionのインストール4 Step 2 : リポジトリ作成5 Step 3 : configファイル類の設定5.1 svnserv.c …

ReadyNASにMySQLをインストール

Contents1 目的2 環境3 Step1 : MySQLサーバープラグインのインストール4 Step2 : MySQL Serverの起動確認5 Step3 : リモートアクセス設定5.1 my …

ReadyNASのMySQLプラグインの文字コード設定

Contents1 目的2 環境3 Step1 : 現状の文字コード確認4 Step2 : my.cnfの変更5 Step3 : 文字コードが変更されていることの確認6 注意点 目的 下記の記事で導入 …

言語切り替え

カテゴリー