2014年11月15日土曜日

rsyslog + MySQL 特定ホストだけMySQLへの出力を停止するには

以前、シスログをMySQLへ書き出す「rsyslog + MySQL」という記事を書きました。
今回はその記事に少し内容をプラスしてみます。

・ログサーバで、リモートから受け取ったログをファイルとして保存する以外に、MySQLにも保存している
・非常に大量のログを出力するホストがいるが、そのホストからのシスログだけMySQLには出力したいくない

といったシナリオを実現させる方法について2つピックアップしてみます。
※評価は、CentOS6.6 + rsyslogのver8.5.0で行っています


ファシリティで除外する方法


ログを送ってくる側でファシリティを指定できるのであれば、そのファシリティだけMySQLに出力されないようにするのがお手軽です。
*.*;local4.none     :ommysql:localhost,Syslog,rsyslog,PASSWORD


アクションで除外する方法


記述は面倒になりますが、以下のように記述する事で192.168.233.100と192.168.233.101から送られてくるシスログはMySQLへは出力されなくなります。
この場合のキモは”stop”の記述で、それ以降のログ出力の停止、つまりMySQLへのログ出力を停止する事ができます。

$template STOPSQL, "/var/log/%fromhost%/%$year%%$month%%$day%.log"

if \
  ( $fromhost-ip == '192.168.233.100' or \
   $fromhost-ip == '192.168.233.101' ) \
then {
        action(type="omfile"
          DirCreateMode="0750"
          DirGroup="logadmin"
          FileCreateMode="0640"
          FileOwner="logadmin"
          dynaFile="STOPSQL")
        stop
}

*.*     :ommysql:localhost,Syslog,rsyslog,PASSWORD

(備考)
actionとしてomfileを指定する場合、2つ注意することがあります。

1.DirCreateModeやFileCreateModeなどパーミッションに関連するパラメータは、全体に適用されるようにグローバルで指定してあったとしても、上記のように改めて指定する必要があります
2.さらに出力されるファイルの指定(上記だとdynaFileの行)は、一番最後に指定する必要があります

2014年11月5日水曜日

CentOS 7(RHEL7) でIPエイリアスの操作

CentOS7(RHEL7)になってネットワーク周りの設定もだいぶお作法が変わってきました。
今回はタイトルの通り、IPエイリアスの操作についてです。



一時的な(手動による)操作

※書式を確認するときは、ip addr helpとします
IPアドレス、ネットマスク、インターフェース名はお使いの環境にあわせて適宜読みかえてください

<追加時>
# ip addr add 192.168.233.8/24 dev ens32

<削除時>
# ip addr del 192.168.233.8/24 dev ens32

※追加作業後にIPアドレスを確認すると、ens32のセカンダリアドレスとして登録されている事が確認できます。
# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:7e:2f:54 brd ff:ff:ff:ff:ff:ff
    inet 192.168.233.7/24 brd 192.168.233.255 scope global ens32
       valid_lft forever preferred_lft forever
    inet 192.168.233.8/24 brd 192.168.233.255 scope global secondary ens32
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe7e:2f54/64 scope link
       valid_lft forever preferred_lft forever
#


恒久的な操作

※上記1.の方法だと再起動すると追加した設定は消えてしまいます。
  恒久的に保存するにはいくつか方法がありますが、今回はnmtui-editコマンドを使ってみる事にします。
 →この操作で/etc/sysconfig/network-scripts/ifcfg-<interface名>に
   IPADDR1PREFIX1として追加されます


1.nmtui-editコマンドを実行します。
 ※もし書式が崩れるようであれば、 LANG=C nmtui-edit と実行してください

2.IPエイリアスを追加するインターフェースを選択後、[TAB]キーで<Edit...>にカーソルを合わせEnterを押します。










3.次に現在インターフェースに設定されているIPアドレスの下にある<Add...>にカーソルを合わせてEnterを押します。






4.IPエイリアスの設定を追加します。
  追加後、画面右下の<OK>にカーソルを合わせてEnterを押します。







