インフラエンジニア徒然日記

なんちゃってインフラエンジニアです。てきとーに日々のことを記載します。

fluentdを検証してみた

 

fluentdを検証してみたのでメモ書きとして残します。

・OS情報
RHEL7.1
カーネルバージョン:3.10.0-229.7.2.el7.x86_64

fluentdサーバ側:172.16.1.36
fluetndクライアント側:172.16.1.129


★★サーバ側設定

#curl -L https://toolbelt.treasuredata.com/sh/install-redhat-td-agent2.sh | sh
#cd /etc/td-agent
#cp -p td-agent.conf td-agent.conf-`date -I`
#vim td-agent.conf

以下設定を投入
######################################################################
<source>
type forward
port 24224
bind 0.0.0.0
</source>

<match test.messages>
type copy #複数の処理を行いたい場合は、copyプラグインを使用する
<store>
type file #ファイルを作成するプラグインを使用する
path /var/log/td-agent/logs/messages #ファイルのパスを指定する
time_slice_format %Y%m%d #ファイル名の path 以降に追加される時間のフォーマット形式
time_slice_wait 10m #バッファをフラッシュするまでの待ち時間
flush_interval 60m #データフラッシュの間隔
flush_at_shutdown true #shutdown実行時にバッファからデータを出力する
format out_file #バッファをファイルに書き出すプラグインを使用
buffer_chunk_limit 32m #バッファチャンクのサイズを指定する。上限を超えた場合はバッファをフラッシュする
</store>
<store>
type grep #messageをgrepするプラグインを使用する
input_key message #grepの対象とするレコードを指定する
regexp1 message HOGE #messageレコードの中で「HOGE」と一致する文言を処理する
add_tag_prefix grep_filter #tagのプレフィックスに「grep_filter」を付与する
</store>
</match>


<match grep_filter.*>
type file
buffer_type file
path /var/log/fluentd/log.messages
symlink_path /var/log/fluentd/log.messages #シンボリックリンクファイルのパスを指定する
buffer_path /var/log/fluentd/log.messages.buf #バッファファイルのパスを指定する
</match>
######################################################################


★ログ保管用にディレクトリを追加する
#mkdir /var/log/td-agent/logs/
#mkdir /var/log/fluentd/

 

★fluentdをroot権限で動かすため、以下ファイルを作成・設定する
#vim /etc/sysconfig/td-agent
######################################################################
DAEMON_ARGS="--user root"
TD_AGENT_ARGS="/usr/sbin/td-agent --group root --log /var/log/td-agent/td-agent.log"
######################################################################

 

grep プラグインを追加
参考:https://github.com/sonots/fluent-plugin-grep

regexp/excludeで条件に一致した文字列に対してアクションを実行する
今回は条件に一致したら、test.messagesの「grep_filter」というタグをつける

#/opt/td-agent/embedded/bin/fluent-gem install fluent-plugin-grep
#systemctl restart td-agent


