読者です 読者をやめる 読者になる 読者になる

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

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

ESXI5.5上でOpenstack10をインストールしてみた

ESXI5.5上でOpenstack10をインストールして、ゲストOSへアクセスできるところまで確認します。

自宅環境
サブネット:192.168.0.0/24
GAEWAY:192.168.0.1

ESXI;192.168.0.99
今回ゲストサーバは以下のスペックとする

 

f:id:ma_suzuki:20170422171300j:plain

ゲストサーバの設定で、INTEL-VTが有効になっていること

f:id:ma_suzuki:20170422171309j:plain


さらに、仮想スイッチでゲストサーバが所属するポートグループ
※ここではvmnetworkになりますが、セキュリティで無差別モードになっていることを確認

f:id:ma_suzuki:20170422171326j:plain

f:id:ma_suzuki:20170422171335j:plain

 

それぞれのNICIPアドレスは以下の通り
NIC0:192。168.0.90
NIC1;設定なし(ゲスト通信用にopenvsitchの物理ポートとして使用)
br-ex;192.168.0.50


すでにゲストサーバにCentos7を導入済みとして記載を進めます。
192.168.0.90に対してSSH接続を行います。

/etc/environmentの変更を行います。
vi /etc/environment
以下を追加

LANG=en_US.utf-8
LC_ALL=en_US.utf-8

続いて、不要なサービス郡を停止します。
sudo systemctl disable firewalld
sudo systemctl stop firewalld
sudo systemctl disable NetworkManager
sudo systemctl stop NetworkManager
sudo systemctl enable network
sudo systemctl start network

 

続いて/dev/sdbに対して設定を行い、vggroup「cinder-volumes」を作成します。
#fdisk /dev/sdb
以下実行ログ
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
Partition number (1-4, default 1):
First sector (2048-209715199, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-209715199, default 209715199):
Using default value 209715199
Partition 1 of type Linux and of size 100 GiB is set

Command (m for help): wq
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.


設定が反映されたか確認します。
以下実行ログ
# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): p

Disk /dev/sdb: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x015e9c64

Device Boot Start End Blocks Id System
/dev/sdb1 2048 209715199 104856576 83 Linux

Command (m for help): quit


続いて物理ボリュームを作成します。
# pvcreate /dev/sdb1
Physical volume "/dev/sdb1" successfully created.

設定を確認します。
# pvdisplay
"/dev/sdb1" is a new physical volume of "100.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb1
VG Name
PV Size 100.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID ONXDnq-RR0e-n2S6-AbnO-uFfF-O7jG-3qlJjJ


続いて、作成した物理ボリュームに対して、vgグループ「cinder-volumes」を作成します。
# vgcreate cinder-volumes /dev/sdb1
Volume group "cinder-volumes" successfully created

設定を確認します。
# vgdisplay
--- Volume group ---
VG Name cinder-volumes
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size 100.00 GiB
PE Size 4.00 MiB
Total PE 25599
Alloc PE / Size 0 / 0
Free PE / Size 25599 / 100.00 GiB
VG UUID 1CfQ78-BYqx-jCCn-dzYr-7i3g-fqP2-9XOOGp


続いて、RDOリポジトリ追加、OSのパッケージのupdate、openstackのインストールまで行います。
sudo yum install -y https://repos.fedorapeople.org/repos/openstack/openstack-ocata/rdo-release-ocata-2.noarch.rpm
sudo yum update -y
sudo yum install -y openstack-packstack

再起動を行います。
#reboot

続いてopenstackをallinoneで導入します。
#packstack --allinone --provision-demo=n --os-neutron-ovs-bridge-mappings=extnet:br-ex \
--os-neutron-ml2-type-drivers=vxlan,flat

エラーなく終了することを確認します。

**** Installation completed successfully ******

Additional information:
* A new answerfile was created in: /root/packstack-answers-20170422-123257.txt
* Time synchronization installation was skipped. Please note that unsynchronized time on server instances might be problem for some OpenStack components.
* File /root/keystonerc_admin has been created on OpenStack client host 192.168.0.90. To use the command line tools you need to source the file.
* To access the OpenStack Dashboard browse to http://192.168.0.90/dashboard .
Please, find your login credentials stored in the keystonerc_admin in your home directory.
* The installation log file is available at: /var/tmp/packstack/20170422-123255-0NFr3n/openstack-setup.log
* The generated manifests are available at: /var/tmp/packstack/20170422-123255-0NFr3n/manifests
You have new mail in /var/spool/mail/root
[root@localhost log]#


