サーバー運用に便利なツールのまとめ

便利なツール類などを集めました

サーバログ監視ツール(logwatch)

ログを定期チェックしてメールで知らせてくれる。メールはroot宛てに届く。
宛先を変更する場合は、「/usr/share/logwatch/default.conf/logwatch.conf」を修正。

// インストール
# apt-get install logwatch

// メール宛先を変更(44行目あたり)
# vi /usr/share/logwatch/default.conf/logwatch.conf

-MailTo = root
+MailTo = info@example.com

rootkit検知ツール

rootkitがサーバーにインストールされていないかチェックする。

// インストール
# apt-get install chkrootkit

// 実行
# chkrootkit
ROOTDIR is `/'
Checking `amd'...                                           not found
Checking `basename'...                                      not infected
Checking `biff'...                                          not found
Checking `chfn'...                                          not infected
Checking `chsh'...                                          not infected
Checking `cron'...                                          not infected
Checking `crontab'...                                       not infected
// ~省略~

// 説明
INFECTED // rootkitで変更された可能性がある
not infected // rootkitの痕跡がない
not tested // 点検できなかった
not found // コマンドが無い

sarコマンド

// インストール
# apt-get install sysstat

ポートスキャン(nmap)

空いているポートを調べることが出来ます。悪用しないように。

// インストール
# apt-get install nmap

// 実行例(外部サーバーにも可能)
# nmap 127.0.0.1

