Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
NetApp clustered ONTAP
sysstatをkibanaで可視化する
前田 賢介
1
もくじ
1. はじめに
 資料作成の経緯
2. Kibana+Elasticsearch+Fluentdを組み合わせてみる
3. sysstatを可視化してみる
4. 補足:競合製品紹介
2
1.はじめに
~資料作成の経緯~
3
資料作成の経緯 (cDOT性能監視の悩み)
 cDOTの性能監視/分析(OCPM)がイマイチ
 OnCommand Insightは敷居が高い…
 cDOT8.3からOnCommand Unified Manager5.2(Perform...
資料作成の経緯
もっとシンプルに
性能や容量のモニタリングを
一元化できないか?
そんな方法があったらいいなという思いで
調べ始めました…
5
資料作成の経緯
そんな方法…
ありました
6
もっとシンプルに
性能や容量のモニタリングを
一元化できないか?
どうすればできるのか?
 今流行りのログ収集->可視化アプローチ
手順1
• 色々なログを一か所に集約し、
統一フォーマットに加工する
手順2
• データベースに流し込む
手順3
• データを可視化する
7
今流行りのログ収集->可視化アプローチ
 イメージ図
ログ加工
ログ収集
(SSH/API/SNMP/Syslog…etc)
Database化
可視化ツール
運用者
(Webブラウザを利用)
8
今流行りのログ収集->可視化アプローチ
 イメージ図
ログ加工
ログ収集
(SSH/API/SNMP/Syslog…etc)
Database化
可視化ツール
どんなものなのか?
運用者
(Webブラウザを利用)
9
可視化ツールのイメージ
kibana
Grapana
Map
積上げ棒グラフ
積上げ折れ線グラフ
Markdown方式のペー
ジ
10
今流行りのログ収集->可視化アプローチ
 イメージ図
サーバ1台から実装可能
ログ加工
ログ収集
(SSH/API/SNMP/Syslog…etc)
Database化
可視化ツール
運用者
(Webブラウザを利用)
11
2.Kibana+Elasticsearch+Fluentd
を組み合わせてみる
12
どうすればできるのか?
 今流行りのログ収集->可視化アプローチ
手順1
• 色々なログを一か所に集約し、
統一フォーマットに加工する
手順2
• データベースに流し込む
手順3
• データを可視化する
13
ログ加工
ログ収集
(SSH/API/SNMP/Syslog…etc)
Database化
可視化ツール
運用者
(Webブラウザを利用)
Kibana+Elasticsearch+Fluentdの構成
14
各OSSの紹介
1. Fluentd
2. Elasticsearch
3. Kibana
15
16
Fluentdとは
 バラバラのログフォーマットをJSONフォーマットに加工する
ツール
 データは[time],[tag],[record(key:value)]で構成される
 各アプリケーションログの入力や、
データベースやファイルへ...
Fluentdとは
ようするに
ログをいい感じに加工して
好きな形式に吐き出してくれる
ツール
18
今回のsysstat分析に使うプラグイン紹介
 in_tailプラグイン
 tail –fのように特定のログを監視し、
書き込まれたタイミングでParse(加工)処理を行うプラグイン
 Ruby正規表現を使用して、ログをJSON(Key:...
大規模なFluentd構成例
 FluentdからFluentdへのForwardも可能なため、役割を分
担させることで負荷分散も実現可能らしい
参考:
http://www.slideshare.net/tagomoris/distribu...
参考資料
 Fluentd公式ページ
 http://www.fluentd.org/
 Fluentd meetup in japan
 http://www.slideshare.net/treasure-data/fluentd-...
22
Elasticsearchとは
 全文検索エンジン
 RDBではない
 NoSQL Databaseである
 そのためスキーマレスである
 テーブルとかカラム定義とか事前に作る必要がない
 でもカラム定義(Mapping)がないと全...
Elasticsearch の データ構造
 RDBで言えば、Database = Index, Type = Table, Document = Record のようなもの
 デフォルトのFluentd設定では1日毎にIndexが自動作成...
大規模なElasticsearch構成例
 大規模環境においてはElasticsearchを複数用意することで
負荷分散/冗長化が可能らしい
Elasticsearch Cluster
Node1 Node2 Node[n]
Primary ...
参考資料
 Elasticsearch公式ページ
 https://www.elastic.co/
 Hello! Elasticsearch
 https://medium.com/hello-elasticsearch
 Elas...
27
kibanaとは
 Elasticsearchの公式可視化ツール
 http経由でブラウザからアクセス(デフォルトポート 5601)
 HTML/CSS/Java Scriptで動いている
 ダッシュボードやグラフを
自分で作れる
 ...
kibanaで作るcDOTグラフ例
 複数cDOTのCPU使用率
29
Cluster内の負荷分散具合を
積み上げて比較しやすくする
kibanaで作るcDOTグラフ例
 1時間毎の特定CP値出現回数(Nodeごと)
30
CP [B]を赤色にして、赤が多く出て
いるようであれば、Diskネックと判断
kibanaで作るcDOTグラフ例
 Aggregateの使用容量比率
31
その他にもやろうと思えば
こんなグラフができる(作りたかった
 1日のSnapmirrorの転送時間を積み上げ棒グラフに…
 VolumeごとのIOPS/スループット/レイテンシーを
積み上げ折れ線グラフに…
0
50
100
150
20...
参考資料
 kibana公式ページ
 https://www.elastic.co/products/kibana
 Kibana入門
 http://sssslide.com/speakerdeck.com/y310/kibanaru...
3.sysstatを可視化してみる
34
検証環境の構成
cDOT8.3
(FAS3250 2Node)
cDOT8.2
(FAS3210 2Node)
仮想マシン
Fluentd
(td-agent 0.12.7)
SSH Client
run –node <Node名> sysst...
構築手順
 CentOS 7のインストール
 Shell Scriptでsysstatを取得する
 Fluentdでログを加工する
 Elasticsearchにログを送る
 Kibanaでグラフ/ダッシュボードを作る
36
構築手順
 CentOS 7のインストール
 Shell Scriptでsysstatを取得する
 Fluentdでログを加工する
 Elasticsearchにログを送る
 Kibanaでグラフ/ダッシュボードを作る
37
1) CentOS 7のインストール
1. 最小構成でインストールを進める(手順は省略)
2. FluentdとElasticsearchは時刻同期が重要になるため、NTPは使用すること
# yum install chrony
# vi /e...
構築手順
 CentOS 7のインストール
 Shell Scriptでsysstatを取得する
 Fluentdでログを加工する
 Elasticsearchにログを送る
 Kibanaでグラフ/ダッシュボードを作る
39
2) Shell Scriptでsysstatを取得する
1. SSH公開鍵を作成する (CentOSで実行)
#ssh-keygen -t rsa -C "SSH2 RSA Key“
#cat /root/.ssh/id_rsa.pub
ss...
2) Shell Scriptでsysstatを取得する
4. sysstat取得スクリプトを作成する
#vi sysstat_logging.sh
5. スクリプトに実行権限を付与する
#chmod 755 sysstat_logging.s...
2) Shell Scriptでsysstatを取得する
6. Crontabにスクリプトの実行スケジュールを登録する
# crontab -e
+ #NetApp Sysstatログ収集
+ */5 * * * * /root/sysstat...
構築手順
 CentOS 7のインストール
 Shell Scriptでsysstatを取得する
 Fluentdでログを加工する
 Elasticsearchにログを送る
 Kibanaでグラフ/ダッシュボードを作る
