Fluentd(インストール編)
SSHクライアントツールって何を使っている?
私はMacではiTerm2、Winではputty使ってた。
元々、プライベート端末も業務端末もWinだったので、
putty一択で不満はありながらも使ってた。
プライベート端末をMacに変えてiTerm2を使いはじめると、
puttyへの不満が募っていった。
特に開発時にサーバ繋げまくりのウィンドウ開きまくりがいけないのだが、
開きたいウィンドウが分からなくなる。
その点、iTerm2は分割表示もタブ表示もできる。
WinはTeraTerm、putty以外を探したことがないわけではないのですが、
改めて最近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
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つ
まぁ、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
Techブログをはじます
日々の技術検証内容を忘れないようにブログで備忘録を残す。
出来れば1回/週の更新はキープしたい。
メインはインフラ技術の基礎をとりあえず押さえていきたいです。
あくまで私個人の見解だったり、検証当時の結果なので、
勘違いだったり、同じことをしても同じ結果にならないかもしれないことはご留意ください。