@johtaniの日記 2nd

@johtani ‘s blog 2nd edition

Curator 1.2および1.1について

Curatorの1.2.0がリリースされました。

前回のCuratorの記事が古くなってしまった(1.1.0からコマンドのI/Fが変更された)ので 1.1.0および1.2.0に関する記事を翻訳しておきます。

ちなみに、Curatorとは、Elasticsearchに時系列のインデックス(例:LogstashやFluentdでログを保存)を保存している場合にそれらのインデックスを管理(削除したり、クローズしたり)するための便利なツールです。 Curatorの概要については、GitHubリポジトリ前回の記事をご覧ください。

Curator 1.1.0リリース (2014/06/13公開)

元記事:elasticsearch curator - version 1.1.0 released

Elasticsearch 1.0.0がリリースされ、新しい機能、Snapshot & Restoreが利用できるようになりました。 Snapshotはある時点でのインデックスの写真を撮るように、バックアップを作成することができます。 1.0.0が発表されてすぐに、この機能に関するリクエストが寄せられるようになりました。 「Curatorにスナップショットを追加して!」もしくは「いつCuratorでスナップショットが使えるようになる?」といった感じです。 これがあなたの要望なら、それはついに叶えられました。しかも他の追加機能も一緒にです。

新機能

Curatorの新機能は以下のとおりです。

  • 新CLI構造
  • スナップショット(Snapshot)
  • エイリアス(Aliases)
  • パターンによる除外インデックス指定
  • 配置ルーティング(Allocation Routing)
  • インデックスとスナップショットの表示
  • リポジトリ管理(個別のスクリプトによる)
  • ドキュメントWiki

新コマンドライン構造

注意:コマンドライン構造の変更とは、Curator 1.1.0以前のcron記述が動作しないことを意味します。Curator 1.1.0にアップグレードする場合はコマンドも修正が必要となるので注意してください。

シンプルにするために、commandsという概念を追加しました。 また、ヘルプの出力もわかりやすくなっています。 前のバージョンと同じタスクをCuratorは実行できますが、異なるフォーマットを用いるようになりました。

旧コマンド:

1
curator -d 30

新コマンド:

1
curator delete --older-than 30

コマンドは、フラグとは異なりハイフンを前に付けないことに注意してください。 また、似たような名前のフラグがあることに気をつけてください。 例えば、--older-thanフラグは多くのコマンドに利用できます。 指定される値は各ケースにおいて同一です。「指定された数よりも古いインデックス」となります。

新しいコマンドのリストは次のとおりです。

  • alias
  • allocation
  • bloom
  • close
  • delete
  • optimize
  • show
  • snapshot

コマンドのヘルプは次のコマンドで表示されます。

1
curator [COMMAND] --help

コマンドに関係あるフラグがすべて表示されます。

スナップショット(snapshots)

snapshotコマンドで、存在しているリポジトリにインデックスのスナップショットを保存することができます。

Curatorはインデックス毎に1つのスナップショットを作成し、インデックスから名前をつけます。 例えば、インデックスの名前がlogstash-2014.06.10の場合、スナップショットの名前はlogstash-2014.06.10となります。 指定した条件を元に、シーケンシャルに、1つずつインデックスのスナップショットを作成していきます。

1
curator snapshot --older-than 20 --repository REPOSITORY_NAME

このコマンドは、20日以上古いインデックスすべてのスナップショットを作成し、REPOSITORY_NAMEで指定されたリポジトリに保存します。

es_repo_mgrと呼ばれるリポジトリ作成を支援するスクリプトがCuratorには含まれています。 ファイルシステムおよびS3タイプのリポジトリ両方の作成を支援します。

さらに、古いインデックスのスナップショットを取ることができることに加えて、Curatorは最新のインデックスをアップロードする方法も提供します。 これは、Elasticsearch Marvelのインデックスをアップロードするときに便利です。 トラブルシューティングを目的として、パフォーマンスデータを他の人に見せる場合などです。

1
curator snapshot --most-recent 3 --prefix .marvel- --repository REPOSITORY_NAME

このコマンドでは、最新の3つのMarvelインデックスのスナップショットを指定されたリポジトリに保存できます。

エイリアス(aliases)

