Fabricをちょっと試してみた話


こんにちは、いなむーです。

最近、サーバーオペレーションをなんとか楽にできないかなぁと考えながら、日々を過ごしています。
プログラム書ける人であれば、独自に作ってみるのもありだと思いますし、実際作られている方は多々いると思います。
私としては、とにかくさくっとワンライナーとかを流せたらなぁと思い、OSSで既にあればそちらを使用するのが楽ですので、色々探してみた末にFabricに行き着きました。

もともと前職でAnsibleで簡単な構成管理をしていたのでAnsibleにしようか迷ったのですが、いくつかのブログを読んでみるとFabricだともう少し簡単に使えそうに感じたのと、あまり触ったことのないツールだったのでためしてみることしました。

試した環境はこちら。

$ fab --version
Fabric 1.10.2
Paramiko 1.16.0

MacOS10.11

Fabricのインストール方法はいくつかあるようです。情報が古いかもですが、参考までに私が実際に試した方法を載せておきます。
[blogcard url=http://wiki.inamuu.com/index.php?Fabric%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB]

実際に試してみる

下記のようなfabfile.pyを書いてみました。

from fabric.api import *

def ipcheck():
    sudo("cat /var/log/httpd/access.log | awk '{print $1}' | sort | uniq -c | sort -n | tail -10")

def uricheck():
    sudo('cat /var/log/httpd/access.log | awk \'$9 !~ "200|30*" {print $11}\' | sort | uniq -c | sort')

def all():
    ipcheck()
    uricheck()

ログのパスは恐らく変数で引数からもってこれそうですが、とりあえずはこんな感じです。
ipcheckだけ実行してみます。
下記が実行結果です。
※IPアドレスは全て適当に書き換えてます。

fab -H 192.168.100.100 -u hogeuser ipcheck
[192.168.100.100] Executing task 'ipcheck'
[192.168.100.100] sudo: cat /var/log/httpd/access.log | awk '{print $1}' | sort | uniq -c | sort -n | tail -10
[192.168.100.100] Login password for 'hogeuser':
[192.168.100.100] out: sudo password:
[192.168.100.100] out:      81 171.23.0.202
[192.168.100.100] out:     113 66.40.79.139
[192.168.100.100] out:     118 157.0.39.27
[192.168.100.100] out:     119 49.88.143.225
[192.168.100.100] out:     121 222.172.128.230
[192.168.100.100] out:     126 187.155.139.26
[192.168.100.100] out:     130 187.155.139.23
[192.168.100.100] out:     162 177.55.31.29
[192.168.100.100] out:     168 202.168.1.242
[192.168.100.100] out:     538 202.0.101.226
[192.168.100.100] out:


Done.
Disconnecting from 192.168.100.100... done.

良さそうですね。
もう一つの方も実行してみます。

$ fab -H 192.168.100.100 -u hogeuser uricheck
[192.168.100.100] Executing task 'uricheck'
[192.168.100.100] sudo: cat /var/log/httpd/access.log | awk '$9 !~ "200|30*" {print $11}' | sort | uniq -c | sort
[192.168.100.100] Login password for 'hogeuser':
[192.168.100.100] Login password for 'hogeuser':
[192.168.100.100] out: sudo password:
[192.168.100.100] out:       1 "http://***.***.**.***/"
[192.168.100.100] out:       1 "http://www.inamuu.com/"
[192.168.100.100] out:       1 "inamuu.com/magazine"
[192.168.100.100] out:      55 "-"
[192.168.100.100] out:     168 "http://inamuu.com/hogehoge.php"
[192.168.100.100] out:


Done.
Disconnecting from 192.168.100.100... done.

これはhogehoge.phpにアタックを受けているかもしれませんね。

ちなみにどちらも実行する場合は all を引数にすることでどちらも実行されるように書いてます。

こんな感じでさらりとサーバーの状態をログから調査したりするワンライナーを実行できるので、結構使えるかも?って思いました。
これにnice -19とかつけたらいいかな?とか考えていくと、SSHをしないでもオペレーションができるようになる部分が増えたり、オペレーションそのものの精度があがっていくのではと期待してます。

この内容をGitで管理して、お便利ワンライナーみたいなのが増えるとオペレーションを一子相伝みたいなことしなくてもいいのかな、と妄想しています。
まずは自分の作業を楽にするためにもう少し試してみて、仕事でも使ってみようかなと思ってます。

以上。