はじめに
以前の記事では、Docker版のHarvestの構築手順について記載しましたが、今回の記事ではHarvest利用時のAlert検知や通知についての内容を記載致します。
なお、Harvest自体にはAlertや通知の機能が備わっていないので、これらを実現するためにPrometheusやAlertmanagerを利用する必要があります。
本記事では、これらの機能を使ったAlert設定と通知の方法について説明します。
何をしたい?できる?
- 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)
設定手順
この手順例では、新規で構築した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へのアクセスする事ができます。

アカウントの初期設定は以下の通りです。
初回Login時に新規Passwordの入力を求められるので、変更を実施します。
username: admin
password: admin
表示された画面から[Harvest-main-cDOT]をクリックし、確認するダッシュボードを選択します。

6. PrometheusのAlert確認
http://LinuxのIPアドレス:9090 でPrometheusへのアクセスする事ができます。
表示された画面で、[Alert]を選択することで定義されているAlertの状態を確認できます
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の定義ファイル的に多少検知に時間がかかる)

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

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へアクセスする事ができます。
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で検知している事を確認します。
Alertmanager側でも確認します。
Alertmanagerの設定ファイルで、 group_by: ['alertname']と記載しているので
同じAlertがグルーピングされている事が確認できます。
通知先に設定したMailpitへ通知が来ている事を確認します。

