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

1 简介

1.1 DSC的结构

DSC,全称Dns Statistics Collector,主要包含采集器(collector,或简称dsc)和展示器(presenter,或简称dsp)两大部分。具体的框架结构如下:

图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 页面展示样例图表



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] <defunct>

第一次启动后大约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:

表4.11.1

protocol 为dns的相关Label 和indexer:

表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="2" start_time="unix-seconds"
stop_time="unix-seconds">
<dimension number="1" type="Label1"/>
<dimension number="2" type="Label2"/>
<data>
<Label1 val="D1-V1">
<Label2 val="D2-V1" count="N1"/>
<Label2 val="D2-V2" count="N2"/>
<Label2 val="D2-V3" count="N3"/>
</Label1>
<Label1 val="D1-V2">
<Label2 val="D2-V1" count="N1"/>
<Label2 val="D2-V2" count="N2"/>
<Label2 val="D2-V3" count="N3"/>
</Label1>
</data>
</array>

如上所示,array标签上的属性name为dataset的name,dimensions为维度数,start_time、end_time为统计的起始时间戳,单位为秒,通常为60秒。

dimension标签表明该dataset的维度,如果只有一个维度,那么维度1应该写为:

<dimension number="1" type="All"/>

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%




20Wqps:

开始出现丢包


30Wqps(pcap_buffer_size为4M左右):

出现严重的丢包,超过一半被丢弃



30Wqps(pcap_buffer_size为400M左右):

由于调高了pcap_buffer_size,丢包率略有降低,但是此时CPU负载已达100%,出现一分钟内无法生成xm结果文件的问题,且监测的流量忽高忽低。



最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342