外部接続用ブリッジ作成を行います。ens33からbr-exを作成します。
まずインターフェースの状況を確認
# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
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:0b:d7:a8 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.90/24 brd 192.168.0.255 scope global ens32
valid_lft forever preferred_lft forever
inet6 2408:211:82a7:5e00:20c:29ff:fe0b:d7a8/64 scope global mngtmpaddr dynamic
valid_lft 2591935sec preferred_lft 604735sec
inet6 fe80::20c:29ff:fe0b:d7a8/64 scope link
valid_lft forever preferred_lft forever
3: ens33: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
link/ether 00:0c:29:0b:d7:b2 brd ff:ff:ff:ff:ff:ff

br-exを作成
#cd /etc/sysconfig/network-scripts/
#cp ifcfg-ens33 ifcfg-br-ex
#vi ifcfg-br-ex
以下のように編集

=====
DEVICE=br-ex
DEVICETYPE=ovs
TYPE=OVSBridge
BOOTPROTO=static
IPADDR=192.168.0.50
NETMASK=255.255.255.0
GATEWAY=192.168.0.1
DNS1=8.8.8.8
ONBOOT=yes 続きを読む

python学習

どうも。


AWSを学習するうえで避けられないプログラミング。

各サービス → SNS →Lambdaによる通知などを行いたい際は、
インフラ屋は非常に苦労する羽目になる。
という自分もプログラミングは苦手意識が強く、Lambdaを利用するうえでPython
学習はほぼ必須ということで今更ながら、いろいろ初心者向けの勉強をしているので、ちょっとずつここに記載していきたいと思います。


1.標準入力から複数文字を整数として表示させる場合、

#vim test.py

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

# -*- coding: utf-8 -*-
import os
import sys

s = raw_input().split() ←受け取った入力をスペースで分割し、リストに入れる
a = int(s[0]) ←リストの1番目を整数型に変更し、変数aに代入
b = int(s[1]) ←リストの2番目を整数型に変更し、変数bに代入

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

# python test.py

10 20 ←入力
10 ← aに格納された10が表示
20 ← bに格納された20が表示

 

2.if文の書き方

bashですと

if [ a -eq b] ; then
echo aaa
elif [ a -ne b ] ; then
echo bbb

といった書き方ですが、

pythonの書き方は、

if a = b:
print "aaa"
elif a <> b:
print "bbb"

となります。結構なれるとbashより簡単です。

 

3.while文を利用する場合

test = 4
cnt = 1
while cnt != 10
a == test * cnt
print a,
cnt +=1

▼尚、printの文字の後に「,」改行が半角スペースに置き換えられる

####実行結果
# python test.py
4 8 12 16 20 24 28 32 36


4.リストに格納された要素数をカウントする
a = [ ]
a.append("test")
a.append("bbb")
print a

▼以下表示
['test', 'bbb']

関数lenを利用
y = len(a)
print y

▼以下表示
2 # 要素数が表示された


5.文字列の加工
リストの文字の間に「,」を代入して普通に表示させたい場合
y = ','.join(a)
print y

▼以下表示
test,bbb #[]表示ではない、かつ「,」が代入された状態で表示

さらにprintで表示する文字を加工します
※単純につなぎたい文字を「+」でつなぐだけですね。。。

print "HOGEHOGE " + y + " OMG"

▼以下表示
HOGEHOGE test,bbb OMG

艦これ月次勲章取得(備忘録)

いつものブログと関係ないですが、趣味として艦これを2年ほど続けてまして。

 1-5,2-5,3-5,4-5,5-5とそれぞれ毎回編成について苦労するため今回記載したいと思います。ちょとずつ更新です。

 

 

○2-5編成

駆逐艦3,航戦1、重巡1,軽巡1の構成。
夜戦ルート確定のルートです。

駆逐艦

▲1隻目
10cm連装高角砲
10cm連装高角砲
22号水上電探


▲2隻目
12.7cm連装砲B型改二
12.7cm連装砲B型改二
22号水上電探


