この記事はEmbulk Advent Calendarの15日目の記事です。
今回紹介するプラグインはどちらも紹介記事をすでに書いてるのですが、あまり読まれてないっぽいので、、、宣伝のため再度書かせていただきます。
ちなみに本日12/15はEmbulk Meetup Tokyo #2が開催されます。
執筆時点(12/14夜)でまだ空きはありましたのでEmbulkに興味がある方は参加されると良いかと思います。
embulk-input-remote
SCPを使ってリモートホストからファイルを読み込むためのinputプラグインです。remoteっていう命名はちょっと大げさすぎたかなと反省しています(embulk-input-scpとかで良かった...)
昨今のクラウド時代、アプリケーションログなんかは基本的に別途S3とかpapertrailといったクラウドサービスに転送していることが多いかと思いますが、SIerや息の長いWebサービスとかで今でもオンプレ環境で運用している場合、生のログファイルをSCPで収集していることもあるのではないでしょうか。(というか以前運用していたサービスはそうでした)
使い方
基本は対象のホスト群と読み込みたいファイルもしくはディレクトリを指定します。ディレクトリを指定すると配下のファイルを全部読み込みます。
SSHの認証方法はauth:
内に指定します。
-
type: public_key
(公開鍵認証) -
type: password
(パスワード認証)
in:
type: remote
hosts:
- host1
- host2
path: /some/path/app_20150414125923.log
auth:
user: kamatama41
# 公開鍵認証
type: public_key
key_path: /usr/home/.ssh/id_rsa
# パスワード認証
# type: password
# password: {password}
hosts_command
, path_command
オプション
対象Hostとファイルパスは任意のコマンドの結果を利用することができます。
- Host管理(サービスアウト、インなど)を別のミドルウェアで管理している場合
- 読み込みたいファイルに日時が付いてて動的に変えたい場合
なんかの利用を想定しています。が、今はliquidテンプレート機能があるので、そちらでも実現できるかもしれません。
in:
type: remote
# hostsをechoコマンドで指定
hosts_command: echo 'host1,host2'
# hostsのセパレータ(デフォルトは半角スペース)
hosts_separator: ','
# ファイルパスの日付部分を動的に指定
path_command: echo /some/path/app_`date "+%Y%m%d%H%M%S"`.log
ignore_not_found_hosts
オプション
このオプションを使うことで、リモートにファイル(or ディレクトリ)が存在しないHostがあった場合の挙動を調整できます(デフォルトはfalse)。ちなみにSSHが繋がらなかった場合など、ファイルの不存在以外でエラーになった場合はresumeの対象になります。
- trueの場合、無視されます(resumeの対象外になる)
- falseの場合、失敗した扱いになります(resumeの対象になる)
embulk-input-hash
任意の列を任意のアルゴリズムでHash文字列に変換するフィルタです。
用途としては以下のようなものを想定しています
- メールアドレスや電話番号などの機密情報をExport先のキー項目として使いたいが、生で保存するのはちょっと...
値をtoStringしてからHash化するので一応すべての列をHash化できます。が、timestamp型やdouble型がどういう結果になるかは保証できません。
使い方
filters:
- type: hash
columns:
- { name: username }
- { name: email, algorithm: SHA-512, new_name: hashed_email }
-
columns
: Hash化したい列を配列で指定します-
name
: inputの列名です。 -
algorithm
: Hashアルゴリズムを指定します。MessageDigestを内部的には使ってて、そこで指定可能なアルゴリズムを記述します。(デフォルトはSHA-256
) -
new_name
: ハッシュ化した列に新しい名前を付けたい場合に記述します。デフォルトはinputの列名です。
-
アルゴリズムに関して、JavaドキュメントによるとJVMによって使えるものが違うらしいので、自分たちのJVMで使えるアルゴリズムを確認したい場合は以下のコードを実行してみてください。デフォルトでMD5
,SHA-1
,SHA-256
は必ずサポートされているようです。
for (String algorithm : java.security.Security.getAlgorithms("MessageDigest")) {
System.out.println(algorithm);
}