以下のログが出力されていれば正常起動(エラーがない)。
#cat /var/log/td-agent/td-agent.log
######################################################################
2016-11-04 15:35:39 +0900 [info]: reading config file path="/etc/td-agent/td-agent.conf"
2016-11-04 15:35:39 +0900 [info]: starting fluentd-0.12.29
2016-11-04 15:35:39 +0900 [info]: gem 'fluent-mixin-config-placeholders' version '0.4.0'
2016-11-04 15:35:39 +0900 [info]: gem 'fluent-mixin-plaintextformatter' version '0.2.6'
2016-11-04 15:35:39 +0900 [info]: gem 'fluent-plugin-grep' version '0.3.4'
2016-11-04 15:35:39 +0900 [info]: gem 'fluent-plugin-kafka' version '0.3.1'
2016-11-04 15:35:39 +0900 [info]: gem 'fluent-plugin-mongo' version '0.7.15'
2016-11-04 15:35:39 +0900 [info]: gem 'fluent-plugin-rewrite-tag-filter' version '1.5.5'
2016-11-04 15:35:39 +0900 [info]: gem 'fluent-plugin-s3' version '0.7.1'
2016-11-04 15:35:39 +0900 [info]: gem 'fluent-plugin-scribe' version '0.10.14'
2016-11-04 15:35:39 +0900 [info]: gem 'fluent-plugin-td' version '0.10.29'
2016-11-04 15:35:39 +0900 [info]: gem 'fluent-plugin-td-monitoring' version '0.2.2'
2016-11-04 15:35:39 +0900 [info]: gem 'fluent-plugin-webhdfs' version '0.4.2'
2016-11-04 15:35:39 +0900 [info]: gem 'fluentd' version '0.12.29'
2016-11-04 15:35:39 +0900 [info]: adding match pattern="test.messages" type="copy"
2016-11-04 15:35:39 +0900 [warn]: time_slice_wait is ignored if flush_interval is specified: <store>
type file
path /var/log/td-agent/logs/messages
time_slice_format %Y%m%d
time_slice_wait 10m
flush_interval 60m
flush_at_shutdown true
format out_file
buffer_chunk_limit 32m
buffer_path /var/log/td-agent/logs/messages.*
</store>
2016-11-04 15:35:39 +0900 [info]: adding match pattern="grep_filter.*" type="file"
2016-11-04 15:35:39 +0900 [info]: adding source type="forward"
2016-11-04 15:35:39 +0900 [info]: using configuration file: <ROOT>
<source>
type forward
port 24224
bind 0.0.0.0
</source>
<match test.messages>
type copy
<store>
type file
path /var/log/td-agent/logs/messages
time_slice_format %Y%m%d
time_slice_wait 10m
flush_interval 60m
flush_at_shutdown true
format out_file
buffer_chunk_limit 32m
buffer_path /var/log/td-agent/logs/messages.*
</store>
<store>
type grep
input_key message
regexp1 message HOGE
add_tag_prefix grep_filter
</store>
</match>
<match grep_filter.*.*>
type file
buffer_type file
path /var/log/fluentd/log.messages
symlink_path /var/log/fluentd/log.messages
buffer_path /var/log/fluentd/log.messages.buf
</match>
</ROOT>
2016-11-04 15:35:39 +0900 [info]: listening fluent socket on 0.0.0.0:24224

######################################################################

 

ちなみに「grep」のpluginがない場合は起動に失敗する。

# systemctl restart td-agent
######################################################################
Job for td-agent.service failed. See 'systemctl status td-agent.service' and 'journalctl -xn' for details.
######################################################################

 

/var/log/td-agent/td-agent.logを確認して、何が原因かを確認する
※今回は「grep」のプラグインがわからないとエラーがでて起動失敗しているためプラグインを追加する。
######################################################################
2016-11-04 15:30:45 +0900 [error]: config error file="/etc/td-agent/td-agent.conf" error="Unknown output plugin 'grep'. Run 'gem search -rd fluent-plugin' to find plugins"
2016-11-04 15:30:45 +0900 [info]: process finished code=256
2016-11-04 15:30:45 +0900 [warn]: process died within 1 second. exit.
######################################################################

 

★★クライアント側

#curl -L https://toolbelt.treasuredata.com/sh/install-redhat-td-agent2.sh | sh
#cd /etc/td-agent
#cp -p td-agent.conf td-agent.conf-`date -I`
#vim td-agent.conf

以下設定を投入
######################################################################
<source>
type tail #tailプラグインを利用する(linuxのtailのような動きをする)
path /var/log/messages
format syslog #syslogのログファイルをJSON形式にパースできるsyslogプラグインを指定
pos_file /var/log/td-agent/messages.pos #tailプラグインでどこまで読み込んだかを記憶する
tag test.messages #タグ名を指定する
</source>


#hostname追加
<filter test.*>
type record_transformer #tag名がfilterで指定したファイルに対してレコードを追加する
<record>
hostname ${hostname} #ホスト名を追記
tag ${tag} #タグ名を追記
</record>
</filter>


