fluentdからpostgreSQLへログを流し込む(元データはjson形式)
■ fluentdからpostgreSQLへログを流し込む
□ fluentdプラグイン
https://github.com/fluent/fluent-plugin-sql/blob/master/README.md
□ テスト用データ
# echo '{ "HOST_ADDR": "192.168.56.108", "HOST_NAME": "myhostname" }' >> /var/log/remotelog/test_psql.log
DB名:fluent_test_db
テーブル名:fluent_test_table
テスト用カラム:host_addr,host_name
■ postgreSQL側の準備
□ ユーザpostgresのパスワード設定
# passwd postgres
□ postgreSQLログイン
# su - postgres
# psql
□ テスト用データベース作成
=# create database fluent_test_db;
=# \c fluent_test_db;
□ テスト用テーブル作成
=# CREATE TABLE fluent_test_table (host_addr TEXT, host_name TEXT);
=# \dt;
□ DBポート確認
# ss -atn
→ 5432が開いていることを確認
□ 他ホストからpostgreSQLに接続できるようにする
# vi /var/lib/pgsql/11/data/postgresql.conf
コメントアウトされている「listen_addresses」を以下のように書き換え(以下を追記)
listen_addresses = '*'
# vi /var/lib/pgsql/11/data/pg_hba.conf
以下のように編集する(一部追記)
# IPv4 local connections: host all all 127.0.0.1/32 ident host all all 192.168.56.108/32 trust host all all 192.168.56.102/32 trust
□ postgreSQL再起動
# systemctl restart postgresql-11
□ ポート確認
# netstat -tln
□ (他ホストから)telnet
# telnet 192.168.56.112 5432
□ tcpdumpでパケットが来てることを見たい場合
# tcpdump -ni enp0s8 port 5432
※ enp0s8は、#ip a コマンドで見た時のネットワークインタフェース名
■ fluentd側
□ postgreSQL用のプラグインインストール
# yum install ruby-deve
# yum install gcc make automake autogen
# td-agent-gem install pg -v 1.1.4 --no-document
# td-agent-gem install pg -v 0.21.0 --no-document
# td-agent-gem install fluent-plugin-sql --no-document
□ fluentd設定
# vi /etc/td-agent/td-agent.conf
例 <source> @type tail format json path /var/log/remotelog/test_psql.log tag psql </source> <match psql.**> @type sql host 192.168.56.112 port 5432 database fluent_test_db adapter postgresql username postgres password yourpassword socket /tmp/.s.PGSQL.5432 <table> table fluent_test_table column_mapping 'HOST_ADDR:host_addr,HOST_NAME:host_name' </table> </match>
□ fluentd再起動
# systemctl restart td-agent