Fluentd(インストール編)

SSHクライアントツールって何を使っている?
私はMacではiTerm2、Winではputty使ってた。
元々、プライベート端末も業務端末もWinだったので、
putty一択で不満はありながらも使ってた。
プライベート端末をMacに変えてiTerm2を使いはじめると、
puttyへの不満が募っていった。
特に開発時にサーバ繋げまくりのウィンドウ開きまくりがいけないのだが、
開きたいウィンドウが分からなくなる。
その点、iTerm2は分割表示もタブ表示もできる。
WinはTeraTermputty以外を探したことがないわけではないのですが、
改めて最近Google先生に尋ねてみたところ、、、あった。

Poderosa

ポルトガル後らしく直訳するとパワフル。シンプル 笑
UIが素晴らしい。
分割表示、タブ表示はもちろんSSHセッション一つ一つにショートカットキーが割り当てたり、
分割のどこに割り当てるから自由に選択可能。
捗る。
ぜひ試してみてください。

Fluentd

さて、本題。
前々からよく耳にはしていたものの試せていなかったFluentdにようやく手を伸ばしました。
イメージとしては

  • 柔軟
  • 導入が簡単
  • 既存システムに影響を与えない
  • OSS

いいことだらけ?
そんな美味しい話ある?
あとで壺とか買わされない?

とりあえず試してみる。

本家サイトのトップページに書いてあるように

  • 入力
  • フィルター/バッファ
  • 出力

の流れで形成される。
単純に入力 -> 出力だけでもよい。

冗長化された複数のWebサーバのaccess_logをサーバ単位でタグ付けして集約して運用改善、とかそんな感じかな。

とりあえずインストールしてみた。

  • OS : CentOS7
インストール

本家サイトにあるがコマンド一発でインストールできます。

# curl -L http://toolbelt.treasuredata.com/sh/install-redhat-td-agent2.sh |sh
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   660  100   660    0     0  19078      0 --:--:-- --:--:-- --:--:-- 19411
This script requires superuser access to install rpm packages.
You will be prompted for your password by sudo.
curl: (6) Could not resolve host: packages.treasuredata.com; Unknown error
error: http://packages.treasuredata.com/GPG-KEY-td-agent: import read failed(2).
Loaded plugins: fastestmirror
base                                                                                                                                                                                                                  | 3.6 kB  00:00:00     
extras                                                                                                                                                                                                                | 3.4 kB  00:00:00     
treasuredata                                                                                                                                                                                                          | 2.9 kB  00:00:00     
updates                                                                                                                                                                                                               | 3.4 kB  00:00:00     
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * extras: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * extras: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
Resolving Dependencies
--> Running transaction check
---> Package td-agent.x86_64 0:2.1.5-0 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

=============================================================================================================================================================================================================================================
 Package                                                  Arch                                                   Version                                                  Repository                                                    Size
=============================================================================================================================================================================================================================================
Installing:
 td-agent                                                 x86_64                                                 2.1.5-0                                                  treasuredata                                                  99 M

Transaction Summary
=============================================================================================================================================================================================================================================
Install  1 Package

Total download size: 99 M
Installed size: 215 M
Downloading packages:
Delta RPMs disabled because /usr/bin/applydeltarpm not installed.
td-agent-2.1.5-0.x86_64.rpm  |  99 MB  00:00:43     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Warning: RPMDB altered outside of yum.
  Installing : td-agent-2.1.5-0.x86_64        1/1 
adding 'td-agent' group...
adding 'td-agent' user...
prelink detected. Installing /etc/prelink.conf.d/td-agent-ruby.conf ...
Configure td-agent to start, when booting up the OS...
  Verifying  : td-agent-2.1.5-0.x86_64        1/1 

Installed:
  td-agent.x86_64 0:2.1.5-0

Complete!
# rpm -q td-agent
td-agent-2.1.5-0.x86_64

簡単。
こぴぺで完了。
つまらないのでshファイルを覗いてみます。

]# cat install-redhat-td-agent2.sh 
echo "This script requires superuser access to install rpm packages."
echo "You will be prompted for your password by sudo."

# clear any previous sudo permission
sudo -k

# run inside sudo
sudo sh <<SCRIPT

  # add GPG key
  rpm --import http://packages.treasuredata.com/GPG-KEY-td-agent

  # add treasure data repository to yum
  cat >/etc/yum.repos.d/td.repo <<'EOF';
[treasuredata]
name=TreasureData
baseurl=http://packages.treasuredata.com/2/redhat/\$releasever/\$basearch
gpgcheck=1
gpgkey=http://packages.treasuredata.com/GPG-KEY-td-agent
EOF

  # update your sources
  yum check-update

  # install the toolbelt
  yes | yum install -y td-agent

SCRIPT

簡単。
予想通りですが。。
yumリポジトリを定義してyum install。

Syslogメッセージのコピー

まずは最もシンプルな設定からどんな感じか味わう。

  • 設定内容

/var/log/messagesに出力されたメッセージを
/var/log/td-agent/copy-messagesファイルへ転送する。

  • 設定ファイル

/etc/td-agent/td-agent.conf