## Output
<match test.*>
type forward
<server>
name test01
host 172.16.1.36
port 24224
</server>
</match>
######################################################################


★fluentdをroot権限で動かすため、以下ファイルを作成・設定する
#vim /etc/sysconfig/td-agent
######################################################################
DAEMON_ARGS="--user root"
TD_AGENT_ARGS="/usr/sbin/td-agent --group root --log /var/log/td-agent/td-agent.log"
######################################################################


#systemctl restart td-agent

以下のログが出力されていれば正常起動(エラーがない)。
#cat /var/log/td-agent/td-agent.log
######################################################################
2016-11-04 15:40:21 +0900 [info]: reading config file path="/etc/td-agent/td-agent.conf"
2016-11-04 15:40:21 +0900 [info]: starting fluentd-0.12.29
2016-11-04 15:40:21 +0900 [info]: gem 'fluent-mixin-config-placeholders' version '0.4.0'
2016-11-04 15:40:21 +0900 [info]: gem 'fluent-mixin-plaintextformatter' version '0.2.6'
2016-11-04 15:40:21 +0900 [info]: gem 'fluent-plugin-kafka' version '0.3.1'
2016-11-04 15:40:21 +0900 [info]: gem 'fluent-plugin-mongo' version '0.7.15'
2016-11-04 15:40:21 +0900 [info]: gem 'fluent-plugin-rewrite-tag-filter' version '1.5.5'
2016-11-04 15:40:21 +0900 [info]: gem 'fluent-plugin-s3' version '0.7.1'
2016-11-04 15:40:21 +0900 [info]: gem 'fluent-plugin-scribe' version '0.10.14'
2016-11-04 15:40:21 +0900 [info]: gem 'fluent-plugin-td' version '0.10.29'
2016-11-04 15:40:21 +0900 [info]: gem 'fluent-plugin-td-monitoring' version '0.2.2'
2016-11-04 15:40:21 +0900 [info]: gem 'fluent-plugin-webhdfs' version '0.4.2'
2016-11-04 15:40:21 +0900 [info]: gem 'fluentd' version '0.12.29'
2016-11-04 15:40:21 +0900 [info]: adding filter pattern="test.*" type="record_transformer"
2016-11-04 15:40:21 +0900 [info]: adding match pattern="test.*" type="forward"
2016-11-04 15:40:21 +0900 [info]: adding forwarding server 'test01' host="172.16.1.36" port=24224 weight=60 plugin_id="object:3fecb37c76b4"
2016-11-04 15:40:21 +0900 [info]: adding source type="tail"
2016-11-04 15:40:21 +0900 [info]: using configuration file: <ROOT>
<source>
type tail
path /var/log/messages
format syslog
pos_file /var/log/td-agent/messages.pos
tag test.messages
</source>
<filter test.*>
type record_transformer
<record>
hostname ${hostname}
tag ${tag}
</record>
</filter>
<match test.*>
type forward
<server>
name test01
host 172.16.1.36
port 24224
</server>
</match>
</ROOT>
2016-11-04 15:40:21 +0900 [info]: following tail of /var/log/messages

######################################################################


実際に転送されたログを確認します。
★test02側(fluentdクライアント)のログ
/var/log/messages(抜粋)
######################################################################
Nov 4 16:05:38 test02 nm-dispatcher: Dispatching action 'dhcp4-change' for eth0
######################################################################


★test02側(fluentdサーバ)のログ
/var/log/td-agent/logs/messages.20161104.b54073f64c0093526(抜粋)
※デフォルトだとログファイル名の後ろに「日付+バッファファイルの識別子」が付与される
参考:http://docs.fluentd.org/articles/out_file#path-required
######################################################################
2016-11-04T16:05:38+09:00 test.messages {"host":"test02","ident":"nm-dispatcher","message":"Dispatching action 'dhcp4-change' for eth0","hostname":"test02","tag":"test.messages"}
######################################################################

 

