ログ収集ツールfluentdを使ってみる

Posted by stay-foolish in fluentd, Ruby, インフラ | Tagged , , | Leave a comment
このエントリーをはてなブックマークに追加
はてなブックマーク - ログ収集ツールfluentdを使ってみる
Share on Facebook
Bookmark this on Yahoo Bookmark
Bookmark this on Livedoor Clip

最近ログ周りの解析が多いので、何やらよく聞き出したfluentdを使ってみることにしました。

#Rubyの1.9.2以上が必要らしいので要注意

まずはインストール。これはgemでやってしまいました。

# gem install fluentd
/usr/local/ruby1.9/lib/ruby/1.9.1/yaml.rb:56:in `<top (required)>':
It seems your ruby installation is missing psych (for YAML output).
To eliminate this warning, please install libyaml and reinstall your ruby.
Fetching: msgpack-0.4.6.gem (100%)
Building native extensions.  This could take a while...
Fetching: yajl-ruby-1.1.0.gem (100%)
Building native extensions.  This could take a while...
Fetching: iobuffer-1.1.2.gem (100%)
Building native extensions.  This could take a while...
Fetching: cool.io-1.1.0.gem (100%)
Building native extensions.  This could take a while...
Fetching: http_parser.rb-0.5.3.gem (100%)
Building native extensions.  This could take a while...
Fetching: fluentd-0.10.17.gem (100%)
Successfully installed msgpack-0.4.6
Successfully installed yajl-ruby-1.1.0
Successfully installed iobuffer-1.1.2
Successfully installed cool.io-1.1.0
Successfully installed http_parser.rb-0.5.3
Successfully installed fluentd-0.10.17
6 gems installed
Installing ri documentation for msgpack-0.4.6...
Installing ri documentation for yajl-ruby-1.1.0...
Installing ri documentation for iobuffer-1.1.2...
Installing ri documentation for cool.io-1.1.0...
Installing ri documentation for http_parser.rb-0.5.3...
Installing ri documentation for fluentd-0.10.17...
Installing RDoc documentation for msgpack-0.4.6...
Installing RDoc documentation for yajl-ruby-1.1.0...
Installing RDoc documentation for iobuffer-1.1.2...
Installing RDoc documentation for cool.io-1.1.0...
Installing RDoc documentation for http_parser.rb-0.5.3...
Installing RDoc documentation for fluentd-0.10.17...

YAMLがどうたらこうたら言われているが今は気にしないでおくことにしました。

この後、3つのコマンドがインストールされました。

  • fluentd
  • fluent-cat
  • fluent-gem

ここでfluentdの初期設定ファイルを作成します。今回は/etc/fluentd配下に設定ファイルを作成することにします。

# fluentd --setup /etc/fluentd
Installed /etc/fluentd/fluent.conf.

出来たようなので、実際の設定ファイルの中身を見てみましょう。

## built-in TCP input
## $ echo <json> | fluent-cat <tag>
<source>
  type forward
</source>

## built-in UNIX socket input
#<source>
#  type unix
#</source>

# HTTP input
# http://localhost:8888/<tag>?json=<json>
<source>
  type http
  port 8888
</source>

## File input
## read apache logs with tag=apache.access
#<source>
#  type tail
#  format apache
#  path /var/log/httpd-access.log
#  tag apache.access
#</source>

## match tag=apache.access and write to file
#<match apache.access>
#  type file
#  path /var/log/fluent/access
#</match>

## match tag=debug.** and dump to console
<match debug.**>
  type stdout
</match>

## match tag=system.** and forward to another fluent server
#<match system.**>
#  type forward
#  host 192.168.0.11
#  <secondary>
#    host 192.168.0.12
#  </secondary>
#</match>

## match tag=myapp.** and forward and write to file
#<match myapp.**>
#  type copy
#  <store>
#    type forward
#    host 192.168.0.13
#    buffer_type file
#    buffer_path /var/log/fluent/myapp-forward
#    retry_limit 50
#    flush_interval 10s
#  </store>
#  <store>
#    type file
#    path /var/log/fluent/myapp
#  </store>
#</match>

## match fluent's internal events
#<match fluent.**>
#  type null
#</match>

## match not matched logs and write to file
#<match **>
#  type file
#  path /var/log/fluent/else
#  compress gz
#</match>

とりあえず、Apacheのログをfluentdに送って、ファイルに書き出してみます。

Apacheのログファイルを読み出す際の設定はこんな感じで。

web_server.conf

<source>
type tail
format apache
path /usr/local/apache2/logs/access_log
tag apache.access
</source>

<match apache.access>
type tcp
host localhost
</match>

受け取るfluetd側の設定はこんな感じ。

log_server.conf

<source>
type tcp
</source>

<match apache.access>
type file
path /var/log/fluent/access_log
</match>

基本的にはタグ内には読み出しもとの設定を書き込みtagで名前を付け、でマッチさせるtagを指定し、マッチしたtagが付けられたログに対してどのようにアクションを起こすのかを指定する感じです。

これで起動してみましょう。

# fluentd -c /etc/fluentd/web_server.conf &
# fluentd -c /etc/fluentd/log_server.conf &

これでApacheにアクセスをしてみます。

Apacheのaccess_logにはこのように出力されます。

172.16.173.1 - - [10/Apr/2012:16:46:20 +0900] "GET / HTTP/1.1" 304 -

fluentd側にはこのようにJSONでパースされて出力されます。

2012-04-10T16:46:20+09:00   apache.access   {"host":"172.16.173.1","user":"-","method":"GET","path":"/","code":"304","size":"-"}

中々、便利そうですね。apache以外にもいろいろ試せるか調べてみたいと思います。

Ruby1.9.3をインストールしてみる

Posted by stay-foolish in Ruby | Tagged | Leave a comment
このエントリーをはてなブックマークに追加
はてなブックマーク - Ruby1.9.3をインストールしてみる
Share on Facebook
Bookmark this on Yahoo Bookmark
Bookmark this on Livedoor Clip

Rubyの環境が必要になったので、インストールした際のメモ。

#中々なんか作るって所にたどりつかへんな。。。

まずはRuby(http://www.ruby-lang.org/ja/)からソースをダウンロードする

# wget http://core.ring.gr.jp/archives/lang/ruby/ruby-1.9.3-p125.tar.gz
# tar -xvzf ruby-1.9.3-p125.tar.gz
# cd ruby-1.9.3-p125
# ./configure --prefix=/usr/local/ruby1.9/
# make
# make install

これでインストールされるので、シンボリックリンクを作成して、パスを通しておく。
あとで1.8系が使いたくなった時の保険

# ln -s /usr/local/ruby1.9/ /usr/local/ruby
export RUBY_HOME=/usr/local/ruby
PATH=$PATH:$RUBY_HOME/bin

これでインストール完了しました。

さくらのVPSにvncserverをインストールしてiPadから使えるようにしてみる

Posted by stay-foolish in インフラ, 開発環境 | Tagged , | Leave a comment
このエントリーをはてなブックマークに追加
はてなブックマーク - さくらのVPSにvncserverをインストールしてiPadから使えるようにしてみる
Share on Facebook
Bookmark this on Yahoo Bookmark
Bookmark this on Livedoor Clip

さくらのVPSを再インストールしたので、GUIを入れてiPadからVNC経由で使えるようにしてみようと思い立ちましたので、そのメモです。

まず、初期にはGUIは入っていないので、yumでインストールします。

# yum groupinstall "X Window System" "汎用デスクトップ(GNOMEデスクトップ)"

#バージョンによって違うこともあるかもしれないので、
#yum grouplistで調べてみてください。

この後、VNCServerをインストールします。

# yum install tigervnc-server

ランレベルを5に設定、iptablesをOFFにして、サーバを再起動します。

# vi /etc/inittab
id:5:initdefault:
# chkconfig iptables off
# chkconfig ip6tables off

/etc/sysconfig/vncserversを下記のように編集します。

# VNCSERVERS="2:myusername"
# VNCSERVERARGS[2]="-geometry 800x600 -nolisten tcp -localhost"
VNCSERVERS="5:myusername"
VNCSERVERARGS[5]="-geometry 1024x768 -nohttpd"

5はディスプレイ番号、myusernameはシステムで作成したユーザ名を入力してください。

ポート番号も変更しておきます。
/usr/bin/vncserverを開き編集します。

#$vncPort = 5900 + $displayNumber;
$vncPort = 9900 + $displayNumber;

これでポート番号は9900+ディスプレイ番号になり、今回の場合、9905番が使用されます。

各ユーザでVNCの初期設定をしておきましょう。

$ /usr/bin/vncserver :5

You will require a password to access your desktops.

Password:
Verify:
:
:

また起動時にGNOMEのデスクトップを使用したいので、設定ファイル(~/.vnc/xstartup )を変更します。
スクリプトの下の方にある2行をコメントアウトして、gnome-session &を付け加えます。

#xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
#twm a
gnome-session &

ここでvncserverを起動してみましょう。

# service vncserver start

出来上がったけど使いにくっ(笑

もちょっと使いやすくしたいなぁ。。。

Cactiのインストールをしてみる(4)〜リソース監視設定編

Posted by stay-foolish in Cacti, インフラ | Tagged , | Leave a comment
このエントリーをはてなブックマークに追加
はてなブックマーク - Cactiのインストールをしてみる(4)〜リソース監視設定編
Share on Facebook
Bookmark this on Yahoo Bookmark
Bookmark this on Livedoor Clip

今回はCactiのサーバリソース監視設定の方法についてまとめておきます。

監視対象のサーバにnet-snmp、net-snmp-utilsをインストールしておきます。

その後、/etc/snmp/snmpd.confを編集します。

#       sec.name  source          community
com2sec notConfigUser  default       public
com2sec localnet       172.21.16.0/24 private
[code]

com2secで始まる行には、セキュリティ名、対象となるNWアドレス、コミュニティ名を指定します。

[code]
#       groupName      securityModel securityName
group   notConfigGroup v1           notConfigUser
group   notConfigGroup v2c           notConfigUser
group   local_group    v1           localnet

groupで始まる行ではグループ名、SNMPのバージョン(1ならv1 2ならv2c 3ならusm)、グループに所属させるセキュリティ名を指定します。

# Make at least  snmpwalk -v 1 localhost -c public system fast again.
#       name           incl/excl     subtree         mask(optional)
view    systemview    included   .1.3.6.1.2.1.1
view    systemview    included   .1.3.6.1.2.1.25.1.1
view    view_all      included   .1

viewで始まる行では、viewの名前、MIBをどこから公開するかを指定します。
今回のview_allではMIBのトップツリーの.1以降をすべて公開する設定になっています。

#       group          context sec.model sec.level prefix read   write  notif
access  notConfigGroup ""      any       noauth    exact  systemview none none
access  local_group    ""      any       noauth    exact  view_all   none none

最後にaccessで始まる行には、先ほど設定したviewをどのグループが使用し、どのような公開設定にするかを指定します。
今回はview_allの設定をlocal_groupに適用し、認証なしのReadOnlyでanyで公開しています。

これでファイルを保存し、snmpdを起動します。

ここで、下記のようなコマンドを投入して、snmpで情報が取れるかを確認します。
何かいっぱい情報が表示されれば成功です。

# snmpwalk -v 1 -c private <IPアドレス> .1.3.6.1.2.1

Cactiに戻り、ここから監視設定を行います。
左のメニューにある、「Devices」をクリックします。

右上の「Add」をクリックします。

「Description」には概要、「HostName」にはホスト名、もしくはIPアドレスを入力します。
また、「Host Template」には「ucd/net SNMP Host」を選択し、「SNMP Community」には設定したコミュニティ名を入力し、右下の「create」をクリックします。

ここで、右上の「Create Graphs for this Host」を選択し、すべての項目にチェックを入れグラフを追加します。

Cactiのインストールしてみる(3) 〜Cactiのインストール

Posted by stay-foolish in Cacti, インフラ | Tagged , | Leave a comment
このエントリーをはてなブックマークに追加
はてなブックマーク - Cactiのインストールしてみる(3) 〜Cactiのインストール
Share on Facebook
Bookmark this on Yahoo Bookmark
Bookmark this on Livedoor Clip

では、ここでCactiをインストールしてみたいと思います。

ここでnet-snmp-libs、net-snmp、net-snmp-utils、net-snmp-develのパッケージが必要なので、インストールしておきます。

まずはいつもようにCactiをダウンロードして解凍してみます。

# wget http://www.cacti.net/downloads/cacti-0.8.7i.tar.gz
# tar -xvzf cacti-0.8.7i.tar.gz

解凍して出来たディレクトリをDocumentRoot配下にコピーします。

# cp -ipr cacti-0.8.7i /usr/local/apache2/htdocs/

またCactiでグラフを描くためにCacti-Spineをインストールします。

# wget http://www.cacti.net/downloads/spine/cacti-spine-0.8.7i.tar.gz
# tar -xvzf cacti-spine-0.8.7i.tar.gz

解凍して出来たディレクトリ配下に移動してmakeしていきます。

# ./configure --prefix=/usr/local/cacti-spine --with-mysql=/usr/local/mysql
# make
# make install

設定ファイルをリネームします。

# cd /usr/local/cacti-spine/etc
# cp -ip spine.conf.dist spine.conf

設定ファイルの中身を確認をします。

DB_Host         localhost
DB_Database     cacti
DB_User         cactiuser
DB_Pass         cactiuser
DB_Port         3306
DB_PreG         0

この後、MySQLにログインし、データベースを作成します。

mysql> create database cacti;

一旦、MySQLからログアウトし、/usr/local/apache2/htdocs/cacti/cacti.sqlをcactiデータベースに流し込み初期データを投入します。

# /usr/local/mysql/bin/mysql -u root -p cacti < cacti.sql

もう一度MySQLにログインし、cactiデータベースにテーブルが作成されていることを確認します。

mysql> use cacti;
Database changed
mysql> show tables;
+---------------------------+
| Tables_in_cacti           |
+---------------------------+
| cdef                      |
| cdef_items                |
| colors                    |
| data_input                |
| data_input_data           |
| data_input_fields         |
| data_local                |
| data_template             |
| data_template_data        |
| data_template_data_rra    |
| data_template_rrd         |
| graph_local               |
| graph_template_input      |
| graph_template_input_defs |
| graph_templates           |
| graph_templates_gprint    |
| graph_templates_graph     |
| graph_templates_item      |
| graph_tree                |
| graph_tree_items          |
| host                      |
| host_graph                |
| host_snmp_cache           |
| host_snmp_query           |
| host_template             |
| host_template_graph       |
| host_template_snmp_query  |
| poller                    |
| poller_command            |
| poller_item               |
| poller_output             |
| poller_reindex            |
| poller_time               |
| rra                       |
| rra_cf                    |
| settings                  |
| settings_graphs           |
| settings_tree             |
| snmp_query                |
| snmp_query_graph          |
| snmp_query_graph_rrd      |
| snmp_query_graph_rrd_sv   |
| snmp_query_graph_sv       |
| user_auth                 |
| user_auth_perms           |
| user_auth_realm           |
| user_log                  |
| version                   |
+---------------------------+
48 rows in set (0.00 sec)

Cacti用のユーザを作成します。

mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON cacti.* TO ユーザ名@IPアドレス IDENTIFIED BY 'パスワード';

次にCactiの設定ファイルにてDBへの接続情報を編集します。
(/usr/local/apache2/htdocs/cacti/include/config.php)

/* make sure these values refect your actual database/host/user/password */
$database_type = "mysql";
$database_default = "cacti";
$database_hostname = "IPアドレス";
$database_username = "ユーザ名";
$database_password = "パスワード";
$database_port = "3306";
$database_ssl = false;

最後にデータ収集用スクリプトをcronに設定します。

*/5 * * * * /usr/local/bin/php /usr/local/apache2/htdocs/cacti/poller.php > /dev/null 2>&1

Cactiの画面にアクセスします。このような画面が出れば成功です。

次へ進みます。

「New Install」を選択し次へ進みます。

各種コマンドへのパスを設定してFinishを押します。

この画面が出たら完了です。

初期のユーザ名:admin、パスワード:adminでログインできればインストールは成功です。

Cactiのインストールしてみる(2) 〜RRDToolのインストール

Posted by stay-foolish in Cacti, インフラ | Tagged , | Leave a comment
このエントリーをはてなブックマークに追加
はてなブックマーク - Cactiのインストールしてみる(2) 〜RRDToolのインストール
Share on Facebook
Bookmark this on Yahoo Bookmark
Bookmark this on Livedoor Clip

RRDToolをインストールします。

こちらも事前にcairo-devel pango-devel、libart_lgpl-develが必要なので、yumでインストールしておいてください。

まずはRRDToolをダウンロードし、解凍します。バージョンは1.2.x系を使用します。

#最新版の1.4系はダメなようです。

# wget http://oss.oetiker.ch/rrdtool/pub/rrdtool-1.2.27.tar.gz
# tar -xvzf rrdtool-1.2.27.tar.gz

解凍したディレクトリ配下に移動し、コンパイル後、インストールを行います。

# ./configure --prefix=/usr/local/rrdtool
# make
# make install

とりあえず、これで完了です。

Cactiのインストールしてみる(1) 〜PHPのコンパイル

Posted by stay-foolish in Cacti, インフラ | Tagged , | Leave a comment
このエントリーをはてなブックマークに追加
はてなブックマーク - Cactiのインストールしてみる(1) 〜PHPのコンパイル
Share on Facebook
Bookmark this on Yahoo Bookmark
Bookmark this on Livedoor Clip

これも仕事上必要になったので、Cactiをインストールします。

まずはPHPのリコンパイルが必要なのですが、
その前に下記のパッケージが必要なので、先にyumなどでインストールしておきます。

libxml2
libxml2-devel
libjpeg
libjpeg-devel
libpng
libpng-devel
zlib
zlib-devel

その後PHPをリコンパイルします。

# ./configure --enable-mbstring --enable-xml --with-mysql=/usr/local/mysql/ --with-apxs2=/usr/local/apache2/bin/apxs --with-pdo-mysql=/usr/local/mysql/ --enable-pdo --with-zlib --with-gd --with-jpeg-dir --with-png-dir --enable-sockets
# make
# make install

とりあえず、これでPHPの準備は出来ました。

サービスのスケールアウト

Posted by stay-foolish in インフラ | Tagged | Leave a comment
このエントリーをはてなブックマークに追加
はてなブックマーク - サービスのスケールアウト
Share on Facebook
Bookmark this on Yahoo Bookmark
Bookmark this on Livedoor Clip

過去の会社で似たような事やりました。。。

スモールスタートとは言いつつ、突如大きなトラフィックに襲われるサービスのスケールアウトはどこも似たような感じですよね。

スライドの展開も絶妙で面白い。

ManifoldCFを使う上でのSolrのスキーマを作成してみる

Posted by stay-foolish in ManifolCF, Solr | Tagged , | Leave a comment
このエントリーをはてなブックマークに追加
はてなブックマーク - ManifoldCFを使う上でのSolrのスキーマを作成してみる
Share on Facebook
Bookmark this on Yahoo Bookmark
Bookmark this on Livedoor Clip

ManifoldCFでWEBクロールする際に、コンテンツを日本語検索できるように、/usr/local/solr/conf/schema.xmlを編集して日本語対応してみます。

    <fieldType name="text_ja" class="solr.TextField" positionIncrementGap="100">
      <analyzer>
        <tokenizer class="solr.JapaneseTokenizerFactory"/>
      </analyzer>
    </fieldType>
:
:
:
   <field name="title" type="text_ja" indexed="true" stored="true" multiValued="true"/>
   <field name="subject" type="text_ja" indexed="true" stored="true"/>
   <field name="description" type="text_ja" indexed="true" stored="true"/>
:
:
:
<field name="text" type="text_ja" indexed="true" stored="true" multiValued="true"/>

これでManifoldCFのWEBクロールでコンテンツなどの検索が日本語対応できるようになります。

試しに検索してみましょう。Solrの管理画面から検索してみます。

Query Stringに検索文字列を入れて検索してみます。

検索できたようです。

NginxでPHPを使えるようにしてみる

Posted by stay-foolish in Nginx, PHP, インフラ | Tagged , , | Leave a comment
このエントリーをはてなブックマークに追加
はてなブックマーク - NginxでPHPを使えるようにしてみる
Share on Facebook
Bookmark this on Yahoo Bookmark
Bookmark this on Livedoor Clip

NginxでPHPを使えるようにしてみたときのメモです。

まずはPHPのリコンパイルが必要なので、configureから実行します。

# ./configure --enable-mbstring --enable-fpm
# make
# make install
Installing PHP SAPI module:       fpm
Installing PHP CLI binary:        /usr/local/bin/
Installing PHP CLI man page:      /usr/local/man/man1/
Installing PHP FPM binary:        /usr/local/sbin/
Installing PHP FPM config:        /usr/local/etc/
Installing PHP FPM man page:      /usr/local/man/man8/
Installing PHP FPM status page:      /usr/local/share/php/fpm/
Installing build environment:     /usr/local/lib/php/build/
Installing header files:          /usr/local/include/php/
Installing helper programs:       /usr/local/bin/
  program: phpize
  program: php-config
Installing man pages:             /usr/local/man/man1/
  page: phpize.1
  page: php-config.1
Installing PEAR environment:      /usr/local/lib/php/
[PEAR] Archive_Tar    - installed: 1.3.7
[PEAR] Console_Getopt - installed: 1.3.0
[PEAR] Structures_Graph- installed: 1.0.4
[PEAR] XML_Util       - installed: 1.2.1
[PEAR] PEAR           - installed: 1.9.4
Wrote PEAR system config file at: /usr/local/etc/pear.conf
You may want to add: /usr/local/lib/php to your php.ini include_path
/usr/local/src/php-5.3.10/build/shtool install -c ext/phar/phar.phar /usr/local/bin
ln -s -f /usr/local/bin/phar.phar /usr/local/bin/phar
Installing PDO headers:          /usr/local/include/php/ext/pdo/

この後、/usr/local/etc/php-fpm.conf.defaultをphp-fpm.confと言う名前にリネームしてコピーします。

# cd /usr/local/etc/
# cp -ipr php-fpm.conf.default php-fpm.conf

PHPをCGIモードで起動してみます。

# /usr/local/sbin/php-fpm

この後、Nginx側でFastCGIモジュール経由でアクセスできるようにします。
/usr/local/nginx/conf/nginx.confを編集します。
65〜71行目までコメントアウトされているブロックのコメントを外し、一部を編集します。

location ~ \.php$ {
    root           html;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include        fastcgi_params;
}

/usr/local/nginx/html配下に下記のテスト用PHPを置きます。

<?php
phpinfo();

その後、Nginxを起動し、ブラウザから確認します。

出来ました。