

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用 Harvest 和 Grafana 监控 FSx for ONTAP 文件系统
<a name="monitoring-harvest-grafana"></a>

NetApp Harvest 是一款用于从 ONTAP 系统收集性能和容量指标的开源工具，与 FSx for ONTAP 兼容。可以结合使用 Harvest 与 Grafana 来获得开源监控解决方案。

## 开始使用 Harvest 和 Grafana
<a name="harvest-grafana"></a>

以下部分详细介绍了如何设置和配置 Harvest 和 Grafana，以测算 FSx for ONTAP 文件系统的性能和存储容量利用率。

您可以使用 Harvest 和 Grafana 监控适用于 NetApp ONTAP 的 Amazon FSx 文件系统。NetApp Harvest 通过从 FSx for ONTAP 文件系统收集性能、容量和硬件指标来监控 ONTAP 数据中心。Grafana 提供可显示所收集 Harvest 指标的控制面板。

## 支持的 Harvest 控制面板
<a name="supported-harvest-dashboards"></a>

适用于 NetApp ONTAP 的 Amazon FSx 公开的指标集与本地 NetApp ONTAP 不同。因此，目前仅支持以下带有 `fsx` 标签的开箱即用 Harvest 控制面板与 FSx for ONTAP 配合使用。这些控制面板中的某些面板可能缺少不支持的信息。
+ Harvest：元数据
+ ONTAP：聚合
+ ONTAP：cDOT
+ ONTAP：集群
+ ONTAP：合规性
+ ONTAP：数据中心
+ ONTAP：数据保护
+ ONTAP：LUN
+ ONTAP：网络
+ ONTAP：节点
+ ONTAP：Qtree
+ ONTAP：安全性
+ ONTAP：SnapMirror
+ ONTAP：SnapMirror 目标
+ ONTAP：SnapMirror 源
+ ONTAP：SVM
+ ONTAP：卷
+ ONTAP：按 SVM 划分的卷
+ ONTAP：卷深入研究

FSx for ONTAP 支持以下 Harvest 控制面板，但这些控制面板默认情况下未在 Harvest 中启用。
+ ONTAP：FlexCache
+ ONTAP：FlexGroup
+ ONTAP：NFS 客户端
+ ONTAP：NFSv4 存储池显示器
+ ONTAP：NFS 故障排除
+ ONTAP：NVMe 命名空间
+ ONTAP：SMB
+ ONTAP：工作负载

## 不支持的 Harvest 控制面板
<a name="unsupported-dashboards"></a>

FSx for ONTAP *不*支持以下 Harvest 控制面板。
+ ONTAP：磁盘
+ ONTAP：外部服务操作
+ ONTAP：文件系统分析（FSA）
+ ONTAP：余量
+ ONTAP：运行状况
+ ONTAP：MAV 请求
+ ONTAP：MetroCluster
+ ONTAP：功率
+ ONTAP：Shelf
+ ONTAP：S3 对象存储

## CloudFormation 模板
<a name="harvest-grafana-template"></a>

首先，您可以部署一个 CloudFormation 模板来自动启动运行 Harvest 和 Grafana 的 Amazon EC2 实例。作为 CloudFormation 模板的输入，您可以为将在此部署中添加的文件系统指定 `fsxadmin` 用户和 Amazon FSx 管理端点。部署完成后，您可以登录 Grafana 控制面板来监控您的文件系统。

