今回は、前回作成したRabbitMQクラスタにfluentdでログを送信する。
1. RabbitMQ側の設定
まず、事前にRabbitMQ側でvHostsなどの作成をしておこう。 ユーザは新規に「logger」ユーザを作成する。
■ vHostsの作成(「logs」)
rabbitmqadmin declare vhost name=/logs
rabbitmqctl set_permissions -p /logs guest ".*" ".*" ".*"
[root@BS-PUB-RABBITMQ01 ~]# rabbitmqadmin declare vhost name=/logs
vhost declared
[root@BS-PUB-RABBITMQ01 ~]# rabbitmqadmin list vhosts
+-------+----------+
| name | messages |
+-------+----------+
| / | 0 |
| /logs | |
+-------+----------+
[root@BS-PUB-RABBITMQ01 ~]# rabbitmqctl set_permissions -p /logs guest ".*" ".*" ".*"
Setting permissions for user "guest" in vhost "/logs" ...
■ ユーザの作成
rabbitmqctl add_user logger パスワード
rabbitmqctl set_permissions -p /logs logger ".*" ".*" ".*"
rabbitmqctl set_permissions -p / logger ".*" ".*" ".*"
rabbitmqctl set_user_tags logger administrator
[root@BS-PUB-RABBITMQ01 ~]# rabbitmqctl add_user logger password
Creating user "logger" ...
[root@BS-PUB-RABBITMQ01 ~]# rabbitmqctl set_permissions -p /logs logger ".*" ".*" ".*"
Setting permissions for user "logger" in vhost "/logs" ...
[root@BS-PUB-RABBITMQ01 ~]# rabbitmqctl set_permissions -p / logger ".*" ".*" ".*"
Setting permissions for user "logger" in vhost "/" ...
[root@BS-PUB-RABBITMQ01 ~]# rabbitmqctl set_user_tags logger administrator
Setting tags for user "logger" to [administrator] ...
■ queue/exchangeの作成(ミラーリング設定あり)
rabbitmqadmin declare queue name=syslog.queue --vhost=/logs # queueの作成
rabbitmqadmin declare exchange name=syslog.topic type=topic --vhost=/logs #exchangeの作成
rabbitmqctl list_queues -p /logs
rabbitmqctl set_policy "mirror-test" "syslog.queue" '{"ha-mode":"all"}' -p /logs
rabbitmqadmin list queues name slave_nodes synchronised_slave_nodes
[root@BS-PUB-RABBITMQ01 ~]# rabbitmqadmin declare queue name=syslog.queue --vhost=/logs
queue declared
[root@BS-PUB-RABBITMQ01 ~]# rabbitmqadmin declare exchange name=syslog.topic type=topic --vhost=/logs
exchange declared
[root@BS-PUB-RABBITMQ01 ~]# rabbitmqctl list_queues -p /logs
Listing queues ...
syslog.queue 0
[root@BS-PUB-RABBITMQ01 ~]# rabbitmqctl set_policy "mirror-test" "syslog.queue" '{"ha-mode":"all"}' -p /logs
Setting policy "mirror-test" for pattern "syslog.queue" to "{\"ha-mode\":\"all\"}" with priority "0" ...
[root@BS-PUB-RABBITMQ01 ~]# rabbitmqadmin list queues name slave_nodes synchronised_slave_nodes
+--------------+------------------------------+------------------------------+
| name | slave_nodes | synchronised_slave_nodes |
+--------------+------------------------------+------------------------------+
| syslog.queue | ["rabbit@BS-PUB-RABBITMQ02"] | ["rabbit@BS-PUB-RABBITMQ02"] |
| test.queue | ["rabbit@BS-PUB-RABBITMQ02"] | ["rabbit@BS-PUB-RABBITMQ02"] |
+--------------+------------------------------+------------------------------+
■ Routing Keyの設定
fluentdからRabbitMQにログを転送するにあたり、Routing Keyの設定が必要になる。 今回使用するプラグインではfluentdのタグがRouting Keyとして使用される。 とりあえず「syslog」で送信されるので、それをRabbitMQのWeb管理画面から設定する。 Exchangesタブから、先ほど作成したExchangesを開いて、そこからRouting Keyを設定しておく。
ひとまず、これでRabbitMQ側の設定は完了。
2. fluentd側の設定
fluentdからRabbitMQにログを送信する場合、別途プラグインが必要になるので、以下のコマンドでインストールする。
/opt/td-agent/embedded/bin/gem install fluent-plugin-amqp2
プラグインをインストール後、設定ファイルで以下のように定義してやればよい。
/etc/td-agent/td-agent.conf<match *.**> type amqp # Set broker host and port host ホスト名(同居させるならlocalhost) port 5672 # Set user and password for authentication user logger(同居させるならguest) password password(同居させるならguest) # Configure amqp entities vhost, exchange id and type vhost /logs exchange Exchange名(今回の場合syslog.topic) exchange_type topic exchange_durable true # optionally set exchange durability - default is true. payload_only false # optional - default is false. if true, only the payload will be sent. if false, data format is { "key" => tag, "timestamp" => time, "payload" => record }. content_type application/octet-stream # optional - default is application/octet-stream. some amqp consumers will expect application/json. </match>
設定ファイルを編集したら、サービスを再起動しよう。
systemctl restart td-agent
サービス再起動後、適当にログを送ってみると、無事syslog.queueにログが転送された。
rabbitmqadmin list queues
[root@BS-PUB-RABBITMQ01 ~]# rabbitmqadmin list queues
+--------------+----------+
| name | messages |
+--------------+----------+
| syslog.queue | 557 |
| test.queue | 0 |
+--------------+----------+
RabbitMQのWeb管理画面からもキューの中身を確認することができる。