Curatorはすでに存在するエイリアスにインデックスを追加することも、削除することもできるようになりました。 ただし、エイリアスがすでに存在している必要があります。エイリアスの作成はできません。

last_weekという前の一週間のインデックスのエイリアスを保持していること想像してください。 この場合、次の2つのコマンドを利用することで、エイリアスを管理できます。

1
2
curator alias --alias-older-than 7 --alias last_week
curator alias --unalias-older-than 14 --alias last_week

新しく作られたインデックスがインデックステンプレートによって 自動的にエイリアスの一部となるようにElasticsearchに設定しておくと、さらに便利です。 この場合、新しいインデックスが自動的にthis_weekというエイリアスの一部になるようにしてあれば、以下のコマンドのみとなります。

1
curator alias --unalias-older-than 7 --alias this_week

this_weeklast_weekのエイリアスのアップデートを保持できます。

パターンによる除外(exclude pattern)

時には、指定したインデックスを操作から除外したくなる場合もあるでしょう。 ここまでは、プレフィックスや日付によって選択されたインデックスのみを対象にしてきました。 そこで、--exclude-patternオプションです。これは、指定したインデックスを除いて処理を行うことができます。

logstash-2014.06.11というインデックスを決して削除したくないとします。 この場合、次のコマンドのようになります。

1
curator delete --older-than 15 --exclude-pattern 2014.06.11

Curatorはデフォルトでlogstash-というプレフィックスにマッチしますが、2014.06.11というインデックスは対象外となります。

配置ルーティング(allocation routing)

Elasticsearchはノードにタグを付けることができます。 これらのタグはインデックスやシャードをクラスタのどこに配置するかをコントロールするために役立ちます。 一般的なユースケースだと、高性能なSSDドライブを持ったノードをインデキシングのために、ハードディスクを持った性能の低いマシンは検索頻度が低い古いインデックスを配置するといった場合です。 この場合、HDDノードには、elasticsearch.ymlnode.tag: hdd、SSDノードにはnode.tag: ssdと設定されているべきです。 Curatorはこの時、インデックスをタグに基づいてオフピークの時間帯に再配置させることができます。

コマンド:

1
curator allocation --older-than 2 --rule tag=hdd

index.routing.allocation.require.tag=hddという設定が2日よりも古いインデックスに適用されます。 これは、インデックスのシャードがnode.tag: hddというノードに再配置される必要があると、Elasticsearchに伝えます。

インデックスとスナップショットの表示(show indices and snapshots)

これは、単にあなたの持っているインデックスやスナップショットがどんなものかを表示します。

1
curator show --show-indices

これは、デフォルトプレフィックスのlogstash-にマッチするすべてのインデックスを表示します。

1
curator show --show-snapshots --repository REPOSITORY_NAME

これは、指定されたリポジトリにある、デフォルトプレフィックスのlogstash-にマッチするすべてのスナップショットを表示します。

リポジトリ管理(repository management)

前に説明したとおり、es_repo_mgrと呼ばれるヘルパースクリプトをCuratorは含んでいます。 現時点では、fss3タイプをサポートしています。 リポジトリを作る前に利用したいタイプのドキュメントを読むようにしてください。 例えば、fsタイプのリポジトリを各ノードで使う場合は、同じ共有ファイルシステムに、同じパスでアクセスできなければなりません。 パスの指定は--locationです。

fsタイプリポジトリの作成

1
es_repo_mgr create_fs --location '/tmp/REPOSITORY_LOCATION' --repository REPOSITORY_NAME

削除

1
es_repo_mgr delete --repository REPOSITORY_NAME

ドキュメントWiki

Curatorのドキュメントが更新され、オンラインにWiki形式でだれでも更新できるようになっています。 コマンドやフラグのより詳細の情報はこちらで見つけることができます。また、もし、興味があれば、ドキュメントを追加することもできます。

インストールと更新

Curator 1.1.0はPyPiリポジトリにあります。 インストールは以下のとおりです。

1
pip install elasticsearch-curator

バージョン1.0.0からアップグレードする場合は以下のとおりです。

1
2
pip uninstall elasticsearch-curator
pip install elasticsearch-curator

