はじめに
導入方法だけ見たい!という人は飛ばしてください
社内の勉強会で発表する機会があったので、気になっていたfluentd + elasticsearch + kibanaのログ管理について調べて検証してみました。
知ってる人にとっては今更…?と言われてしまうかもしれないけど、業界新人なものでご勘弁を…
ざっとググってみたら、バージョンが結構古いものからニッチな記事もちらほらあって、
(開発状況を含めて)ホットなコンテンツなんだなぁと実感しました。
何ができるのか
まずはこのシステムで何ができるのか。
ログの集中管理・見える化
たくさんのサーバのいろんなログを、まるっとまとめてブラウザから検索・管理できる。
各種プラグインをうまく使うことで、監視や障害検知がスマート
に行える。
各サービスの大雑把な役割は以下の通り。
- fluentd : 各種サーバからログを集める。サーバ-クライアント方式
- elasticsearch : fluentdからのログ受け取り口。kibanaを動かす。全文検索エンジン。
- kibana : elasticsearchのプラグイン。 集めたログをブラウザで見える化する。
あくまでこの構成の場合の役割なので、特徴なんかは割愛します。
構成
理想
- 複数APサーバ(各種サービス+fluentd) + ログ集約サーバ(fluentd+elasticsearch) + 解析サーバ(kibana)
複数サーバ立てて、動くいろんなログを一か所に集約して、ビュー部分だけ外に出してセキュリティ的にも強固!
ログはS3に投げて、それぞれコンテナ化してリソースも効率的に…
今回
- vagrantサーバ(apache+fluentd+elasticsearch+kibana)
ホストマシンのメモリ:2G
時間もお金もスペックも足りなかったので、練習ってことで割り切りました。
とりあえず現バージョンで動かすとこまでやってみます。
※これがタイトルの 練習 な要因
環境
- vagrantサーバ(centos7.3) IP:192.168.33.10
- td-agent(fluentd):2.3.5
- elasticsearch:5.4.1
- kibana:4.1
- ruby:2.1(fluentdに付属)
- OpenJDK:1.8.0
- apache 2.4系
Apache
$ sudo yum install httpd
$ sudo systemctl start httpd
# 192.168.33.10 アクセス -> つながるね。
fluentd
インストール
もちろんyumで。
公式(treasuredata社)が出してるパッケージ版があるのでささっとリポジトリ追加。
$ sudo cat /etc/yum.repos.d/treasuredata.repo
[treasuredata]
name=TreasureData
baseurl=http://packages.treasure-data.com/2/redhat/7/$basearch
gpgcheck=1
gpgkey=http://packages.treasuredata.com/GPG-KEY-td-agent
これで、はい
$ sudo yum install td-agent
==============================================================================
Package Arch Version Repository Size
==============================================================================
Installing:
td-agent x86_64 2.3.5-1.el7 treasuredata 53 M
Installing for dependencies:
at x86_64 3.1.13-22.el7 base 51 k
avahi-libs x86_64 0.6.31-17.el7 base 61 k
bc x86_64 1.06.95-13.el7 base 115 k
cups-client x86_64 1:1.6.3-26.el7 base 149 k
cups-libs x86_64 1:1.6.3-26.el7 base 356 k
ed x86_64 1.9-4.el7 base 72 k
mailx x86_64 12.5-12.el7_0 base 244 k
patch x86_64 2.7.1-8.el7 base 110 k
psmisc x86_64 22.20-11.el7 base 141 k
redhat-lsb-core x86_64 4.1-27.el7.centos.1 base 38 k
redhat-lsb-submod-security x86_64 4.1-27.el7.centos.1 base 15 k
spax x86_64 1.5.2-13.el7 base 260 k
time x86_64 1.7-45.el7 base 30 k
Transaction Summary
==============================================================================
Install 1 Package (+13 Dependent packages)
起動・自動起動設定しておく。
$ sudo systemctl start td-agent
$ sudo systemctl enable td-agent
td-agent-gem(プラグイン)アップデート・インストール
td-agentのプラグインをインストールするにはtd-agent-gemというものが使えるらしい(以前は無くて大変だった、らしい)
一応アップデートしておきます(gem updateみたいなもの)
$ sudo td-agent-gem update※めっちゃ時間かかった 後回しでもいいかも…
Done installing documentation for tilt after 3 seconds
Gems updated: concurrent-ruby activesupport activesupport activesupport activesupport activesupport arel activesupport aws-sdk aws-sdk-core aws-sdk-resources bigdecimal bson bundler celluloid celluloid-essentials celluloid-extras celluloid-fsm celluloid-pool celluloid-supervision hitimes timers cool.io activesupport fluent-plugin-mongo fluent-plugin-rewrite-tag-filter fluent-plugin-s3 fluent-plugin-webhdfs fluentd serverengine strptime font-awesome-rails haml temple haml-rails html2haml ruby_parser sexp_processor hike httpclient i18n io-console jbuilder jquery-rails json mail minitest mongo fuzzyurl chef-config ffi wmi-lite plist libyajl2 ffi-yajl systemu ohai oj parallel psych puma rack rack rails-dom-testing method_source activesupport rake rdoc sass sass-rails sprockets sprockets-rails string-scrub sucker_punch td-client power_assert test-unit thrift tilt
必要なプラグインのインストール
必要そうなものをささっと。
$ sudo td-agent-gem install fluent-plugin-filter
$ sudo td-agent-gem install fluent-plugin-forest
$ sudo td-agent-gem install fluent-plugin-config-expander
$ sudo td-agent-gem install fluent-plugin-elasticsearch
$ sudo td-agent-gem install fluent-plugin-typecast
$ sudo td-agent-gem install fluent-plugin-parser
config設定
一応収集側(クライアント)と集約側(サーバ)側の設定を分けて書いておいた。後学のために。
##### ログ収集側の設定
<source>
# データ(ログ)の取得方法 tailが無難
type tail
# 起動前に作成(apacheの初回起動をしておく)
path /var/log/httpd/access_log
# 出力先のログ
pos_file /var/log/td-agent/buffer/access_log.pos
format none
# タグ付け タグ毎に処理を切り分ける
tag apache.access
</source>
# 集約サーバへ送信(今回は同一サーバなのでコメントアウト)
#<match *.**>
# type forward
# retry_limit 5
# # 5秒ごとに送信(検証用 60s,300sくらいが無難?)
# flush_intarval 5s
# # 送信先サーバ・ポートを指定
# <server>
# host 127.0.0.1
# port 24224
# </server>
#</match>
##### 集約サーバ側設定
#<source>
# type forward
# port 24224
#</source>
# こんな感じでタグごとに処理を分けられる
#<match apache.access>
<match *.**>
type elasticsearch
host localhost
# elasticsearchの標準待ち受けポート
port 9200
logstash_format true
logstash_prefix apache-access
flush_intarval 30s
</match>
起動と自動起動設定
$ sudo systemctl start td-agent
$ sudo systemctl status td-agent
Elasticsearch
java(JDK)のインストール
$ sudo yum install java-1.8.0-openjdk
Elasticsearchのインストール
こちらも公式リポジトリから。
[elasticsearch-5.x]
name=Elasticsearch repository for 5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
これで、はい。
$ sudo yum install elasticsearch
(依存パッケージ多いので略)
起動と自動起動設定
$ sudo systemctl start elasticsearch.service
$ sudo systemctl enable elasticsearch.service
動作確認
9200番(elasticsearchデフォルト待ち受け)にcurlして、elasticsearchの情報が取得できればOK
$ curl -XGET 'localhost:9200/?pretty'
{
"name" : "uNl-uRX",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "JdvB1p_hSCisB3dAwNag5Q",
"version" : {
"number" : "5.4.1",
"build_hash" : "2cfe0df",
"build_date" : "2017-05-29T16:05:51.443Z",
"build_snapshot" : false,
"lucene_version" : "6.5.1"
},
"tagline" : "You Know, for Search"
}
kibana
インストール
上記repoファイルにkibanaも追加
[kibana-5.x]
name=Kibana repository for 5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
最後のyum
$ sudo yum install kibana
==============================================================================
Package Arch Version Repository Size
==============================================================================
Installing:
kibana x86_64 5.4.1-1 elasticsearch-5.x 54 M
Transaction Summary
==============================================================================
Install 1 Package
config編集
kibanaはyml
server.host: 0.0.0.0
# elasticsearchの情報 urlなのでサーバが分かれても簡単!
elasticsearch.url: "http://192.168.33.10:9200"
起動と自動起動設定
$ sudo systemctl start kibana.service
$ sudo systemctl enable kibana.service
確認
http://192.168.33.10:5601 にブラウザからアクセス
kibanaの画面がでてきたら成功です。
これで各サービスの設定は完了!
apacheのaccess_logをkibanaから飛ばしてみる。
なんのひねりもないですがapacheのデフォルトページにアクセスして
そのログをkibanaから見てみます。
logを貯めます
192.168.33.10 にアクセス、F5連打。
curlでログがelasticsearchに渡っているか確認
うまく取得できてると apache-access(tag名)のindexが確認できます。
$ sudo curl -XGET 'localhost:9200/_cat/indices?v&pretty'
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
yellow open apache-access-2017.06.04 CxK2KP5AQ-eDRKfCwYuysA 5 1 32 0 63.3kb 63.3kb
yellow open .kibana v_a0BgmPSsGmjtBL6X0buQ 1 1 1 0 3.1kb 3.1kb
いざ、アクセス。
こんな感じでログが確認できると思います。
kibanaの各種設定なんかはまた後日。
おわりに
調べて触ってみて思ったことをつらつらと。
- 導入が簡単
パッケージ版が出たことで導入が非常に簡単になったと思う。
configも分かりやすくて、今回の構成で迷うところがなかった。
- 負荷が気になる。集約サーバのコストが不安。
うちでは100近いサーバを管理してて、多種多様なサービス・アプリが動いている。
本当に必要なものを選んで、いい感じにチューニングしないとだめだと思う。
docker構成でクラスタしてどう変わるかも気になる。
- バージョン管理
どれも伸び盛りのサービスのため、バージョンアップが早い。
最新を追っていくには依存性や連携回りをよく考えないといけない。
- kibanaの可能性
検索して出てくるkibanaのイカしたダッシュボード画面や、
紹介しきれなかったプラグインを使ってもっと色々やれそう。試してみたい。
蛇足
いろんなサービスが増え続ける中、ログの一元管理は運用の人なら皆考えることだと思う。(←新人が何を生意気な)
今回は練習ということでほぼ導入しかしていないが、流れと懸念事項は抑えられたかな、と思う
よりセキュアでスマートな構成を組んで、実際に本番運用してみたらまた更新します。
※画像の挿入方法が間違ってたので修正しました。qiita慣れしてない…