此解决方案采用 CloudFormation 自动部署 Harvest 和 Grafana 解决方案。该模板创建了一个 Amazon EC2 Linux 实例并安装 Harvest 和 Grafana 软件。要使用此解决方案，请下载 [fsx-ontap-harvest-grafana.template](https://solution-references.s3.amazonaws.com/fsx/harvest-grafana/harvest-grafana.yaml) CloudFormation 模板。

**注意**  
实施此解决方案会产生相关 AWS 服务的账单。有关更多信息，请参阅有关这些服务的定价详细信息页面。

## Amazon EC2 实例类型
<a name="ec2-instance-types"></a>

在配置模板时，您需要提供 Amazon EC2 实例类型。NetApp 对实例大小的建议取决于您监控的文件系统的数量以及您选择收集的指标数量。使用默认配置时，对于您监控的每 10 个文件系统，NetApp 建议：
+ CPU：2 个核心
+ 内存：1 GB
+ 磁盘：500 MB（主要用于日志文件）

以下是一些示例配置和您可以选择的 `t3` 实例类型。


****  

| 文件系统 | CPU | 磁盘 | 实例类型 | 
| --- | --- | --- | --- | 
|  10 以下  |  2 个核心  |  500 MB  |  `t3.micro`  | 
|  10–40  |  4 个核心  |  1000 MB  |  `t3.xlarge`  | 
|  40\$1  |  8 个核心  |  2000 MB  |  `t3.2xlarge`  | 

有关 Amazon EC2 实例类型的更多信息，请参阅*《Amazon EC2 用户指南》*中的[通用实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/general-purpose-instances.html)。

### 实例端口规则
<a name="instance-port-rules"></a>

在设置 Amazon EC2 实例时，请确保端口 3000 和 9090 接受 Amazon EC2 Harvest 和 Grafana 实例所在安全组的入站流量。由于启动的实例通过 HTTPS 连接到端点，因此它需要解析该端点，这需要使用端口 53 的 TCP/UDP 进行 DNS。此外，要访问该端点，需要使用端口 443 的 TCP 进行 HTTPS 和互联网访问。

## 部署程序
<a name="harvest-grafana-deployment"></a>

以下程序配置和部署 Harvest/Grafana 解决方案。部署大约需要五分钟。在开始之前，您的 AWS 账户中必须有一个运行于 Amazon Virtual Private Cloud（Amazon VPC）之中的 FSx for Lustre 文件系统，以及下面列出的模板参数信息。有关创建文件系统的更多信息，请参阅[创建文件系统](creating-file-systems.md)。

**启动 Harvest/Grafana 解决方案堆栈**

1. 下载 [fsx-ontap-harvest-grafana.template](https://solution-references.s3.amazonaws.com/fsx/harvest-grafana/harvest-grafana.yaml) CloudFormation 模板。有关创建 CloudFormation 堆栈的更多信息，请参阅《AWS CloudFormation 用户指南》**中的[在 AWS CloudFormation 控制台上创建堆栈](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html)。
**注意**  
默认情况下，该模板在美国东部（弗吉尼亚州北部）AWS 区域发布。您必须在可以使用 Amazon FSx 的 AWS 区域 启动此解决方案。有关更多信息，请参阅 *AWS 一般参考* 中的 [Amazon FSx 端点和配额](https://docs.aws.amazon.com/general/latest/gr/fsxn.html)。

1. 对于**参数**，请查看模板的参数并根据文件系统的需求对其进行修改。该解决方案使用以下默认值。  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/fsx/latest/ONTAPGuide/monitoring-harvest-grafana.html)

1. 选择**下一步**。

1. 在**选项**中，选择**下一步**。

1. 在**审核**中，审核并确认设置。必须选择复选框，以确认模板将创建 IAM 资源。

1. 选择**创建**以部署堆栈。

您可以在 CloudFormation 控制台的**状态**列中查看堆栈的状态。您应该在大约五（5）分钟内看到 **CREATE\$1COMPLETE** 状态。

## 登录 Grafana
<a name="harvest-grafana-login"></a>

部署完成后，使用浏览器登录到 Amazon EC2 实例的 IP 和端口 3000 上的 Grafana 控制面板：

```
http://EC2_instance_IP:3000
```

出现提示时，使用 Grafana 默认用户名（`admin`）和密码（`pass`）。我们建议您登录后立即更改密码。

有关更多信息，请参阅 GitHub 上的 [NetApp Harvest](https://github.com/NetApp/harvest) 页面。

## 排查 Harvest 和 Grafana 故障
<a name="troubleshooting-harvest-grafana"></a>

如果遇到 Harvest 和 Grafana 控制面板中提及的任何数据缺失问题，或者难以通过 FSx for ONTAP 设置 Harvest 和 Grafana，请查看以下主题获取潜在的解决方案。

**Topics**
+ [SVM 和卷控制面板为空白](#svm-volume-blank-dashboards)
+ [CloudFormation 堆栈在超时后回滚](#cfn-stack-rolled-back)

### SVM 和卷控制面板为空白
<a name="svm-volume-blank-dashboards"></a>

如果 CloudFormation 堆栈已成功部署并且可以联系到 Grafana，但 SVM 和卷控制面板为空白，请使用以下过程排查环境中的故障。您需要通过 SSH 访问部署有 Harvest 和 Grafana 的 Amazon EC2 实例。

1. 通过 SSH 访问当前运行有 Harvest 和 Grafana 客户端的 Amazon EC2 实例。

   ```
   [~]$ ssh ec2-user@ec2_ip_address
   ```

1. 使用以下命令打开 `harvest.yml` 文件并且：
   + 验证是否为 FSx for ONTAP 实例创建了一个条目 `Cluster-2`。
   + 验证输入的用户名和密码是否与 `fsxadmin` 凭证相符。

   ```
   [ec2-user@ip-ec2_ip_address ~]$ sudo cat /home/ec2-user/harvest_install/harvest/harvest.yml
   ```

1. 如果密码字段为空，请在编辑器中打开文件并使用 `fsxadmin` 密码进行更新，如下所示：

   ```
   [ec2-user@ip-ec2_ip_address ~]$ sudo vi /home/ec2-user/harvest_install/harvest/harvest.yml
   ```

1. 确保 `fsxadmin` 用户凭证以如下格式存储在 Secrets Manager 中，以备将来部署时使用，并将 `fsxadmin_password` 替换为您的密码。

   ```
   {"username" : "fsxadmin", "password" : "fsxadmin_password"}
   ```

### CloudFormation 堆栈在超时后回滚
<a name="cfn-stack-rolled-back"></a>

如果无法成功部署 CloudFormation 堆栈，并且堆栈出错回滚，请使用以下过程来解决此问题。您需要通过 SSH 访问通过 CloudFormation 堆栈部署的 EC2 实例。

1. 重新部署 CloudFormation 堆栈，确保自动回滚已禁用。

1. 通过 SSH 访问当前运行有 Harvest 和 Grafana 客户端的 Amazon EC2 实例。

   ```
   [~]$ ssh ec2-user@ec2_ip_address
   ```

1. 使用以下命令验证 Docker 容器是否已成功启动。

   ```
   [ec2-user@ip-ec2_ip_address ~]$ sudo docker ps
   ```

   在响应中，您应该会看到以下五个容器：

   ```
   CONTAINER ID   IMAGE                   COMMAND                  CREATED         STATUS                          PORTS                    NAMES
   6b9b3f2085ef   rahulguptajss/harvest   "bin/poller --config…"   8 minutes ago   Restarting (1) 20 seconds ago                            harvest_cluster-2
   3cf3e3623fde   rahulguptajss/harvest   "bin/poller --config…"   8 minutes ago   Up About a minute                                        harvest_cluster-1
   708f3b7ef6f8   grafana/grafana         "/run.sh"                8 minutes ago   Up 8 minutes                    0.0.0.0:3000->3000/tcp   harvest_grafana
   0febee61cab7   prom/alertmanager       "/bin/alertmanager -…"   8 minutes ago   Up 8 minutes                    0.0.0.0:9093->9093/tcp   harvest_prometheus_alertmanager
   1706d8cd5a0c   prom/prometheus         "/bin/prometheus --c…"   8 minutes ago   Up 8 minutes                    0.0.0.0:9090->9090/tcp   harvest_prometheus
   ```

1. 如果 Docker 容器未运行，按如下步骤检查 `/var/log/cloud-init-output.log` 文件中的故障。

   ```
   [ec2-user@ip-ec2_ip_address ~]$ sudo cat /var/log/cloud-init-output.log
        PLAY [Manage Harvest] **********************************************************
    
   TASK [Gathering Facts] *********************************************************
   ok: [localhost]
    
   TASK [Verify images] ***********************************************************
   failed: [localhost] (item=prom/prometheus) => {"ansible_loop_var": "item", "changed": false, "item": "prom/prometheus",
   "msg": "Error connecting: Error while fetching server API version: ('Connection aborted.', ConnectionResetError(104, 'Co
   nnection reset by peer'))"}
   failed: [localhost] (item=prom/alertmanager) => {"ansible_loop_var": "item", "changed": false, "item": "prom/alertmanage
   r", "msg": "Error connecting: Error while fetching server API version: ('Connection aborted.', ConnectionResetError(104,
   'Connection reset by peer'))"}
   failed: [localhost] (item=rahulguptajss/harvest) => {"ansible_loop_var": "item", "changed": false, "item": "rahulguptajs
   s/harvest", "msg": "Error connecting: Error while fetching server API version: ('Connection aborted.', ConnectionResetEr
   ror(104, 'Connection reset by peer'))"}
   failed: [localhost] (item=grafana/grafana) => {"ansible_loop_var": "item", "changed": false, "item": "grafana/grafana",
   "msg": "Error connecting: Error while fetching server API version: ('Connection aborted.', ConnectionResetError(104, 'Co
   nnection reset by peer'))"}
    
   PLAY RECAP *********************************************************************
   localhost                  : ok=1    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0
   ```

1. 如果出现故障，请执行以下命令部署 Harvest 和 Grafana 容器。

   ```
   [ec2-user@ip-ec2_ip_address ~]$ sudo su
        [ec2-user@ip-ec2_ip_address ~]$ cd /home/ec2-user/harvest_install
        [ec2-user@ip-ec2_ip_address ~]$ /usr/local/bin/ansible-playbook manage_harvest.yml
        [ec2-user@ip-ec2_ip_address ~]$ /usr/local/bin/ansible-playbook manage_harvest.yml --tags api
   ```

1. 通过运行 **sudo docker ps** 并连接至 Harvest 和 Grafana 网址来验证容器是否已成功启动。