前のページ
Featured image of post E-Series Grafana-Graphite Integration

E-Series Grafana-Graphite Integration

E-Series Grafana Graphite Integration でモニタリング

今回 は ONTAP の Grafana 連携である harvest を参考に作成された E-Series-Graphite-Grafana の紹介、構築手順を紹介します。

E-Series 単体のパフォーマンスメトリクスを取得するツールだと一時的な性能情報しか取れず後に確認したい場合などに困ることがあります。E-Series-Graphite-Grafana を使用すれば、データは時系列DBの Graphiteに保存でき、可視化は Grafana を使用して直感的にわかりやすいGUIを提供します。

完成形の画面

必要スペック(稼働確認したスペック)

今回紹介する環境を稼働させたスペック、サーバ構成を記載します。

今回は簡易的に性能情報を取得する目的であったため、1VMにすべてを詰め込んだ構成になっています。

  • CentOS 7 (server platformをインストール)
  • SELinux は disable
  • E-Series WebService Proxy 2.0
  • Grafana
  • Perl 5.18cpanモジュールは以下を導入しています。
    • LWP::UserAgent
    • MIME::Base64
    • JSON
    • Config::Tiny
    • Benchmark
    • Scalar::Util

今回構築する環境

今回は簡易化のために Grafana/Graphite は Docker Hub で公開されている docker image を使用しました。選定したポイントとしては環境変数で様々な設定ができるようになっている Docker イメージを使用しています。

「E-Series Graphite Grafana」 は CentOS へインストールしています。

Perl 5.18 で稼働を確認しているため plenv を使用し、

必要な CPAN モジュールのインストールには cpanm を使用しています。

使用するGrafana + Graphite docker image

以下の2つの Docker イメージを使用しました。

データ永続化のため以下のフォルダを作成します。

  • /opt/graphite-grafana/grafana
  • /opt/graphite-grafana/graphite/configs
  • /opt/graphite-grafana/graphite/data
  • /opt/graphite/storage

Grafanaの起動

docker run -d -p 3000:3000 -v /opt/graphite-grafana/grafana:/var/lib/grafana  -e "GF_SERVER_ROOT_URL=http://10.128.221.213" -e "GF_SECURITY_ADMIN_PASSWORD=admin" monitoringartist/grafana-xxl:latest

Graphite の起動

docker run -d --name graphite --restart=always -p 80:80 -p 2003-2004:2003-2004 -p 2023-2024:2023-2024 -p 8125:8125/udp -p 8126:8126 -v /opt/graphite-grafana/graphite/configs:/opt/graphite/conf -v /opt/graphite-grafana/graphite/data:/opt/graphite/storage -v /opt/graphite-grafana/graphite/statsd:/opt/statsd hopsoft/graphite-statsd

Docker volume を指定するときのホスト側のパスは絶対パスであることに注意してください

SANTricity Manager の設定

E-Series SANTricityから以下の2つの設定を行います。

admin のパスワード設定

「SetUp」 タブから administrator パスワードの変更

Setup タブから Administratorのパスワード変更

「Performance」タブから 性能情報取得用のカウンタ起動

SANTricity Managerの画面(性能情報)

統計情報収集のモニタ起動

WebService Proxy (WSP) の設定

E-Series-Graphite-Grafana は性能情報を取得するため、 WebService Proxy を使用します。

WebService Proxy とは E-Series のプロビジョニング・構成情報取得をREST APIで可能にする API エンドポイントです。

  • WSP 自体のインストールはマニュアル参照
  • WSP の設定 (/opt/netapp/santricity_web_services_proxy/wsconfig.xml) の設定

以下に wsconfig.xml のサンプルを記載します。

<config version=”1">``<! — non-ssl port if not specified, no listener is made -->  
 <sslport clientauth=”request”>8443</sslport>  
 <! — comma seperated list of protocols Possible values: SSLv3,TLSv1,TLSv1.1 -->  
 <exlude-protocols>SSLv3</exlude-protocols><port>8080</port>  
 <workingdir>/opt/netapp/santricity_web_services_proxy/working</workingdir>  
 <datadir>data</datadir>  
 <appkey>webapi-2.0</appkey>  
 <enable-auto-update>false</enable-auto-update><msgqueue-port>61616</msgqueue-port>  
 <env-entries>  
 <! — Logger configuration. Use INFO (standard) or FINE (debugging). -->  
 <! — Both stats.poll keys must be set to collect analyzed stats. -->  
 <! — stats.poll.interval is expressed in seconds. -1 means disabled. 0 is no delay. -->  
 <! — stats.poll.save.history is expressed in days. 0 means disabled. -->  
 <env key=”trace.level”>INFO</env>  
 <env key=”audit.level”>INFO</env>  
 <env key=”system.level”>INFO</env>  
 <env key=”webserver.level”>INFO</env>  
 <env key=”enable-basic-auth”>true</env>  
 <env key=”mel.events.cache.max”>8192</env>  
 <env key=”autodiscover.ipv6.enable”>false</env>  
 <env key=”autodiscover.ipv4.enable”>true</env>  
 <env key=”stats.poll.interval”>60</env>  
 <env key=”stats.poll.save.history”>1</env>  
 <env key=”firmware.repository.path”>firmware</env>  
 </env-entries>  
