DSP

Domain Statistics Collector (DSC)学习&安装手册

2019-07-13 18:48发布

1 简介

1.1 DSC的结构

DSC,全称Dns Statistics Collector,主要包含采集器(collector,或简称dsc)和展示器(presenter,或简称dsp)两大部分。具体的框架结构如下: 7543430-ef09c2af5a8ae8b2.png 图1.1 DSC的结构(来自官方英文文档) 如图1.1所示,采集器(collector)可以安装在多个DNS服务器/节点上,采集器每60秒对DNS流量情况进行采集并生成xml格式的文件。随后,一个定时任务通过ssh将这些xml文件上传到展示器(presenter)的指定目录下。展示器中的xml文件解析器(extractor)通过一个定时任务,从该文件上传目录下读取并解析xml文件,生成.dat格式的文件。图像生成器(grapher)通过perl脚本读取.dat文件并生成展示页面。

1.2 采集器(Collector)

采集器是一个名为dsc的二进制程序,用于监视DNS消息。它是用C编写的,并使用libpcap进行包的捕获。dsc使用一个相对简单的配置文件dsc.conf。其中可以定义某些参数和选项以及dsc收集的数据集。

1.3 展示器(Presenter)

展示器主要包含extractor和grapher两部分,他们都在一个名为dsp的安装包中。展示器负责将采集的数据解析并展示。

1.3.1 xml文件解析器(Extractor)

XML文件解析器是一个Perl脚本,本质上是将xml结构的数据转换为一种更容易(更快)解析图形化工具的格式——.dat文件。

1.3.2 图像生成器(Grapher)

dsc使用Ploticus2作为绘图引擎。Perl模块和CGI脚本读取提取的.dat数据文件并生成Ploticus脚本文件以生成绘图。页面展示的图表是根据需要通过CGI应用程序生成的。

1.4 页面展示样例图表

7543430-3bc7ed78cbf485b2.png
7543430-210d61280f91c2f4.png
7543430-3359280957225bc6.png

2 安装&启动

2.1 DSC(Collector)的安装

2.1.1 安装建议

DSC采集器建议安装在DNS服务器上。需要有root权限

2.1.2 安装前准备

l 安装C/C++编译环境gcc l 从官网下载dsc安装包,本文以dsc-2.6.1.tar.gz为例

2.1.3 安装流程

l 解压 tar -xf dsc-2.6.1.tar.gz l 进入解压后的目录 cd dsc-2.6.1 l 编译、安装 ./configure make make install 在configure中如果发现有相关依赖未安装,请按照提示安装相关依赖。 至此dsc已经安装完成。

2.1.4 配置&启动

安装dsc成功之后会在/usr/local/etc/dsc目录下(2.6.1版本之前的可能目录结构会有差异)生成dsc.conf.sample文件,这是dsc核心配置文件dsc.conf的样例。我们可以复制一份作为配置文件。 cp dsc.conf.sample dsc.conf 编辑dsc.conf文件 vim dsc.conf 对于其中配置项进行修改。例如,local_address可配置本机ip,也可配置多个ip,支持ipv6格式;run_dir配置运行目录,生成的xml数据文件将保存到此目录;interface配置检测的本机网卡名,也可以配置pcap文件的路径。(具体的配置项含义将在后续章节详细说明) 启动dsc dsc ./dsc.conf dsc正常启动后,可以看到两个进程: root 28430 1 13 12:32 ? 00:19:55 dsc dsc.conf root 4360 28430 0 14:54 ? 00:00:00 [dsc] 第一次启动后大约60秒,会在dsc.conf文件中配置的run_dir目录里看到生成的xml文件。随后每隔60秒生成一个文件。 可使用下列命令对dsc命令进行测试 dsc -d ./dsc.conf 该命令会读取dsc配置文件并立即在运行目录生成采集的结果文件

2.2 DSP(Presentation)的安装

2.2.1 安装前准备