5.一番最初の画面に戻るので、画面右下の<Quit>にカーソルを合わせてEnterを押します。















以上で、OSを再起動しても設定したIPエイリアスが消える事はありません。

2014年11月3日月曜日

CentOS7(RHEL7) デフォルトで起動するkernelを変更するには

CentOS7(RHEL7)になってブートローダーがGRUB2になりました。

kernelのセキュリティアップデートなどで新しいkernelをインストール & リブートして、新しいkernelで起動していると思ったら古いままだったいう事はありませんか?

本来、期待するところとしてはGRUBの時のように、ほっといても一番最新のkernelが起動してくる事です。

ところが(どういった理由でその状態になるかは調べてませんが)、下記のようにmenuentryが登録された場合、OS起動時にデフォルトで起動してくるのは、1番上のkernel(1番古いkernel)になります。

# grep ^menuent /boot/grub2/grub.cfg | awk -F\' '{ print $2 }'
CentOS Linux, with Linux 3.10.0-123.el7.x86_64 <-最も古いkernel
CentOS Linux, with Linux 3.10.0-123.6.3.el7.x86_64  <-最新のkernel
CentOS Linux, with Linux 3.10.0-123.4.4.el7.x86_64
CentOS Linux, with Linux 3.10.0-123.4.2.el7.x86_64
CentOS Linux, with Linux 0-rescue-09cc85c5693c44fe999137f3ea268654
#

前置きが長くなりましたが、今回はこの例のようにmenuentryがきれいに並んでくれなかった場合に、デフォルトで起動するkernelを任意に指定する方法について3つピックアップしてみます。


1./etc/default/grubのGRUB_DEFAULTに起動するkernelの番号を渡す方法
 
‐ /etc/grub2.confなりで先頭がmenuentryから始まる行を確認する
 - 起動するkernelを番号で指定する 
   -> 最初のmenuentryを0(ゼロ)として上から順に扱われる
   -> 上記の前置きでgrepしたmenuentryの例では、一番最新のkernelで起動するなら"GRUB_DEFAULT=1"と指定する
 - 編集が完了後、以下のコマンドでgrub.cfgを生成し直す
  ※grub2になって、/boot/grub2/grub.cfgは直接編集する事ができなくなりました
# grub2-mkconfig -o /boot/grub2/grub.cfg


2./etc/default/grubのGRUB_DEFAULT=savedを活かして、記述を追記する方法

 - 以下の行を追記します
GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=true <-追記
 - 編集完了後、以下のコマンドでgrub.cfgを編集し直す
grub2-mkconfig -o /boot/grub2/grub.cfg
 - OS起動時に起動するkernelを手動で選択する

 以上で、次回からは選択したkernelで起動するようになります。

 
3./etc/default/grubのGRUB_DEFAULT=savedを活かして、grub2-set-defaultコマンドで起動するkernelのmenuentry_id_optionを指定する方法

  - grub2-set-defaultコマンドで指定するmenuentry_id_optionの値を調べてから実施します
grep ^menuentry /boot/grub2/grub.cfg
# grub2-set-default <上記で調べたmenuentry_id_option>
# grub2-mkconfig -o /boot/grub2/grub.cfg

なお、設定した値は、以下のコマンドで確認することができます。
# grub2-editenv list
saved_entry=gnulinux-3.10.0-123.9.2.el7.x86_64-advanced-8bb0c9cd-5584-492e-a498-0723073163b9


※個人的には、新しいkernelをインストールする度に/etc/default/grubを編集する手間のない2番目がお勧めです



(備考)
・/etc/default/grub2で指定可能なオプションは、info grub2 で確認できます

$ info grub2 とするとメニューが出てくるので、
 -> 矢印キーでカーソルを"* Configuration::"の箇所にもっていきEnter
 -> 次に矢印キーでカーソルを"* Sinple configuration::"の箇所に持っていきEnter

・もしくは以下のURLでも確認できます
http://www.gnu.org/software/grub/manual/html_node/Simple-configuration.html#Simple-configuration