###やりたいこと
Fluentdを使用してMQTTブローカーからセンサーデータを購読し、データの種類毎に保存先を振り分けたいです。
センサーは複合センサーで、データの種類(温度、地軸等)毎に別のメッセージになっています。
###最初にやったこと
まず、データの種類で振り分けずに保存する動作検証として、以下の様な設定で動作確認をしました。
<source> @type mqtt port 1883 <parse> @type json </parse> </source> <match sensor.**> @type file path /var/log/td-agent/sensor </match>
この結果、ファイルには下記の様なログが保存されることは確認できますた。
2017-09-07T16:36:36+09:00 sensor.000000000001 {"message":"{\"deviceId\":\"000000000001\",\"time\":\"2017-09-07T16:36:14.496+09:00\",\"geoMagneticX\":-10.2,\"geoMagneticY\":-6.6,\"geoMagneticZ\":41.1}"} 2017-09-07T16:36:36+09:00 sensor.000000000001 {"message":"{\"deviceId\":\"000000000001\",\"time\":\"2017-09-07T16:36:14.676+09:00\",\"humidity\":59.56,\"temperature\":27.92}"} 2017-09-07T16:36:36+09:00 sensor.000000000002 {"message":"{\"deviceId\":\"000000000002\",\"time\":\"2017-09-07T16:36:15.044+09:00\",\"geoMagneticX\":-8.85,\"geoMagneticY\":-12.75,\"geoMagneticZ\":47.85}"} 2017-09-07T16:36:36+09:00 sensor.000000000002 {"message":"{\"deviceId\":\"000000000002\",\"time\":\"2017-09-07T16:36:15.224+09:00\",\"humidity\":60.44,\"temperature\":27.86}"}
deviceIdがセンサーの識別子で、このログは2台のセンサーからそれぞれ温度と地軸のログの4件分の内容になります。
###試してみたこと・問題点
次に以下の様な設定で動作させてみました。
<match sensor.**> @type copy <store> @type relabel @label @temperature </store> <store> @type relabel @label @geomagnetic </store> </match> <label @temperature> <filter> @type grep <regexp> key temperature pattern .* </regexp> </filter> <match> @type file path /var/log/td-agent/sensor.temperature </match> </label> <label @geomagnetic> <filter> @type grep <regexp> key geoMagneticX pattern .* </regexp> </filter> <match> @type file path /var/log/td-agent/sensor.geomagnetic </match> </label>
この結果、sensor.temperature及びsensor.geomagneticの双方に、温度も地軸も出力される結果となってしまいました。
また、patternの所を「.+」にしたところ、どちらにもログは出力されない結果となりました。
メッセージの内容(項目の有無)によってログを振り分けたい場合、どのような設定をすれば良いでしょうか?
###環境
- CemtOS 7.3
- fluentd-0.14.20
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/09/08 01:44