1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【ONTAP管理操作】NetApp Harvestのアラート設定と通知方法(Docker版)

1
Last updated at Posted at 2026-02-09

はじめに

以前の記事では、Docker版のHarvestの構築手順について記載しましたが、今回の記事ではHarvest利用時のAlert検知や通知についての内容を記載致します。
なお、Harvest自体にはAlertや通知の機能が備わっていないので、これらを実現するためにPrometheusやAlertmanagerを利用する必要があります。
本記事では、これらの機能を使ったAlert設定と通知の方法について説明します。

qiita-square

何をしたい?できる?

  • Dockerを利用したNetApp Harvestの導入を行う
  • Prometheus上で収集データに対し、Alertを上げるルール設定を行う
  • 検知したAlertについてAlertmanagerを用いて通知を行う

メトリクスの収集について

本環境においてPrometheusは、Harvestから定期的にメトリクスを収集しますが
Alartルールを設定することでVolumeがOffline時にAlertを発生させるといった事が可能になります。
ダウンロードするNetApp HarvestにはAlert定義がsampleとして用意されているので、そのまま利用する事も可能です。

  • ルールの定義
    Prometheusの設定ファイル(通常はprometheus.yml)にAlertルールを定義します。

  • Alertの評価
    Prometheusは定期的にこれらのルールを評価し、条件に合致する場合、Alertをトリガーします。

  • Alertの発行
    条件に合致した場合、PrometheusはAlertを生成し、Alertmanagerに送信します。

AlertルールのサンプルはHarvestのサイトから確認できます。

なお、ダウンロードするNetApp Harvestを展開するとcontainerにあるprometheusディレクトリにはalert_rules.yml とems_alert_rules.ymlが用意されており、prometheus.ymlファイル内のrule_files部分に対して事前に指定されている事が確認できます。

> tree harvest-25.11.0-1_linux_amd64/container/

harvest-25.11.0-1_linux_amd64/container/
|-- containerd
|   |-- README.md
(中略)
|-- podman
|   |-- README.md
|-- prometheus
    |-- alert_rules.yml      
    |-- ems_alert_rules.yml
    |-- harvest_targets.yml
    |-- prometheus.yml


# AlertmanagerのPort定義等が記載されているファイル
> cat harvest-25.11.0-1_linux_amd64/container/prometheus/prometheus.yml
global:
  scrape_interval: 1m
  scrape_timeout: 10s
  evaluation_interval: 1m
  external_labels:
    monitor: 'harvest'

# Alertmanager configuration
#alerting:
#  alertmanagers:
#    - static_configs:
#        - targets:
#            - 'localhost:9093'

# Load and evaluate rules in this file every 'evaluation_interval' seconds.
rule_files:
  - 'alert_rules.yml'
  - 'ems_alert_rules.yml'
(中略)

Alertmanagerについて

Alertmanagerは、Prometheusから送信されたAlertを管理するためのコンポーネントで、
Alertをメール、Slack、PagerDutyなどの通知システムに送信することができます。

  • Alertの集約
    同じAlertが複数回発生した場合、それらを一つにまとめることができます。
    これにより、同じ問題についての通知が大量に送信されるのを防ぎます。

  • Alertの抑制
    一時的にアラートを無視する設定が可能です。
    例えば、メンテナンス中に発生するAlertを無視することができます。
    通知の送信:

  • Alertのグルーピング
    関連するAlertをグループ化して、まとめて通知することができます。

記事における環境情報

本記事では、以下の環境で実施した内容となります。

  • Linux上にDockerを入れて、各役割(データ収集、DB、可視化)をコンテナとして展開

  • デフォルトで用意されているPrometheus用のAlertルールを使用

  • Alartmanagerは追加で設定

  • Mail通知の確認はMailpitを利用

OSやモジュールは以下の構成としています。

  • Alma Linux : 10.1
  • Docker : 29.1.5
  • Docker Compose : 5.0.1
  • Netnet Harvest : 25.11
  • Alartmanager: 0.30.1
  • Mail Server: Mailpit(SMTP Server&Mail Viewer)

環境のイメージとしては以下の通りです。
012.png

設定手順

