Hinemosの転送機能を利用してElasticsearchへ収集情報を転送してみる
投稿日: / 更新日:
この記事は2年以上前に書かれたものです。情報が古い可能性があります。
Ver.6.0以降のHinemosには転送機能が搭載されております。
この機能により、マネージャ内に蓄積された監視結果やログを外部のビッグデータ分析基盤へ転送することが可能です。
今回はその使用例を簡単にご紹介します。
0.準備
Hinemosの転送機能では、デフォルトで転送先にfluentdを選択することができます。
今回はデフォルトの設定を利用し、fluentdへ収集した監視結果を転送し、
さらにElasticsearchへも転送させたいと思います。
以下の環境を用意しました。
- <サーバ1>:Hinemosマネージャ(ver.6.0.1)の環境
- <サーバ2>:fluentd(ver.1.2)のインストールされた環境
→Hinemosの転送先となるサーバーにfluentdをインストールし、td-agentを起動させます。
fluentdの公式サイト(https://docs.fluentd.org/v1.0/articles/install-by-rpm)を参考に、
インストールを実施します。
- <サーバ3>:Elasticsearchおよびkibanaのインストールされた環境
→Elasticsearch(ver.5.6)と、その可視化ツールであるkibana(ver.5.6)がインストールされた環境を用意。
どちらも公式サイトを参考に、インストールします。
1 2 |
<span style="font-weight: 400;">・Elasticsearch ユーザーガイド</span> <span style="font-weight: 400;"> <a href="https://www.elastic.co/guide/en/elasticsearch/reference/5.6/index.html" target="_blank" rel="noopener">https://www.elastic.co/guide/en/elasticsearch/reference/5.6/index.html</a></span> <span style="font-weight: 400;"> ・Kibana ユーザーガイド <a href="https://www.elastic.co/guide/en/kibana/5.6/index.html">https://www.elastic.co/guide/en/kibana/5.6/index.html</a></span> |
また、fluentdからElasticsearchへの転送を行うにあたり、fluentdのインストール環境に
以下のプラグインもインストールしておきます。
1 2 3 |
<span style="font-weight: 400;"># td-agent-gem install fluent-plugin-forest </span> <span style="font-weight: 400;"># td-agent-gem install fluent-plugin-elasticsearch</span> |
1.fluentdへの転送設定
Hinemosマネージャで、転送対象のデータ、転送先、転送をおこなう間隔などを指定します。
今回はデフォルト設定を利用し、fluentdへ収集した監視結果を転送し、さらにElasticsearchへも
転送させたいと思います。
Hinemosのクライアントにて、”収集”パースペクティブを開くと、右側に”転送[収集蓄積]”ビューが表示されます。
追加ボタンを押下し以下のURLを入力します。
1 |
<span style="font-weight: 400;">http://<サーバー2のIP>:8888/hs.event.#[FACILITY_ID].#[YEAR]#[MONTH]#[DAY]</span> |
2.fluentdからElasticsearchへの転送設定
Elasticsearch では、インデックスへ追加するデータ数を抑えることが効率的な検索に繋がります。
今回は、Hinemos から fluentd を介して蓄積したデータを転送するにあたり、以下の要件を満たすよう設定します。
- 各インデックスは、単一の転送設定からのデータのみ含める
- インデックスを細分化させるため、蓄積したデータが関連するファシリティIDごとにインデックスを分ける
- インデックスは、一日毎に切り替わる。
/etc/td-agent/td-agent.conf へ以下の設定を追加してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<span style="font-weight: 400;"><match hs.*.**> </span> <span style="font-weight: 400;"> type forest </span> <span style="font-weight: 400;"> subtype elasticsearch</span> <span style="font-weight: 400;"> <template></span> <span style="font-weight: 400;"> host xxx.xxx.xxx.xxx (Elasticsearch の IP アドレス)</span> <span style="font-weight: 400;"> port xxxx (Elasticsearch のポート)</span> <span style="font-weight: 400;"> time_key_exclude_timestamp false </span> <span style="font-weight: 400;"> logstash_format false</span> <span style="font-weight: 400;"> type_name ${tag_parts[1]}</span> <span style="font-weight: 400;"> index_name ${tag_parts[2]}.${tag_parts[3]}.${tag_parts[4]}</span> <span style="font-weight: 400;"> flush_interval 5s</span> <span style="font-weight: 400;"> </template></span> <span style="font-weight: 400;"> </match> </span> |
上記設定にマッチする転送先URL は、以下の形式になります。
1 |
http://<fluentd>/hs.xxx.yyy.zzz.www |
なお、x、y、z、w は fluentdへ転送する 転送設定用の変数を指定します。
パスのプレフィックスとなる hs は、hinemos からの送信を fluentd で識別するために使います。
上記形式の URL でリクエストを送信すると、Elasticsearch では、以下の形式で インデックスが作成されます。
1 2 |
<span style="font-weight: 400;">インデックス名 : yyy[2].zzz[3].www[4]</span> <span style="font-weight: 400;">タイプ名 : xxx[1]</span> |
sever2にて、td-agentのログに、転送した履歴が出力されているか確認します。
1 |
<span style="font-weight: 400;"> /var/log/td-agent/td-agent.log</span> |
今回はインデックス名とタイプ名の部分を ” strings.event.#[FACILITY_ID].#[YEAR]#[MONTH]#[DAY] “と設定しているため、
ログには以下のように出力されます。
1 |
2018-09-07 17:34:30 +0900 [info]: #0 out_forest plants new output: elasticsearch for tag 'hs.string.event.server3.201897' |
3.Elasticsearchに転送されたことを確認する
次のコマンドで転送対象となったデータが転送されていることを確認します。
1 |
$ curl -XGET http://<Elasticsearchのアドレス>:9200/<インデックス名>/_search?pretty |
今回は以下のようにコマンドを実行し、監視結果が転送されていることが確認できました。
$ curl -XGET http://<servser3のIP>:9200/event.server1.201897/_search?pretty
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
{ "_index" : "event.server1.201897", "_type" : "string", "_id" : "AWWxYPKiI2VxGvHMnQrt", "_score" : 1.0, "_source" : { "monitor_id" : "filesystem", "monitor_detail_id" : "/", "plugin_id" : "MON_PRF_N", "generation_date" : 1536279238000, "facility_id" : "server1", "scope_text" : "10-0-0-1", "application" : "a", "message" : "$[PERF_FILE_SYSTEM_USAGE][/] : 33.18", "message_org" : "$[PERF_FILE_SYSTEM_USAGE][/] : 33.18\n$[DEVICE_NAME] : /\n$[DEVICE_INDEX] : 31", "priority" : 3, "confirm_flg" : 0, "confirm_date" : null, "confirm_user" : "", "duplication_count" : 0, "output_date" : 1536279238043, "inhibited_flg" : false, "comment_date" : null, "comment_user" : "", "comment" : "", "position" : 118480 } |
4.kibanaで表示する
ブラウザを開き、以下のアドレスを入力してkibanaへ接続します。
1 |
<span style="font-weight: 400;">http://<サーバー2のIP>:5601</span> |
左側のメニューバーで「Manargement」を開き、Index Patternsを選択。
表示させたいログのindex名を登録します。
登録後、「Discover」の画面へ移ると、、、該当するログが表示されていることが確認できました!
また、Index Patternsは部分一致でも登録可能なため、日付を入力し、その日のログを表示させることが可能です。
「Discover」画面にて、登録したIndex Patternsを選択できるようになるので、
先ほど登録した、部分一致の日付パターンを選びます。
さらに、下部にある「_index」のメニューを選択すると、登録されているindex名が表示されます。
index名の右側の̟⊕ボタンを押下すると、そのindex名を使用して絞り込み検索を行うことができます。
例えば、下記のように「event_sever3_201897」を選択すれば、そのログのみを表示させることができます。
このように、ver.6.0以後のHinemosでは、収集蓄積した情報を外部の分析基盤へ転送する設定が
備わっております。ぜひ利用してみてください!