fluentdでRabbitMQにログを送信する
Pocket

今回は、前回作成した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側の設定は完了。

Sponsored Links

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管理画面からもキューの中身を確認することができる。

 

Pocket

Written by blacknon

インフラ系のSE。一時期はプログラマ。 仮想化とオープンソースに興味あり。一日中寝てたい今日このごろ。 スペインとかで働きたいなぁ…(シエスタがあるので)

Leave a Comment

メールアドレスが公開されることはありません。