▲3隻目
120mm連装砲
120mm連装砲
22号水上電探


重巡
20.3cm(3号)連装砲
20.3cm(3号)連装砲
九八水上偵察機
32号水上電探


軽巡
15.2cm連装砲
15.2cm連装砲
零式水上観測機

○航戦
試製41cm三連装砲
試製41cm三連装砲
瑞雲
瑞雲

EC2インスタンス初期構築時のセットアップをまとめてみた

EC2を最初に作成した時に、
cloud-initにより、ec2-userなどの設定がデフォルトで動作し、AWSのデフォルトAMIではアクセスキーの作成やそれを利用した秘密鍵による認証によりサーバログインとなるため使い勝手が悪い。

よって、AWSのデフォルトAMIからインスタンスを作成し、
cloud-initの設定が反映されないように変更を行い、テンプレートとなるAMIを
作成し新規のEC2インスタンスはそのテンプレートAMIを利用していきたいと思う。

また、EC2インスタンスでは、AWSCLIコマンドを実行できるように設定していきたいと思う。


○事前準備
EC2インスタンスにアタッチするIAMロールを作成する。
とりあえずすべての操作を行いたいので、ポリシーはAWSデフォルトの
「AdministratorAccess」をアタッチします。

ロール名:aws_ec2_admin_role
ポリシー名:AdministratorAccess


続いて、インスタンスの作成から、クイックスタートの中の
Red Hat Enterprise Linux 7.3 (HVM), SSD Volume Type」を選択し
作成。

作成が終わったら、ec2-userでログインを行います。

○メイン作業
1.まずcloud-initの編集を行います。

以下をコメントアウトします。
#vi /etc/cloud/cloud.cfg

コメントアウト箇所
===========================
# - set_hostname
# - update_hostname
# - ssh

# - locale
# - set-passwords
# - timezone
system_info:
# default_user:
# name: ec2-user
# lock_passwd: true
# gecos: Cloud User
# groups: [wheel, adm, systemd-journal]
# sudo: ["ALL=(ALL) NOPASSWD:ALL"]
# shell: /bin/bash
# vim:syntax=yaml

===========================

2.sshdを変更し、rootでのパスワードログイン不可とともに
それ以外のユーザーによるパスワードログインを許可します。

以下を項目を追加します
===========================
PermitRootLogin no
PasswordAuthentication yes
===========================

3.続いて、testユーザーを作成し、sudo権限を付与。
testユーザーでsshログインを行い、ec2-userを削除します。

#useradd test
#visudo
以下を追加
===========================
test ALL=(ALL) ALL
===========================

testユーザでログインしrootにスイッチ後
以下コマンド実行
#userdel ec2-user


4.つづいてサーバのホスト名を変更、locale変更、timezone変更を行います。

▲ホスト名を変更
#vi /etc/hostname
template

▲locale変更
#localectl set-locale LANG=ja_JP.utf8
#localectl set-keymap jp106
#localectl status
以下の通り変更されます
System Locale: LANG=ja_JP.utf8
VC Keymap: jp106
X11 Layout: jp
X11 Model: jp106
X11 Options: terminate:ctrl_alt_bksp

▲timezone変更
#timedatectl set-timezone Asia/Tokyo
# timedatectl status
以下の通り変更されます。
Local time: Sat 2017-02-11 22:08:08 JST
Universal time: Sat 2017-02-11 13:08:08 UTC
RTC time: Sat 2017-02-11 13:08:07
Time zone: Asia/Tokyo (JST, +0900)
NTP enabled: yes
NTP synchronized: yes
RTC in local TZ: no
DST active: n/a


5.awscliコマンド,jqコマンドを導入します。

▲まず、初期構築時は、wgetとunzipが導入されていないため
インストールします。
#yum -y install wget unzip


▲つづいてawscliを導入します。(/usr/local/aws配下にインストールします)
#wget https://s3.amazonaws.com/aws-cli/awscli-bundle.zip
#unzip awscli-bundle.zip
#mkdir /usr/local/aws

#cd awscli-bundle
#./install -i /usr/local/aws -b /usr/local/bin/aws
#aws --version

以下の通り、awscliのバージョンが表示されること
aws-cli/1.11.47 Python/2.7.5 Linux/3.10.0-514.el7.x86_64 botocore/1.5.10

