浪潮:打卡了解Venus 详解这款OpenStack日志管理项目

北京2021年5月24日Venus是什么?初见还要追溯到去年11月召开的浪潮云海创新论坛2020。会上不仅分享了浪潮云海对于前沿科技的创新洞见以及扎实可靠的落地实践,更重要的是TA,一个开源并贡献社区的OpenStack日志管理项目,被称为Venus。

伴随OpenStack技术发展愈发成熟,全球75个公有云、数以千计的私有云都在使用,累计部署了超过1000万个计算核心,确然成为行业大中型私有云建设的首选。

为应对行业中大型云建设的刚需,主要表现为节点规模部署环境逐渐走向大规模,涉及到的功能模块层出不穷,尤其是各种日志类型更是纷繁复杂。“海量、繁多、分散……无论是格式还是位置都让运维人员在服务器上很难通过日志排查发现问题。”浪潮云海研发团队表示。

更重要的一点,当系统发生故障或者出现性能瓶颈时,经常需要各种类型日志通过串联才能定位故障原因或者找出导致系统性能瓶颈的线索才行,但OpenStack平台的调用多为分布式调用,日志的串联简直难出天际。综合考量,浪潮云海实力推出统一日志管理项目Venus,主要还是取决于大规模部署条件下,针对OpenStack平台在日志存储、检索、分析等方面的核心需求。

贡献社区的Venus具体能做啥?

总体来说,Venus可以做到一站式满足日志的采集、清洗、索引、分析、告警、可视化、生成报告等需求,帮助运维人员快速检索问题,掌握平台的运行健康度,并在未来计划引用机器学习算法,快速定位IT故障及根因,提高运维效率以及平台管理的水平。 简单来说在检索工作上,主要提供了简单易用的检索方式,可以做到检索一切日志数据,定位日志上下文;分析上主要实现日志关联、字段数值统计,提供多场景、多维度的可视化分析报表;告警层面则将搜索转化为主动告警,实现海量日志中错误的“大海捞针”;定位主要是通过建立知识图谱和调用的链式关系,结合算法实现故障的快速定位。

以日志预处理为例。对于日志数据,OpenStack社区从开始开发就制定了严格的日志规范,大部分模块都遵守此规范,即社区规定的日志格式为。对于此种日志很容易进行预处理,拆分成多种维度进行索引,如下图所示。

通常OpenStack日志索引的维度主要包括时间维度、主机维度、用户维度(用户id)、租户维度(租户id)、级别维度(info、warning、error等)、组件维度(nova_api、nova_compute等)、python_module(neutron.wsgi、nova.osapi_comput.wsgi.server等)、日志文件名(nova、neutron等)、APIstatus(200、404等)、APItype(GET、POST等)、APItime等,但也有部分原生模块的日志记录并不规范,浪潮的OpenStack对其全部进行了规范化处理。如此看来开源到OpenStack社区的Venus项目现已具备基本的日志分析处理功能,总结一下,主要功能为:

全文/多维度检索:针对全文或已索引维度进行关键词检索(可模糊匹配)

多维度统计/展示:对已索引的一个或多个维度的日志条数进行统计并展示

典型错误分析:集成典型的错误分析,例如mariadb连接错误等

错误日志告警:当周期内错误日志条数超过阈值,进行告警并通知

调用链分析:对系统中的调用,根据global_requestid进行流程分析

API执行情况/用时:对记录API请求情况的模块,能够收集API执行情况和时间消耗。从实践的角度来看,每年浪潮云海都会对其自主研发的OpenStack产品进行为期1到2个月的大规模测试。这个过程是一个反复进行测试、调整和再测试的过程,其中监控系统和日志系统的成熟度是快速完成测试过程的关键之一。以2020年进行的1000节点大规模测试为例,测试期间出现了各种错误日志,因此LOG可视化能够快速展示这些错误信息,让我们更好地了解不同组件的错误信息,具体情况如下:

在测试期间,RABBITMQ会挂掉,此时通过连接错误告警可以进一步对数据进行分析,详情如下:

在技术架构方面,Venus表现出色。该日志管理模块以efk为基础,总体架构如下图所示:

采集端:我们开发了基于fluentd的采集任务,并为OpenStack、操作系统和平台服务等日志开发了读取、过滤、格式化和发送等插件,同时用户可以按需配置。日志存储: 采集并格式化后,日志会被索引到elasticsearch集群中,ES具有副本机制,即使某些服务器宕机,仍可以正常使用,从而提高数据的可用性。Ivenus_api:我们提供更简洁、全面认证的接口,将上层调用转化为底层Elasticsearch的查询,并对查询的多维度索引数据进行简单处理,同时将结果返回。Ivenus_manager:该内部定时任务模块开发了可配置的定时任务,主要包括:

  • 错误分析任务: 例如各模块错误、mariadb连接错误和rabbitmq连接错误等差异任务。
  • 通知告警任务:根据不同时间和不同模块的错误日志条数设置阈值,并提供告警服务和通知服务。
  • 调用链任务:根据global_requestid将操作的调用链串联起来进行分析,可以展示调用的执行顺序、时间、错误信息等,并提供导出操作。
  • 配置管理任务:根据告警阈值设置、定时任务管理和日志保存时间设置等任务进行配置管理。

Venus项目旨在打造一个开放的OpenStack日志管理平台,结合大量用户在日志领域的需求和实践,提供各场景的日志分析,集成算法和知识图谱实现快速故障定位,构建完备的日志运维场景。我们希望未来的Venus能够采用不仅限于fluentd的采集插件,还能集成其他采集插件(例如logstash和flume),探索更多运维场景,对各场景关键数据进行统计分析和告警,将venus配置功能、分析功能和告警功能通过插件形式整合到horizon,聚合日志并构建知识图谱,集成算法类库,对故障进行根因定位。我们一直通过攻克开源技术的挑战突破开源版本在性能、大规模管理能力等方面的瓶颈,并秉承“源于开源、馈于开源”的理念,助力业界共建开放统一的智能基础设施。未来,我们将在这个领域投入更多精力,创造更多惊喜,并取得更多成绩。