43
3) Fluentdでログを加工する
1. Ruby/GCCをインストールする
#yum -y install ruby
#yum -y install ruby-devel
#yum -y install gcc
#yum -y instal...
3) Fluentdでログを加工する
3. Fluentd(td-agent)のインストールを行う
#curl -L https://td-toolbelt.herokuapp.com/sh/install-redhat-
td-agent2....
3) Fluentdでログを加工する
6. td-agent設定ファイルにinput設定を記載する
#vi /etc/td-agent/td-agent.conf
+ <source>
+ type tail
+ path /var/log/n...
3) Fluentdでログを加工する
7. ログディレクトリにtd-agentユーザ/グループ操作権限
を付与する
 ハマりポイント
#chown td-agent:td-agent /var/log/netapp
※in_tail対象のログ...
構築手順
 CentOS 7のインストール
 Shell Scriptでsysstatを取得する
 Fluentdでログを加工する
 Elasticsearchにログを送る
 Kibanaでグラフ/ダッシュボードを作る
48
4) Elasticsearchにログを送る
1. Javaがインストール済みか確認する
#java -version
#echo $JAVA_HOME
※何も出力されない場合は以下の手順を参考にjavaのインストールを行う
2. javaのイ...
4) Elasticsearchにログを送る
7. Elasticsearchをインストールする
#wget https://download.elastic.co/elasticsearch/elasticsearch/elasticsear...
4) Elasticsearchにログを送る
9. sysstat用のIndexテンプレートを作成する
 Elasticsearchにsysstat用のIndexテンプレートを作成する
#curl -XPUT localhost:9200/_...
4) Elasticsearchにログを送る
10. td-agent設定ファイルにoutput設定を記載する
#vi /etc/td-agent/td-agent.conf
+ <match cdotsysstat.bar>
+ type e...
4) Elasticsearchにログを送る
12. sysstatスクリプトを実行する
# ./sysstat_logging.sh admin <Node Mgmt LIF or Cluster Mgmt LIF IP
アドレス> <Nod...
構築手順
 CentOS 7のインストール
 Shell Scriptでsysstatを取得する
 Fluentdでログを加工する
 Elasticsearchにログを送る
 Kibanaでグラフ/ダッシュボードを作る
54
5) Kibanaでグラフ/ダッシュボードを作る
1. kibanaモジュールのダウンロード/解凍
# wget https://download.elastic.co/kibana/kibana/kibana-4.1.0-linux-x64....
5) Kibanaでグラフ/ダッシュボードを作る
5. Webブラウザから以下のアドレスにアクセス
http://<Kibanaサーバ IPアドレス>:5601
6. Kibanaで可視化するIndex登録を行う
 Kibanaログイン/In...
5) Kibanaでグラフ/ダッシュボードを作る
7. Index登録後、Field定義一覧が確認可能になる
 Index情報の確認
