跳转到: 导航, 搜索

Monasca

概述

Monasca 是一个开源的、多租户的、高度可扩展的、高性能的、容错的监控即服务解决方案,它与 OpenStack 集成。它使用 REST API 进行高速指标处理和查询,并具有流式告警引擎和通知引擎。


OpenStack Project Monasca vertical.png

贡献

沟通和会议

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
Docker: https://github.com/monasca/monasca-docker
Kubernetes: https://github.com/monasca/monasca-helm
Ansible: https://github.com/search?utf8=%E2%9C%93&q=ansible-monasca
Puppet: https://git.openstack.org/openstack/puppet-monasca


错误

所有未解决的缺陷
https://storyboard.openstack.org/#!/worklist/213
Stein 版本中的已分类缺陷
https://storyboard.openstack.org/#!/worklist/467
缺陷修复进度
https://storyboard.openstack.org/#!/board/114


需求

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 (待编写)

架构

Monasca Architecture Component Diagram

  • 监控 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 中对实时事件流处理的支持正在进行中。有关更多详细信息,请参阅链接,Monasca/Events
  • 日志记录: Monasca 中对日志记录的支持正在讨论中。有关更多详细信息,请参阅链接,Monasca/Logging
  • 转换和聚合引擎: 有关更多详细信息,请参阅链接,Monasca/Transform
  • 分析: 对异常检测和告警聚类/关联的支持正在进行中。有关更多详细信息,请参阅链接,Monasca/Analytics
  • UI/UX 支持: 添加更多对常见 UI/UX 查询的支持正在讨论中。有关更多详细信息,请参阅链接,Monasca/UI_UX_Support

Keystone 需求

Monasca 依赖于 keystone 运行,并且存在关于必须存在的 keystone 配置的要求。

  • API 的端点必须在 keystone 中注册为“monasca”服务。
  • API 必须具有用于验证其收到的 keystone 令牌的管理员令牌。
  • 对于使用 Monasca 的每个项目,必须存在两个用户,一个将位于“monasca-agent”角色中,并由机器上运行的 monasca-agent 使用。另一个不应位于该角色中,可用于登录 UI、使用 CLI 或直接查询 API。


开发环境


编码规范

  • 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

除非适用法律要求或通过书面协议同意,根据许可证分发的软件以“原样”基础分发,不提供任何形式的保证或条件,无论是明示的还是暗示的。有关管理许可证下权限和限制的具体语言,请参阅许可证。


Monasca 使用 YourKit Profiler 进行 Java 开发





访问 YourKit 网站以获取更多信息