kazu22002の技術覚書

PHPer, Golang, AWS エンジニアの日々

ログサーバーへの集約と転送のFlentdとAmazonElasticsearchServiceの具体的な設定

AmazonElasticsearchService(AES)を利用してログを収集、表示しています。

Fluentdを利用したのですが、設定までそれなりに苦労したので、書いておきます。

IPでの制限は以前記事にしたので、割愛。

今回の環境

  • CentOS7
  • Nginx logはltsv形式
  • Fluentd ( td-agent2 ) 利用するpluginは elasticsearch
  • AES バージョンは5.3

Fluentdでの収集

docs.fluentd.org

IP制限でやっているので、サーバーが増えるほど設定が増えるのは困ります。

AESはアクセス制限の設定を変えてから反映されるまで10分強ぐらい時間がかかるので、頻繁に設定を変更したくないです。

そのためログサーバーに集約してデータをAESに送る部分は一つにしました。

WEBサーバーから集約サーバーへ

td-agent2 を利用していますが、プラグインのバージョンで書き方が変わっているっぽい。

td-agent2からだと思われますが、typeで「@」を最初につけて競合をおこさせないようにしたとか。

とりあえずWEBサーバーでログを書き込み、集約サーバー送る設定を書いてみます。

IP部分やログのパスは適宜変えます。

<source>
  @type tail
  path /var/log/nginx/access.log
  pos_file /var/log/td-agent/access.log.pos
  tag log.access

  format none

  time_key time_local
</source>

<match log.access>
    @type copy
    <store>
        @type forward
        send_timeout 10s
        recover_wait 10s
        heartbeat_interval 1s
        <server>
            host 10.0.0.1
            port 24224
        </server>
    </store>
</match>

集約サーバーからAESへ

aesへのエンドポイントは適宜変更。

<source>
  @type forward
</source>

##log nginx
<filter log.access>
  @type parser
  format ltsv
  key_name message
  reserve_data true
</filter>

<match log.access>
  @type elasticsearch
  hosts https://search-*****.ap-northeast-1.es.amazonaws.com
  type_name access_log
  logstash_format true
  logstash_prefix log-access
  flush_interval 10
</match>
## nginx end

動いた設定は以上です。

fluentdのプラグインでelasticsearchを利用しています。もしかしたらAESのバージョンでは送れない場合もありそうです。

バージョンまで覚えてないです。ごめんなさい。

キャストまでやりたかったけど、動いたあたりで力つきました。すべてタイプはテキストになります。ちょっと残念です。

AES利用で期待していること

まずはログの集約で、サポートの充実や開発の調査用に。

そのうち機能別のアクセス率とか表示速度とかの改善へつなげられるといいな。と思っています。

まだKibanaのグラフ表示とかまでできていないので、やれることは多そうです。