この手順例では、新規で構築したLinux上にDockerの導入を含めて実施しています。
本記事では、Alertの設定が有効となっている形でHarvestの構築を実施します。

1. Dockerの導入

コンテナを利用してHarvestを構築する為、Alma LinuxへDockerの導入から実施します。

依存パッケージをインストールします。

> sudo dnf install -y yum-utils

メタデータの期限切れの最終確認: 0:18:50 前の 2026年01月06日 23時35分02秒 に実施しました。
依存関係が解決しました。
=======================================================================================================================
 パッケージ                  アーキテクチャー         バージョン                        リポジトリー             サイズ
=======================================================================================================================
インストール:
 yum-utils                   noarch                   4.7.0-9.el10                      baseos                    39 k
(中略)
インストール済み:
  yum-utils-4.7.0-9.el10.noarch

完了しました!

Dockerリポジトリを追加します。

> 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

Dockerの導入とVersionを確認します。

> sudo dnf install -y docker-ce docker-ce-cli containerd.io
Docker CE Stable - x86_64                                           74 kB/s |  16 kB     00:00
依存関係が解決しました。
=======================================================================================================================
 パッケージ                        Arch           バージョン                            リポジトリー             サイズ
=======================================================================================================================
インストール:
 containerd.io                     x86_64         2.2.1-1.el10

(中略)
完了しました!


> docker --version
Docker version 29.1.3, build f52814d

Dockerサービスの自動起動の有効化とDockerの起動を行います。

> sudo systemctl start docker
> sudo systemctl enable docker
Created symlink '/etc/systemd/system/multi-user.target.wants/docker.service''/usr/lib/systemd/system/docker.service'.

本記事では操作しているuser01でDockerを実行できるようにdockerグループに追加して確認しています。
設定後に、ログアウトしてから再ログインで非ルートユーザーでも利用可能となります。

> sudo usermod -aG docker $USER


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

2. Docker Composeの導入

複数コンテナをまとめて効率的に操作できるツールであるDocker Composeの導入を行います。