</config>
  • WSP は systemctl で起動、標準で自動実行で設定されています。

E-Series Grafana Graphite

GitHub からダウンロードしたモジュールはそのままは使用できないため3ファイル変更しました。

  • eseries-metrics-collector.pl の 起動シェルの変更
  • Systemctl に登録する際のパスの変更
  • plenv で入れたPerl のパスに変更 (本番運用時は要検討)

設定項目としては WSPの接続先アドレス、接続時の接続情報の設定、graphiteの接続ポートの変更( docker image のものと揃える)

一連のインストール方法は以下の通りです。

$ cd /opt/  
$ mkdir netapp  
$ cd netapp/  
$ git clone [https://github.com/plz/E-Series-Graphite-Grafana.git](https://github.com/plz/E-Series-Graphite-Grafana.git)

以下に変更したファイルのdiff を提示します。

$ git diff  
diff --git a/graphite-collector/eseries-metrics-collector.pl b/graphite-collector/eseries-metrics-collector.pl  
index ab53561..ab39313 100755  
--- a/graphite-collector/eseries-metrics-collector.pl  
+++ b/graphite-collector/eseries-metrics-collector.pl  
@@ -1,4 +1,4 @@  
-#!/usr/bin/perl  
+#!/root/.plenv/shims/perl  

Copyright 2016 Pablo Luis Zorzoli  
@@ -28,7 +28,7 @@ use Benchmark;  
 use Sys::Syslog;  
 use Scalar::Util qw(looks_like_number);  

-my $DEBUG            = 0;  
+my $DEBUG            = 1;  # debug info  
 my $API_VER          = "/devmgr/v2";  
 my $API_TIMEOUT      = 15;  
 my $PUSH_TO_GRAPHITE = 1;  
diff --git a/graphite-collector/proxy-config.conf b/graphite-collector/proxy-config.conf  
index aed59ed..52e7b86 100644  
--- a/graphite-collector/proxy-config.conf  
+++ b/graphite-collector/proxy-config.conf  
@@ -1,7 +1,7 @@  

Santricity Web Services Proxy hostname, FQDN, or IP  

-proxy = mywebservice.example.com  
+proxy = localhost  

Protocol (http|https)  
@@ -20,14 +20,14 @@ port = 8080  
User and password to connect with  

 user        = ro  
-password    = XXXXXXXXXXXXXXX  
+password    = ro  

Graphite Details  

 [graphite]  
 server      = localhost  
-port        = 3002  
+port        = 2003  
 proto       = tcp  
 root        = storage.eseries  
 timeout     = 5  
diff --git a/misc/eseries-metrics-collector.service b/misc/eseries-metrics-collector.service  
index a32455d..4e4ba3e 100644  
--- a/misc/eseries-metrics-collector.service  
+++ b/misc/eseries-metrics-collector.service  
@@ -11,7 +11,8 @@ StandardOutput=syslog  
 StandardError=syslog  
 SyslogIdentifier=eseries  
 SyslogLevel=notice  
-ExecStart=/bin/dash -c "while true; do ./eseries-metrics-collector.pl -c proxy-config.conf ; sleep 60 ; done"  
+#ExecStart=/bin/dash -c "while true; do ./eseries-metrics-collector.pl -c proxy-config.conf ; sleep 60 ; done"  
+ExecStart=/bin/bash -c "while true; do ./graphite-collector/eseries-metrics-collector.pl -c ./graphite-collector/proxy-config.conf ; sleep 60 ; done" # /bin/dash -> /bin/bash へ変更、confファイルのパスを変更  
 Restart=on-failure  

man systemd.unit

E-series-metrics-collector を systemctl でサービスに登録します。

systemctl enable /opt/netapp/E-Series-Graphite-Grafana/eseries-metrics-collector.service  
systemctl start eseries-metrics-collector

Grafana + Graphite の設定

ここまで設定ができたらGrafana から Graphite をデータソースとして登録します。

Graphite 起動時のパラメータで指定した URL を指定します。

Grafana データソース登録画面

データソースを登録するとダッシュボード上で性能値を見ることができるようになります。

GrafanaにインポートするダッシュボードはGitHub上に公開されています。必要に応じてインポートしてください。

参考までにダッシュボードインポートの機能を説明します。

ダッシュボードのインポート方法は Grafana ログイン後に「Home」をクリックするとダッシュボードのインポート機能があります。

ダッシュボードインポート画面 インポートボタンをクリックすると jsonファイルをアップロードできるのでこの機能を使ってGrafanaにダッシュボードを追加します。

ダッシュボードインポート画面

トラブルシューティング

動作しないときの切り分けです。

  • E-Series コレクタが動いているか
  • ディスク容量が不足していないか
  • WSP の wsconfig.xml に設定されている stats.poll.save.history の設定値によってはメトリックス取得の頻度、保管期間によっては WSP で HTTP 503 エラーが発生しメトリックスが取得できなくなります。

E-Series のコレクタが動いているか?

Systemctl のサービスとして登録しているのであれば以下のコマンドでログを確認

journalctl -xef -u eseries-metrics-collector

E-Series collectorが動作している場合は以下のスクリーンショットのように Graphite にStatistics が登録されています。

GraphiteにE-Series の Statistics が登録されていることを確認

WebService Proxy に対象のE-Series を登録しているか

確認方法

$ curl -X GET --header "Accept: application/json" "http://10.128.221.213:8080/devmgr/v2/storage-systems" -u ro | jq .

実行結果

上記コマンドの結果を記載します。

$ curl -X GET --header "Accept: application/json" "http://10.128.221.213:8080/devmgr/v2/storage-systems" -u ro | jq .  

Enter host password for user "ro":  
 % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current  
								 Dload  Upload   Total   Spent    Left  Speed  
100  1582  100  1582    0     0  32308      0 --:--:-- --:--:-- --:--:-- 32958[  
 {  
	"id": "1",  
	        "name": "nsc-e5660-02",  
	        "wwn": "60080E500029C65800000000567C8CB3",  
	        "passwordStatus": "valid",  
	        "passwordSet": true,  
	        "status": "optimal",  
	        "ip1": "10.128.223.45",  
	        "ip2": "10.128.223.46",  
	        "managementPaths": [  
	          "10.128.223.45",  
	          "10.128.223.46"  
	        ],  
	        "driveCount": 60,  
	        "trayCount": 1,  
	        "traceEnabled": false,  
	        "types": "",  
	        "model": "5600",  
	        "metaTags": [],  
	        "hotSpareSize": "0",  
	        "usedPoolSpace": "118747255799808",  
	        "freePoolSpace": "16355235463168",  
	        "unconfiguredSpace": "0",  
	        "driveTypes": [  
	          "sas"  
	        ],  
	        "hostSpareCountInStandby": 0,  
	        "hotSpareCount": 0,  
	        "hostSparesUsed": 0,  
	        "bootTime": "2017-02-07T03:23:13.000+0000",  
	        "fwVersion": "08.30.01.00",  
	        "appVersion": "08.30.01.00",  
	        "bootVersion": "08.30.01.00",  
	        "nvsramVersion": "N5600-830834-D01",  
	        "chassisSerialNumber": "1203FGK04651",  
	        "accessVolume": {  
	          "enabled": true,  
	          "volumeHandle": 16384,  
	          "capacity": "20971520",  
	          "accessVolumeRef": "2100000060080E5000437864000039EA5898DF68",  
	          "reserved1": "",  
	          "objectType": "accessVolume",  
	          "name": "Access",  
	          "id": "2100000060080E5000437864000039EA5898DF68",  
	          "wwn": "",  
	          "preferredControllerId": "",  
	          "totalSizeInBytes": "0",  
	          "listOfMappings": [],  
	          "mapped": false,  
	          "currentControllerId": ""  
	        },  
	        "unconfiguredSpaceByDriveType": {},  
	        "mediaScanPeriod": 30,  
	        "driveChannelPortDisabled": false,  
	        "recoveryModeEnabled": false,  
	        "autoLoadBalancingEnabled": true,  
	        "remoteMirroringEnabled": false,  
	        "fcRemoteMirroringState": "disabled",  
	        "asupEnabled": true,  
	        "securityKeyEnabled": false,  
	        "lastContacted": "2017-02-24T09:21:54.097+0000",  
	        "definedPartitionCount": 4,  
	        "simplexModeEnabled": false,  
	        "freePoolSpaceAsString": "16355235463168",  
	        "hotSpareSizeAsString": "0",  
	        "unconfiguredSpaceAsStrings": "0",  
	        "usedPoolSpaceAsString": "118747255799808"  
	      }  
]

WSP への追加方法

WebService ProxyからE-Seriesを管理するためには、WSP の管理対象として E-Series を追加する必要があります。

$ curl -X POST --header "Content-Type: application/json" --header "Accept: text/html" -d "{  
 "id": "2",  
 "controllerAddresses": [  
	"10.128.219.103”,   
	"10.128.219.104",   
 ],  
 "password": "password",  
}" "http://10.128.221.213:8080/devmgr/v2/storage-systems" -u rw

まとめ

今回は E-Series Graphite Grafana 連携を紹介しました。E-Seriesの性能評価を行う際にわかりやすく可視化し、長期間性能を取得したい場合に活用いただけるものとなります。Grafana との連携により既存のダッシュボード監視にストレージ監視を統合することができるようになります。

Built with Hugo
Theme Stack designed by Jimmy