上記のようにJSON形式のパースされており、またログの最後尾に、クライアント側で設定した
ホスト名とタグ名が付与されていることが確認できます。
######################################################################

type record_transformer
<record>
hostname ${hostname}
tag ${tag}
</record>
"hostname":"test02","tag":"test.messages"
######################################################################

 

つづいて、サーバ側で設定した以下の設定が有効になっているか確認します。
######################################################################
<store>
type grep
input_key message
regexp1 message HOGE
add_tag_prefix grep_filter
</store>

######################################################################


条件に一致した場合は、タグに「grep_filter」を付与します。
そのあと、サーバの最下部で設定した通り、/var/log/fluentd/log.messagesに出力されるか確認します。
######################################################################
<match grep_filter.*>
type file
buffer_type file
path /var/log/fluentd/log.messages
symlink_path /var/log/fluentd/log.messages
buffer_path /var/log/fluentd/log.messages.buf
</match>
######################################################################


★動作確認
######################################################################
[root@test02 td-agent]# logger "HOGE"
[root@test02 td-agent]# cat /var/log/messages
Nov 4 16:32:39 test02 root: HOGE

★/var/log/fluentd/log.messagesを確認
[root@test01 ~]# cat /var/log/fluentd/log.messages
2016-11-04T16:32:39+09:00 grep_filter.test.messages {"host":"test02","ident":"root","message":"HOGE","hostname":"test02","tag":"test.messages"}
上記のとおりmessageにHOGEが含まれていた場合は、別ファイルに吐き出されることを確認できました。

 

補足:
symlink_path は buffer_path で指定したログファイルへのシンボリックリンクとなるため、ファイル名を固定したい場合(監視とか)に重宝する
buffer_pathがフラッシュされて別ファイルに名前が変わっても自動的にシンボリックリンクを張りなおしてくれるため、かなりの便利機能
ただし、buffer_pathに指定したログファイルがフラッシュされると、新規にbuffer_pathが作成されるまで(クライアント側からログが転送されるまで)は
リンク切れとなるため、要注意。

 

 

LPI300合格への道②(終わり)

2016年5月に合格したので書いてみます。

まずは結果から、

○結果
満点:800点
得点:720点
合格最低点:500点

○各セクションの正解率
OpenLDAPの設定:75%
OpenLDAPの認証バックエンドとしての利用:100%
Sambaの基礎:90%
Sambaの共有の設定:100%
Sambaのユーザーとグループの管理:100%
Sambaドメイン統合:100%
Sambaのネームサービス:80%
Linux及びWindowsクライアントの利用:80%


今回の試験で「LPIC-3 specialty」の認定がされました。
パチパチパチ♪

○勉強方法
これまたなかなか情報がないんですよね~。
※受かった人から聞いたら、configファイルの設定に説明が書いてあるやつを丸暗記
 各コマンドのオプションを丸暗記すればいけると言われました。

 

ステップ1
ひとまず、Linux教科書 LPICレベル3 300試験 を買って、
教科書を一読します。この時点では大体概要把握程度で構わないと思います。
※なんちゃらWEB問題集があれば一発らしいですが使用しない方向で。

↓↓問題集はこちら
https://www.amazon.co.jp/Linux%E6%95%99%E7%A7%91%E6%9B%B8-LPIC-%E3%83%AC%E3%83%99%E3%83%AB3-%E4%B8%AD%E5%B3%B6-%E8%83%BD%E5%92%8C/dp/4798116556

 

ステップ2
問題集をさらっと読んでも1ミリも頭には入りません(1%くらいなら可能かも)。
全部の章を構築する必要はありませんが(というか一から順にこの教科書の設定を投入すると他の設定に影響があり動かなくなるため一度まっさらにしないと切り分けするはめにw)ある程度構築する必要はあります。

 