sourceタグとmatchタグで入力と入力に対する処理内容を定義する。

# cat /etc/td-agent/td-agent.conf
<source>
  type tail
  path /var/log/messages
  pos_file /tmp/messages.pos
  format syslog
  tag syslog.messages
</source>

<match syslog.messages>
  type file
  path /var/log/td-agent/copy-messages
</match>

sourceタグ内に入力を定義する。
type tail => ファイルへの入力を追いかける
path => 指定されたファイルパスをtailの対象とする
pos_file => ファイルに対してどこまで処理したかを記録する
format => メッセージ形式の指定(syslogやapache2などがある)
tag => matchで引っ掛けるため

matchタグ内に入力に対する処理内容を定義する
matchで対象となるtagを指定する。*によるワイルドカード指定可能。
type file => ファイルへの出力
path => 指定されたファイルパスに対して出力する

fluentd起動
# /etc/init.d/td-agent restart
Restarting td-agent (via systemctl):            [  OK  ]
# cat /var/log/td-agent/copy-messages.20150325.b5121681c2e412c5c
2015-03-25T14:55:05+09:00	syslog.messages	{"host":"centos7-test","ident":"td-agent","message":"Starting td-agent: [  OK  ]"}
2015-03-25T14:55:05+09:00	syslog.messages	{"host":"centos7-test","ident":"systemd","message":"Started LSB: td-agent's init script."}

標準フォーマットでは日時、タグ、syslogフォーマットを分解したメッセージをJSON形式で記憶する。
確かに導入は簡単だし、
アプリケーションに設定を埋め込むわけではないので、
既存システムへの影響は少ないというのは納得。
ということでインストール編は以上。

次回はもう少し色々な入力プラグイン、出力プラグインを試しつつ、
実用的な検証をしてみよう。

CentOS7(ネットワーク編)

はてなブログはシンプルなところが好きです。

3ヶ月ほど前から検証で利用するLinuxOSはCentOS7をメインとしている。
CentOS6からコマンド周りは変わりましたが、
正直、慣れればそんなに変わった印象はない。

最初、なんじゃこりゃ!ってなったのは

  • ネットワーク周り
  • サービス周り

今回はネットワーク編
と言っても複雑なことを記載するつもりはない。
誰もが通るであろう設定のみを抜粋する。

お題はNetworkManager推奨とよく使っていたコマンドが標準外な件です。

1. NetworkManager推奨

CentOS6では「NetworkManager = 邪魔な奴」⇒ 即無効化、が私の中での当たり前だったが、CentOS7からはNetworkManagerの利用が推奨らしい。
ただし今まで通り、設定ファイルの作成でも動作する。
という割にはバージョン番号が1に達していないじゃん。(20150324現在)

# rpm -q NetworkManager
NetworkManager-0.9.9.1-29.git20140326.4dba720.el7_0.x86_64

