目次
もう何番煎じだ?ってくらい書かれてますが、コリもせず書いてみました。 Elasticsearch+Kibanaの環境を作って、タムタムさんのログ生成ツールからApacheのダミーログを流しこんで入れてみました。
参考URL
インストールと起動
今回はCentOSへのインストールです。 基本的にはmemorycraftさんのブログの流れのままです。
elasticserchのインストールと起動
ダウンロードして、起動するだけ。 お試しということで、-fオプションにてコンソールにログ出力。
curl -OL https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-0.90.1.tar.gz
tar zxvf elasticsearch-0.90.1.tar.gz
cd elasticsearch-0.90.1
./bin/elasticsearch -f
Kibanaのインストールと起動
git clone
してbundleインストール
git clone --branch=kibana-ruby https://github.com/rashidkpc/Kibana.git
cd Kibana
bundle install
ruby kibana.rb
これで、Kibana+ESのインストール+起動が完了。 下地が完了。
td-agentのインストールと起動
ログの流し込みはlogstashなのですが、fluentdのelasticsearchプラグインにて流しこむこともできます。 td.repoとしてtd-agentのリポジトリを登録してから以下を実行します。
yum install td-agent -y
/usr/lib64/fluent/ruby/bin/fluent-gem install fluent-plugin-elasticsearch
vim /etc/td-agent/td-agent.conf
/etc/init.d/td-agent start
これで、td-agentがインストール出来ました。 次は設定です。
<source>
type tail
format apache
path /var/log/httpd/dummy_access_log
tag dummy.apache.access
</source>
<match *.apache.*>
index_name adminpack
type_name apache
type elasticsearch
include_tag_key true
tag_key @log_name
host localhost
port 9200
logstash_format true
flush_interval 10s
</match>
以上が設定です。td-agentはtd-agentというユーザで起動されるので、/var/log/httpdディレクトリにアクセスできるかだけ確認が必要です。
いくつかの設定値について気になったので調べました。
- index_name:adminpackとなってるが、elasticsearchではlogstash-xxxとなってる。
- これは、logstash_formatがtrueの場合は、利用されないので、指定しなくてもいい。
- type_name:Elasticsearchのタイプ名 * これはlogstash_formatを指定しても有効。ただし、Kibana側で画面からのtype指定は不可能。KibanaConfig.rbにて指定することは可能。
- logstash_format:Kibana用にlogstashフォーマットで出力するオプション
- この指定があるときは、index名が「logstash-YYYY.mm.dd」となる
- record(ログ)に@timestampとして時刻が追加される。
- tag_key:include_tag_keyがtrueと指定されているため、record(ログ)にtag_keyで指定した文字列をキー、値としてtagの値(上記例だとdummy.apache.access)が付与されて登録される。
apache-loggenのインストールと起動
タムタムさんが作成されたApacheのログのダミーを生成するツールです。
gem化されてるので、インストールは非常に簡単です。
gem install apache-loggen
で、ログを出力します。出力先は先程設定したdummy_access_logです。
apache-loggen --rate=10 --progress /var/log/httpd/dummy_access_log
秒間10アクセスログを出力してくれます。 これで、Kibanaでログが見れるようになりました。 なんて簡単なんでしょう。。。 簡単なログの検索ができてしまいました。 他の形式のログがどうなるのかとかは、また時間があれば。。。
感想とか
非常に簡単でした。素敵です。いくつかこうなるのかな?というのを試してみたのでメモを。
いくつか疑問点です。
- 溜まったログの削除は手動?
- おそらく。日付ごとにindexが出来上がっているので、削除は楽そう。「logstash-年月日」なので。
- 認証とかかけれるの?
- ログ検索は内部でするだろうから、まぁ、なくていいのかな。ログインすらないし。
- 複数行のログとかってどーすんだろう?(JavaのExceptionとかが混ざるやつ)
本格的に触るようになれば調べるかなぁ。。。
あと、ログが増えてきた時にどういった分割構成ができるだろう?って思って考えてみたのが以下になります。
構成パターン
ログを複数扱う場合は次のようなパターンがありそうかと。
タグ(fluentdのタグ)で識別
「@log_name」という名前=fluentdのタグにてログを識別することで、異なるログを検索することができそうです。 タグであれば、プラグインによってはログ出力時に制御も可能だと思うので、td-agentの設定を変更したりすることもなく対応が可能かと。 ただ、ログの種別ごとにKibanaのプロセスを別にして起動したいといった用途には向いてなさそうです。
type_nameによる識別
ElasticSearchの機能であるtypeを利用したログの識別パターンです。
fluent-plugin-elasticsearchの設定でtype_name
を指定しました。
ここを別の名前にすることで、識別することも可能です。
ただし、この場合はKibanaの画面から指定して検索することができません。
→コメント頂きました。検索条件に「_type:タイプ名」と検索することでtypeを利用した検索が可能です。
タグ(@log_name)でも識別できるようにするなどの工夫が必要です。
その代わり、タグ識別ではできなかったKibanaのプロセスを別にして起動することは可能になります。
KibanaConfig.rbのTypeに値を設定することで、起動したKibanaが対象とするログを絞り込むことが可能です。
こうすることで例えば、apache用のKibanaとtomcat用のKibanaは別プロセスにして、ElasticSearchのクラスタは1つという構成も可能になります。
ElasticSearchサーバを別立て
ElasticSearchサーバをそもそも別のプロセスor別のサーバで起動し、Kibanaも別々にすればログの識別も可能です。 可能ですが、色々と管理するものが増えてめんどくさそうですね。。。
インデックス名変更
最後は、fluent-plugin-elasticsearchの設定で「logstash_format」をfalseにすれば、好きなindex_nameを付与できるので、
ログ種別ごとに名前を変更することで識別できます。
ただ、logstash形式でないインデックス名の場合、日付ローテーションができなかったり、Kibana内部で検索時に日付で検索対象を絞り込んで検索することで高速化するといった処理など、使えない機能が多々出てきてしまうのであまりおすすめじゃないかと。。。
ということで、流行りものは触っておこうということで、さわってブログ書いてみました。
開発中に立てておいて、各サーバのログを流しこんでおくなどにも利用できるかもしれないです。
アラート通知などの機能が出てくるともっと便利かもしれないです。
comments powered by Disqus
See Also by Hugo
- 第2回elasticsearch勉強会を開催しました! #elasticsearchjp
- 第25回Elasticsearch勉強会を開催しました。
- Release, we have(日本語訳)
- Elasticsearch勉強会 in 名古屋を開催しました。#elasticsearch #elasticsearchjp
- Logstashを利用したApacheアクセスログのインポート