Skip to content

Instantly share code, notes, and snippets.

@wappy100
Last active July 11, 2017 03:07
Show Gist options
  • Select an option

  • Save wappy100/ee2311700781b3a5528e to your computer and use it in GitHub Desktop.

Select an option

Save wappy100/ee2311700781b3a5528e to your computer and use it in GitHub Desktop.

Norikra

必要パッケージインストール

yum install git openssl-devel java-1.8.0-openjdk java-1.8.0-openjdk-devel

Norikraのインストールにrbenvを使用する

git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
exec $SHELL -l

rubyインストール

rbenv install -v 2.2.2
rbenv rehash

jrubyインストール

rbenv install jruby-1.7.19

Norikraインストール

rbenv shell jruby-1.7.19
gem install norikra --no-ri --no-rdoc
mkdir /etc/norikra
mkdir /var/log/norikra
mkdir /var/run/norikra

Norikra起動

norikra start --stats=/etc/norikra/norikra.json -l /var/log/norikra --daemonize
  • Norikra WEBUI http://(IPアドレス):26578/

ターゲット作成

  • targetはログ送信側のtagに合わせるがtagに「.」が入っているとNorikraがエラーを吐くので「_」に変更する
  • 「.」が含まれるtagは自動的に「_」に変換されてNorikraに格納されるので問題無し
norikra-client target open httpd_accesslog

フィールド作成

  • ログ送信側のformatに合わせてコマンドラインからテストデータを送信する
  • 型は文字列を送ればstringに、数値を送ればintegerとして自動的に定義される
echo '{"host":"string", "ident":"string" , "user":"string" , "request_time":100 , "request_first_line":"string" , "response_status":100 , "response_size":100 , "refer":"string" , "user_agent":"string" , "cookie":"string" }' | norikra-client event send httpd_accesslog
  • Norikra WEBUIで、作成したTargetsのFieldsに上記が設定されたことを確認する

Fluentd

プラグインのインストール

/usr/lib64/fluent/ruby/bin/fluent-gem install fluent-plugin-norikra

設定

vi /etc/td-agent/td-agent.conf
<source>
  type secure_forward
  shared_key fluentd_pre
  self_hostname ${hostname}
  cert_auto_generate yes
  authentication yes
  port 24224
  <user>
    username fluentd
    password fluentdpassword
  </user>
</source>

<match httpd.accesslog>
  type norikra
  norikra localhost:26571
  retry_limit 3
  target_map_tag    true
</match>

<source>
  type norikra
  norikra localhost:26571
  <fetch>
    method sweep
    tag query_name
    tag_prefix norikra.query
    interval 10s
    target out
  </fetch>
</source>

<match norikra.query.*>
  type elasticsearch
  host localhost
  port 9200
  include_tag_key true
  tag_key @log_name
  type_name norikra.httpd.accesslog
  logstash_format true
  logstash_prefix norikra
  flush_interval 10s
</match>
  • 1つ目のディレクティブ

    • ログ受信用設定
  • 1つ目のディレクティブ

    • 受信したhttpd.accesslogタグが付与されているログをNorikraに渡す
  • 2つ目のディレクティブ

    • Norikraでoutグループに属するクエリにより抽出されたログを10秒置きに取得する
    • 上記設定の場合タグ名はnorikra.query.(query名)となる
  • 2つ目のディレクティブ

    • norikra.query.(query名)のタグが付与されたログを10秒置きにelasticsearchに渡す
    • インデックス名をnorikra-*に変更

使い方

  • ログを受信すると自動的にNorikraに送られるが、クエリ設定をしないと何も処理をしない
  • 以下の様にsqlライクにクエリ設定を行う
  • elasticsearchに送る場合はgroupをoutにすること
@jclee97
Copy link

jclee97 commented Jul 11, 2017

yum install -y readline-devel

rbenv install -l
rbenv install jruby-9.1.12.0
rbenv versions
rbenv shell jruby-9.1.12.0
gem install norikra --no-ri --no-rdoc

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment