NetApp Harvestを利用したStorage監視(Docker版)

## はじめに
Storageの監視は、システムの安定性やデータの安全性を確保する為に非常に重要な項目となりますが、NetApp Storageにおいては、健常性とPerformanceを一元的に監視および管理できるツールとして以下のものを利用する事ができます。

- Active IQ Unified Manager
- Cloud Insights 
- Harvest

Storage容量が不足している場合は、アプリケーションのパフォーマンスが低下する可能性があるので、監視することでStorage容量の増加の必要性を知ることができますし、物理的な損傷やデータの破損などの問題についても事前に検知し、予防的な対策を講じることができます。

本記事では**Docker Compose経由のNetApp Harvestに関して導入から収集データの確認までについて記載**致します。
(VMwareへOVA展開する[NAbox](https://nabox.org/)については本記事では記載してません)

![001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/2866071a-4739-806c-aaf9-c93a62f39058.png)


## 何をしたい？できる？
- Dockerを利用したNetApp Harvestの導入を行う
- 収集されたデータをGUIで確認する
- グループ分けしたONTAPの電気使用量を確認してみる

## NetApp Harvestについて
NetAppが提供するNetApp Storageからパフォーマンスデータを収集する無償ツールで、収集したデータをPrometheusやInfluxDBといったDatabaseに送付後、Grafanaを利用する事で可視化することができます。
**Harvest単体には監視や可視化機能は無く、Database/Grafanaに転送する為のデータ収集を行います。**

その為、監視の為に**データ収集(Harvest)、Database、可視化(Grafana)の役割を持つコンポーネントをそれぞれ導入**する必要があります。
<img width="600" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/7fc5013a-510a-4d91-f665-ca9fb8ec81ce.png>


デフォルト構成(収集する情報)で、10Clusterを監視する場合は推奨構成は以下の通りです。
- CPU：2コア
- メモリ：1GB
- ディスク：500MB（主にログファイルとして使用）

## 記事における環境情報
本記事では、以下の環境で実施した内容となります。
- 監視先としてのONTAPを複数登録(DC-01, 02の2つのグループに分けている)
- Linux上にDockerを入れて、**各役割(データ収集、Database、可視化)をコンテナとして展開**
- Linuxにはuser01というユーザを追加して、操作はuser01で実行


OSやモジュールは以下の構成としています。
- Rocky Linux : 9.1
- Docker : 23.0.2
- Docker Compose : 2.17.2
- Netnet Harvest : 23.02


環境のイメージとしては以下の通りです。
![004.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/db3901b0-5ea3-226d-a503-532dfcd7b920.png)




## 設定手順
この手順例では、新規で構築したLinux上にDockerの導入を含めて実施しています。

### 1. Dockerの導入
コンテナを利用してHarvestを構築する為、Rocky LinuxへDockerの導入から実施します。
まずは、リポジトリの追加と確認を実施します。

```bash:
> sudo dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
repo の追加: https://download.docker.com/linux/centos/docker-ce.repo


> dnf repolistdnf repolist
repo id                                                       repo の名前
appstream                                                     Rocky Linux 9 - AppStream
baseos                                                        Rocky Linux 9 - BaseOS
docker-ce-stable                                              Docker CE Stable - x86_64
extras                                                        Rocky Linux 9 - Extras
```

dockerの導入とVersionを確認します。
```bash:
> sudo dnf install docker-ce docker-ce-cli containerd.io docker-compose-plugin
メタデータの期限切れの最終確認: 0:00:17 時間前の 2023年04月17日 07時21分09秒 に実施しました。
依存関係が解決しました。
=====================================================================================================================================
 パッケージ                               アーキテクチャー      バージョン                     リポジトリー                    サイズ
=====================================================================================================================================
インストール:
 containerd.io                            x86_64                1.6.20-3.1.el9                 docker-ce-stable                 33 M
     置き換え  runc.x86_64 4:1.1.4-1.el9_1
 docker-ce                                x86_64                3:23.0.2-1.el9                 docker-ce-stable                 23 M
 docker-ce-cli                            x86_64                1:23.0.2-1.el9                 docker-ce-stable                7.1 M
 docker-compose-plugin                    x86_64                2.17.2-1.el9                   docker-ce-stable                 11 M
依存関係のインストール:
 docker-ce-rootless-extras                x86_64                23.0.2-1.el9                   docker-ce-stable                3.8 M
弱い依存関係のインストール:
 docker-buildx-plugin                     x86_64                0.10.4-1.el9                   docker-ce-stable                 12 M
 docker-scan-plugin                       x86_64                0.23.0-3.el9                   docker-ce-stable                3.8 M

トランザクションの概要
=====================================================================================================================================
インストール  7 パッケージ

ダウンロードサイズの合計: 93 M
これでよろしいですか? [y/N]: y
パッケージのダウンロード:
(中略)
インストール済み:
  containerd.io-1.6.20-3.1.el9.x86_64     docker-buildx-plugin-0.10.4-1.el9.x86_64       docker-ce-3:23.0.2-1.el9.x86_64           
  docker-ce-cli-1:23.0.2-1.el9.x86_64     docker-ce-rootless-extras-23.0.2-1.el9.x86_64  docker-compose-plugin-2.17.2-1.el9.x86_64 
  docker-scan-plugin-0.23.0-3.el9.x86_64 

完了しました!                                                       Rocky Linux 9 - Extras


> docker -vdocker -v
Docker version 23.0.2, build 569dd73
```

Dockerサービスの自動起動の有効化とDockerの起動を行います。
```bash:
> sudo systemctl enable docker
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /usr/lib/systemd/system/docker.service.

>  sudo systemctl start docker             
```

作成したuser01でDockerを実行できるようにdockerグループに追加して確認します。
```bash:
> sudo usermod -aG docker user01

> newgrp docker

> id $USER
uid=1000(user01) gid=1000(user01) groups=1000(user01),10(wheel),977(docker)
   
```

### 2. Docker Composeの導入
複数コンテナをまとめて効率的に操作できるツールであるDocker Composeの導入を行います。
```bash:
> curl -s https://api.github.com/repos/docker/compose/releases/latest | grep browser_download_url  | grep docker-compose-linux-x86_64 | cut -d '"' -f 4 | wget -qi -
```

権限設定を実施し、場所をコマンド検索パスの通っているディレクトリに移動します。
そしてdocker-composeコマンドでVersionを確認し、パスが通っている事を確認します。
```bash:
> sudo chmod +x docker-compose-linux-x86_64

> sudo mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose

> docker-compose version
Docker Compose version v2.17.2
```
   

### 3. NetApp Harvestの導入と設定ファイルの作成
最新のNetApp Harvest(現時点ではv23.02.0)をダウンロードします。
```bash:
> wget https://github.com/NetApp/harvest/releases/download/v23.02.0/harvest-23.02.0-1_linux_amd64.tar.gz

github.com (github.com) をDNSに問いあわせています... 20.205.243.166
github.com (github.com)|20.205.243.166|:443 に接続しています... 接続しました。
(中略)
2023-04-17 07:31:42 (11.0 MB/s) - `harvest-23.02.0-1_linux_amd64.tar.gz' へ保存完了 [74170698/74170698]
```

ダウンロードしたファイルを展開し、移動します。

```bash:
> tar -xvf harvest-23.02.0-1_linux_amd64.tar.gz
harvest-23.02.0-1_linux_amd64/
harvest-23.02.0-1_linux_amd64/docker/
(中略)
harvest-23.02.0-1_linux_amd64/bin/harvest
harvest-23.02.0-1_linux_amd64/bin/rest


> cd harvest-23.02.0-1_linux_amd64
> ls
LICENSE   README.md    bin   cmd   docker  go.mod  grafana      harvest.yml  prom-stack.tmpl
Makefile  autosupport  cert  conf  docs    go.sum  harvest.cue  pkg          service
```

監視対象のONTAPを登録する為、harvest.ymlファイルを作成します。
**Pollers:以下の部分にONTAP Clusterの情報を記載**します。
この例ではONTAP Clusterの3つ分のCluster管理LIFそれぞれ登録しつつ、2つのグループ(DC-01とDC-02)に分けている例です。
アカウントのXXXXXXX部分は登録対象に合わせて記載が必要となります。

なお、**ONTAP Version 9.12未満のClusterでは、ZAPIコレクター使用が推奨**されています。

```bash:
> cat harvest.yml
Exporters:
  prometheus1:
    exporter: Prometheus
    addr: 0.0.0.0
    port_range: 2000-2030

Defaults:
  collectors:
    - Zapi
    - ZapiPerf
  use_insecure_tls: true
  exporters:
    - prometheus1

Pollers:
  cluster-01:
    datacenter: DC-01
    addr: 192.168.123.123
    auth_style: basic_auth
    username: admin
    password: XXXXXXX
  cluster-02:
    datacenter: DC-02
    addr: 192.168.123.46
    auth_style: basic_auth
    username: test01
    password: XXXXXXX
  cluster-03:
    datacenter: DC-02
    addr: 192.168.123.47
    auth_style: basic_auth
    username: test03
    password: XXXXXXX
```


### 4. Docker composeファイル生成とコンテナの一括作成・起動
作成したharvest.ymlからDocker compose用ファイルを生成します。
```bash:
> pwd
/home/user01/harvest-23.02.0-1_linux_amd64

> bin/harvest generate docker full --port --output harvest-compose.yml
Wrote file_sd targets to docker/prometheus/harvest_targets.yml
Start containers with:
docker-compose -f prom-stack.yml -f harvest-compose.yml up -d --remove-orphans
```

コンテナの起動を実施します。
(起動後、docker psコマンドで確認しています)
```bash:
> docker-compose -f prom-stack.yml -f harvest-compose.yml up -d --remove-orphans
[+] Running 0/0
 ? Network harvest-23020-1_linux_amd64_backend  Creating                                                                        0.1s 
(中略)
 ? Container prometheus                          Started                                                                        2.5s 
 ? Container poller-cluster-02                   Started                                                                        2.8s 
 ? Container poller-cluster-03                   Started                                                                        2.6s 
 ? Container poller-cluster-01                   Started                                                                        2.5s 
 ? Container grafana                             Started                                                                        5.1s 

#コンテナの確認
> docker ps
CONTAINER ID   IMAGE                         COMMAND                   CREATED        STATUS        PORTS                                       NAMES
4e4c40607daa   grafana/grafana:8.3.4         "/run.sh"                 2 hours ago   Up 2 hours   0.0.0.0:3000->3000/tcp, :::3000->3000/tcp   grafana
b24ce75958bd   prom/prometheus:v2.33.1       "/bin/prometheus --c…"    2 hours ago   Up 2 hours   0.0.0.0:9090->9090/tcp, :::9090->9090/tcp   prometheus
7724ce783a1b   cr.netapp.io/harvest:latest   "bin/poller --poller…"    2 hours ago   Up 2 hours                                               poller-cluster-01
aa2b75d44dd5   cr.netapp.io/harvest:latest   "bin/poller --poller…"    2 hours ago   Up 2 hours                                               poller-cluster-03
a70e82860b04   cr.netapp.io/harvest:latest   "bin/poller --poller…"    2 hours ago   Up 2 hours                                               poller-cluster-02
```


### 5. Grafanaへのアクセス
http://LinuxのIPアドレス:3000 でGrafanaへのアクセスする事ができます。
<img width="500" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/b98f644d-4296-4ad3-da53-b23dff9732f2.png>

アカウントの初期設定は以下の通りです。
初回Login時に新規Passwordの入力を求められるので、変更を実施します。
username: admin
password: admin

ログイン後、画面上方の[Home]をクリックします。
<img width="500" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/06bef12e-7555-c5d0-6d29-9244873fa403.png>

表示された画面から[Harvest-main-cDOT]をクリックし、確認するダッシュボードを選択します。
この例では[ONTAP: Power]を選択し、電気の利用量を確認します。
<img width="500" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/0ce76c86-b98d-9ead-b310-6e7ac41472dc.png>

<img width="500" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/0ce76c86-b98d-9ead-b310-6e7ac41472dc.png>


画面上方の[Datacenter]や[Cluster]を操作する事で、個々の機器やグループ単位の電気の利用量を確認する事ができます。
<img width="600" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/9458b918-1823-0842-7145-53f499799f97.png>

<img width="500" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/611604b2-eef5-5864-72c5-14d70d01eb7c.png>




## 参考及びリンク
[NetApp Harvest](https://netapp.github.io/harvest/23.05/)

[NAbox](https://nabox.org/)

[NetApp.ioのHarvest記事](https://netapp.io/monitoring/)