> sudo curl -L "https://github.com/docker/compose/releases/download/$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep -oP '"tag_name": "\K(.*)(?=")')/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100 29.8M  100 29.8M    0     0  37.3M      0 --:--:-- --:--:-- --:--:-- 60.9M

権限設定を実施し、シンボリックリンクを作成します。
そしてdocker-composeコマンドでVersionを確認し、パスが通っている事を確認します。

> sudo chmod +x /usr/local/bin/docker-compose

> sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

> docker-compose --version
Docker Compose version v5.0.1

3. NetApp Harvestの導入と設定ファイルの作成

最新のNetApp Harvest(現時点ではv25.11)をダウンロードします。

> HARVEST_VERSION=25.11.0
> wget https://github.com/NetApp/harvest/releases/download/v${HARVEST_VERSION}/harvest-${HARVEST_VERSION}-1_linux_amd64.tar.gz

--2026-02-05 18:03:03--  https://github.com/NetApp/harvest/releases/download/v25.11.0/harvest-25.11.0-1_linux_amd64.tar.gz
github.com (github.com) をDNSに問いあわせています... 20.27.177.113
github.com (github.com)|20.27.177.113|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 302 Found

(中略)

harvest-25.11.0-1_linux_amd64 100%[================================================>]  28.28M  11.6MB/s 時間 2.4s

2026-02-05 18:03:05 (25.9 MB/s) - `harvest-25.11.0-1_linux_amd64.tar.gz' へ保存完了 [29650493/29650493]

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

> tar -xvf harvest-${HARVEST_VERSION}-1_linux_amd64.tar.gz
harvest-25.11.0-1_linux_amd64/
harvest-25.11.0-1_linux_amd64/LICENSE
harvest-25.11.0-1_linux_amd64/harvest.yml
harvest-25.11.0-1_linux_amd64/autosupport
(中略)


> cd harvest-25.11.0-1_linux_amd64
> ls
LICENSE  README.md  autosupport  bin  cert  conf  container  grafana  harvest.yml  harvest.yml.org  prom-stack.tmpl  service

監視対象のONTAPを登録する為、harvest.ymlファイルを作成します。
(元からあるファイルはharvest.yml.orgのように名前変更しておく)

Pollers:以下の部分にONTAP Clusterの情報を記載します。
この例ではONTAP Clusterの1つ分のCluster管理LIFそれぞれ登録している例です。
アカウント名やパスワードのXXXXXXX部分は登録する機器に合わせて記載が必要となります。
収拾する項目としては、容量や構成情報、パフォーマンス情報、event logを収集する例になっています。

なお、本記事の監視対象ONTAPは9.17.1なのでRestAPIを使用した収集として定義します。
また、監視するONTAPのEventlogを収集する為には、本ファイルのcollectorsの部分にEmsの記載が必要となります。
(細かい定義自体は、harvest-25.11.0-1_linux_amd64/conf/ems配下にあります)

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

Defaults:
  collectors:
    - Rest
    - RestPerf
    - Ems
  use_insecure_tls: true
  exporters:
    - prometheus1

Pollers:
  cluster-01:
    datacenter: DC-001
    addr: 192.168.123.45
    auth_style: basic_auth
    username: admin
    password: XXXXXXXX

4. Docker compose用のファイル生成とコンテナの一括作成・起動

作成したharvest.ymlからDocker compose用ファイルを生成します。

> pwd
/home/user01/tmp/harvest-25.11.0-1_linux_amd64

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

コンテナの起動を実施します。
(起動後、docker psコマンドで確認しています)

> $ docker compose -f prom-stack.yml -f harvest-compose.yml up -d --remove-orphans
[+] up 40/40
[+] up 44/47fana/grafana:8.3.4         Pulled                                                                                                             9.7s
 ? Image grafana/grafana:8.3.4         Pulled                                                                                                             9.7s
 ? Image ghcr.io/netapp/harvest:latest Pulled                                                                                                             5.2s
 ? Image prom/prometheus:v2.55.0       Pulled                                                                                                             8.6s
 ? Network harvest_backend             Created                                                                                                            0.1s
 ? Network harvest_frontend            Created
(中略)


#コンテナの確認
> docker ps
docker ps
CONTAINER ID   IMAGE                           COMMAND                   CREATED          STATUS          PORTS                                         NAMES
bf37dddfceb3   grafana/grafana:8.3.4           "/run.sh"                13 seconds ago   Up 9 seconds    0.0.0.0:3000->3000/tcp, [::]:3000->3000/tcp   grafana
6a8c9c72663b   prom/prometheus:v2.55.0         "/bin/prometheus --c…"   14 seconds ago   Up 12 seconds   0.0.0.0:9090->9090/tcp, [::]:9090->9090/tcp   prometheus
1bd9937530c9   ghcr.io/netapp/harvest:latest   "bin/poller --poller…"   14 seconds ago   Up 12 seconds   0.0.0.0:2000->2000/tcp, [::]:2000->2000/tcp   poller-cluster-01

5. Grafanaへのアクセス

http://LinuxのIPアドレス:3000 でGrafanaへのアクセスする事ができます。
qiita-square

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

ログイン後、画面上方の[Home]をクリックします。
qiita-square

表示された画面から[Harvest-main-cDOT]をクリックし、確認するダッシュボードを選択します。
qiita-square

qiita-square

6. PrometheusのAlert確認

http://LinuxのIPアドレス:9090 でPrometheusへのアクセスする事ができます。
表示された画面で、[Alert]を選択することで定義されているAlertの状態を確認できます

qiita-square

6-1. イベントを生成しAlertとして認識するか確認

収集しているEvent log上にems_alert_rules.ymlに定義されているイベントが起きた際に、きちんとAlertとして検知できるか確認します。
ここでは、ShelfのFANのエラーについて、監視対象のONTAPから疑似的なテストイベントを生成し、Prometheusで検知できるか確認してみます。

# Diagモードに変更
> set diag

Warning: These diagnostic commands are for use by NetApp personnel only.
Do you want to continue? {y|n}: y


# テストイベントの生成
*> event generate -node PS-A400-01 -message-name ses.status.fanError -values test 1 2 3 4 5

*> event log show -message-name ses.status.fanError
Time                Node             Severity      Event
------------------- ---------------- ------------- ---------------------------
2/6/2026 17:08:33   PS-A400-01       EMERGENCY     ses.status.fanError: test cooling fan error for 1 2: 34. 5.

以下のようにEvent logを収集しているので、検知することができます。
(収集時間やRuleの定義ファイル的に多少検知に時間がかかる)
qiita-square

構成情報やパフォーマンス情報からのAlert確認(alert_rules.yml)の試験としては、Volumeのofflineが確認しやすいかと思います。
qiita-square

7. Aleartmanagerの構築

Alart検知が確認できたので、次にAleartmanagerの構築を実施します。
Aleartmanagerの構築は、用意しているLinuxにAleartmanagerのコンテナを追加作成するような形で実施します。

7-1. prom-stack.ymlの修正

prom-stack.yml に alertmanager_data ボリュームとalertmanager サービスを追加します。
必須ではないですが、起動順序のために depends_onの部分へalertmanagerを追記します。


> cat /home/user01/tmp/harvest-25.11.0-1_linux_amd64/prom-stack.yml

volumes:
    prometheus_data:
        name: harvest_prometheus_data
    grafana_data:
        name: harvest_grafana_data
# 以下追加
    alertmanager_data:
        name: harvest_alertmanager_dat

networks:
    frontend:
        name: harvest_frontend
    backend:
        name: harvest_backend

services:
    prometheus:
        container_name: prometheus
        image: prom/prometheus:v2.55.0
        volumes:
            - ./container/prometheus/:/etc/prometheus/
            - prometheus_data:/prometheus
        command:
            - '--config.file=/etc/prometheus/prometheus.yml'
            - '--storage.tsdb.path=/prometheus'
            - '--web.console.libraries=/usr/share/prometheus/console_libraries'
            - '--web.console.templates=/usr/share/prometheus/consoles'
            - '--storage.tsdb.retention.time=1y' # Remove data older than one year
            # - '--web.enable-admin-api' # Enable to delete time series data from Prometheus see https://www.robustperception.io/deleting-time-series-from-prometheus
        ports:
            - "9090:9090"
        networks:
            - backend
        restart: unless-stopped
        labels:
            kompose.service.type: nodeport
# 追加(起動順)
        depends_on:
            - alertmanager

    grafana:
        container_name: grafana
        image: grafana/grafana:8.3.4
        depends_on:
            - prometheus
        ports:
            - "3000:3000"
        volumes:
            - grafana_data:/var/lib/grafana
            - ./grafana:/etc/grafana/provisioning # import Harvest dashboards
        networks:
            - backend
            - frontend
        restart: unless-stopped
        labels:
            kompose.service.type: nodeport
                   
# 以下追加
    alertmanager:
        container_name: alertmanager
        image: prom/alertmanager:v0.30.1
        volumes:
          - ./container/alertmanager:/etc/alertmanager
          - alertmanager_data:/alertmanager
        command:
          - '--config.file=/etc/alertmanager/alertmanager.yml'
          - '--storage.path=/alertmanager'
        ports:
          - "9093:9093"
        networks:
          - backend
        restart: unless-stopped

7-2. prometheus.ymlの修正

alert_rules.ymlやems_alert_rules.ymの記載を確認します。
併せてAlertmanager configurationの内容を以下の例のように置き換えます。

> cat harvest-25.11.0-1_linux_amd64/container/prometheus/prometheus.yml

global:
  scrape_interval: 1m
  scrape_timeout: 10s
  evaluation_interval: 1m
  external_labels:
    monitor: 'harvest'

# Alertmanager configuration
alerting:
  alertmanagers:
    - scheme: http
      static_configs:
        - targets:
            - 'alertmanager:9093'

# Load and evaluate rules in this file every 'evaluation_interval' seconds.
rule_files:
  - 'alert_rules.yml'
  - 'ems_alert_rules.yml'

scrape_configs:
- job_name: 'prometheus'
  static_configs:
  - targets: ['localhost:9090']

- job_name: 'harvest'
  file_sd_configs:
    - files:
      - 'harvest_targets*.yml'

  static_configs:

7-3. Alertmanager の設定ファイル作成

7-1で./container/alertmanagerディレクトリをコンテナ内の/etc/alertmanagerディレクトリにマウントする設定を記載している為、alertmanagerディレクトリの作成と、ディレクトリ内にAlertmanagerの設定ファイルを作成します。
本記事では、試験用SMTPメールサーバとしてMailpitを用意しており、Port1025で受信できるような設定としているので、Alertmanager の設定ファイルにも1025として記載しています。

> pwd
/home/user01/tmp/harvest-25.11.0-1_linux_amd64/container

# ディレクトリ作成と移動
> mkdir alertmanager
> cd alertmanager


# Alertmanagerの設定ファイルの作成
> cat alertmanager.yml
global:
  smtp_smarthost: '192.168.123.200:1025'
  smtp_from: 'harvest_aleart@example.com'
  smtp_require_tls: false


route:
  receiver: "mail"
  group_by: ['alertname']
  group_wait: 30s
  group_interval: 10m
  repeat_interval: 1h


receivers:
 - name: 'mail'
   email_configs:
   - to: user01@example.com

inhibit_rules:
 - source_match:
     severity: 'critical'
   target_match:
     severity: 'warning'

7-4. Alertmanager の構築

> pwd
/home/user01/tmp/harvest-25.11.0-1_linux_amd64

> docker compose -f prom-stack.yml -f harvest-compose.yml up -d --remove-orphans
[+] up 7/8
[+] up 13/13m/alertmanager:v0.30.1 [???????] 33.08MB / 37.54MB Pulling                                            3.9s
 ? Image prom/alertmanager:v0.30.1 Pulled                                                                         3.9s
   ? 4f4fb700ef54                  Pull complete                                                                  0.0s
   ? e0857bc1a57d                  Pull complete                                                                  0.7s
   ? d0f7326b7716                  Pull complete                                                                  0.9s
   ? 9d85dc8d0609                  Pull complete                                                                  0.8s
   ? bfcf15f7a610                  Pull complete
   (中略)


# Alertmanagerのコンテナが起動している事の確認
> docker ps
CONTAINER ID   IMAGE                           COMMAND                   CREATED         STATUS         PORTS                                         NAMES
aa727772f4be   prom/alertmanager:v0.30.1       "/bin/alertmanager -…"   3 seconds ago   Up 2 seconds   0.0.0.0:9093->9093/tcp, [::]:9093->9093/tcp   alertmanager
bf37dddfceb3   grafana/grafana:8.3.4           "/run.sh"                 23 hours ago    Up 23 hours    0.0.0.0:3000->3000/tcp, [::]:3000->3000/tcp   grafana
6a8c9c72663b   prom/prometheus:v2.55.0         "/bin/prometheus --c…"   23 hours ago    Up 23 hours    0.0.0.0:9090->9090/tcp, [::]:9090->9090/tcp   prometheus
1bd9937530c9   ghcr.io/netapp/harvest:latest   "bin/poller --poller…"   23 hours ago    Up 23 hours    0.0.0.0:2000->2000/tcp, [::]:2000->2000/tcp   poller-cluster-01

7-5. Prometheusの再起動

> docker restart prometheus
prometheus

7-6. Alertmanagerへのアクセス

http://LinuxのIPアドレス:9093 でAlertmanagerへアクセスする事ができます。

qiita-square

7-7. Alertを発生させてAlertmanagerで確認

ここではONTAP上でVolumeのOfflineを発生させて、Alertmanagerでも確認できるかテストしてみます。
(AlertがGroupingされているかを確認したいので実際には2つ分offlineにしている)

> volume offline -vserver vs_shuhei01 -volume testvol
Volume "vs_shuhei01:testvol" is now offline.

5分後にPrometheusで検知している事を確認します。

qiita-square

Alertmanager側でも確認します。
Alertmanagerの設定ファイルで、 group_by: ['alertname']と記載しているので
同じAlertがグルーピングされている事が確認できます。

qiita-square

通知先に設定したMailpitへ通知が来ている事を確認します。

qiita-square

参考及びリンク

NetApp Harvest

Aleartのサンプル

EMS logからのAlertのサンプル

NAbox

Harvest & NAbox | NetApp ONAIR

Mailpit

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?