

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

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

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

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

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

您可以使用和监控适用于 NetApp ONTAP 的 Amazon FSx 文件系统。Harvest Grafana NetApp Harvest通过从 FSx 收集 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：工作负载

## 不支持 收获 控制面板
<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-graf](https://solution-references.s3.amazonaws.com/fsx/harvest-grafana/harvest-grafana.yaml) CloudFormation ana.template 模板。

**注意**  
实施此解决方案会产生相关 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\+ | 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 连接到终端节点，因此它需要解析终端节点，而 DNS 需要端口 53 TCP/UDP 。此外，要访问该端点，需要使用端口 443 的 TCP 进行 HTTPS 和互联网访问。

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

以下过程配置和部署解决方案。 Harvest/Grafana 部署大约需要五分钟。在开始之前，您的 AWS 账户中必须有一个 FSx for ONTAP 文件系统在亚马逊虚拟私有云（亚马逊 VPC）中运行，并且模板的参数信息如下所列。有关创建文件系统的更多信息，请参阅[创建文件系统](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\_COMPLETE** 状态。

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

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

```
http://{{EC2_instance_IP}}:3000
```

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

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

## 排查 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 网址来验证容器是否已成功启动。