l 安装C/C++编译环境gcc l 安装perl l 从官网下载dsp及其相关的安装包,本文以dsc-2.6.1.tar.gz、p5-DSC-2.04.tar.gz、p5-App-DSC-DataTool-0.03.tar.gz为例 l 安装以下Perl依赖: CGI-Untaint (CGI::Untaint)
CGI.pm (CGI)
Digest-MD5 (Digest::MD5)
File-Flock (File::Flock)
File-Spec (File::Spec)
File-Temp (File::Temp)
Geography-Countries (Geography::Countries)
Hash-Merge (Hash::Merge)
IP-Country (IP::Country)
MIME-Base64 (MIME::Base64)
Math-Calc-Units (Math::Calc::Units)
Scalar-List-Utils (List::Util)
Text-Template (Text::Template)
URI (URI::Escape)
XML-Simple (XML::Simple) Perl依赖可以用CPAN方式安装,具体命令如下例: //进入MCPAN控制台 [root@localhost ~]# perl -MCPAN -e shell //安装 CGI::Untaint依赖 cpan[1]>install CGI::Untaint 若未安装CPAN,请先安装CPAN: yum install perl-CPAN l 安装Ploticus Ploticus用来生成图标,本文以ploticus242为例。 解压后使用make、make install命令编译、安装,安装完成后可以在安装目录上使用pl命令。

2.2.2 安装流程

注意:在进行安装前请确保2.1.2节中的所有依赖、库/包、工具都已正常安装,否则可能造成不能展示数据的异常。下面的安装请按照顺序进行,否则会出现以来确实等情况。

2.2.2.1 安装p5-DSC

p5-DSC包为DSC的相关perl依赖,具体安装步骤如下: l 解压 tar -xf p5-DSC-2.04.tar.gz l 进入解压后的目录 cd p5-DSC-2.04 l 编译、安装 perl Makefile.PL make make test make install 安装前使用perl Makefile.PL检测所需perl依赖是否安装,若未安装,请仿照2.2.1节安装相关的perl依赖。

2.2.2.2 安装p5-App-DSC-DataTool

具体安装步骤如下: l 解压 tar -xf p5-App-DSC-DataTool-0.03.tar.gz l 进入解压后的目录 cd p5-App-DSC-DataTool-0.03 l 编译、安装 perl Makefile.PL make make test make install 安装前使用perl Makefile.PL检测所需perl依赖是否安装,若未安装,请仿照2.2.1节安装相关的perl依赖。

2.2.2.3 安装DSP

l 解压 tar -xf dsp-2.0.0.tar.gz l 进入解压后的目录 cd dsp-2.0.0 l 编译、安装 ./configure make make test make install 在configure中如果发现有相关依赖未安装,请按照提示安装相关依赖。 至此DSP及其相关组件已经安装完成。

2.2.3 配置&运行

由于版本原因,dsp2.0.0之前版本安装后可能和本文当中的目录不一致,请按实际情况进行配置。 l 创建以下目录 mkdir /usr/local/var #存放cache文件 mkdir /usr/local/var/cache mkdir /usr/local/var/cache/dsp #存放log文件 mkdir /usr/local/var/log mkdir /usr/local/var/log/dsp #存放data数据文件 mkdir /usr/local/var/lib mkdir /usr/local/var/lib/dsp #SERVER和NODE分别表示服务器名和节点名,与gragher.pm中配置的一致 mkdir /usr/local/var/lib/dsp/SERVER/NODE #存放从collector传来的原始文件的目录 mkdir /usr/local/var/lib/dsp/SERVER/NODE/incoming l 在/etc/crontab中增加两条定时任务,用于定时从文件上传目录获取xml文件并解析 * * * * * root /usr/bin/nice -10 /usr/local/libexec/dsp/refile-and-grok.sh @midnight root find /usr/local/var/lib/dsc | /usr/local/libexec/dsp/remove-xmls.pl 7 l 配置/usr/local/etc/dsp/dsc-grapher.cfg文件 其中可配置服务器、节点、展示粒度、域名列表等
注意服务器名和节点名要和存放数据的目录保持一致,否则展示器无法找到相关服务器和节点的数据文件,如: server SERVER NODE l 修改/usr/local/share/perl5/DSC/ploticus.pm中ploticus的安装路径 my $prog = (grep {-f $_} qw(**/home/ploticus/ploticus242/src/pl** /usr/local/bin/ploticus /usr/local/bin/pl /usr/bin/ploticus /usr/bin/pl))[0]; 从/usr/local/lib/cgi-bin目录下获取dsc-grapher.pl文件,并进行相关配置 其中dataroot为存放数据文件的目录,configfile为dsc-gragher.cfg文件的路径,cachepath为存放cache文件的目录,htmlpath为存放html相关文件的目录。 my $grapher = DSC::grapher->new( dataroot => '**/usr/local/var/lib/dsc**', configfile => '**/usr/local/etc/dsp/dsc-grapher.cfg**', cachepath => '**/usr/local/var/cache/dsp**', htmlpath => '**/usr/local/share/dsp/html**', ); 配置完成后,将该pl脚本文件放置到web应用的cgi-bin路径下,启动web应用后,访问http://xxxxxx/cgi-bin/dsc-grapher.pl即可查看到当前页面。