構築した内容としては、結構簡素なものでさらっと動作確認くらいです。
Openldapサーバーの構築(OU作成してユーザー作成してくらいまでで他linuxサーバからログインできるまで)
Sambaサーバ構築
SambaサーバのNTドメイン及びActiveドメインコントローラ化
Sambaサーバに対してWindowsサーバからドメイン認証できること

 

ちなみにですが、Sambaは昔利用したことがあります。ただし、ドメコンにしたことはありませんがというかふつーしないのでは、LDAPも業務で使用しましたが、新LDAPサーバたててバックアップから復元。旧LDAPサーバ廃止程度です。

 

ステップ3
教科書の各章の問題と章末の模擬問題集を100%にします。
ただし、これだけでは絶対にうかりません。うければわかりますが、
オプションや、configの設定やconfigファイル名をかけ的な問題がほとんどなので
丸暗記しないと対応できません。ので仕方ないので全部丸暗記しました←
印刷して、赤色で塗りつぶし緑色のシートで隠して正解は~を書き出します。
configファイルなんかは記述なので、手で書いて覚えたほうがいいと思います。
文章問題もありますが、だいたい触ったことがあるなら消去法でイケルと思いますね。

 

ステップ4
試験申し込み後、受験して合格しますw

 

○勉強期間
4月中旬から5月末まで
だいたい1ヶ月半。

 

○余談
LPIC3については、
「Core」と「specialty」という2種類の資格体系となっていました。

認定証名「LPIC-3 Specialty」
LPI300
LPI302
LPI303
LPI304

認定証名「LPIC-3 Core」
LPI301

このうち、LPI301、LPI302は2014年3月末で受験が終了してしまってました。。
なので、LPICレベル3の認定としては「LPIC-3 Specialty」が唯一となります。
LPI300,303,304のどれかに受かれば「LPIC-3 Specialty」です。
※昔はLPIC-3 Coreを取得後、LPI302,303,304のどれかをとらないとSpecialtyに
 なれなかったのに・・・・・。。。。

 

今回この資格を受験しなくては行けなかったのは会社の指示ですので、
とりあえず、LPI300,303,304のどれかを受けようと考え、比較検討です。

 

・LPI300の試験内容
OpenLDAPとSamba3と4の両方のドメイン機能とツール
特にSamba4が「アクティブディレクトドメインコントローラ」として対応している

・LPI303
暗号化、セキュリティなど

・LPI304
仮想化(XenとかKVM)及び高可用性クラスタについて


まぁこのなかで一番環境簡単に準備できそうなのは、LPI300だなと・・・
暗号化やセキュリティは業務で触っていないし、XenとかKVMとかは自宅の貧弱サーバがVTに対応してなくて・・・・買い換えないと動かせないし。。。。
消去法というか選択肢はただ一つ!!


以上です。読んでいただいてありがとうございました。

 

LPIC300合格への道①

会社からの指示で、LPIC3を取得することとしました。

 

LPIC3はすでに301を取得しておりましたが、
どうやら2014年に廃止になってしまったようで。。。
まぁこれでもいいようですが、新しく取ったほうがいいようです・・汗

 

LPIC3は3つの試験のどれかを取得すればよく。
300 LDAPsamba
303 暗号化やsecurityなど
304 仮想化など(kvm)とか

 

仕事上windowsのADを使うことが予想(かもね?)されるので

また過去300の対象がLDAPだったこともあり。

300で行きたいと思います。

一応期限は5月末まで。。。

果たして間に合うのか。。。・ω・

 

とりあえず愛妻弁当なるものを作ってもらった一週目のお話

どうもスズキです。

 

愛妻弁当なるものを作ってもらいました。

ひとまずそれを列挙していきたいと思います!

月曜日。

f:id:ma_suzuki:20160129184917j:plain

 

水曜日

f:id:ma_suzuki:20160129185003j:plain

 

 

続いて金曜日。

f:id:ma_suzuki:20160129185043j:plain

 

ラブライブのエリーチカが好きなのですが

嫁がある程度趣味を理解?ありまして作ってもらえました。

 

こんな感じですが、来週以降もブログにあげていきたいと思います!