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

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

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

python学習

IT-AWS 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インスタンス初期構築時のセットアップをまとめてみた

IT-AWS

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インストールをやってみた

IT-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インスタンス初期設定

IT-AWS

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を検証してみた

IT-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に対応してなくて・・・・買い換えないと動かせないし。。。。
消去法というか選択肢はただ一つ!!


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