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

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

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

試した環境はこちら。

[code]
$ fab –version
Fabric 1.10.2
Paramiko 1.16.0

MacOS10.11
[/code]

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を書いてみました。

[code]
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()
[/code]

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

[code]
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.
[/code]

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

[code]
$ 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.
[/code]

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

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

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

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

以上。