長生村本郷Engineers'Blog

千葉県長生村本郷育ちのエンジニアが書いているブログ

さくらVPS fluentd + elasticsearch + kibana3

f:id:kenzo0107:20140927215057p:plain

ElasticSearch インストール

公式サイト
http://www.elasticsearch.org/blog/apt-and-yum-repositories/

yumリポジトリ追加
rpm --import http://packages.elasticsearch.org/GPG-KEY-elasticsearch
elasticsearchリポジトリ設定ファイル追加
cat >> /etc/yum.repos.d/elasticsearch.repo <<'EOF'
[elasticsearch-1.0]
name=Elasticsearch repository for 1.0.x packages
baseurl=http://packages.elasticsearch.org/elasticsearch/1.0/centos
gpgcheck=1
gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch
enabled=1
EOF
javaとelasticsearchインストール
yum install elasticsearch java-1.7.0-openjdk
サーバ起動時モジュール自動起動設定
chkconfig elasticsearch on
elasticsearch起動
service elasticsearch start
動作テスト
curl -X GET http://localhost:9200/
  • 実行結果
{
  "status" : 200,
  "name" : "Hydron",
  "version" : {
    "number" : "1.0.3",
    "build_hash" : "61bfb72d845a59a58cd9910e47515665f6478a5c",
    "build_timestamp" : "2014-04-16T14:43:11Z",
    "build_snapshot" : false,
    "lucene_version" : "4.6"
  },
  "tagline" : "You Know, for Search"
}


f:id:kenzo0107:20140927215745j:plain

Kibana インストール

kibana ユーザ追加
useradd kibana
パスワード設定
passwd kibana
ユーザー kibana のパスワードを変更。
新しいパスワード: [パスワード入力]
よくないパスワード: 辞書の単語に基づいています
新しいパスワードを再入力してください: [もう一度パスワード入力]
passwd: 全ての認証トークンが正しく更新できました。
kibanaのパーミッション設定
chmod +x /home/kibana
kibana
su - kibana
kibana3ダウンロード
curl -LO https://download.elasticsearch.org/kibana/kibana/kibana-3.0.0milestone5.tar.gz
モジュール解凍
tar zxvf kibana-3.0.0milestone5.tar.gz
シンボリックリンク設定
ln -s /home/kibana/kibana-3.0.0milestone5 ./kibana
kibana config編集
vim /home/kibana/kibana/config.js
config.js編集

以下のように設定

elasticsearch: "http://(ドメイン)/es/",
kibanaユーザ解除
exit
Elasticsearchへの接続用に/es/をリバースプロキシ構成
htdigest -c /etc/httpd/conf/htdigest "Required authentication" (Basic認証の設定したいID)
Adding password for okochang in realm Required authentication.
New password: [パスワード入力] (Basic認証の設定したいPW)
Re-type new password: [パスワード入力] (Basic認証の設定したいPW)

vim /etc/httpd/conf.d/vhosts.conf

設定ファイルのシンタックスチェック
httpd -t

▼実行結果

Syntax OK
httpd再起動
service httpd restart
kibana管理画面
http://(ドメイン)/#/dashboard/file/default.json

以下のように表示されたら成功
f:id:kenzo0107:20140927222357p:plain





fluent-plugin-elasticsearch

gcc, gcc-c インストール
yum install gcc gcc-c++ libcurl-devel
fluent-plugin-elasticsearch インストール
/usr/lib64/fluent/ruby/bin/fluent-gem install fluent-plugin-elasticsearch --no-ri --no-rdoc
vim /etc/td-agent/td-agent.conf
## Input
<source>
  type tail
  path /var/log/httpd/access_log 
  format /^(?<date>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2} \w{3}) (?<processing_time>[^ ]*) (?<remote>[^ ]*) (?<user>[^ ]*) \[(?<method>.*)\] (?<status>[^ ]*) (?<size>[^ ]*) \[(?<referer>[^ ]*)\] \[(?<agent>.*)\]/
  pos_file /var/log/td-agent/tmp/apache.access.log.pos
  tag apache.access
</source>

## Output
<match apache.access>
  type copy
  <store>
    type file
    path /var/log/td-agent/apache.access
    time_slice_format %Y%m%d
    time_format %Y%m%dT%H%M%S%z 
  </store>
  <store>
    type forward
    send_timeout 60s
    recover_wait 10s
    heartbeat_interval 1s
    <server>
      name (fluentdサーバ)
      host (fluentdサーバIP)
      port (Port)
    </server>
  </store>
  <store>
    type elasticsearch
    host (elasticsearchサーバIP)
    port (Port)
    type_name access_log
    logstash_format true
    logstash_prefix apache_access
    logstash_dateformat %Y%m
    flush_interval 10s
  </store>
</match>




fluentd インストール事前準備

f:id:kenzo0107:20140927210105j:plain

  • ユーザ毎のリソース制限ファイル修正

vi /etc/security/limits.conf
以下追記

root soft nofile 65536
root hard nofile 65536

▼リソース属性

noproc最大プロセス数
nofileオープンできる最大ファイル数
maxlogin最大ログイン数
data最大データサイズ
fsize最大ファイルサイズ
as最大メモリ空間サイズ
priorityユーザ実行の優先度
stackユーザ実行の最大スタック
rssユーザ実行プロセスのメモリサイズ
coreコアファイルの最大値

カーネルパラメータ設定

vim /etc/sysctl.conf
以下追記
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.ip_local_port_range = 10240 65535

再起動

reboot


Apatch設定

テスト用のログファイルとしてApacheアクセスログを使用
grep "custom" /etc/httpd/conf/httpd.conf 

▼実行結果

LogFormat "%{%Y-%m-%d %T %Z}t %D %a %u [%r] %s %b [%{Referer}i] [%{User-Agent}i]" custom
CustomLog logs/access_log custom
td-agent にアクセス出来る様にログディレクトリ権限修正
chmod 755 /var/log/httpd



td-agentのインストール

curl -L http://toolbelt.treasuredata.com/sh/install-redhat.sh | sh
td-agent 設定

vim /etc/td-agent/td-agent.conf

<match log.**>
  # fluentd-plugin-elasticsearch利用
  type elasticsearch

  # Kibanaで利用するためにindexの形式整備
  logstash_format true

  # index の prefix 指定
  logstash_prefix demo-log

  # 転送先の Elasticsearch
  hosts localhost:9200

  # Elasticsearchに書き込む際、ドキュメントtype指定
  type_name application-log

  # buffer設定 - メモリバッファ利用
  buffer_type memory

  # チャンクサイズ 1MB
  buffer_chunk_limit 1m

  # チャンクキュー最大サイズ 128
  buffer_queue_limit 128

  # 指定秒毎にバッファをflush - 指定秒数毎にElasticsearchへの書き込みリクエスト発
行
  flush_interval 2s

  # flush失敗時、最大リトライ回数
  retry_limit 17
</match>


# tmpディレクトリ作成
mkdir /var/log/td-agent/tmp
# 所有者修正
chown td-agent.td-agent /var/log/td-agent/tmp
# サーバ起動時設定
chkconfig td-agent on
# 起動
service td-agent start




参考書籍

参考サイト
http://okochang.hatenablog.jp/entry/2014/03/17/223805
http://fluentular.herokuapp.com/
http://okochang.hatenablog.jp/entry/2014/03/21/191523