NetworkManagerで用意された設定ツールは以下の2つ

  • nmcli (CLI
  • nmtui(GUI

まぁ、CLIだしょ。

nmcli

まずはnmcliのヘルプを表示しました。

# nmcli --help
Usage: nmcli [OPTIONS] OBJECT { COMMAND | help }

OPTIONS
  -t[erse]                                   terse output
  -p[retty]                                  pretty output
  -m[ode] tabular|multiline                  output mode
  -f[ields] <field1,field2,...>|all|common   specify fields to output
  -e[scape] yes|no                           escape columns separators in values
  -n[ocheck]                                 don't check nmcli and NetworkManager versions
  -a[sk]                                     ask for missing parameters
  -w[ait] <seconds>                          set timeout waiting for finishing operations
  -v[ersion]                                 show program version
  -h[elp]                                    print this help

OBJECT
  g[eneral]       NetworkManager's general status and operations
  n[etworking]    overall networking control
  r[adio]         NetworkManager radio switches
  c[onnection]    NetworkManager's connections
  d[evice]        devices managed by NetworkManager

ふむ、OBJECTを指定して、続きはその中なのね。
OBJECTは最短一致っぽい。

# nmcli ge --help

Usage: nmcli general { COMMAND | help }

COMMAND := { status | hostname | permissions | logging }

  status

  hostname [<hostname>]

  permissions

  logging [level <log level>] [domains <log domains>]

ふーん。
とりあえず設定を見てみよう。

ホスト名確認
# nmcli g hostname
localhost
ホスト名設定
# nmcli g hostname centos7-test
(結果は何も表示されない)
# hostname
centos7-test

NetworkManager経由で設定すると即時反映だ。
注意。

# cat /etc/sysconfig/network
# Created by anaconda

あれ?いつものところに追記されるわけじゃないんだ。
ちなみに/etc/sysconfig/networkファイルに
HOSTNAME=***
GATEWAY=***
を追記して再起動してもOSには反映されなかった。
値はどこで持ってるんだろう。。

# cat /etc/hostname
centos7-test

これなのかな?

あ、このペースだと終わらないのでペースアップ。

インタフェース確認
# nmcli c
NAME    UUID                                  TYPE            DEVICE 
ens192  03da7500-2101-c722-2438-d0d006c28c73  802-3-ethernet  ens192 
インタフェースの設定項目確認
# nmcli c s ens192
connection.id:                          ens192
connection.uuid:                        03da7500-2101-c722-2438-d0d006c28c73
connection.interface-name:              --
connection.type:                        802-3-ethernet
connection.autoconnect:                 yes
connection.timestamp:                   1427227625
connection.read-only:                   no
connection.permissions:                 
connection.zone:                        --
connection.master:                      --
connection.slave-type:                  --
connection.secondaries:                 
connection.gateway-ping-timeout:        0
802-3-ethernet.port:                    --
802-3-ethernet.speed:                   0
802-3-ethernet.duplex:                  --
802-3-ethernet.auto-negotiate:          yes
802-3-ethernet.mac-address:             --
802-3-ethernet.cloned-mac-address:      --
802-3-ethernet.mac-address-blacklist:   
802-3-ethernet.mtu:                     auto
802-3-ethernet.s390-subchannels:        
802-3-ethernet.s390-nettype:            --
802-3-ethernet.s390-options:            
ipv4.method:                            manual
ipv4.dns:                               
ipv4.dns-search:                        
ipv4.addresses:                         { ip = 192.168.1.153/24, gw = 192.168.1.254 }
ipv4.routes:                            
ipv4.ignore-auto-routes:                no
ipv4.ignore-auto-dns:                   no
ipv4.dhcp-client-id:                    --
ipv4.dhcp-send-hostname:                yes
ipv4.dhcp-hostname:                     --
ipv4.never-default:                     no
ipv4.may-fail:                          yes
ipv6.method:                            auto
ipv6.dns:                               
ipv6.dns-search:                        
ipv6.addresses:                         
ipv6.routes:                            
ipv6.ignore-auto-routes:                no
ipv6.ignore-auto-dns:                   no
ipv6.never-default:                     no
ipv6.may-fail:                          yes
ipv6.ip6-privacy:                       -1 (unknown)
ipv6.dhcp-hostname:                     --
GENERAL.NAME:                           ens192
GENERAL.UUID:                           03da7500-2101-c722-2438-d0d006c28c73
GENERAL.DEVICES:                        ens192
GENERAL.STATE:                          activated
GENERAL.DEFAULT:                        yes
GENERAL.DEFAULT6:                       no
GENERAL.VPN:                            no
GENERAL.ZONE:                           --
GENERAL.DBUS-PATH:                      /org/freedesktop/NetworkManager/ActiveConnection/1
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/Settings/0
GENERAL.SPEC-OBJECT:                    --
GENERAL.MASTER-PATH:                    --
IP4.ADDRESS[1]:                         ip = 192.168.1.153/24, gw = 192.168.1.254
IP6.ADDRESS[1]:                         ip = fe80::250:56ff:fe97:7a91/64, gw = ::

項目多いなぁ。。

インタフェース有効化

ONBOOTをyesにします。

# nmcli c m ens192 connection.autoconnect yes
# grep ONBOOT /etc/sysconfig/network-scripts/ifcfg-ens192
ONBOOT=yes
IPアドレス設定

IPアドレスをstaticと同時にIPアドレスとデフォルトGWを指定します。

# nmcli c m ens192 ipv4.method manual ipv4.addresses "192.168.1.153/24 192.168.1.254"
# egrep "BOOTPROTO|IPADDR|PREFIX|GATEWAY" /etc/sysconfig/network-scripts/ifcfg-ens192
BOOTPROTO=none
IPADDR=192.168.1.153
PREFIX=24
GATEWAY=192.168.1.254
# ip a
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: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:50:56:97:7a:91 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.153/24 brd 192.168.1.255 scope global ens192
       valid_lft forever preferred_lft forever
    inet6 fe80::250:56ff:fe97:7a91/64 scope link 
       valid_lft forever preferred_lft forever
IPv6無効化

CentOS6から変更なし

# echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf
# echo "net.ipv6.conf.default.disable_ipv6 = 1" >> /etc/sysctl.conf
# sysctl -p
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
# ip a
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
2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:50:56:97:7a:91 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.153/24 brd 192.168.1.255 scope global ens192
       valid_lft forever preferred_lft forever

2. よく使っていたコマンドが使えない

CentOS7を最小インストールすると今まで当たり前のように使っていたコマンドがありません。
net-toolsという標準外パッケージに含まれていますが、
どうせなら標準でやり繰りできるスマートな大人になりたい。
以下、対応表。

用途 CentOS6 CentOS7
IPアドレス確認 ifconfig ip a
ルーティング確認 netstat -rn ip r
arpテーブル確認 arp -a ip n
ソケット確認 netstat -a ss -a

ソケット確認はnetstatで確認できていたものがなんやらかんやらという記載を見た覚えが。。。

Techブログをはじます

日々の技術検証内容を忘れないようにブログで備忘録を残す。

出来れば1回/週の更新はキープしたい。

メインはインフラ技術の基礎をとりあえず押さえていきたいです。

あくまで私個人の見解だったり、検証当時の結果なので、

勘違いだったり、同じことをしても同じ結果にならないかもしれないことはご留意ください。