fluentd/ログ集約サーバー †Armadillo-Box WS1/fluentd で設定した送信側の fluentd から送られたログを OS †OS は2015年11月時点で最新の LTS (Long term support) である ホスト名や固定IPアドレスの設定、セキュリティ対策のファイヤウォールルール設定などは 本文書内では以下の設定を使用しています。 MongoDB †Ubuntu のリポジトリにある方でなく、MongoDB のリポジトリのものを リポジトリの認証用公開鍵登録 †beat@aggregator:~$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10 Executing: gpg --ignore-time-conflict --no-options --no-default-keyring --homedir /tmp/tmp.0CJX1sXM4s --no-auto-check-trustdb \ --trust-model always --keyring /etc/apt/trusted.gpg --primary-keyring /etc/apt/trusted.gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10 gpg: requesting key 7F0CEB10 from hkp server keyserver.ubuntu.com gpg: key 7F0CEB10: public key "Richard Kreuter <richard@10gen.com>" imported gpg: Total number processed: 1 gpg: imported: 1 (RSA: 1) MongoDB パッケージリストの追加 †beat@aggregator:~$ echo "deb http://repo.mongodb.org/apt/ubuntu "$(lsb_release -sc)"/mongodb-org/3.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.0.list 追加したリポジトリのファイルリスト取得 †beat@aggregator:~$ sudo apt-get update MongoDB インストール †追加した MongoDB リポジトリの mongodb パッケージ(mongodb-org)をインストールします。 beat@aggregator:~$ sudo apt-get install mongodb-org mongo shell のワーニング対応 †deb パッケージのインストール後 MongoDB はすぐ使用できる状態になっていますが、 /etc/init.d/ に以下の内容の disable-transparent-hugepages を作成します。 #!/bin/sh ### BEGIN INIT INFO # Provides: disable-transparent-hugepages # Required-Start: $local_fs # Required-Stop: # X-Start-Before: mongod mongodb-mms-automation-agent # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Disable Linux transparent huge pages # Description: Disable Linux transparent huge pages, to improve # database performance. ### END INIT INFO case $1 in start) if [ -d /sys/kernel/mm/transparent_hugepage ]; then thp_path=/sys/kernel/mm/transparent_hugepage elif [ -d /sys/kernel/mm/redhat_transparent_hugepage ]; then thp_path=/sys/kernel/mm/redhat_transparent_hugepage else return 0 fi echo 'never' > ${thp_path}/enabled echo 'never' > ${thp_path}/defrag unset thp_path ;; esac 作成したら起動時に実行されるよう設定します。 beat@aggregator:~$ sudo chmod 755 /etc/init.d/disable-transparent-hugepages beat@aggregator:~$ sudo update-rc.d disable-transparent-hugepages defaults 再起動後 mongo shell でワーニングの出ないことを確認します。 beat@aggregator:~$ mongo MongoDB shell version: 3.0.7 connecting to: test > elasticsearch †kibana と連携してログを可視化するため全文検索サーバー elasticsearch をインストールし、 java のインストール †elasticsearch の実行に必要な java をインストールします。 beat@aggregator:~$ sudo add-apt-repository ppa:webupd8team/java beat@aggregator:~$ sudo apt-get update beat@aggregator:~$ sudo apt-get install oracle-java8-installer oracle-java8-installer 経由で使用許諾ライセンスに同意を求められます。 elasticsearch のインストール †公式ドキュメントに従い、リポジトリを追加して elasticsearch をインストールします。 beat@aggregator:~$ wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add - beat@aggregator:~$ echo "deb http://packages.elastic.co/elasticsearch/1.7/debian stable main" | sudo tee -a /etc/apt/sources.list.d/elasticsearch-1.7.list beat@aggregator:~$ sudo apt-get update beat@aggregator:~$ sudo apt-get install elasticsearch インストールが完了したらサーバーの起動時にサービスとして起動するよう設定します。 beat@aggregator:~$ sudo update-rc.d elasticsearch defaults 95 10 port 9200 にアクセスし動作確認します。 beat@aggregator:~$ curl -X GET http://localhost:9200/ { "status" : 200, "name" : "Red Wolf", "cluster_name" : "elasticsearch", "version" : { "number" : "1.7.3", "build_hash" : "05d4530971ef0ea46d0f4fa6ee64dbc8df659682", "build_timestamp" : "2015-10-15T09:14:17Z", "build_snapshot" : false, "lucene_version" : "4.10.4" }, "tagline" : "You Know, for Search" } elasticsearch の調整 †公式ドキュメントの elasticsearch - nofile 65535 elasticsearch - memlock unlimited /etc/elasticsearch/elasticsearch.yml に以下を追加し、elasticsearch の使用メモリは swap されないようにします。 bootstrap.mlockall: true /etc/default/elasticsearch に上記二つの設定に対応する設定を追加します。 ES_HEAP_SIZE=1g <-- 実メモリの半分まで MAX_OPEN_FILES=65535 MAX_LOCKED_MEMORY=unlimited Apache †Ubuntu のリポジトリの Apache2 をインストールします。 beat@aggregator:~$ sudo apt-get install apache2 設定は default でドキュメントルートも /var/www/ のままです。 kibana †kiabana3 のインストール †kibana3 をダウンロードし、Apache のドキュメントルートに配置します。 beat@aggregator:~$ bwget https://download.elastic.co/kibana/kibana/kibana-3.1.2.tar.gz beat@aggregator:~$ tar xvf kibana-3.1.2.tar.gz beat@aggregator:~$ mv kibana-3.1.2 kibana3 beat@aggregator:~$ sudo mv kibana3 /var/www/html/ elasticsearch の追加設定調整 †kibana3 から elasticsearch の logstash ログを開けるよう、 http.cors.allow-origin: "/.*/" http.cors.enabled: true 追加したら elasticsearch を再起動し設定を反映します。 beat@aggregator:~$ sudo /etc/init.d/elasticsearch restart [sudo] password for beat: * Stopping Elasticsearch Server [ OK ] * Starting Elasticsearch Server 表示確認 †web ブラウザーで http://{ログ集約サーバーのIPアドレス}/kibana3/ を開き、 flunetd †ulimit を増やす †flunetd のインストール前に /etc/security/limits.conf の末尾に以下を追加、 root soft nofile 65536 root hard nofile 65536 * soft nofile 65536 * hard nofile 65536 再起動後反映されたかを確認します。 beat@aggregator:~$ ulimit -n 65536 fluentd インストール †Installing Fluentd Using Ruby Gem まず gem インストールに必要なパッケージをインストールします。 beat@aggregator:~$ sudo apt-get install build-essential beat@aggregator:~$ sudo apt-get install ruby ruby-dev fluentd を gem インストールします。 beat@aggregator:~$ sudo gem install fluentd --no-ri --no-rdoc Fetching: msgpack-0.5.12.gem (100%) 〜〜 中略 〜〜 Fetching: string-scrub-0.0.5.gem (100%) Building native extensions. This could take a while... Fetching: fluentd-0.12.15.gem (100%) Successfully installed msgpack-0.5.12 Successfully installed json-1.8.3 Successfully installed yajl-ruby-1.2.1 Successfully installed cool.io-1.3.1 Successfully installed http_parser.rb-0.6.0 Successfully installed sigdump-0.2.3 Successfully installed thread_safe-0.3.5 Successfully installed tzinfo-1.2.2 Successfully installed tzinfo-data-1.2015.5 Successfully installed string-scrub-0.0.5 Successfully installed fluentd-0.12.15 11 gems installed 依存関係のあるパッケージといっしょに fluentd がインストールされます。 fluentd elasticsearch プラグイン †fluentd から elasticsearch に logstash 形式でログを保存するプラグインをインストールします。 beat@aggregator:~$ sudo apt-get install libcurl4-openssl-dev beat@aggregator:~$ sudo gem install fluent-plugin-elasticsearch Fetching: excon-0.45.4.gem (100%) 〜〜 中略 〜〜 Fetching: fluent-plugin-elasticsearch-1.0.0.gem (100%) Successfully installed excon-0.45.4 Successfully installed multi_json-1.11.2 Successfully installed multipart-post-2.0.0 Successfully installed faraday-0.9.1 Successfully installed elasticsearch-transport-1.0.12 Successfully installed elasticsearch-api-1.0.12 Successfully installed elasticsearch-1.0.12 Successfully installed fluent-plugin-elasticsearch-1.0.0 8 gems installed fluent mongo プラグイン †flunetd から MongoDB にログを保存するプラグインをインストールします。 beat@aggregator:~$ sudo gem install fluent-plugin-mongo Fetching: bson-1.12.3.gem (100%) Fetching: mongo-1.12.3.gem (100%) Fetching: fluent-plugin-mongo-0.7.10.gem (100%) Successfully installed bson-1.12.3 Successfully installed mongo-1.12.3 Successfully installed fluent-plugin-mongo-0.7.10 3 gems installed その他の flunet プラグイン †fluentd の設定ファイルを簡潔に記述できるよう、 beat@aggregator:~$ sudo gem install fluent-plugin-forest Fetching: fluent-plugin-forest-0.3.0.gem (100%) Successfully installed fluent-plugin-forest-0.3.0 1 gem installed fluentd.conf †Armadillo-Box WS1/flunetd で設定した fluentd から送信されるログデータを受信する <source> @type forward @id forward_input </source> <match syslog.**> @type forest subtype copy <template> <store> type elasticsearch logstash_format true host localhost port 9200 index_name fluentd type_name syslog flush_interval 10s buffer_chunk_limit 2048k buffer_queue_limit 5 buffer_path /data/tmp/es_syslog/${hostname}.${tag_parts[1]}.${tag_parts[2]}.${tag_parts[3]} buffer_type file </store> <store> type mongo host localhost port 27017 database fluentd collection adv capped capped_size 4096m flush_interval 10s buffer_chunk_limit 8192k buffer_queue_limit 512 buffer_path /data/tmp/mongo_syslog/${hostname}.${tag_parts[1]}.${tag_parts[2]}.${tag_parts[3]} buffer_type file </store> <store> type file path /data/tmp/syslog/${hostname}.${tag_parts[1]}.${tag_parts[2]}.${tag_parts[3]}.log buffer_path /data/tmp/syslog/${hostname}.${tag_parts[1]}.${tag_parts[2]}.${tag_parts[3]} flush_interval 10s buffer_chunk_limit 8192k buffer_queue_limit 512 buffer_type file </store> </template> </match> buffer_type を file にしてありますので、 動作確認 †flunetd をログオプション付きで起動し、
が正常に行えるか確認します。 beat@aggregator:~$ sudo -s root@aggregator:~# fleuntd -c /etc/fluent/fluent.conf -o /var/log/fluent.log & root@aggregator:~# tail -f /var/log/fluent.log 正常に実行されていることを確認できたら
更新履歴 †2015/12/08 初稿掲載 Satoshi OTSUKA
|