登録したIndex
Field名とデータ型一覧
57
5) Kibanaでグラフ/ダッシュボードを作る
8. Elasticsearchに取り込まれた生データを確認する
 Index情報の確認
1.Discoverをクリック
取り込まれたDocument
▼ボタンで詳細情報の展
開が可能
登録さ...
5) Kibanaでグラフ/ダッシュボードを作る
9. グラフの種類を選ぶ
 CPU使用率グラフの作成 Step1
2.Line Chart
(折れ線グラフ)を選択
1.Visualizeをクリック
 Area chart(積み上げグラフ)...
5) Kibanaでグラフ/ダッシュボードを作る
10. グラフを新規作成する
 CPU使用率グラフの作成 Step2
[From a new search]を選択
60
5) Kibanaでグラフ/ダッシュボードを作る
11. グラフの定義を作成する
 CPU使用率グラフの作成 Step3
[Y-Axis]に以下を指定する
-Aggregation: Average
-Field : cpu
[X-Axis]...
5) Kibanaでグラフ/ダッシュボードを作る
12. グラフを保存する
 CPU使用率グラフの作成 Step4
1.保存ボタンをクリック
2.グラフ名を入力
3.保存ボタンをクリック
62
5) Kibanaでグラフ/ダッシュボードを作る
12. ダッシュボードを作成する
 ダッシュボードの作成
1. Dashboardをクリック
2. Add Visualizationをクリック
3. 保存したグラフを選択
4. 配置や大きさ...
補足:競合パターンと組み合わせ例
64
競合パターンと組み合わせ例
 競合パターン
 ログ加工 :Fluentd vs Logstash
 データベース :Elasticsearch vs InfluxDB(時系列DB) vs
Graphite(時系列DB)
 可視化 :Ki...
Upcoming SlideShare
Loading in …5
×

Kibanaでsysstatを可視化する

6,597 views

Published on

NetApp Clustered DATA ONTAPのsysstatコマンドを
Fluentd+ElasticSearch+kibanaを利用して可視化してみました。

Published in: Software