3 数据文件的传输

Collector采集的Xml数据文件需要传输到Presenter才能被解析和展示。Collector的文件传送需要先将生成的xml文件转移到本地的待上传(upload)目录,然后使用一个定时任务将文件每分钟传到Presenter的指定目录。本章将介绍xml文件的传输流程。

3.1 将生成的文件转移到upload目录

请首先在Collector的dsc运行目录下创建upload目录,然后在upload目录下创建NODE目录,NODE为当前监控的主机节点名,然后再NODE目录下建立DEST目录,DEST为要接受xml的安装了Presentor的主机名,一个NODE下可以创建多个DEST目录。 在/etc/crontab文件中加入下列定时任务: * * * * * root . /etc/profile && . ${HOME}/.bash_profile && /usr/local/libexec/dsc/upload-prep.pl 启动脚本前,请将脚本中的foreach my $conf (usr/local/dsc/etc/*.conf>)改为dsc配置文件的实际路径。 启动该脚本需要安装perl模块Proc::PID::File 可能需要MakeFile模块 tar -xf Proc-PID-File-1.27.tar.gz cd Proc-PID-File-1.27 perl Makefile.PL make make install 运行perl Makefile.PL语句时可能需要MakeMaker模块,安装步骤同上 该定时任务启动后将会从运行目录获取xml文件并传输到${run_dir}/upload/NODE/DEST下,同时删除运行目录下的xml文件。

3.2 通过ssh上传到DSP服务器

3.2.1 ssh免密登录的配置

在collector安装的服务器上输入以下命令生成key文件: ssh-keygen -t dsa -C dsc-uploader -f $HOME/.ssh/dsc_uploader_id 将该dsc_uploader_id.pub文件中生成的key加入目的服务器的 authorized_keys文件中,执行以下命令: ssh-copy-id -i $HOME/.ssh/dsc_uploader_id root@10.21.40.152 输入目的服务器对应用户的密码
至此即可免密进行ssh登录

3.2.2 上传文件

通过定时任务执行upload-rsync.sh脚本将待上传的xml文件传送到目的服务器的指定目录,在/etc/crontab文件中加入下列定时任务: * * * * * root . /etc/profile && . ${HOME}/.bash_profile && /usr/local/libexec/dsc/upload-rsync.sh slave2 slave1 root@10.21.40.152:/usr/local/var/lib/dsc/slave2/slave2 启动upload-rsync.sh脚本前请修改其中的PREFIX为dsc运行目录, 第37行 cd $PREFIX/$NODE/upload/$DEST 请修改为对应的待上传文件的目录

4 dsc.conf配置文件

dsc.conf是dsc的核心配置文件,dsc命令根据其中的配置项,对DNS的流量进行监控和采集,并输出xml文件。本章主要介绍dsc.conf配置文件的含义。注意:dsc.conf文件每句要以“;”结尾。下面将介绍dsc.conf的主要配置项。

4.1 local address

指定DNS服务器的本地IP地址。它用于确定IP分组的“方向”:发送、接收或其他。可以通过重复本地地址行的任意次数来指定多个本地地址。 Example: local address 172.16.0.1; Example: local address 2001:4f8:0:2::13;

4.2 run dir

启动后为dsc当前目录的目录。 这里将写入XML文件。 Example: run dir "/var/run/dsc";

4.3 minfree bytes

DSC运行系统的磁盘最小空间,若当前低于这个最小空间,xml文件将直接丢弃不再写入,直到有足够的空间为止。

4.4 pid_file

DSC进程的pid存储的路径 Example:pid_file "/run/dsc.pid";

4.5 bpf program

berkely过滤器程序,用来限制报文的数量和类型。需要写在interface配置项之前。 #只采集udp53端口的DNS数据,若这样配置,基于IP的采集器就无法工作。 Example: bpf program "udp port 53";

只展示DNS查询信息

Example: bpf_program "udp dst port 53 and udp[10:2] & 0x8000 = 0";

4.6 interface

指明探测的接口名/网卡名,可以指定多个接口,也可以是pcap文件 Example: interface fxp0; Example: interface “/home/dsms/data/dns.pcap”;

4.7 match vlan

设置vlan的编号。 如果设置了该配置项,只有属于这些vlan的数据才会被计算。可使用空格来配置多个。 Example: match vlan 101 102;

4.8 output_format

输出文件格式,默认为xml格式,可支持json/xml Example: output_format XML; Example: output_format JSON;

4.9 statistics_interval

数据采集的事件间隔,单位是秒,默认为60秒 Example: statistics_interval 60;

4.10 qname_ftlter

dsc的自定义过滤器,可以在dataset中指定使用在此处定义的过滤器。定义过滤器的语句是一个正则表达式。 #qname过滤器定义 qname_filter WWW-Only ^www. ; #qname过滤器在dataset中使用 dataset qtype dns All:null Qtype:qtype queries-only,WWW-Only ;

4.11 dataset

DSC配置文件的核心,dsc进程根据dataset数据集的配置采集、统计需要的数据,可配置多个。dataset的格式如下: dataset name protocol Label1:Indexer1 Label2:Indexer2 filter [parameters] ; dataset为配置项关键字; name为dataset的名字,这些名字和最终采集的数据名字一致,目前支持的name有: qtype、rcode、opcode、edns_version、rd_bit、tc_bit、idn_qname、do_bit、client_subnet、client_subnet2、certain_qnames_vs_qtype、qtype_vs_tld、client_addr_vs_rcode、direction_vs_ipproto、idn_vs_tld、ipv6_rsn_abusers、qtype_vs_qnamelen、rcode_vs_replylen、chaos_types_and_names、transport_vs_qtype、dns_ip_version_vs_qtype、client_ports、client_port_range、edns_bufsiz、second_ld_vs_rcode、third_ld_vs_rcode、pcap_stats、priming_queries、priming_responses、qr_aa_bits; protocol 为数据集合的协议,可设置为dns或者ip label1 为维度1的名字,目前提供的label见表4.11.1和4.11.2 indexer1 为维度1的indexer,用来将报文中的信息转化为整型数字的方法,目前提供的indexer见表4.11.1和4.11.2 label2 为维度2的名字,目前提供的label见表4.11.1和4.11.2 indexer2 为维度2的indexer,用来将报文中的信息转化为整型数字的方法,目前提供的indexer见表4.11.1和4.11.2 filter 过滤器,目前支持的过滤器有any、queries-only、replies-only、popular-qtypes、idn-only、aaaa-or-a6-only、root-servers-net-only、chaos-class以及自己定义的qname过滤器 parameters 参数,选填。目前支持的参数有:min-count=NNmax-cells=NN protocol 为ip的相关Label 和indexer: 7543430-b13ecf937f941812.png 表4.11.1 protocol 为dns的相关Label 和indexer: 7543430-133f4b833c642e64.png 表4.11.2 dataset一般使用dsc.conf.simple中提供的配置即可,下面是一个dataset配置的例子: dataset qtype dns All:null Qtype:qtype queries-only; 在上述例子中,dataset的name为qtype,protocol为dns,由于只有一个维度的数据,所以该条配置中维度1的Label为All,对应的indexer为null,维度2为Qtype,对应的indexer为qtype,filter为queries-only,表示仅统计DNS查询报文的相关数据。

5 采集结果文件格式

dsc的采集结果文件可支持XML和JSON两种数据格式,数据格式可在dsc.conf文件中的utput_format配置项进行配置,默认为XML格式,DSP仅支持XML格式。

5.1 XML格式

XML格式的数据结果文件中的一个dataset如下: 如上所示,array标签上的属性name为dataset的name,dimensions为维度数,start_time、end_time为统计的起始时间戳,单位为秒,通常为60秒。 dimension标签表明该dataset的维度,如果只有一个维度,那么维度1应该写为: data标签为具体的数据,其下一层标签为维度1的名称,维度1标签下为维度2的具体数值。

5.2 JSON格式

JSON格式的数据结果文件的一个dataset如下: { "name": "dataset-name", "start_time": unix-seconds, "stop_time": unix-seconds, "dimensions": [ "Label1", "Label2" ], "data": [ { "Label1": "Label1", "Label2": [ { "val": "D2-V1", "count": N1 }, { "val": "D2-V2", "count": N2 }, { "val": "D2-V3", "count": N3 } ] }, { "Label1": "D1-V2", "Label2": [ { "val": "D2-V1", "count": N1 }, { "val": "D2-V2", "count": N2 }, { "val": "D2-V3", "count": N3 } ] } ] } 如上所示,name为dataset的名称,start_time、end_time为统计的起始时间戳,单位为秒,通常为60秒。dimension标签表明该dataset的维度,如果只有一个维度,那么维度1应为All。data下为具体的采集数据。

5.3文件名称格式

XML数据文件名称命名为时间戳.dscdata.xml,例如1532935320.dscdata.xml,数据文件存在对应日期的文件夹下,如2018-07-30/1532935320.dscdata.xml

6 性能

6.1 磁盘占用

dsc采集器不会占用的磁盘,只要配置了文件上传,dsc采集器会在每分钟将采集的数据结果文件传到dsp展示器。同时删除本地的结果文件,所以几乎不占用磁盘空间。 dsp展示器会将dsc上传的xml结果文件解析为.dat结果文件,.dat文件占用的磁盘大约每天1M左右。同时dsp会保留xml结果文件7天,这些原始xml数据文件大约占用磁盘每天12M左右

6.2 时延

dsc采集器每分钟生成采集统计的结果数据文件,几乎不存在时延。 dsp展示器每分钟获取从dsc通过ssh传输的文件,并进行解析展示。由于ssh传输和定时任务原因,可能存在1-2分钟时延。

6.3 性能测试

10Wqps: 此时libpcap的丢包率较低,CPU占用率大约在18%-80%
7543430-a7a420bb412bf144.png
7543430-5a466f2c69ed9f7a.png
7543430-ba3585dbc140cc18.png 20Wqps: 开始出现丢包
7543430-1f677acb0e3daa05.png 30Wqps(pcap_buffer_size为4M左右): 出现严重的丢包,超过一半被丢弃
7543430-de2d1e2fcbed7cd0.png
7543430-19e859e9b9f071c0.png 30Wqps(pcap_buffer_size为400M左右): 由于调高了pcap_buffer_size,丢包率略有降低,但是此时CPU负载已达100%,出现一分钟内无法生成xm结果文件的问题,且监测的流量忽高忽低。 7543430-5536d3a23d0d50ae.png
7543430-7bb2cf6f5b69d1c5.png
7543430-e5dfc9812d1f83e3.png