解决方案构想
本文介绍了一种解决方案构想。 云架构师可以通过本指南来帮助可视化此体系结构的典型实现的主要组件。 以本文为起点,设计一个符合工作负荷特定要求的架构合理的解决方案。
该解决方案使用 MonitoFi 监视 Azure 上的 Apache NiFi 部署。 此工具发送警报并在仪表板中显示运行状况和性能信息。
Apache®、Apache NiFi® 和 NiFi® 是 Apache Software Foundation 在美国和/或其他国家/地区的商标或注册商标。 使用这些标记并不暗示获得 Apache Software Foundation 的认可。
体系结构
下载此体系结构的 Visio 文件。
工作流
Docker 映像封装 MonitoFi Python 模块和 Application Insights SDK。 可以从 Docker Hub 注册表中检索此 Docker 映像,并将其存储在容器注册表中以供使用和部署。
另一个托管 InfluxDB 服务器和 Grafana 实例的容器部署在本地。
MonitoFi 容器收集有关每个 NiFi 群集的运行状况和性能的信息。 该容器:
- 以可配置的时间间隔从群集请求数据。
- 使用 Apache NiFi REST API 从各种终结点请求数据。
MonitoFi 容器将群集数据转换为以下格式:
- 结构化的日志格式。 该容器将此数据发送到 Application Insights。
- InfluxDB 线路协议。 在气隙或本地环境中,该容器将此数据存储在 InfluxDB 的本地实例中。
Grafana 显示 Application Insights 数据。 此数据监视工具:
- 使用 Monitor 作为数据源。
- 运行 Kusto 查询语言查询。 Application Insights 仪表板包括示例查询。
Grafana 用于显示来自 InfluxDB 本地实例的数据。 对于查询,Grafana 使用以下语言:
当 Grafana 通知系统检测到群集中的异常时,它会通过电子邮件和 Microsoft Teams 发送实时警报。
组件
- MonitoFi 在独立于 NiFi 的 Docker 容器中运行。
- Azure 容器注册表与 Azure 容器实例管理和运行容器映像。
其他体系结构组件包括:
- Application Insights。 此 Azure Monitor 功能监视应用程序的使用情况、可用性和性能。
- Grafana: 此开源分析工具显示数据并发送警报。
- InfluxDB。 该平台在本地存储数据。
方案详细信息
MonitoFi 是一个监视 Apache NiFi 群集运行状况和性能的工具。 当你运行 Azure 上的 NiFi 并使用 MonitoFi 时:
- MonitoFi 仪表板显示有关 NiFi 群集状态的历史信息。
- 在群集中检测到异常时,实时通知会向用户发出警报。
主要优点
MonitoFi 具有以下优势:
轻型且可扩展:MonitoFi 是一个在外部运行的轻型工具。 由于 MonitoFi 基于 Python 并且是容器化的,因此你可以对其进行扩展以添加功能。 在一个容器中运行的 MonitoFi 实例可以将目标定为多个 NiFi 群集。
有效且有用:MonitoFi 使用 InfluxDB 和 Grafana 的本地实例来提供实时监视和警报。 MonitoFi 能够以低至一秒的延迟监视群集。
灵活且可靠:MonitoFi 使用 REST API 包装器从 NiFi 检索 JSON 数据。 MonitoFi 将该数据转换为不依赖于特定终结点或字段名称的可用格式。 因此,当 NiFi REST API 响应发生变化时,你无需更改 MonitoFi 代码。
易于采用:无需重新配置 NiFi 群集即可对其进行监视。
易于使用:MonitoFi 提供预设配置。 它还包括 Grafana 仪表板的模板,无需做出修改即可导入这些模板。
高度可配置:MonitoFi 在 Docker 容器中运行。 可以使用环境变量来配置 MonitoFi。 可以在运行时轻松配置以下设置和其他设置:
- 终结点
- 安全访问设置
- 证书
- 检测密钥设置
- 收集间隔
使用一个容器映像即可将目标定为不同的 NiFi 群集、配置,以及 Application Insights 或 InfluxDB 的不同实例。 若要更改目标,请更改运行时命令。
部署此方案
若要部署此解决方案,请参阅 GitHub 上的 MonitoFi:适用于 Apache NiFi 的运行状况和性能监视器。
部署示例
在气隙和本地环境中无法访问公共 Internet。 因此,这些系统使用 Grafana 部署 InfluxDB 的本地实例。 此方法提供数据存储解决方案。 MonitoFi 容器通过专用 IP 地址使用 NiFi REST API 来检索群集数据。 该容器将此数据存储在 InfluxDB 中。 Grafana 用于显示 InfluxDB 数据并发送电子邮件和 Teams 消息来提醒用户。
在公共环境中,MonitoFi 容器使用 NiFi REST API 来检索群集数据。 然后,该容器以结构化格式将此数据发送到 Application Insights。 这些环境还部署 InfluxDB 的本地实例和 Grafana 容器。 MonitoFi 可将数据存储在该 InfluxDB 实例中。 Grafana 用于显示数据并发送电子邮件和 Teams 消息来提醒用户。
部署过程
MonitoFi 包括一个全自动化部署脚本,该脚本:
- 验证先决条件并安装缺少的依赖项。
- 部署 MonitoFi Docker 容器。
- 为 InfluxDB 和 Grafana 部署容器。
- 为 InfluxDB 配置数据库和保留策略。
- 在 Grafana 中为 InfluxDB 配置数据源。
- (可选)在 Grafana 中为 Monitor 配置数据源。
- 将 MonitoFi 仪表板导入 Grafana。 Grafana 使用此仪表板访问 InfluxDB 数据。
- (可选)将 Application Insights 仪表板导入 Grafana。 Grafana 可以使用此仪表板访问 Application Insights 数据。
- 配置由 Grafana 用来发送实时 Teams 警报的通知通道。
部署注意事项
部署此解决方案时,请记住以下先决条件和限制:
MonitoFi 需要有权访问 NiFi 群集。 使用以下方法之一提供该访问权限:
- 将 MonitoFi 放在 NiFi 群集所在的同一网络中。 通过专用 IP 地址提供访问。
- 使 NiFi 群集可通过 Internet 公开访问。
NiFi 群集可以是安全的或不安全的。 对于登录,安全群集支持 PKCS #12 格式的证书。 在 MonitoFi 容器中装载这种类型的证书,并设置密码。
一个 MonitoFi 实例可以同时监视多个 NiFi 群集。 另一种可行的做法是使用多个 MonitoFi 容器。 在这种情况下,该容器可以监视相同或不同群集中的不同 REST API 终结点。
如果使用多个 MonitoFi 实例,可将 MonitoFi 数据存储在一个 InfluxDB 数据库中,或将其发送到一个常用的 Application Insights 资源。 预设的标记将会标记数据并提供识别其源的方法。
InfluxDB 和 Grafana 在同一个 Docker 容器中运行。 若要为 MonitoFi 提供一种向此容器发送数据的方式,请使用以下选项之一:
- 将 Docker 容器放在 MonitoFi 容器所在的同一网络中。
- 使 Docker 容器可公开使用。
作者
本文由 Microsoft 维护, 它最初是由以下贡献者撰写的。
首席作者:
- Muazma Zahid | 首席项目经理
要查看非公开的 LinkedIn 个人资料,请登录到 LinkedIn。
后续步骤
- GitHub 上的 MonitoFi:Apache NiFi 的运行状况和性能监视器
- 包含 InfluxDB 和 Grafana 的 Docker 映像
- Docker Hub 上的 MonitoFi:Apache NiFi 的运行状况和性能监视器
- Docker Hub 上的包含 InfluxDB 和 Grafana 的 Docker 映像
- NiFi Rest API 1.14.0