Kibanaでsysstatを可視化する

  1. 1. NetApp clustered ONTAP sysstatをkibanaで可視化する 前田 賢介 1
  2. 2. もくじ 1. はじめに  資料作成の経緯 2. Kibana+Elasticsearch+Fluentdを組み合わせてみる 3. sysstatを可視化してみる 4. 補足:競合製品紹介 2
  3. 3. 1.はじめに ~資料作成の経緯~ 3
  4. 4. 資料作成の経緯 (cDOT性能監視の悩み)  cDOTの性能監視/分析(OCPM)がイマイチ  OnCommand Insightは敷居が高い…  cDOT8.3からOnCommand Unified Manager5.2(Performance Advisor)がnot support  OCPM2.xからよくなるとのうわさも…  大規模環境になると、製品毎に監視ツールをデプロイするのはもう辛い…  運用者ごとに見れるモニタリングツールが限られるため、全体を俯瞰(ふかん)した ボトルネック調査ができないめんどくさい  ログフォーマットもUIもバラバラで使い方/見方の勉強から始める必要がある…etc OS/ミドルウェア/アプリケーションストレージ/サーバ/ネットワーク 4
  5. 5. 資料作成の経緯 もっとシンプルに 性能や容量のモニタリングを 一元化できないか? そんな方法があったらいいなという思いで 調べ始めました… 5
  6. 6. 資料作成の経緯 そんな方法… ありました 6 もっとシンプルに 性能や容量のモニタリングを 一元化できないか?
  7. 7. どうすればできるのか?  今流行りのログ収集->可視化アプローチ 手順1 • 色々なログを一か所に集約し、 統一フォーマットに加工する 手順2 • データベースに流し込む 手順3 • データを可視化する 7
  8. 8. 今流行りのログ収集->可視化アプローチ  イメージ図 ログ加工 ログ収集 (SSH/API/SNMP/Syslog…etc) Database化 可視化ツール 運用者 (Webブラウザを利用) 8
  9. 9. 今流行りのログ収集->可視化アプローチ  イメージ図 ログ加工 ログ収集 (SSH/API/SNMP/Syslog…etc) Database化 可視化ツール どんなものなのか? 運用者 (Webブラウザを利用) 9
  10. 10. 可視化ツールのイメージ kibana Grapana Map 積上げ棒グラフ 積上げ折れ線グラフ Markdown方式のペー ジ 10
  11. 11. 今流行りのログ収集->可視化アプローチ  イメージ図 サーバ1台から実装可能 ログ加工 ログ収集 (SSH/API/SNMP/Syslog…etc) Database化 可視化ツール 運用者 (Webブラウザを利用) 11
  12. 12. 2.Kibana+Elasticsearch+Fluentd を組み合わせてみる 12
  13. 13. どうすればできるのか?  今流行りのログ収集->可視化アプローチ 手順1 • 色々なログを一か所に集約し、 統一フォーマットに加工する 手順2 • データベースに流し込む 手順3 • データを可視化する 13
  14. 14. ログ加工 ログ収集 (SSH/API/SNMP/Syslog…etc) Database化 可視化ツール 運用者 (Webブラウザを利用) Kibana+Elasticsearch+Fluentdの構成 14
  15. 15. 各OSSの紹介 1. Fluentd 2. Elasticsearch 3. Kibana 15
  16. 16. 16
  17. 17. Fluentdとは  バラバラのログフォーマットをJSONフォーマットに加工する ツール  データは[time],[tag],[record(key:value)]で構成される  各アプリケーションログの入力や、 データベースやファイルへの出力はプラグインで実装される  Rubyで動いている ※JSONとは[Key:Value]形式でデータを保存する XML軽量版のようなもの 17
  18. 18. Fluentdとは ようするに ログをいい感じに加工して 好きな形式に吐き出してくれる ツール 18
  19. 19. 今回のsysstat分析に使うプラグイン紹介  in_tailプラグイン  tail –fのように特定のログを監視し、 書き込まれたタイミングでParse(加工)処理を行うプラグイン  Ruby正規表現を使用して、ログをJSON(Key:Value)形式に変換  複数行のログを読み込むことも可能 http://kazegusuri.hateblo.jp/entry/2014/06/28/201239  以下のページでParseテストが可能 http://fluentular.herokuapp.com  out_elasticsearchプラグイン  その名の通り、InputしたデータをElasticsearchへ放り込むプラグイ ン  以下ページからダウンロード https://github.com/uken/fluent-plugin-elasticsearch 19
  20. 20. 大規模なFluentd構成例  FluentdからFluentdへのForwardも可能なため、役割を分 担させることで負荷分散も実現可能らしい 参考: http://www.slideshare.net/tagomoris/distributed-stream-processing-on-fluentd-fluentd 20
  21. 21. 参考資料  Fluentd公式ページ  http://www.fluentd.org/  Fluentd meetup in japan  http://www.slideshare.net/treasure-data/fluentd-meetup-in-japan-11410514  fluentd を利用した大規模ウェブサービスのロギング  http://www.slideshare.net/hotchpotch/20120204fluent-logging  Distributed Stream Processing on Fluentd  http://www.slideshare.net/tagomoris/distributed-stream-processing-on- fluentd-fluentd  Fluentular (in_tailプラグインテストツール)  http://fluentular.herokuapp.com/ 21
  22. 22. 22
  23. 23. Elasticsearchとは  全文検索エンジン  RDBではない  NoSQL Databaseである  そのためスキーマレスである  テーブルとかカラム定義とか事前に作る必要がない  でもカラム定義(Mapping)がないと全部Stringで入る  ハマりポイント1 CPU使用率の数値データが文字列だとグラフ化できない 日付っぽいデータは勝手にElasticsearchが解析してDate型にする Index Template機能を使って事前にMapping定義を作る必要がある  なんなら検索エンジンなのでStringが勝手に分析(Analyze)される  ハマりポイント2 [ntap-cdot-01]というホスト名で検索したいのに、 [ntap],[cdot],[01]で分割されるため余分なデータまでHitしてしまう 23
  24. 24. Elasticsearch の データ構造  RDBで言えば、Database = Index, Type = Table, Document = Record のようなもの  デフォルトのFluentd設定では1日毎にIndexが自動作成される  ログの粒度や量によって日時ごとや月次ごとで分割することも可能 (logstash_dateformatオプション)  時系列でデータを検索するため、1Indexに数日~数年間 / 種類が異なるデータ など詰め込みすぎると性能 問題に起因する  日付で検索/管理/削除できるように日単位にしておくのがベター?  Kibanaで可視化する場合、[Index名]単位でデータを読み込む  Indexを横断して検索することは可能  異なるType内で同じField名を設定すると、Mapping設定が衝突(conflict)する場合があるので注意すること  異なるIndexのデータを同じグラフしたい場合、Indexの接頭辞が重要となる Index “cdotperf-2015.07.08” Type “sysstat” Type “volume” Type “aggregate” cpu read write … cpu read write … cpu read write … Type “sysstat” Type “volume” Type “aggregate” … vol size used … vol size used … vol size used … aggr size used … aggr size used … aggr size used … Document Index “cdotcapacity-2015.07.08” Index “cdotperf- 2015.07.09” Index “cdotcapacity-2015.07.09” Field24
  25. 25. 大規模なElasticsearch構成例  大規模環境においてはElasticsearchを複数用意することで 負荷分散/冗長化が可能らしい Elasticsearch Cluster Node1 Node2 Node[n] Primary shard 1 “Index:cdot-2015.07.08” Primary shard 2 “Index:cdot-2015.07.08” Primary shard 3 “Index:cdot-2015.07.08” Primary shard 4 “Index:cdot-2015.07.08” Primary shard 0 “Index:cdot-2015.07.08” Replica shard 0 “Index:cdot-2015.07.08” Replica shard 1 “Index:cdot-2015.07.08” Replica shard 2 “Index:cdot-2015.07.08” Replica shard 3 “Index:cdot-2015.07.08” Replica shard 4 “Index:cdot-2015.07.08”  Cluster  1つ以上のNodeの集まりを示す  Cluster内の1台がマスターノードとなる  マスターノードがCluster全体の障害検知を 行う  Node  Elasticsearchサーバを示す  Share  Indexを分割した単位を示す  デフォルトでは5つの Primary Shard と Replica Shard が作成される 25
  26. 26. 参考資料  Elasticsearch公式ページ  https://www.elastic.co/  Hello! Elasticsearch  https://medium.com/hello-elasticsearch  Elasticsearch入門  https://speakerdeck.com/johtani/elasticsearchru-men  秒間3万の広告配信ログをElasticSearchでリアルタイム集計 してきた闘いの記録  http://www.slideshare.net/Satully/elasticsearch- study6threaltime20140916 26
  27. 27. 27
  28. 28. kibanaとは  Elasticsearchの公式可視化ツール  http経由でブラウザからアクセス(デフォルトポート 5601)  HTML/CSS/Java Scriptで動いている  ダッシュボードやグラフを 自分で作れる  マークダウン機能があるので Wikiページみたいなのも書ける  UIがカッコいい  Kibanaの設定情報は Elasticsearchに保存されている 28
  29. 29. kibanaで作るcDOTグラフ例  複数cDOTのCPU使用率 29 Cluster内の負荷分散具合を 積み上げて比較しやすくする
  30. 30. kibanaで作るcDOTグラフ例  1時間毎の特定CP値出現回数(Nodeごと) 30 CP [B]を赤色にして、赤が多く出て いるようであれば、Diskネックと判断
  31. 31. kibanaで作るcDOTグラフ例  Aggregateの使用容量比率 31
  32. 32. その他にもやろうと思えば こんなグラフができる(作りたかった  1日のSnapmirrorの転送時間を積み上げ棒グラフに…  VolumeごとのIOPS/スループット/レイテンシーを 積み上げ折れ線グラフに… 0 50 100 150 200 250 転送時間(分) src5:dst5 src4:dst4 src3:dst3 src2:dst2 src1:dst1 0 2000 4000 6000 8000 10000 12000 14000 16000 18000 volume10 volume9 volume8 volume7 volume6 volume5 volume4 volume3 volume2 32 ※イメージです
  33. 33. 参考資料  kibana公式ページ  https://www.elastic.co/products/kibana  Kibana入門  http://sssslide.com/speakerdeck.com/y310/kibanaru-men  ElasticSearch+Kibanaでログデータの検索と視覚化を 実現するテクニックと運用ノウハウ  http://www.slideshare.net/y-ken/elasticsearch-kibnana- fluentd-management-tips 33
  34. 34. 3.sysstatを可視化してみる 34
  35. 35. 検証環境の構成 cDOT8.3 (FAS3250 2Node) cDOT8.2 (FAS3210 2Node) 仮想マシン Fluentd (td-agent 0.12.7) SSH Client run –node <Node名> sysstat -x Elasticsearch1.6Kibana4.1 自分のPC Webブラウザ http sysstat.log http http SSH SSH in_tailプラグイン out_elasticsearchプラグイン 35
  36. 36. 構築手順  CentOS 7のインストール  Shell Scriptでsysstatを取得する  Fluentdでログを加工する  Elasticsearchにログを送る  Kibanaでグラフ/ダッシュボードを作る 36
  37. 37. 構築手順  CentOS 7のインストール  Shell Scriptでsysstatを取得する  Fluentdでログを加工する  Elasticsearchにログを送る  Kibanaでグラフ/ダッシュボードを作る 37
  38. 38. 1) CentOS 7のインストール 1. 最小構成でインストールを進める(手順は省略) 2. FluentdとElasticsearchは時刻同期が重要になるため、NTPは使用すること # yum install chrony # vi /etc/chrony.conf + server <NTP Server IP Address> # systemctl start chronyd.service 3. 検証環境では面倒なのでFirewallとSE Linuxを無効化する #systemctl stop firewalld #systemctl disable firewalld #setenforce 0 #vi /etc/selinux/config - SELINUX=enforcing + SELINUX=disabled ※本環境で使用するポート 22(SSH),123(NTP),5601(kibana),8888(td-agent),9200(elasticsearch) 行頭記号の意味について # : bashプロンプトを示す + : viでの追記箇所を示す - : viでの削除箇所を示す 38
  39. 39. 構築手順  CentOS 7のインストール  Shell Scriptでsysstatを取得する  Fluentdでログを加工する  Elasticsearchにログを送る  Kibanaでグラフ/ダッシュボードを作る 39
  40. 40. 2) Shell Scriptでsysstatを取得する 1. SSH公開鍵を作成する (CentOSで実行) #ssh-keygen -t rsa -C "SSH2 RSA Key“ #cat /root/.ssh/id_rsa.pub ssh-rsa AAQCtPciSkw ~~~省略~~~ FlAQCtPciSkwNMWztNjr6ETbbBH4szVx SSH2 RSA Key ※表示されたキーをcDOTに登録する 2. 公開鍵認証の有効化および公開鍵を登録する (cDOTで実行) ::>publickey create -username admin -publickey "ssh-rsa AAQCtPciSkwz ~~~省略~~~ FlAQCtPciSkwNMWztNjr6ETbbBH4szVx SSH2 RSA Key“ ::>security login create -username admin -application ssh -authmethod publickey -role admin 3. SSHログインテスト(CentOSで実行) # ssh admin@<Node Mgmt LIF or Cluster Mgmt LIF IPアドレス> ※パスワード無しでcDOTにログインできれば完了  パスワード入力無しでSSHを使えるようにする 40
  41. 41. 2) Shell Scriptでsysstatを取得する 4. sysstat取得スクリプトを作成する #vi sysstat_logging.sh 5. スクリプトに実行権限を付与する #chmod 755 sysstat_logging.sh  サンプルスクリプト #!/bin/sh ###変数定義### user=$1 ipaddr=$2 node=$3 logdir="/var/log/netapp/" log="${logdir}sysstat.log" msgdircrete="${logdir}ディレクトリを作成しました" msgargerror="実行例:) $0 <ユーザ名> <cluster_mgmt IP Address> <Node名>" msgsshsuccess="接続成功しました" cdotcommand="run -node ${node} sysstat -x -c 3" ###前提エラー処理### #Directoryが存在しない場合は作成する if [ ! -d ${logdir} ] then echo ${msgdircrete} mkdir ${logdir} fi #引数が足りない場合はエラー if [ $# -ne 3 ]; then echo "${msgargerror}" 1>&2 exit 1 fi if ssh ${user}@${ipaddr} run -node ${node} date then echo "${msgsshsuccess}" ssh ${user}@${ipaddr} ${cdotcommand} | awk -v node=${node} '{ print strftime("%s"), node , $0 }' | sed -n -e 3p >> ${log} fi 41  sysstat_logging.sh
  42. 42. 2) Shell Scriptでsysstatを取得する 6. Crontabにスクリプトの実行スケジュールを登録する # crontab -e + #NetApp Sysstatログ収集 + */5 * * * * /root/sysstat_logging.sh admin 10.128.213.193 ps-3210cdot-01 + */5 * * * * /root/sysstat_logging.sh admin 10.128.213.193 ps-3210cdot-02 + */5 * * * * /root/sysstat_logging.sh admin 10.128.214.24 ps-3250-A-01 + */5 * * * * /root/sysstat_logging.sh admin 10.128.214.24 ps-3250-A-02 7. /var/log/netapp配下にログが出力されていることを確認する #cat /var/log/netapp/sysstat.log 1435983903 ps-3210cdot-01 2% 0 0 0 8 3 2 213 1091 0 0 42s 100% 9% T 10% 8 0 0 0 0 0 0  crontabに登録する 42
  43. 43. 構築手順  CentOS 7のインストール  Shell Scriptでsysstatを取得する  Fluentdでログを加工する  Elasticsearchにログを送る  Kibanaでグラフ/ダッシュボードを作る 43
  44. 44. 3) Fluentdでログを加工する 1. Ruby/GCCをインストールする #yum -y install ruby #yum -y install ruby-devel #yum -y install gcc #yum -y install libcurl-devel 2. Fluentdが使用できるファイルディスクリプタ数を変更する #ulimit –n ※出力結果が65536ではない場合は以下を実行する #デフォルト1024 #vi /etc/security/limits.conf + root soft nofile 65536 + root hard nofile 65536 + * soft nofile 65536 + * hard nofile 65536 #reboot ~~~再起動後~~~ #ulimit –n ※65536と表示されることを確認する 参考 : 絵で見てわかるファイルディスクリプタ・パイプ・リダイレクト http://d.hatena.ne.jp/higher_tomorrow/20110426/1303830417  Fluentd(td-agent)のインストール前提 44
  45. 45. 3) Fluentdでログを加工する 3. Fluentd(td-agent)のインストールを行う #curl -L https://td-toolbelt.herokuapp.com/sh/install-redhat- td-agent2.sh | sh 4. OS起動時のtd-agent自動起動設定を有効化する #systemctl enable td-agent.service 5. td-agentサービスを起動する #systemctl start td-agent.service #systemctl status td-agent.service  Fluentd(td-agent)のインストール 45
  46. 46. 3) Fluentdでログを加工する 6. td-agent設定ファイルにinput設定を記載する #vi /etc/td-agent/td-agent.conf + <source> + type tail + path /var/log/netapp/sysstat.log + pos_file /var/log/netapp/td-agent/sysstat.pos + tag cdotsysstat.bar + format /^(?<time>[^ ]*)¥s+(?<node>[^ ]*)¥s+(?<cpu>[^ ]*)%¥s+(?<nfs iops>[^ ]*)¥s+(?<cifs iops>[^ ]*)¥s+(?<http iops>[^ ]*)¥s+(?<total iops>[^ ]*)¥s+(?<net in KBperSec>[^ ]*)¥s+(?<net out KBperSec>[^ ]*)¥s+(?<Disk Read KBperSec>[^ ]*)¥s+(?<Disk Write KBperSec>[^ ]*)¥s+(?<Tape Read KBperSec>[^ ]*)¥s+(?<Tape Write KBperSec>[^ ]*)¥s+(?<Cache age>[^ ]*)¥s+(?<Cache Hit>[^ ]*)%¥s+(?<CP Time>[^ ]*)%¥s+(?<CP Type>[^ ]*)¥s+(?<Disk Util>[^ ]*)%¥s+(?<Other iops>[^ ]*)¥s+(?<FCP iops>[^ ]*)¥s+(?<iSCSI iops>[^ ]*)¥s+(?<FCP in KBperSec>[^ ]*)¥s+(?<FCP out KBperSec>[^ ]*)¥s+(?<iSCSI in KBperSec>[^ ]*)¥s+(?<iSCSI out KBperSec>[^ ]*)$/ + time_format %s + </source> ※pos_fileはログファイルのどこまでtailで読み込んだが記録するファイル ※formatはRuby正規表現を使用, 以下URLのツールでテストが可能 http://fluentular.herokuapp.com/  Fluentd(td-agent)のin_tail設定 46
  47. 47. 3) Fluentdでログを加工する 7. ログディレクトリにtd-agentユーザ/グループ操作権限 を付与する  ハマりポイント #chown td-agent:td-agent /var/log/netapp ※in_tail対象のログおよびディレクトリはtd-agentユーザが操作できる権限が必要となる 8. td-agent設定ファイルの再読み込みを行う #systemctl reload td-agent.service #systemctl status td-agent.service ※エラーが発生した場合は、/var/log/td-agent内のログを参照すること  Fluentd(td-agent)のin_tail設定 47
  48. 48. 構築手順  CentOS 7のインストール  Shell Scriptでsysstatを取得する  Fluentdでログを加工する  Elasticsearchにログを送る  Kibanaでグラフ/ダッシュボードを作る 48
  49. 49. 4) Elasticsearchにログを送る 1. Javaがインストール済みか確認する #java -version #echo $JAVA_HOME ※何も出力されない場合は以下の手順を参考にjavaのインストールを行う 2. javaのインストール #yum install java-1.8.0-openjdk 3. インストールディレクトリの確認 #readlink $(readlink $(which java)) /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.45-30.b13.el7_1.x86_64/jre/bin/java ※インストールディレクトリを確認し、青字部分をJAVA HOMEに設定する 4. JAVA HOMEの設定を行う #echo "export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.45-30.b13.el7_1.x86_64/" >> /root/.bashrc ※yumでインストールするとJAVAHOME設定がされないため、手動で行う必要がある 5. 再起動する #reboot 6. Javaがインストールされたことを確認する #java -version #echo $JAVA_HOME  Elasticsearchのインストール前提 49
  50. 50. 4) Elasticsearchにログを送る 7. Elasticsearchをインストールする #wget https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch- 1.6.0.noarch.rpm #rpm -ivh elasticsearch-1.6.0.noarch.rpm 8. Elasticsearchの自動起動有効化およびサービス開始を行う #systemctl enable elasticsearch.service #systemctl start elasticsearch.service #systemctl status elasticsearch.service 9. FluentdのElasticsearchプラグインをインストールする #/usr/sbin/td-agent-gem install fluent-plugin-elasticse 参照 : Fluent-Plugin-Elasticsearch https://github.com/uken/fluent-plugin-elasticsearch  Elasticsearchのインストール 50
  51. 51. 4) Elasticsearchにログを送る 9. sysstat用のIndexテンプレートを作成する  Elasticsearchにsysstat用のIndexテンプレートを作成する #curl -XPUT localhost:9200/_template/cdotsysstat -d '{ "template":"cdot-*","settings":{},"mappings":{ "sysstat":{ "properties":{ "Disk Util":{"type":"integer"}, "iSCSI iops":{"type":"integer"}, "cifs iops":{"type":"integer"}, "Cache Hit":{"type":"integer"}," cpu":{"type":"integer"}, "FCP out KBperSec":{"type":"integer"}, "iSCSI in KBperSec":{"type":"integer"}, "Other iops":{"type":"integer"}, "Tape Read KBperSec":{"type":"integer"}, "net out KBperSec":{"type":"integer"}, "Disk Read KBperSec":{"type":"integer"}, "Cache age":{"type":"string"}, "total iops":{"type":"integer"}, "CP Type":{"type":"string","index":"not_analyzed"}, "@timestamp":{"format":"dateOptionalTime","type":"date"}, "node":{"type":"string","index":"not_analyzed"}, "nfs iops":{"type":"integer"}, "@log_name":{"type":"string"}, "Disk Write KBperSec":{"type":"integer"}, "http iops":{"type":"integer"}, "net in KBperSec":{"type":"integer"}, "CP Time":{"type":"integer"}, "Tape Write KBperSec":{"type":"integer"}, "iSCSI out KBperSec":{"type":"integer"}, "FCP in KBperSec":{"type":"integer"}, "FCP iops":{"type":"integer"} } } }, "aliases":{} }'  ハマりポイント  数値データは明示的にIntegerを指定しないとStringになる  数値データの桁数によってはlong,float,doubleの使用を検討する  not_analyzedが無い場合、不完全一致で検索される 51
  52. 52. 4) Elasticsearchにログを送る 10. td-agent設定ファイルにoutput設定を記載する #vi /etc/td-agent/td-agent.conf + <match cdotsysstat.bar> + type elasticsearch + host localhost + port 9200 + type_name sysstat + logstash_format true + logstash_prefix cdot + include_tag_key true + tag_key @log_name + </match> 11. td-agent設定ファイルの再読み込みを行う #systemctl reload td-agent.service #systemctl status td-agent.service ※エラーが発生した場合は、/var/log/td-agent内のログを参照すること  FluentdからElasticsearchへデータ転送 52
  53. 53. 4) Elasticsearchにログを送る 12. sysstatスクリプトを実行する # ./sysstat_logging.sh admin <Node Mgmt LIF or Cluster Mgmt LIF IP アドレス> <Node名> 13. ElasticsearchのREST APIを使用して、作成されたIndexを確 認する http://<Elasticsearch サーバアドレス>:9200/_aliases?pretty ※cdot-[日付]が表示されれば完了  Elasticsearchのテスト 53
  54. 54. 構築手順  CentOS 7のインストール  Shell Scriptでsysstatを取得する  Fluentdでログを加工する  Elasticsearchにログを送る  Kibanaでグラフ/ダッシュボードを作る 54
  55. 55. 5) Kibanaでグラフ/ダッシュボードを作る 1. kibanaモジュールのダウンロード/解凍 # wget https://download.elastic.co/kibana/kibana/kibana-4.1.0-linux-x64.tar.gz # tar zxf kibana-4.1.0-linux-x64.tar.gz 2. 任意の場所にkibanaモジュールを配置 # mv ./kibana-4.1.0-linux-x64 /opt/kibana 3. 次回OS起動時、Kibanaを自動起動する # vi /etc/rc.d/rc.local + #kibanaの自動起動 + nohup /opt/kibana/bin/kibana & # chmod +x /etc/rc.d/rc.local ※rc.localに実行権限与えないと、次回OS起動時にrc.localが実行されない 4. Kibanaを起動する # nohup /opt/kibana/bin/kibana & ※nohupを付けないと、SSHセッションが切れたタイミングでkibanaが停止する  Kibanaのインストール 55
  56. 56. 5) Kibanaでグラフ/ダッシュボードを作る 5. Webブラウザから以下のアドレスにアクセス http://<Kibanaサーバ IPアドレス>:5601 6. Kibanaで可視化するIndex登録を行う  Kibanaログイン/Index登録 1. [cdot-*]を指定 2. [@timestamp]を指定 3. 上記指定後、[Create]をクリック 56
  57. 57. 5) Kibanaでグラフ/ダッシュボードを作る 7. Index登録後、Field定義一覧が確認可能になる  Index情報の確認 登録したIndex Field名とデータ型一覧 57
  58. 58. 5) Kibanaでグラフ/ダッシュボードを作る 8. Elasticsearchに取り込まれた生データを確認する  Index情報の確認 1.Discoverをクリック 取り込まれたDocument ▼ボタンで詳細情報の展 開が可能 登録されたDocument数 の時系列グラフ 58
  59. 59. 5) Kibanaでグラフ/ダッシュボードを作る 9. グラフの種類を選ぶ  CPU使用率グラフの作成 Step1 2.Line Chart (折れ線グラフ)を選択 1.Visualizeをクリック  Area chart(積み上げグラフ)  Data table(テーブル表示)  Line chart(折れ線)  Markdown widget(マークダウン) ->Wikiのような マークダウン形式のページ作成  Metric(メトリック) ->特定期間内の最大/最小/合計/ 平均数値表示に使用  Pie chart(円グラフ)  Tile map(マップ) ->IP情報などからGPS情報を 取得するFluentd プラグインがある(geoip)  Vertical bar chart(棒グラフ) 59
  60. 60. 5) Kibanaでグラフ/ダッシュボードを作る 10. グラフを新規作成する  CPU使用率グラフの作成 Step2 [From a new search]を選択 60
  61. 61. 5) Kibanaでグラフ/ダッシュボードを作る 11. グラフの定義を作成する  CPU使用率グラフの作成 Step3 [Y-Axis]に以下を指定する -Aggregation: Average -Field : cpu [X-Axis]に以下を指定する -Aggregation: Data Histogram -Field : @Timestamp -Interval : Auto [Split Lines]に以下を指定する -Sub Aggregation: Significant Terms -Field : node -Interval : 0 定義入力後、再生ボタンをクリックする Notes: グラフが[No results found]と 表示される場合は、画面右上の ボタンからグラフ化する期間を 変えてみる 61
  62. 62. 5) Kibanaでグラフ/ダッシュボードを作る 12. グラフを保存する  CPU使用率グラフの作成 Step4 1.保存ボタンをクリック 2.グラフ名を入力 3.保存ボタンをクリック 62
  63. 63. 5) Kibanaでグラフ/ダッシュボードを作る 12. ダッシュボードを作成する  ダッシュボードの作成 1. Dashboardをクリック 2. Add Visualizationをクリック 3. 保存したグラフを選択 4. 配置や大きさを調整 5. グラフと同様に名前を付けて保存 6.保存したDashboardは Loadボタンから読み込む 63
  64. 64. 補足:競合パターンと組み合わせ例 64
  65. 65. 競合パターンと組み合わせ例  競合パターン  ログ加工 :Fluentd vs Logstash  データベース :Elasticsearch vs InfluxDB(時系列DB) vs Graphite(時系列DB)  可視化 :Kibana vs Grapana  組み合わせ例  Fluentd+InfluxDB+Grapana  Fluentd+Graphite+Grapana  OnCommand Unified/Performance Manager + OnCommand API Service + Grapana  NetApp Harvest+Graphite+Grapana 65

×