AWSのRDSはLinuxサーバではない為、こちらからいろいろな設定ができません。
その為、どのようにPostgresのログを送信すればよいか、いろいろ試行錯誤したのでその備忘録です。
前提として、RDSに接続できるLinuxインスタンスにtd-agentが入っている状態が必要です。
fluent-plugin-rds-pgsql-log
https://github.com/shinsaka/fluent-plugin-rds-pgsql-log
RDSのpostgresのログを取得するには上記のプラグインを利用します。
このプラグインはAWS RDSのログを取得し、td-agentのsourceとして利用できるようにするプラグインです。
ただ導入にあたり、依存関係に「AWS SDK」があるのですが、パッケージで導入したtd-agentでは
fluentd-gem fluent-plugin-rds-pgsql-log にて導入ができませんので、以下のように導入します。
まず、td-agentに入っているrubyからaws-sdkをインストール
1/usr/lib64/fluent/ruby/bin/gem install aws-sdk
2
fluent-plugin-rds-pgsql-logのプラグインを直接プラグインディレクトリにほおりこむ
1wget https://raw.githubusercontent.com/shinsaka/fluent-plugin-rds-pgsql-log/master/lib/fluent/plugin/in_rds_pgsql_log.rb -P /etc/td-agent/plugin
2
これでpostgresのログをTDに送信できました。
1<match td.postgres.log>
2type tdlog
3apikey *****************************
4auto_create_table
5database postgres
6table log
7buffer_type file
8buffer_path /var/log/td-agent/buffer/td
9flush_interval 180s
10</match>
11<source>
12 type rds_pgsql_log
13 region ap-northeast-1
14 db_instance_identifier prod-auth
15 access_key_id ******************
16 secret_access_key *********************************
17 refresh_interval 30
18 tag td.postgres.log
19 pos_file /var/log/td-agent/pgsql-prod-auth-log-pos.dat
20</source>
21
こんな感じのデータが送信されます
1{"message_level"=>"LOG", "time"=>"1436510427", "ident"=>"postgres", "host"=>"10.0.0.21(22112)", "database"=>"[unknown]", "user"=>"[unknown]", "pid"=>"6080", "log_file_name"=>"error/postgresql.log.2015-07-10-00", "message"=>" connection received: host=10.0.0.21 port=53253"}
2
host部分がSQL発行元IPになる
管理の上ではhost部分はRDSの名前になっているのが望ましいので、host部分を強制的に変更します。
データをリフォームする為に「fluent-plugin-record-reformer」というプラグインを利用しました。
https://github.com/sonots/fluent-plugin-record-reformer
1wget https://raw.githubusercontent.com/sonots/fluent-plugin-record-reformer/master/lib/fluent/plugin/out_record_reformer.rb -P /etc/td-agent/plugin
2
最終的なtd-agent.confは以下のようになりました。
1<match td.postgres.log>
2type record_reformer
3renew_record false
4enable_ruby false
5tag reformed.td.postgres.log
6# 強制的に文言を変更する
7host rds-postgres01
8ident postgres
9</match>
10<match reformed.td.postgres.log>
11 type tdlog
12 apikey *****************************
13 auto_create_table
14 database postgres
15 table log
16 buffer_type file
17 buffer_path /var/log/td-agent/buffer/td
18flush_interval 180s
19</match>
20<source>
21 type rds_pgsql_log
22 region ap-northeast-1
23 db_instance_identifier prod-auth
24 access_key_id ******************
25 secret_access_key *********************************
26 refresh_interval 30
27 tag td.postgres.log
28 pos_file /var/log/td-agent/pgsql-prod-auth-log-pos.dat
29</source>