Monasca
目录
概述
Monasca 是一个开源的、多租户的、高度可扩展的、高性能的、容错的监控即服务解决方案,它与 OpenStack 集成。它使用 REST API 进行高速指标处理和查询,并具有流式告警引擎和通知引擎。
贡献
沟通和会议
- IRC: #openstack-monasca 在 OFTC 上
- 每周会议
- 在 openstack-discuss 邮件列表中使用 [Monasca] 标签。
PTG 会议
文档
- Monasca API (以及指向其他文档的链接): https://docs.openstack.org/monasca-api/latest/
- Monasca 命令行界面: https://docs.openstack.org/python-monascaclient/latest/
- Monasca API 规范: https://github.com/openstack/monasca-api/blob/master/docs/monasca-api-spec.md
- Agent 文档: https://github.com/openstack/monasca-agent
演示文稿
在 OpenStack 或 OpenInfra Summit 上有很多有趣且优秀的 Monasca 演示文稿。
- Monasca/Presentations (已更新 Denver 2019 链接)
仓库
- 代码
- 核心: https://git.openstack.org/cgit/?q=monasca (旧 git 链接)
- API: https://opendev.org/openstack/monasca-api
- 部署
- 以下仓库可用于部署 Monasca
错误
所有未解决的缺陷
Stein 版本中的已分类缺陷
缺陷修复进度
需求
Monasca/Requirements 来自 2015 年的设计。
另请参阅 https://opendev.org/openstack/monasca-specs/
特性
本节描述了整体特性。
- 一个高性能、可扩展、可靠且容错的监控即服务 (MONaaS) 解决方案,可扩展到服务提供商级别的指标吞吐量。性能、可扩展性和高可用性从一开始就已设计到位。可以处理每秒 10 万个指标,并提供超过一年的数据保留期,而不会丢失数据,同时仍处理交互式查询。
- 用于存储和查询指标和历史信息的 Rest API。大多数监控解决方案使用特殊的传输和协议,例如 CollectD 或 NSCA (Nagios)。在我们的解决方案中,http 是唯一使用的协议。这简化了整体设计,并允许通过维度以更丰富的方式描述数据。
- 多租户和身份验证。指标使用 Keystone 提交和身份验证,并与租户 ID 关联存储。
- 使用一组 (key, value) 对定义的指标,称为维度。
- 对指标进行实时阈值设置和告警。
- 使用简单的表达语法描述的复合告警,该语法由告警子表达式和逻辑运算符组成。
- 监控代理支持许多内置的系统和服务检查,还支持 Nagios 检查和 statsd,以及像 Prometheus 那样抓取端点。
- 基于开源技术构建的开源监控解决方案。
Monasca API 可以与其他的报告、可视化或计费系统集成,例如 CloudKitty 或 Grafana。
Monasca 社区还参与了 自愈 和 自动伸缩 OpenStack SIG。
与替代方案的比较
Monasca/Comparison (待编写)
架构
- 监控 Agent (monasca-agent): 一个现代的基于 Python 的监控 Agent,由几个子组件组成,支持系统指标,例如 cpu 利用率和可用内存,Nagios 插件,statsd 和许多内置的服务检查,例如 MySQL、RabbitMQ 等。
- 监控 API (monasca-api): 一个定义良好且文档齐全的 RESTful API,用于监控,主要关注以下概念和领域
- 指标: 存储和查询大量的实时指标。
- 统计信息: 查询指标的统计信息。
- 告警定义: 创建、更新、查询和删除告警定义。
- 告警: 查询和删除告警历史记录。
- 使用告警子表达式和逻辑运算符组成的简单表达语法创建复合告警。
- 可以将告警严重性与告警关联。
- 存储并可查询完整的告警状态转换历史记录,从而进行后续的根本原因分析 (RCA) 或高级分析。
- 通知方法: 创建和删除通知方法,并将它们与告警关联,例如电子邮件。支持在告警状态转换发生时直接通过电子邮件通知用户。
- Monasca API 具有 Java 和 Python 实现。
- Persister (monasca-persister): 从 MessageQ 消耗指标和告警状态转换,并将它们存储在指标和告警数据库中。
- Persister 具有 Java 和 Python 实现。
- 转换和聚合引擎 (monasca-transform): 转换指标名称和值,例如 delta 或基于时间的导数计算,并创建发布到 Message Queue 的新指标。转换引擎尚未可用。
- 异常和预测引擎: 评估预测和异常,并生成预测指标以及异常可能性和异常分数。异常和预测引擎目前处于原型状态。
- 阈值引擎 (monasca-thresh): 计算指标上的阈值,并在超过阈值时将告警发布到 MessageQ。基于 Apache Storm,一个免费且开放的分布式实时计算系统。
- 通知引擎 (monasca-notification): 从 MessageQ 消耗告警状态转换消息,并发送通知,例如告警的电子邮件。通知引擎基于 Python。
- 分析引擎 (monasca-analytics): 从 MessageQ 消耗告警状态转换和指标,并进行异常检测和告警聚类/关联。
- 消息队列: 一个第三方组件,主要接收来自监控 API 的已发布指标和来自阈值引擎的告警状态转换消息,这些消息由其他组件消耗,例如 Persister 和通知引擎。消息队列还用于发布和消耗系统中的其他事件。目前,基于 Kafka 的消息队列受支持。Kafka 是一个高性能、分布式、容错且可扩展的消息队列,具有内置的持久性。我们将研究其他替代方案,例如 RabbitMQ,事实上,在我们的早期实现中,RabbitMQ 受到支持,但由于性能、规模、持久性和 RabbitMQ 的高可用性限制,我们已迁移到 Kafka。
- 指标和告警数据库: 一个第三方组件,主要存储指标和告警状态历史记录。目前,Vertica、InfluxDB 和 Cassandra 受支持。
- 配置数据库: 一个第三方组件,存储系统中许多配置和其他信息。目前,MySQL 受支持。PostgreSQL 的支持正在进行中。
- 监控客户端 (python-monascaclient): 一个 Python 命令行客户端和库,用于通信和控制监控 API。监控客户端是使用 OpenStack Heat Python 客户端作为框架编写的。监控客户端还具有一个 Python 库“monascaclient”,类似于其他 OpenStack 客户端,可用于快速构建其他功能。监控客户端库由监控 UI、Ceilometer publisher 和其他组件使用。
- 监控 UI: 一个 Horizon 仪表板,用于可视化 OpenStack 云的整体健康状况和状态。
- Ceilometer publisher: Ceilometer 的多发布者插件,未显示,用于转换和发布样本到监控 API。
大多数组件在其各自的仓库中都有描述。但是,没有用于使用的第三方组件的仓库,因此我们在此描述一些相关详细信息。
有关架构的更多历史背景,请参阅 Monasca/Architecture Details
更多阅读
- Monasca/Message Schema
- 消息模式: 一个分布式、高性能、可扩展、HA 消息队列,用于在监控系统中分发指标、告警和事件。目前,基于 Kafka。
- 消息: 有几个消息通过 MessageQ 由 Monasca 中的各种组件发布和消耗。请参阅 Message Schema。
- 指标和告警数据库: 请参阅 Monasca/Architecture Details
- 配置数据库: 请参阅 Monasca/Architecture Details
- 事件: Monasca 中对实时事件流处理的支持正在进行中。有关更多详细信息,请参阅链接,Monasca/Events。
- 日志记录: Monasca 中对日志记录的支持正在讨论中。有关更多详细信息,请参阅链接,Monasca/Logging。
- 转换和聚合引擎: 有关更多详细信息,请参阅链接,Monasca/Transform。
- 分析: 对异常检测和告警聚类/关联的支持正在进行中。有关更多详细信息,请参阅链接,Monasca/Analytics。
- 监控: 启用和使用以监控 Monasca 的状态正在讨论中。有关更多详细信息,请参阅链接,Monasca/Monitoring_Of_Monasca
- UI/UX 支持: 添加更多对常见 UI/UX 查询的支持正在讨论中。有关更多详细信息,请参阅链接,Monasca/UI_UX_Support
- 后指标序列: 请参阅 Monasca/Architecture Details
- 告警管理器: 请参阅 Monasca/Architecture Details 和官方文档 docs.openstack.org
Keystone 需求
Monasca 依赖于 keystone 运行,并且存在关于必须存在的 keystone 配置的要求。
- API 的端点必须在 keystone 中注册为“monasca”服务。
- API 必须具有用于验证其收到的 keystone 令牌的管理员令牌。
- 对于使用 Monasca 的每个项目,必须存在两个用户,一个将位于“monasca-agent”角色中,并由机器上运行的 monasca-agent 使用。另一个不应位于该角色中,可用于登录 UI、使用 CLI 或直接查询 API。
开发环境
- Monasca DevStack 插件
- DevStack 是 OpenStack 的主要开发环境。
- Monasca DevStack 插件安装 Monasca 服务、Agent、Horizon 监控面板和 Grafana
- README 在,https://github.com/openstack/monasca-api/tree/master/devstack
- 最好的入门方法是使用 Vagrant 和 Vagrantfile,https://github.com/openstack/monasca-api/blob/master/devstack/Vagrantfile。
- 项目和缺陷跟踪
- Monasca 在 Storyboard 上 https://storyboard.openstack.org/#!/project/list?q=monasca
- Monasca 在 LaunchPad 上。 https://launchpad.net/monasca (仅历史记录,Storyboard 是自 2017 年以来的官方跟踪)
- Monasca 项目源代码。 https://git.openstack.org/cgit/?q=monasca
编码规范
- Python: 所有 Python 代码都符合 OpenStack 标准,https://docs.openstack.org/developer/hacking/。
- 注意,Monasca 中的所有组件,除了阈值引擎,都已移植到 Python。
- Java:Monasca 的几个组件可作为 Java 提供。OpenStack 没有 Java 编码标准。我们采用了 Google Java 风格规范,网址为:https://ggdocs.cn/styleguide/javaguide.html。
- 该规范规定行长为 80 或 100 个字符。我们采用了 100 个字符。
技术
Monasca 使用了许多第三方技术
- 内部处理和中间件
- Apache Kafka (http://kafka.apache.org):Apache Kafka 是一种重新设计的发布-订阅消息传递系统,它被视为分布式提交日志。Kafka 是一种高性能、分布式、容错且可扩展的消息队列,内置了持久性。
- Apache Storm (http://storm.incubator.apache.org/):Apache Storm 是一个免费且开源的分布式实时计算系统。Storm 使可靠地处理无界数据流变得容易,就像 Hadoop 对批处理所做的那样,它也为实时处理提供了便利。
- ZooKeeper (https://zookeeper.net.cn/):被 Kafka 和 Storm 使用。
- Apache Spark:被 Monasca Transform 用作聚合引擎。
- 配置数据库
- MySQL:MySQL 支持作为配置数据库。
- PostgreSQL:通过 Hibernate 和 SQLAlchemy 支持 PostgreSQL 作为配置数据库。
- Vagrant (http://www.vagrantup.com/):Vagrant 提供易于配置、可重现且可移植的工作环境,这些环境建立在行业标准技术之上,并由单一一致的工作流程控制,以帮助最大限度地提高您和您的团队的生产力和灵活性。
- Dropwizard (https://dropwizard.github.io/dropwizard/):Dropwizard 将 Java 生态系统中稳定且成熟的库组合到一个简单、轻量级的包中,让您可以专注于完成工作。Dropwizard 具有开箱即用的复杂配置、应用程序指标、日志记录、操作工具等支持,让您和您的团队能够在最短的时间内交付高质量的 Web 服务。
- 时间序列数据库
- InfluxDB (http://influxdb.com/):一个开源的分布式时间序列数据库,没有外部依赖。InfluxDB 支持作为指标数据库。
- Vertica (http://www.vertica.com):一个商业级企业级 SQL 分析数据库,具有高度可扩展性。它提供内置的自动高可用性,并在数据库内分析以及压缩和存储大量数据方面表现出色。Vertica 提供了一个免费的社区版本,可以存储高达 1 TB 的数据,没有时间限制,网址为:https://my.vertica.com/community/。Vertica 支持作为指标数据库,但现在已不常用。
- Cassandra(https://cassandra.apache.org):Cassandra 支持作为指标数据库。
许可
版权 (c) 2014, 2015 Hewlett-Packard Development Company, L.P.
(C) 版权 2019 SUSE LLC
根据 Apache 许可证 2.0(“许可证”)授权;您不得在不遵守许可证的情况下使用此文件。您可以从以下网址获取许可证的副本:
https://apache.org/licenses/LICENSE-2.0
除非适用法律要求或通过书面协议同意,根据许可证分发的软件以“原样”基础分发,不提供任何形式的保证或条件,无论是明示的还是暗示的。有关管理许可证下权限和限制的具体语言,请参阅许可证。