Starting Nmap 5.00 ( http://nmap.org ) 
Interesting ports on localhost (127.0.0.1):
Not shown: 992 closed ports
PORT      STATE SERVICE
21/tcp    open  ftp
80/tcp    open  http

Nmap done: 1 IP address (1 host up) scanned in 0.21 seconds

パケットモニタリングツール(tcpdump)

ネットワーク上に流れるパケットモニタリングする事ができます。

// インストール
# apt-get install tcpdump

// 実行例
# tcpdump -X -s 0 -vvv port 21
// 色々と流れてきます。

// 内容を書き出す場合(例えば、ポート21番)
# tcpdump -X -s 0 -vvv port 21 -w /tmp/port21.txt

// 書き出した内容を見る(FTPでダウンロードしてUTF-8で開く)
# lv /tmp/port21.txt

※ 暗号化されていない場合、パスワード情報も記録されるので書き出した場合は削除した方が良い。

ディスク使用率を調べる

// 実行例
# du -hs /var/* | sort -nr
280K    /var/run
265M    /var/log
78M     /var/cache
4.7M    /var/backups
// ~省略~

シンプルにパーテーション毎に使用率を調べるには、 df -Th です。

CPUクロック表示

// 実行例(1秒毎に更新)
# while true; do cat /proc/cpuinfo | grep 'cpu MHz'; sleep 1; done
cpu MHz         : 2400.068
cpu MHz         : 2400.068
cpu MHz         : 2400.068
// ~省略~

// コマンドと書いている部分を変えることで他の繰り返しも出来ます。
# while true; do コマンド; sleep 1; done

// 繰り返しを止める
Ctrl + c

ハードディスク測定ツール(hdparm)

// インストール
# apt-get install hdparm

// 実行例
# hdparm -Tt /dev/vda1

/dev/sda1:
 Timing cached reads:   9976 MB in  2.00 seconds = 4992.35 MB/sec
 Timing buffered disk reads: 146 MB in  3.03 seconds =  48.20 MB/sec

ちなみに、/dev/vda1 を調べるには、fdisk -l です。

負荷テストツール(stress)

// インストール
# apt-get install stress

// 実行例
# stress --timeout 10s --cpu 2 --vm 2 --io 2 --hdd 2

// オプション
--timeout , -t :実行時間 10s=10秒、10m=10分
--cpu , -c :CPUに負荷をかけるプロセスの数(sqrt())
--io , -i :IOに負荷をかけるプロセスの数(sync())
--vm , -m :メモリに負荷をかけるプロセスの数(malloc()/free())
--hdd, -d :ディスクに負荷をかけるプロセスの数(write()/unlink())

// 説明
--io と--hdd はどちらもディスクに負荷をかけるオプションですが、負荷のかけ方が異なります。
--hdd はファイルの生成と削除(write()/unlink())を繰り返し実行することでディスクに重点的に負荷をかけます。
--io はメモリとディスクの同期(sync())を繰り返し実行するため、ディスクとメモリの両方に負荷がかかります。

TCPコネクション数表示

// 実行例
# netstat -an | wc -l
# netstat -n | grep ':80'| wc
# netstat -a | wc -l
# while true; do netstat -n ; sleep 1; done

ホスト名表示

これで正しく表示されない場合、Apacheの再起動時にWarningが出る場合がある。

# hostname --fqdn

管理者権限の付与ツール(sudo)

一般ユーザーが、指定した root コマンドを実行できるようにする。hoge2 は Nginx を再起動を許可するなど。

// インストール
# apt-get install sudo

// sudo ユーザーを追加
# visudo
root    ALL=(ALL) ALL
hoge1    ALL=(ALL) ALL // すべての権限を付与。ユーザー名 ホスト名=(権限) コマンド
hoge2    ALL=(ALL) /etc/init.d/php-fpm, /etc/init.d/nginx // 特定のコマンドのみ付与する場合。

// 実行権限のあるコマンドを表示
hoge2@test:~$ sudo -l
Matching Defaults entries for hoge2 on this host:
    env_reset

User hoge2 may run the following commands on this host:
    (ALL) /etc/init.d/php-fpm, (ALL) /etc/init.d/nginx

// コマンドを実行例
hoge2@test:~$ sudo /etc/init.d/nginx reload
Password: xxxxxxx // hoge2のパスワードを入力。rootのパスワードではないよ。

トラフィック量をリアルタイムに表示(iftop)

topコマンド様な感じでトラフィック量をリアルタイムで確認出来ます。視覚的に見ることが出来るので便利です。

// インストール
# apt-get install iftop

// 起動(監視する iface を指定)
# iftop - i eth0

ファイル同期ツール(rsync)

ネットワーク越しに同期を取る事も可能です。バックアップなどでよく使われるツールです。

// インストール
# apt-get install rsync

// 使い方
rsync [オプション] コピー元 コピー先

// オプション
-a :「-rlptgoD」と指定したのと同様。元のパーミッションやグループなどを保持したまま同期できるので基本的に付加しておく。
-v :処理中の経過ファイル名を表示する。

// 実行例
hoge2@test:~$ rsync -av /dir1/ /dir2/

※ rsync のオプションはまだまだあります。ディレクトリの(/)の扱いにも要注意です。詳しくはネットで検索・・・。

Apacheプロセス数表示

# ps auxw | grep apache | egrep -v "(root|grep)" | wc -l

画像ソフト「imagemagick」

PHPなどのアプリケーションと一緒に使う事が多いです。

// インストール
# apt-get install imagemagick

XFSファイルシステムのデフラグ

Linuxにデフラグは無いと思っている方が居るかもしれませんが、XFSはデフラグが出来るんです・・・。1年以上放置で、断片化率が44%でした。デフラグしても体感できるほどパフォーマンスに影響が出るかどうかは・・・ 感じられず。

// インストール XFSコマンド群
# apt-get install xfsprogs

// ラグメンテーション度合い(断片化量)
# xfs_db -c frag -r /dev/vda1
actual 116181, ideal 105879, fragmentation factor 8.87%

// 最適化
# xfs_fsr /dev/vda1
start inode=0

// デフラグの結果
actual 107499, ideal 105912, fragmentation factor 1.48%

最適化の時間は、標準2時間までです。 オプション「-t 秒指定」で時間指定できます。
月に一度程度、Cronでやってあげても良いかもしれません。最適化中でもディスクにアクセス出来なくなる事は無いです。

スワップ(Swap)を強制的に空にする方法

プログラムでメモリを使いすぎてしまって、スワップが大量に発生した時の解消方法、

// スワップ領域を一旦無効にして戻す
# swapoff -a && swapon -a

このコマンドを実行すると、スワップ領域にあるデータがゆっくりメモリ側に移動します。
最終的には、スワップが0になります。
ただし、メモリ側の空き容量が少ないと、「swapoff failed: Cannot allocate memory」が発生して swapoff が出来ません。
そんな時は、メモリを食ってそうなプログラムを一旦再起動して解放してやると出来るかもしれません。他にも方法がありますが・・・。そこまでしなくても良いかと思います。
慢性的にスワップを使っているようであれば、デーモン側のメモリをチューニングすべきです。MySQL、PHP-FPMなど。

読んで頂いて有り難うございます!