▲つづいてawsコマンドのコンフィグ設定を行います。
#aws configure

以下の通り入力
=========================== 
AWS Access Key ID [None]:  ←なにもしないでエンター
AWS Secret Access Key [None]: ←なにもしないでエンター
Default region name [ap-northeast-1]:ap-northeast-1
Default output format [json]:json
=========================== 

#cat /root/.aws/config
以下の通り表示されること
=========================== 
[default]
output = json
region = ap-northeast-1
=========================== 

▲さらにjqを導入します。

#wget https://github.com/stedolan/jq/releases/download/jq-1.5/jq-linux64
#mv jq-linux64 /bin/jq
#jq

以下の通り表示されること
=========================== 
jq - commandline JSON processor [version 1.5]
Usage: jq [options] <jq filter> [file...]

jq is a tool for processing JSON inputs, applying the
given filter to its JSON text inputs and producing the
filter's results as JSON on standard output.
The simplest filter is ., which is the identity filter,
copying jq's input to its output unmodified (except for
formatting).
For more advanced filters see the jq(1) manpage ("man jq")
and/or https://stedolan.github.io/jq

Some of the options include:
-c compact instead of pretty-printed output;
-n use `null` as the single input value;
-e set the exit status code based on the output;
-s read (slurp) all inputs into an array; apply filter to it;
-r output raw strings, not JSON texts;
-R read raw strings, not JSON texts;
-C colorize JSON;
-M monochrome (don't colorize JSON);
-S sort keys of objects on output;
--tab use tabs for indentation;
--arg a v set variable $a to value <v>;
--argjson a v set variable $a to JSON value <v>;
--slurpfile a f set variable $a to an array of JSON texts read from <f>;
See the manpage for more options.


以上で、初期構築は完了で、これをテンプレートAMIとして利用していきたいと思います。

 

windows fluentdインストールをやってみた

windowsにfluentdを入れてみたので手順をまとめてみました。

※2016年10月時点で可能な手順です。。


http://rubyinstaller.org/downloads/

RubyとDevKitをダウンロードします。

f:id:ma_suzuki:20161106150341j:plain

 

Ruby 2.2.x(64bit)をインストール

f:id:ma_suzuki:20161106150348j:plain


セットアップ言語に日本語を選択します。

f:id:ma_suzuki:20161106150358j:plain

Rubyファイルの実行ファイルへ環境変数Pathを設定する」にチェックをいれる

 

f:id:ma_suzuki:20161106150432j:plain

インストール完了

 

f:id:ma_suzuki:20161106150452j:plain

 

続いて、DevKitをインストール
DevKit-mingw64-64-4.7.2-20130224-1432-sfx.exeを選択して実行

 

f:id:ma_suzuki:20161106150523j:plain

 

f:id:ma_suzuki:20161106150601j:plain

 

解凍先指定で、「c:\ruby」などにする

f:id:ma_suzuki:20161106150612j:plain

 

 

コマンドプロンプトを起動し、以下のコマンドを実行する。
以下の例は、rubyは「c:\Ruby22-x64」、devkitは「c:\ruby」にインストールしている例。

cd c:\ruby
ruby dk.rb init
「c:\ruby\config.yml」を開き、「 - C:/Ruby22-x64」を追記する。

f:id:ma_suzuki:20161106150834j:plain

 

f:id:ma_suzuki:20161106150904j:plain

 

ruby dk.rb install を実行

 

続いてgitをインストールする

http://www.git-scm.com/

f:id:ma_suzuki:20161106150945j:plain

git for windows をダウンロードしてインストールを行う

f:id:ma_suzuki:20161106150957j:plain

 

f:id:ma_suzuki:20161106151011j:plain

 

f:id:ma_suzuki:20161106151019j:plain


rubygemsの証明書が古くて、gem install bundlerでこけるので以下のサイトにアクセスする
http://guides.rubygems.org/ssl-certificate-update/#manual-solution-to-ssl-issue

 

f:id:ma_suzuki:20161106151045j:plain

GlobalSignRootCA.pemをダウンロードして
AddTrustExternalCARoot.pemとリネームする

 

f:id:ma_suzuki:20161106151058j:plain

 

gem which rubygemsを実行して証明書パスを確認する

f:id:ma_suzuki:20161106151109j:plain

例:C:/Ruby22-x64/lib/ruby/2.2.0/rubygems/ssl_certsがあることを確認する

f:id:ma_suzuki:20161106151240j:plain

 

既存のAddTrustExternalCARoot.pemを新しく取得したAddTrustExternalCARoot.pemに置き換える

f:id:ma_suzuki:20161106151316j:plain

 

コマンドプロンプトを開き以下の通り入力する

cd c:\

f:id:ma_suzuki:20161106151431j:plain


git clone https://github.com/fluent/fluentd.git

cd fluentd

f:id:ma_suzuki:20161106151450j:plain

gem install bundler

bundle

f:id:ma_suzuki:20161106151513j:plain

 

bundle exec rake build
gem install pkg\fluentd-0.14.8.gem

f:id:ma_suzuki:20161106151550j:plain

 

 

インストールが完了したら以下実行してエラーが表示されないことを確認する
fluentd -c ./example/in_forward.conf

以下の画面が表示されていたら成功です。

f:id:ma_suzuki:20161106151603j:plain

 

ちなみにfluentd on windowsは非常にリソースを食うため、起動すると

CPUを専有してしまいました(2コアのため、1コア専有。CPU50%を常に使用)

ちょっと重すぎますね。。。

windowsではちょっと使えないかも。。

 

f:id:ma_suzuki:20161106151727j:plain

 

f:id:ma_suzuki:20161106151745j:plain

 

以上です。

EC2 windowsインスタンス初期設定

AWSwindowsインスタンスを作成する際に、毎度のこと調べてしまうため、

やることをメモとして残します。
①管理者パスワードの変更
参考:
http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/WindowsGuide/ec2-windows-passwords.html#change-admin-password

ローカル管理者パスワードを変更を行うには、
インスタンスに接続して、コマンドプロンプトを管理者権限で以下を入力し実行する。
C:\> net user Administrator "new_password"
※パスワード部分は二重符号で囲むこと

windowsインスタンスの日本語化を行う
参考:
http://niccloud.niandc.ne.jp/?p=1230

日本語ラインゲージパックを導入する


1.コントロールパネルから「Language」を起動します。そして「Add a Language」をクリックします。

2.「日本語」を選択し、右下の「Add」をクリックします。

3.日本語表示もできるように「Option」をクリックします。

4.「Windows Display Language」に「Download and install language pack」が表示されます。
リンクをクリックして導入をします。ダウンロードして導入されるまでの時間は10分程度。

5.完了すると「Installation Complete」が表示されます。再度日本語のOptionを選択します。

6.「Make this the primary language 」選択して日本語を優先にすると、一度ログオフを要求されるため、ログオフを行い再度ログインし直す。

7.日本語で表示されていることを確認する。


③更に再起動するとシステム時間がUTCになってしまうためシステム時間をJSTに保つ設定を行う。
windows 2008以降は再起動すると時間が戻ってしまうとのこと。
参考:
http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/WindowsGuide/windows-set-time.html#windows-persisting-time-changes-w2k8

windows右下の時間をクリックして「日付と時刻の時間を設定」をクリックする。
タイムゾーンの変更を選択して、タイムゾーンを「大阪、札幌、東京」に変更する。

コマンドプロンプトを管理者権限で以下を入力し実行する。
C:\> reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation" /v RealTimeIsUniversal /d 1 /t REG_DWORD /f

 

④更にツールを入れようとすると文字化けが発生するため、以下の対応を行います。

参考:

http://www.loconoco.info/?p=1115

Windows8.1の記事ですが、windows2012でも同じ手順なので、問題ないです。

1.「コントロールパネル」→「時計、言語、および地域」を開く

2.日付、時刻、または数値の形式の変更」をクリックして開く

3.それぞれのタブの言語設定を“日本”に変更

  1. ・「形式」タブの「形式」
  2. ・「場所」タブの「主な使用場所」
  3. ・「管理」タブ、「システムローケールの変更」内の「Unicode対応ではないプログラムの言語」
  4. ・設定変更を行い、OSを再起動します。

 

以上。

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が作成されるまで(クライアント側からログが転送されるまで)は
リンク切れとなるため、要注意。