一种告警预测方法、装置、电子设备及存储介质与流程

文档序号:21836188发布日期:2020-08-14 16:01阅读:95来源:国知局
本发明涉及计算机
技术领域
:,更具体地说,涉及一种告警预测方法、装置、电子设备及存储介质。
背景技术
::在线服务系统,如网上购物、网银、搜索引擎已经成为我们生活不可或缺的一部分。尽管大量的工作已经专注于服务运维和服务质量保证上,但是由于服务的大规模和复杂性,事件(服务意外中断)总是不可避免的,会可能会导致系统不可用和巨大的经济损失。比如亚马逊在2018年prime活动日一小时的宕机时间会影响100万美元的收入。为了减少事件带来的影响,有两种常用的方式,一种是在事件发生之前提前预测,从而采取措施规避故障;另一种是事件发生之后及时采取止损和定位措施。在我们的工作中,主要聚焦在第一种,因为事件预测可以直接避免故障的发生。学术界现有的事件/故障预测方法主要有以下几个限制:大多数方法专门为某一种故障设计(比如磁盘故障,节点故障,交换机故障),不具备泛化性;并且,这些方法大多是利用指标和日志数据来提取有预测作用的征兆特征,但是对于大规模的系统来说,每天会产生数十tb的日志和几千条的指标数据,因此基于指标和日志数据的预测模型承受着非常大的训练开销。目前有相关方法提出用轻量级的告警数据来做事件预测,但是表现不太理想,因为仅仅考虑了每类告警的数量作为特征。因此设计一个有效的、通用的、轻量的事件预测方法是非常有必要的。工业界也有用告警数据做事件预测的实践,包括以下两种:一种是基于专家知识和运维经验,总结事件预测的规则,如果线上告警满足了某一规则,就认为要发生对应的事件,如当前窗口内的告警至少出现“tcp无应答”关键字一次,且持续3分钟,涉及3个服务器,告警的严重性是二级,就认为可能会发生服务器宕机事件。但是基于规则的方法在实际中表现的并不好,经常会出现误报和漏报。因为维护和制定这些规则需要足够的运维经验,且耗费时间;不同工程师制定规则的偏好不一样,很难有统一的标准;且服务系统总是会经历不停的变更迭代,固定的规则不能适应动态的环境。第二种是基于频繁项集挖掘(如fp-growth)的方法,对于历史上的事件i,我们把每次i发生之前一段时间内的告警数据取出来做频繁项集挖掘,如果告警a每次都出现在事件i之前,那么就可以用告警a来预测事件i。但是基于工程师的反馈,这类方法只能覆盖极小部分的事件,由于告警数据的复杂性和告警内容中混在的参数,大多数事件都没有对应的频繁项告警,因此这类方法在实际中的实用性不高。综上,基于事件预测的重要性,而目前学术界的已有工作和工业界的实践在算法取得的效果和实用性上都存在局限。技术实现要素:本发明为解决上述问题,提出了一种通用的告警预测方法,本方案包括:采用多示例学习进行特征聚合以弱化训练集中的噪声示例权重;基于聚合后的特征构建事件预测模型并给出预警信号;基于预警信号提供可解释分析的事件根因。优选的,在所述多示例学习之前包括对观测窗口内的历史告警数据进行训练形成训练集并提取告警特征。优选的,所述告警特征包括以下两项:文本特征和统计特征;其中所述文本特征采用lda主题模型获得;所述统计特征至少包括告警数量、告警发生的时间、告警间隔时间中的一项。优选的,通过拼接所述文本特征和所述统计特征形成特征向量,采用多示例学习对所述特征向量进行聚合。优选的,所述采用多示例学习进行特征聚合以弱化训练集中的噪声示例权重包括如下步骤:获取训练集中的训练包以及训练包中的示例;将训练包分为多个负包和多个正包,其中负包中均为负的示例,正包中至少包括一个正的示例;提取负包中所有负的示例的特征取平均值得到负包的特征;对正包中的所有示例进行聚类,形成不同大小的聚类簇;基于示例所在聚类簇的大小计算正包的特征;其中,假设聚类后形成的征兆示例簇比噪声示例簇大。优选的,所述计算正包的特征的步骤为:基于示例所在聚类簇的大小计算所述正包中任一示例的权重;通过任一示例的权重和任一示例的特征向量得到任一示例的特征;将所有正包中的示例的特征加和得到正包的特征。优选的,基于聚合后的特征构建事件预测模型给出预警信号包括如下步骤:定义正包为正样本观测窗口,负包为负样本观测窗口;;基于观测窗口内的告警数据,预测在未来一段时间内是否会出现某个事件,若出现,观测窗口是正样本,若没有出现,观测窗口是负样本。采用smote过采样方法平衡所述正样本观测窗口和所述负样本观测窗口的数量;基于聚合后的正包的特征和负包的特征,采用xgboot算法作为分类器构建事件预测模型给出当前样本的预测值作为预警信号。优选的,基于预警信号提供可解释分析的事件根因包括:采用lime可解释方法给出预警信号的特征贡献排名。本发明的另一方面在于提供一种告警预测装置,包括:特征处理模块,采用多示例学习进行特征聚合以弱化训练集中的噪声示例权重;告警预测模块,基于聚合后的特征构建事件预测模型并给出预警信号;以及可解释分析模块,基于预警信号提供可解释分析的事件根因。优选的,所述多示例学习之前包括对观测窗口内的历史告警数据进行训练形成训练集并提取告警特征。优选的,所述告警特征包括文本特征和统计特征;其中所述文本特征采用lda主题模型获得;所述统计特征包括告警数量、告警发生的时间、告警间隔时间。优选的,特征处理模块包括数据获取子模块,用于获取告警数据的训练包以及训练包中的示例;第一分类子模块,用于将训练包分为负包和正包,其中负包中均为负的示例,正包中至少包括一个正的示例;提取子模块,用于提取负包中所有负的示例特征取平均值得到负包的特征;聚类子模块,用于对正包中的所有示例进行聚类,形成不同大小的聚类簇;计算子模块,用于基于示例所在聚类簇的大小计算正包的特征;其中,假设聚类后形成的征兆示例簇比噪声示例簇大。优选的,所述计算子模块包括:权重计算单元,用于基于示例所在聚类簇的大小计算所述正包中任一示例的权重;特征计算单元,用于通过任一示例的权重和任一示例的特征向量得到任一示例的特征;加和单元,用于将所有正包中的示例的特征加和得到正包的特征。优选的,告警预测模块包括:定义子模块,用于定义正包为正样本观测窗口,负包为负样本观测窗口;;平衡子模块,用于采用smote过采样方法平衡所述正样本和所述负样本的数量;构建模型子模块,基于聚合后的正包的特征和负包的特征,采用xgboot算法作为分类器构建事件预测模型给出当前样本的预测值作为预警信号。优选的,可解释分析模块包括采用lime可解释方法对预警信号给出其特征贡献排名。本发明的另一方面在于,提供一种电子设备,包括:至少一个处理器;以及与所述至少一个处理器耦合连接的存储器;其中,所述存储器存储有计算机程序,所述计算机程序能够被所述至少一个处理器执行,以实现本发明所述的方法。本发明的另一方面在于,提供一种计算机可读存储介质,所述计算机可读存储介质用于存储计算机程序,当所述计算机程序被执行时,能够实现本发明所述的方法。本发明的有益效果是:(1)本发明从告警数据提取了一系列预测特征,用于从多方面来刻画告警数据中存在的征兆模式,同时采用多示例学习的思想解决噪声告警对预测的干扰,基于有监督的分类算法构建了一个事件预测模型,利用告警数据,在事件发生之前提前发出预警信号,提醒工程师主动采用措施来规避风险,从而保证服务质量和减少故障带来的经济损失。(2)本发明提供一种有效的、轻量的通用事件预测方法,在多个实际生产中的在线服务系统的数据上经过测试,平均准确率和召回率优于学术界的现有方法和工业界的已有实践,平均可以达到0.82的f-score。附图说明图1是本发明实施例中告警预测方法的样本定义图;图2是本发明告警预测方法的详细流程图;图3是本发明实施例1中告警预测方法的流程图;图4是本发明实施例1中告警预测方法的步骤s1的步骤流程图;图5是本发明实施例1中告警预测方法的步骤s105的步骤流程图;图6是本发明实施例1中告警预测方法的步骤s2的步骤流程图;图7是本发明实施例1中告警预测装置的结构图;图8是本发明实施例1中特征处理模块10的结构图;图9是本发明实施例1中计算子模块105的结构图;图10是本发明实施例1中告警预测模块20的结构图。具体实施方式下面将参照附图更详细地描述本发明的具体实施例。虽然附图中显示了本发明的具体实施例,然而应当理解,可以以各种形式实现本发明而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本发明,并且能够将本发明的范围完整的传达给本领域的技术人员。如图1所示,本发明提供的技术方案把事件预测问题定义为一个窗口分类问题,即在当前时刻t,我们可以追溯历史上的一段窗口(观测窗口),基于这个窗口内的告警数据,我们预测在未来一段时间(预测窗口)内是否会出现某个事件,如果出现了,那么这个窗口是正样本,如果没有出现,那么这个窗口是负样本。其中修复事件是留给工程师的修复时间,即一旦我们给出了预警,工程师需要一段时间来才做措施避免事件发生。如图2所示,对于要预测的事件a,我们根据他在历史上发生的情况作为标签,通过对观测窗口的告警数据和事件标签进行训练得到训练集,对训练集中的文本特征和统计进行提取,对提取后的特征进行多示例学习(multipleinstancelearning,mil)对特征进行聚合,弱化噪声告警的权重,增强征兆告警的权重,以此避免噪声告警对预测产生的干扰作用。基于提取和聚合的特征及标签构造一个二分类模型:采用smote过采样的方法去平衡正样本和负样本的数量,之后采用xgboost(extremegradientboosting,极限梯度提升)算法作为分类器进行事件预测,如果一个观测窗口被分类为正样本,那么就意味着未来一段时间内会发生某个事件。此外,在线上预测时,除了用xgboost给出预测结果,还采用lime(localinterpretablemodel-agnosticexplanations,与本地可解释模型无关的解释)对每次预测结果给出可解释分析,lime可以给出每次预测的特征贡献排名,基于此,当算法给出一个预警信号时,lime可以告诉工程师,哪些特征对事件的发生起到的作用最大,那么这些特征极有可能和事件的根因有关,从而帮助工程师主动采取措施来规避故障。实施例1本实施例提供一种告警预测方法如图3所示,本实施例提供的告警预测方法包括:s1采用多示例学习进行特征聚合以弱化训练集中的噪声示例权重;在多示例学习之前,先对观测窗口内的历史告警数据进行训练形成训练集并提取告警特征,告警特征包括以下两项:文本特征和统计特征,其中文本特征采用lda主题模型获得;统计特征包括告警数量、告警发生的时间、告警间隔时间。通过拼接文本特征和统计特征形成特征向量,采用多示例学习对所述特征向量进行聚合。一般而言,从窗口中提取的特征可以直接输入到分类器,但是在实际场景中,并不是所有的告警对事件预测是有帮助的,有征兆的告警可能被淹没在大量的噪声告警中,导致预测结果不好。为了避免噪声告警带来的影响,我们的方案采用了多示例学习的思想,通过把一个大的窗口(包)拆分成几个小的窗口(示例),在每个小的窗口上提取特征,然后通过特征聚合的方式得到大窗口的特征。在聚合的过程中,弱化噪音告警的权重,增强征兆告警的权重,以此避免噪声告警对预测产生的干扰作用。s2基于聚合后的特征构建事件预测模型并给出预警信号;以及s3基于预警信号提供可解释分析的事件根因,采用lime可解释方法对预警信号给出其特征贡献排名,排名靠前的特征即有可能为事件根因。如图4所示,s1中多示例学习弱化告警数据中的噪声告警包括如下步骤:s101获取告警数据的训练包以及训练包中的示例;s102将训练包分为负包和正包,其中负包中均为负的示例,正包中至少包括一个正的示例;s103提取负包中所有负的示例特征取平均值得到负包的特征;s104对正包中的所有示例进行聚类,形成不同大小的聚类簇;s105基于示例所在聚类簇的大小计算正包的特征。聚类的方法基于一个假设:征兆示例肯定在不止一个正包中,而噪声示例一般是多种多样且随机出现的,因此对示例聚类后,征兆示例会形成一个较大的簇,而噪声示例会分布在若干个小的簇中,因此聚类后形成的征兆示例簇比噪声示例簇大,从而可以根据所在簇的大小来判断这个示例的作用。如图5所示,s105包括如下步骤:s1051基于示例所在聚类簇的大小计算所述正包中任一示例的权重;s1052通过任一示例的权重和任一示例的特征向量得到任一示例的特征;s1053将所有正包中的示例的特征加和得到正包的特征。如图6所示,s2中基于聚合后的特征构建事件预测模型给出预警信号包括如下步骤:s201定义正包为正样本观测窗口,负包为负样本观测窗口;;基于观测窗口内的告警数据,预测在未来一段时间内是否会出现某个事件,若出现,观测窗口是正样本,若没有出现,观测窗口是负样本。s202采用smote过采样方法平衡所述正样本观测窗口和所述负样本观测窗口的数量;s203基于聚合后的正包的特征和负包的特征,采用xgboot算法作为分类器构建事件预测模型给出当前样本的预测值作为预警信号。由于历史上事件发生的时间总是比系统正常运行时间少的多,因此需要解决样本的不平衡问题,采用smote过采样的方法去平衡正样本和负样本的数量,smote过采样方法的基本思想就是对少数类别样本进行分析和模拟,并将人工模拟的新样本添加到数据集中,进而使原始数据中的类别不再严重失衡。之后,采用xgboost算法作为分类器来做事件预测,如果一个窗口被分类为正样本,那么就意味着未来一段时间内会发生某个事件。本实施例给出了具体的线上案例:我们的算法在给出事件“服务响应时间延长”的预警的同时给出了特征贡献排序,其中排在最前面的文本特征的主题的关键字包含oracle,平均会话数,sql等,由此我们可以推测出该事件的根因可能是有oracle数据库导致的。如表1所示,为本发明告警预测方法与其它算法的预测结果对比,在十一个业务系统上做了实验(每个系统选择一个典型事件做预测),图中展示了预测的准确率(p)、召回率(r)和f-score(f),ewarn为本实施例的告警方法,其他的是对比算法,平均的准确率(p)和召回率(r)优于其他方法,本方法平均可以达到0.82的f-score,基本上在每个系统上的效果都优于现有算法。表1本发明告警预测方法与其它算法的预测结果对比表在优选的实施例中,如图7所示,提供一种告警预测装置,包括:特征处理模块10,采用多示例学习进行特征聚合以弱化训练集中的噪声示例权重;告警预测模块20,基于聚合后的特征构建事件预测模型并给出预警信号;以及可解释分析模块30,基于预警信号提供可解释分析的事件根因。多示例学习之前包括对观测窗口内的历史告警数据进行训练形成训练集并提取告警特征,可解释分析模块包括用于采用lime可解释方法对预警信号给出其特征贡献排名。如图8所示,其中特征处理模块10包括数据获取子模块101,用于获取告警数据的训练包以及训练包中的示例;第一分类子模块102,用于将训练包分为负包和正包,其中负包中均为负的示例,正包中至少包括一个正的示例;提取子模块103,用于提取负包中所有负的示例特征取平均值得到负包的特征;聚类子模块104,用于对正包中的所有示例进行聚类,形成不同大小的聚类簇;计算子模块105,用于基于示例所在聚类簇的大小计算得到正包的特征;其中,假设聚类后形成的征兆示例簇比噪声示例簇大。如图9所示,计算子模块105包括:权重计算单元1051,用于基于示例所在聚类簇的大小计算所述正包中任一示例的权重;特征计算单元1052,用于通过任一示例的权重和任一示例的特征向量得到任一示例的特征;加和单元1053,用于将所有正包中的示例的特征加和得到正包的特征。在优选的实施例中,如图10所示,告警预测模块20包括:定义子模块201,用于定义正包为正样本观测窗口,负包为负样本观测窗口;平衡子模块202,采用smote过采样方法平衡所述正样本和所述负样本的数量;构建模型子模块203,基于聚合后的正包的特征和负包的特征,采用xgboot算法作为分类器构建事件预测模型给出当前样本的预测值作为预警信号。在优选的实施例中,提供一种电子设备,包括:至少一个处理器;以及与至少一个处理器耦合连接的存储器;其中,存储器存储有计算机程序,所述计算机程序能够被所述至少一个处理器执行,以实现本发明所述的方法。在优选的实施例中,提供一种计算机可读存储介质,所述计算机可读存储介质用于存储计算机程序,当所述计算机程序被执行时,能够实现本发明所述的方法。实施例2本实施例提供另一种告警预测方法该方法包括:1.样本定义如图1所示,把事件预测问题定义为一个窗口分类问题,即在当前时刻t,我们可以追溯历史上的一段窗口(观测窗口),基于这个窗口内的告警数据,我们预测在未来一段时间(预测窗口)内是否会出现某个事件,如果出现了,那么这个窗口是正样本,如果没有出现,那么这个窗口是负样本。其中修复事件是留给工程师的修复时间,即一旦我们给出了预警,工程师需要一段时间来才做措施避免事件发生)。2.特征工程从告警数据中提取两类特征:文本特征和统计特征。文本特征:我把窗口内的告警数据的告警内容作为一个文档,通过lda主题模型提出文本的潜在语义特征,即lda会有一个输入参数(主题个数k),文本特征的个数就是k,表示这段文本分别属于每个主题的概率。统计特征:这个窗口内的告警数量,窗口的时间,告警间隔时间等其他的统计特征。通过拼接文本特征和统计特征形成特征向量。3.多示例学习多示例学习的假设是一个负的包里包含的示例的标签都是负的,而正的包里的示例至少有一个是正的(下面的公式中,y是包的标签,yi是示例的标签)。对于事件预测,这种假设是符合常理的,因为事件前的窗口总是包含一条征兆告警的;而普通的窗口一般都是没有征兆信息的。基于此,我们可以用多示例学习的定义来减少噪声对预测的影响。对于训练集中的所有包窗口,负包中示例都是对预测没有帮助的,我们可以直接通过示例窗口特征取平均值的方式得到负包窗口的特征;对于训练集中的正包,我们通过对示例聚类的方式来区分出噪声示例和征兆示例。聚类的方法基于一个假设:征兆示例肯定在不止一个正包中,而噪声示例一般是多种多样且随机出现的,因此对示例聚类后,征兆示例会形成一个较大的簇,而噪声示例会分布在若干个小的簇中,从而可以根据所在簇的大小来判断这个示例的作用。方案采用层次聚类的算法去聚类正包的示例,对于一个正包,下式中,示例xi的标准化权重为:上式中,是示例xi所在簇的大小,n是训练集所有正包中所有示例的个数,为示例xi的非标准化的权重,为示例xj的非标准化权重,代表对包x中从j=1到j=m的所有示例的非标准化权重求和。在测试过程中,对于包的标签我们是未知的,我们直接把每个示例分派到相应的簇中,然后计算权重。在得到所有的权重后,包聚合后的特征可以通过下面公式得到:其中,wi是示例xi的标准化权重,fi是示例xi的特征向量。4.构建事件预测模型在提取完特征和完成特征聚合之后,我们基于特征和标签构造一个二分类模型。由于历史上事件发生的时间总是比系统正常运行时间少的多,因此需要解决负样本(负包)和正样本(正包)的不平衡问题,我们采用smote过采样的方法去平衡正样本和负样本的数量。之后,我们采用xgboost算法作为分类器来做事件预测,如果一个窗口被分类为正样本,那么就意味着未来一段时间内会发生某个事件。这里用xgboost作为二分类模型(对于事件a,未来发生/不发生),xgboost是一个基于回归树的集成模型,核心算法思想是:1)不断地添加树,不断地进行特征分裂来生长一棵树,每次添加一个树,其实是学习一个新函数f(x),去拟合上次预测的残差;2)当我们训练完成得到k棵树,我们要预测一个样本的分数,其实就是根据这个样本的特征,在每棵树中会落到对应的一个叶子节点,每个叶子节点就对应一个分数;3)最后只需要将每棵树对应的分数加起来就是该样本的预测值。此外,xgboost与传统的gbdt相比,自动地运用cpu的多线程进行并行计算,同时在算法精度上也有明显的提高。5.可解释分析此外,在线上预测时,除了用xgboost给出预测结果,我们还采用lime对每次预测结果给出可解释分析,lime可以给出每次预测的特征贡献排名,lime主要思想是利用可解释性模型(如线性模型,决策树)局部近似目标复杂模型(算法中的xgboost)的预测。lime通过对输入进行轻微的扰动,探测黑盒模型的输出发生何种变化,根据这种变化在原始输入上训练一个可解释性模型,这个是黑盒模型的局部近似,而不是全局近似。lime的数学表示如下:对于一个测试数据𝑥的解释模型g,我们通过最小化损失函数来比较近似模型g和原模型f的近似性,其中,ω(g)代表了解释模型g的模型复杂度,g表示所有可能的解释模型(例如我们想用线性模型解释,则g表示所有的线性模型),𝜋𝑥定义了𝑥的邻域。我们通过最小化l使得模型f变得可解释。基于此,当算法给出一个预警信号时,lime可以告诉工程师,哪些特征对事件的发生起到的作用最大,那么这些特征极有可能和事件的根因有关,从而帮助工程师主动采取措施来规避故障。本实施例列举了2种应用场景:场景1:慢sql引发的交易响应时间长。交易响应时间是业务的关键指标,会直接影响用户体验和服务质量。这个故障是由数据库索引缺陷引发的,因此对于大的sql语句花了很长时间去执行,从而增加了响应时间。在这个事件发生之前,我们的算法能够从数据库相关的告警中挖掘出征兆信息并成功预警。场景2:频繁fullgc引发交易失败。这个故障是因为某次变更引入了有缺陷的代码,代码中创建了大的java对象,因此一段时间之后,java堆内存空间溢出,频繁出现fullgc。在这个故障发生之前,有相关的资源指标告警(内存使用率,堆使用空间)和jvmgc日志的告警,我们的算法可以基于这些告警成功预测到这个故障。本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的模块及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的装置和设备的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本申请所提供的实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本发明实施例方案的目的。另外,在本发明各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例节能信号发送/接收的方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、rom、ram、磁碟或者光盘等各种可以存储程序代码的介质。以上描述仅为本申请的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本申请中所涉及的发明范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离所述发明构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本申请中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1