完整的解决方案:信息采集系统的技术实现
优采云 发布时间: 2022-10-06 02:30完整的解决方案:信息采集系统的技术实现
信息采集系统的技术实现
信息采集系统是指以标准格式采集指定网络信息。与搜索引擎不同的是,它的采集更有目的性,采集的来源范围比较小。. 这里简单介绍一下信息采集系统实施中的几个关键问题:
1) 采集网页数据
VC、Java、VB的网络通讯功能足以实现信息采集,VC中的Get/Post方法可以是采集网页信息,也可以直接使用socket方法采集,但一般使用前一种模式,另外为了提高采集的效率,使用了多线程技术。网上有些Spider程序是多线程的,可以参考。
2)如何通过关键字获取信息
信息采集的一大特点是根据供求信息中的商机标题、联系人、电话、邮箱、内容等多个关键词对信息进行拆分。这些关键字需要在实现过程中预先定义。然后搜索网页,得到夹在两个关键词之间的信息采集。另外需要注意的是网页中很多关键字都收录空格,空格的个数不能确定,比如“邮件”,这就要求在搜索关键字时,要按照单个中文拆分关键字要匹配的字符,中间的空格应该跳过。这一步实现后,信息会变得很规律,可以导入本地库。.
3)网页中的链接获取算法
懂 HTML 的人应该很清楚。网页中的链接是通过标签来定义的,但是有很多情况,比如:<a href="...">这是一种常见的链接格式,但是要注意<a href="...">的来自采集 的链接可能是完整路径或相对路径,应单独处理;<a href = ''> 是用单引号分隔的,所以在使用算法获取链接时,应该使用双引号和单引号来获取链接。引号由两个标签分隔;<a href = ..onclick = javascript:view('..','')> 通过javascript函数处理链接在算法上是很麻烦的。
4) 过滤无效数据
即使通过关键词丢弃了很多广告信息,但关键词信息中仍然会存在大量无效数据,包括信息开头的一些空格
5)特定数据的获取算法
电子邮件、电话等数据符合一定的规范,一般可以通过一些算法提取或通过正则表达式技术获得。网上有很多这样的算法。信息中采集、Email和电话等关键信息比较分散,需要用提取算法将这些信息提取出来,放到正确的位置。这是非常必要的,因为信息采集系统往往具有群发功能。
整个信息流采集可以总结如下:
a) 首先,获取网页的完整信息
b) 使用算法获取网页中的文本信息,即丢弃HTML标签文本
c) 删除多余的空行
d) 通过定义的关键字分隔信息
e) 信息的无效数据过滤
f) 信息进入当地图书馆
g) 获取网页中的链接,对链接重复步骤a),但是注意网页中很多链接是广告或无效的,所以有些链接关键字要预先定义好,只有收录关键字的链接处理
完整解决方案:【阿里开源】Tsar——灵活的系统和应用采集软件
在LinuxCon + ContainerCon + CloudOpen China(简称LC3)大会上,开源人士的盛会,阿里云CDN团队的孔剑(花名)分享了开源系统和应用的背景和设计采集软件沙皇的想法和使用,模块开发和未来规划。
其实是阿里巴巴在做系统或者应用监控的时候的一个思路。队友在实际使用过程中比较舒服,软件的扩展性、稳定性、易用性也比较好,所以目前全机都可以使用。Deployment作为基础的监控代理,提供稳定的数据支持,同时也是对外开源的。
沙皇的背景
对于在线SA/PE/R&D,他在开发和部署软件的时候,需要注意软件的运行情况。他需要去上面看看整个服务器的CPU/内存/网络/IO等基本指标是否OK。找出这些指标的一些软件瓶颈和针对性的优化。其实现在市面上有很多类似的软件,都有一定的特殊性,可能只是采集的某一个,每个软件采集都有不同的指标,这些的用法指标时间不一致。所以对用户的要求非常高,需要知道如何使用所有的监控软件,对于排查在线问题非常不方便。这也是我们最初的痛点。我们发现我们拥有所有的数据,但是如何链接和使用它很不方便。所以,我们想出了沙皇的想法。
下图是现在网上很多命令的使用。整个Linux站的每一层都有一些对应的命令。运维等用户的学习成本非常高,不利于我们统一监控。
需求和解决方案
因此,我们最初的要求是有一个易于使用的采集软件,具有完整的基础数据,最好是应用程序数据。因为刚才列出的指标都是通用指标,但是我们有应用软件,所以我们想知道应用软件的一些数据,比如QPS和响应时间。目前的开源软件无法支持,业务需要编写采集工具进行数据采集和监控。
另外,我们希望在数据之间做一些数据关联。比如当前CPU高,是否会带来其他一些数据指标的波动?需要对这些指标进行比较才能确定问题。
同时,必须对数据进行过滤,离线实时查看,本地长期存储,远程发送,方便在中心进行数据分析和挖掘。
有了这些需求,我们的解决方案就是模仿Sar,它本身就是一个系统活动报告,实现了系统指标的采集,我们在它的基础上做了一些扩展。除了系统级的数据采集,Tsar还可以进行应用级的采集,模块化,支持扩展。例如,采集 现在有十个指标。如果还有其他应用指标和业务数据要到采集,可以很方便的在Tsar中写一个模块到采集。它还支持简单的报警和远程发送。
设计和使用
沙皇的原则很简单。它主要利用动态库的特性。我们每个采集模块都会实现一些功能,比如采集函数,分析处理函数,注册时提供的模块。基础字段,比如模块名,模块收录的字段,字段从哪里来采集,采集之后怎么处理和输出,这些函数都注册在Tsar框架中,每个循环到采集 调用这些指令的函数时,就可以完成采集的处理和整个数据的输出。
整个模块的注册和执行流程如下:
下图是Tsar的功能大图,底部是系统计数器和软件界面。每个具体的模块都是基于采集,参考Sar实现了很多系统指标。此外,还为应用软件提供了LVS、Nginx等对比。通用应用软件模块。
在上述采集的过程中,会对模块进行一些过滤处理,并执行各个模块的采集函数来获取数据。根据格式化,框架将数据格式化并保存到/var/log/tsar.data。我们采集把所有的原创数据,以文件的形式存储起来。与Sar有区别。Tsar 中的字段是可读的,Sar 看不到含义。
数据采集到达后,支持发送到远端,比如发送到网络接口,或者发送到MySql、Nagios等。另外,数据展示分为两部分,分别是分为实时显示和历史显示。实时显示需要每秒查看指标的样子。历史显示就是对过去每一分钟的数据做一个历史记录。回放。目前,Tsar 支持秒、分钟、天等不同维度的数据展示。
沙皇的用法
Tsar的用法比较简单,不管是什么模块,这个用法都是共享的。上面最常用的命令是check命令,输出系统最新的监控指标。有了这个功能,所有基础软件采集基本可以每分钟调用一次,拿到最后一分钟的监控数据,把这些数据带到我们的监控平台,在里面做一些监控配置和集中工作。这个命令是最常用的。
-c 是定期执行的命令。这样,你当前打开的模块的所有采集函数都会执行一次,获取数据,并将数据保存在tsar的原创文件中。以后使用。
-i 是指定一个间隔,多少秒或多少分钟。
下图是一些用法的截图。实时模式下,可以指定-l或者--live,可以现场采集模块数据,实时分析结果。如果不指定,则默认为离线模式。时间间隔,如果不指定-i,默认为秒和分钟,实时每秒显示一次采集,离线每分钟显示一次。您还可以指定模块,--mod_name,指定几个模块,并显示几个指标。这样就可以将你关心的指标显示在一个屏幕上,让你看到它们之间的影响和关系,从而找到问题的症结所在。
Tsar 还支持多个项目模块。有时系统指标有多个实例。这里体现了item的概念,可以更灵活的展示数据。另外,--check是看我们最后一分钟的数据,会在最后一分钟显示这一行的各个指标和字段,可以很方便的做一些监控处理。
Tsar 本身是一个独立的软件,可以为其他系统提供丰富的数据源输入。
下图是比较常见的配置,包括配置文件、指定模块、指定输出等。
下图是如何输出到Mysql和Nagios的配置方法。
定制开发
Tsar 目前支持 C、bash、Lua 开发自定义模块,内部有近百个应用模块。模块组成包括模块名称、描述信息、采集函数、显示函数等,tsar本身也可以使用tsardevel的脚本自动生成一个模板,在这个模板的基础上进行修改,比较多高效的。
具体模块开发内容如下:
采集这个功能是具体抓取value_1/2/3,不管是到counter文件还是接口,都可以获取到value。但是得到的值并不是最终要显示的值,而是瞬时值。
显示的数值需要通过数据显示功能进行处理计算。display函数中的两个输入参数会告诉你采集的最后两个数组的数据是什么。通过对这两个数组进行操作,最终得到的结果就是最终显示的数字。前几个内容做完后,最后在模块中生成注册函数。以下是一些关键信息,例如模块名称。用法、模块字段数据结构、字段数、采集 函数和表示函数。
至此,一个模块基本完成。
未来的计划
我们对沙皇的未来计划主要是三个方面。
首先是跨平台,有些Linux版本支持的不是特别好,所以我们会在跨平台上多尝试。
二是完善框架。目前框架比较大。如果单个模块有一些异常,整个采集都会挂掉。在本节中,我们将解耦一些模块和框架之间的强依赖关系,希望能够容灾。更好的。
三是丰富一些模块。常用的系统模块已经很多,内部应用模块也比较丰富。也希望大家可以在开源区提供更多的模块,让我们支持的采集的类型更加丰富。一些。
目前,在阿里巴巴整个开源代码库中,外部贡献者并不多,十几个人,内部贡献代码的有一百多人。欢迎来到主页和代码库。如有疑问,也可以联系本文分享者:再见。