バージョン1.0.0よりも古いバージョンからのアップグレードは以下のとおりです。

1
2
3
pip uninstall elasticsearch-curator
pip uninstall elasticsearch
pip install elasticsearch-curator

pip uninstall elasticsearchで、古いパイションモジュールをを削除します。 適切なバージョンが依存関係により再インストールされます。

まとめ

Curatorの新機能は素晴らしいです!このリリースは大きな改善です。 もし、トラブルや足りないものを見つけた場合はGitHub Issueに報告してください。 また、Curatorが便利だと思ったら、私たちに伝えてください。#elasticsearchタグを付けてツイートしてください!

Curatorはまだ、始まったばかりです。Curator 2.0のロードマップを作業中です。ここまで読んでいただきありがとうございます。 Happy Curating!


Curator 1.2.0リリース(2014/07/24)

元記事:curator 1.2.0 released

Curator v1.1.0のリリースから、数週間が経ちました。 私たちは、Curator 1.2.0をリリースしました。

新機能(new features)

  • ユーザ指定の日付パターン:長い間リクエストされていた機能
  • ウィークリーインデックスのサポート:これも長い間リクエストされていた機能
  • 複数のログフォーマットオプション:Logstashフォーマットが利用可能

これらの変更はCuratorドキュメントにも記載されています。

更新(updates)

  • ログ出力の整理:デフォルトのログ出力を整理しました。デバッグログはすべて表示されます。
  • ドライランのログ出力の詳細化:テスト実行時に何が起きたかをわかりやすくしました。

日付パターンと--timestring(date patterns and –timestring)

前のリリースで、セパレータ文字を利用して、インデックス名のエレメントを分離することで、日付を計算しました。 この設計の決定は、プログラムが管理するために設計されたLogstashのインデックスを使うのには簡単でした。 しかし、Curatorは時系列インデックス管理に成長しています。これは、異なる命名規則のインデックスを意味しています。

また、インターバルによって、日付の計算が必要になる場合もあります。 --time-unitオプションが残っており、weeksという単位を指定することもできます。 デフォルトの--timestringオプションは、以前のコマンドと同様の動作をしなければなりません。次のようになります。

Time Unit Timestring
days %Y.%m.%d
hours %Y.%m.%d.%H
weeks %Y.%W

これが意味するものは、もし、単位にhoursをした場合、--timestringを指定しなかった場合は%Y.%m.%d.%Hとなります。 これは、Pythonのstrftimeフォーマットで”年.月.日.時”を意味します。 同様に、weeksを単位に指定した場合、Curatorはデフォルトの--timestring%Y.%Wとなります。

この機能は、日付の間にセパレーター文字のないインデックスでも機能します。 例えば、production-20140724のような日時インデックスがある場合、2日よりも古いインデックスに対するブルームフィルタっキャッシュのオフのコマンドは次のようになります。

1
curator bloom --prefix production- --older-than 2 --timestring %Y%m%d

この例で、デフォルトの単位はdaysであることに注意してください。hourly-2014072414のような時間インデックスの場合は次のようになります。

1
curator bloom --prefix hourly- --older-than 2 --time-unit hours --timestring %Y%m%d%H

--separatorの置き換え

もし、Curatorの前のバージョンでカスタムセパレータ文字を利用していた場合、次のように変更すべきです。 前のコマンドでcerberus-2014-07-24のようなインデックスがある場合、コマンドを--separator -の用に置き換える必要があります。 新しいコマンドは次のとおりです。

1
curator delete --prefix cerberus- --older-than 30 --timestring %Y-%m-%d

年(%Y)と月(%m)と日(‘%d’)の間にセパレータ文字を置くだけです。

これは、また、Curatorで以前は不可能であったことをできるようにもします。 異なるセパレータ文字の混在です。 logs-2014.07.24-14というようなインデックスを処理するときに--timestring%Y.%m.%d-%Hのようになります.

--timestringの詳細はCuratorのドキュメントをご覧ください。

フィードバック

これらの新しい機能はユーザのコメントやリクエストから来ています。もし、機能のリクエストやバグを発見したら、こちらまで連絡してください。

また、Twitterでもお待ちしています。私たちのTwitter IDは@elasticsearchです。

Happy Curating!

Comments