これは何
elasticsearchのindexを削除するときにはcuratorを使うと思うが、そのactionファイルがわかりにくく、大きくなりがちだったのでメモ。 curator はver 4での記法(ver3だとちょっと違うみたいなので注意)
curator action fileの基本の書き方
1から順番に実行される。
actions: 1: action: delete_indices description: "delete application log indices" options: disable_action: False ignore_empty_list: True filters: - filtertype: pattern kind: prefix value: "application." # elasticsearchのindex名と"kind","value"設定が対応するようにする exclude: False - filtertype: age source: creation_date direction: older timestring: '%Y.%m.%d' unit: days unit_count: "30" # 30日残す設定 2: action: delete_indices description: "delete indices" options: disable_action: False ignore_empty_list: True filters: - filtertype: pattern kind: prefix value: "application." exclude: True # ここでexcludeしておかないと30日保存したいのに10日までになってしまう - filtertype: kibana exclude: True # kibanaを使っている場合には入れたほうがよい。.kibanaファイルが消えて、kibana indexを毎回登録しないといけなくなる。 - filtertype: age source: creation_date direction: older timestring: '%Y.%m.%d' unit: days unit_count: 10
削除日数を細かく制御したい場合(ansible templateで解決)
上の例の1の記述のところみたいなのを並べて、さらに2のexcludeにも突っ込んでいかないといけない。コード量が増えて管理しづらい。 ansibleで配置するなら以下のようにすればvarsのリストに追加するだけで簡単。
- varsで以下のように設定する
CURATOR_DELETE_LIST: - { TARGET: "application." , DAYS: "30" } - { TARGET: "httpd.error." , DAYS: "30" } - { TARGET: "httpd.access.hoge." , DAYS: "7" } - { TARGET: "httpd.access.hoge." , DAYS: "7" }
- loopでまわす
actions: {# 明示的な削除対象のためのブロック-#} {% for t in CURATOR_DELETE_LIST %} {{ loop.index }}: action: delete_indices description: "delete {{ t.TARGET }} indices" options: disable_action: False ignore_empty_list: True filters: - filtertype: pattern kind: prefix value: "{{ t.TARGET }}" exclude: False - filtertype: age source: creation_date direction: older timestring: '%Y.%m.%d' unit: days unit_count: "{{ t.DAYS }}" {% endfor %} {# .kibana を除くその他の index は 10 日間保持。最後のactionになるように99としておく。 #} 99: action: delete_indices description: "delete indices" options: disable_action: False ignore_empty_list: True filters: {% for t in CURATOR_DELETE_LIST %} - filtertype: pattern kind: prefix value: "{{ t.TARGET }}" exclude: True {% endfor %} - filtertype: kibana exclude: True - filtertype: age source: creation_date direction: older timestring: '%Y.%m.%d' unit: days unit_count: 10
もっとまとめて綺麗にできるかも。でもまあ役割ごとにブロックで分けれたからよし。