pythonのsftpserverを試す
pythonで書いているバッチのテスト用にsftpサーバを簡単に立ち上げたかった。
探してみるとちょうどよいsftpseverというものを見つけたので使い方を含めてメモ。
GitHub - rspivak/sftpserver: A simple single-threaded SFTP server
ニフティクラウドのロードバランサをAnsibleから操作できるようにしてみた
AWSならbotoと連携するモジュールをAnsibleが正式に提供しているが、
ニフティクラウドのSDKがそもそもPythonに対応していないので、Ansible対応は難しい。
ということでAnsibleに対応するために2点実装した。
(1)botoをニフティクラウド用に修正
(2)Ansible用のモジュール作成
(1)はやり始めると途方がないので、ロードバランサからインスタンスの装着/取外しができるところまで実装した。
以下の様なplaybookを書くと動く
gist.github.com
(1)
github.com
(2)
gist.github.com
implementation of smtpd always returning 500 error.
常に500エラーを返すSMTPサーバを実装した。テスト等に使えるはず。
gist.github.com
工夫ポイント: エラーコードの返し方がsmtpdのドキュメントにはなかったので、ソースから特定した。
ログ監視ツール比較
ログ監視を行いたいが、どのツールがよいのか検討したので、簡単にメモする どのツールが良いかというのは、既存環境との組み合わせや、そもそも既存のツールで完結させたいとかそういう要望次第なのでなんとも言えない。 あくまで自分視点で比較をする。
調べた限り以下のツールが出てきた。
- logmon
- swatch(simple log watcher)
- Zabbix
- fluentd
- logwatch
logmon
github: https://github.com/moomindani/logmon
IBM製のツール。シンプル。サンプルコードとして提供されている。
正規表現を書いて、一致する行が出てきたら即刻メールが飛んでくる。 ファイル名のパターンや正規表現に関する機能もシンプルなので、細かいところに手が届かない。
所詮サンプルなのでカスタマイズが必要
- 言語: perl
- 動作形態: デーモン
swatch(simple log watcher)
URL: https://sourceforge.net/projects/swatch/
イメージ的にはlogmonを改良したもの。 正規表現に一致する行があった時の動作はメールもしくはパイプで任意のコマンドを実行できる。 例えば、以下の記事のようにfluentdと連携することが可能。
http://kyudy.hatenablog.com/entry/2016/06/22/181907
- 言語: perl
- 動作形態: デーモン
Zabbix
URL: https://www.zabbix.com/documentation/2.2/jp/manual/config/items/itemtypes/log_items
logmonと変わらないぐらいシンプル。 単純なログ監視をする場合、かつ既にZabbixを運用しているのなら有用かもしれない。
- 言語: なし(Zabbixのアイテム・トリガー)
- 動作形態: Zabbixの付属機能
fluentd(grep Filter Plugin等)
URL: http://docs.fluentd.org/articles/filter_grep
grepのfilterとfluent-plugin-mailなどを使えば高度なログ監視が実現できるかもしれない。 fluentdが既に入っているなら良いかもしれない。
ただ、正規表現を追加することを想定する場合には、fluentdのリロードが必要なのが少し気持ち悪い気がした。
要件によっては自分でpluginを書いて見てもよいかも。
※ ただの個人の所感です。
- 言語: なし(fluentdの設定で記載する)plugin書く場合はruby
- 動作形態: fluentdの機能の組み合わせ。
logwatch
URL: https://sourceforge.net/projects/logwatch/files/
/var/log以下のログを整形して毎日レポートをくれる。 一般的なsyslogに対応していて、何か起きているとわかりやすく記載してくれるようだ。 内容としては例えばpostfix等でどのぐらいrejectしていたのかなど。
エラーログが出たときにすぐ知りたい、という使い方には対応できない。 他のツールとはその点が大きく異る。
独自アプリのログに対応させるには自分でスクリプト書かないと行けない。
- 言語: perl
- 動作形態: cronで定期実行
swatchをfluentdに連携させる
swatch(Simple Log Watcher)は昔からあるログ監視ツールらしい。
詳細は置いておいて、このswatchの出力をfluentdに送りたい。なぜならばデフォルトでswatchが出力できるのはmailと標準出力なので、サーバの台数が増えてくると管理できなくなる(メール100通とか毎日見たくないし、標準出力をターミナル100個見続けるとか無理)
幸いswatchは出力をpipeすることができる。
このpipeとfluent-catを組み合わせることでswatchの出力をfluentdに送出できる。
実際に動かすところまで実践してみたので、設定内容をメモする。
pipeの引数にforward_fluent.shを指定している。
このシェルは下記の通り、受けた標準出力をfluent-catに渡すものだ。
tagを指定するのと、swatchの出力をfluent-catの入力フォーマット(デフォルトではjson)に変換する必要があるので、シェルを一つかましている。
forward_fluent.sh
実行
$ swatch --daemon -c swatch.conf -f test.log --pid-file=pid
実行すると、echoもしているので色分けされた出力が標準出力に表示される。
また、同時にfluentdにも送信されているのを確認した。
以上
leapmotionでキー入力がしたいのでプロトタイプを作ってみた
perlワンライナー集計処理
以下の様なテキストを入力として受け、出力を合計値にしたい。
a 10000 b c 33 b 100 a 3993
出力
c 33 a 13993 b 100
シェルスクリプトで実装する方法も考えたが、なんだか面倒なので、
なれないPerlワンライナーにチャレンジ
以下を参考にした。
「Perlワンライナー覚書」tossh
http://qiita.com/tossh/items/f8d448c0c039f68c0ea3
結論としては以下とすればよい。
$ cat << EOF | perl -anle '$count{$F[0]}+=$F[1]; END{foreach(keys(%count)){print "$_ $count{$_}"}}' > a 10000 > b > c 33 > b 100 > a 3993 > EOF c 33 a 13993 b 100