Domain Statistics Collector (DSC)學(xué)習(xí)&安裝手冊

1 簡介

1.1 DSC的結(jié)構(gòu)

DSC,全稱Dns Statistics Collector,主要包含采集器(collector,或簡稱dsc)和展示器(presenter,或簡稱dsp)兩大部分。具體的框架結(jié)構(gòu)如下:

圖1.1 DSC的結(jié)構(gòu)(來自官方英文文檔)

如圖1.1所示,采集器(collector)可以安裝在多個DNS服務(wù)器/節(jié)點上,采集器每60秒對DNS流量情況進(jìn)行采集并生成xml格式的文件。隨后,一個定時任務(wù)通過ssh將這些xml文件上傳到展示器(presenter)的指定目錄下。展示器中的xml文件解析器(extractor)通過一個定時任務(wù),從該文件上傳目錄下讀取并解析xml文件,生成.dat格式的文件。圖像生成器(grapher)通過perl腳本讀取.dat文件并生成展示頁面。

1.2 采集器(Collector)

采集器是一個名為dsc的二進(jìn)制程序,用于監(jiān)視DNS消息。它是用C編寫的,并使用libpcap進(jìn)行包的捕獲。dsc使用一個相對簡單的配置文件dsc.conf。其中可以定義某些參數(shù)和選項以及dsc收集的數(shù)據(jù)集。

1.3 展示器(Presenter)

展示器主要包含extractor和grapher兩部分,他們都在一個名為dsp的安裝包中。展示器負(fù)責(zé)將采集的數(shù)據(jù)解析并展示。

1.3.1 xml文件解析器(Extractor)

XML文件解析器是一個Perl腳本,本質(zhì)上是將xml結(jié)構(gòu)的數(shù)據(jù)轉(zhuǎn)換為一種更容易(更快)解析圖形化工具的格式——.dat文件。

1.3.2 圖像生成器(Grapher)

dsc使用Ploticus2作為繪圖引擎。Perl模塊和CGI腳本讀取提取的.dat數(shù)據(jù)文件并生成Ploticus腳本文件以生成繪圖。頁面展示的圖表是根據(jù)需要通過CGI應(yīng)用程序生成的。

1.4 頁面展示樣例圖表



2 安裝&啟動

2.1 DSC(Collector)的安裝

2.1.1 安裝建議

DSC采集器建議安裝在DNS服務(wù)器上。需要有root權(quán)限

2.1.2 安裝前準(zhǔn)備

l 安裝C/C++編譯環(huán)境gcc

l 從官網(wǎng)下載dsc安裝包,本文以dsc-2.6.1.tar.gz為例

2.1.3 安裝流程

l 解壓

tar -xf dsc-2.6.1.tar.gz

l 進(jìn)入解壓后的目錄

cd dsc-2.6.1

l 編譯、安裝

./configure
make
make install

在configure中如果發(fā)現(xiàn)有相關(guān)依賴未安裝,請按照提示安裝相關(guān)依賴。

至此dsc已經(jīng)安裝完成。

2.1.4 配置&啟動

安裝dsc成功之后會在/usr/local/etc/dsc目錄下(2.6.1版本之前的可能目錄結(jié)構(gòu)會有差異)生成dsc.conf.sample文件,這是dsc核心配置文件dsc.conf的樣例。我們可以復(fù)制一份作為配置文件。

cp dsc.conf.sample dsc.conf

編輯dsc.conf文件

vim dsc.conf

對于其中配置項進(jìn)行修改。例如,local_address可配置本機(jī)ip,也可配置多個ip,支持ipv6格式;run_dir配置運行目錄,生成的xml數(shù)據(jù)文件將保存到此目錄;interface配置檢測的本機(jī)網(wǎng)卡名,也可以配置pcap文件的路徑。(具體的配置項含義將在后續(xù)章節(jié)詳細(xì)說明)

啟動dsc

dsc  ./dsc.conf

dsc正常啟動后,可以看到兩個進(jìn)程:

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命令進(jìn)行測試

dsc  -d  ./dsc.conf

該命令會讀取dsc配置文件并立即在運行目錄生成采集的結(jié)果文件

2.2 DSP(Presentation)的安裝

2.2.1 安裝前準(zhǔn)備

l 安裝C/C++編譯環(huán)境gcc

l 安裝perl

l 從官網(wǎng)下載dsp及其相關(guān)的安裝包,本文以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方式安裝,具體命令如下例:

//進(jìn)入MCPAN控制臺
[root@localhost ~]# perl -MCPAN -e shell
//安裝 CGI::Untaint依賴
cpan[1]>install CGI::Untaint

若未安裝CPAN,請先安裝CPAN:

yum install perl-CPAN

l 安裝Ploticus

Ploticus用來生成圖標(biāo),本文以ploticus242為例。

解壓后使用make、make install命令編譯、安裝,安裝完成后可以在安裝目錄上使用pl命令。

2.2.2 安裝流程

注意:在進(jìn)行安裝前請確保2.1.2節(jié)中的所有依賴、庫/包、工具都已正常安裝,否則可能造成不能展示數(shù)據(jù)的異常。下面的安裝請按照順序進(jìn)行,否則會出現(xiàn)以來確實等情況。

2.2.2.1 安裝p5-DSC

p5-DSC包為DSC的相關(guān)perl依賴,具體安裝步驟如下:

l 解壓

tar -xf p5-DSC-2.04.tar.gz

l 進(jìn)入解壓后的目錄

cd p5-DSC-2.04

l 編譯、安裝

perl Makefile.PL
make
make test
make install

安裝前使用perl Makefile.PL檢測所需perl依賴是否安裝,若未安裝,請仿照2.2.1節(jié)安裝相關(guān)的perl依賴。

2.2.2.2 安裝p5-App-DSC-DataTool

具體安裝步驟如下:

l 解壓

tar -xf p5-App-DSC-DataTool-0.03.tar.gz

l 進(jìn)入解壓后的目錄

cd p5-App-DSC-DataTool-0.03

l 編譯、安裝

perl Makefile.PL
make
make test
make install

安裝前使用perl Makefile.PL檢測所需perl依賴是否安裝,若未安裝,請仿照2.2.1節(jié)安裝相關(guān)的perl依賴。

2.2.2.3 安裝DSP

l 解壓

tar -xf dsp-2.0.0.tar.gz

l 進(jìn)入解壓后的目錄

cd dsp-2.0.0

l 編譯、安裝

./configure
make
make test
make install

在configure中如果發(fā)現(xiàn)有相關(guān)依賴未安裝,請按照提示安裝相關(guān)依賴。

至此DSP及其相關(guān)組件已經(jīng)安裝完成。

2.2.3 配置&運行

由于版本原因,dsp2.0.0之前版本安裝后可能和本文當(dāng)中的目錄不一致,請按實際情況進(jìn)行配置。

l 創(chuàng)建以下目錄

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數(shù)據(jù)文件
mkdir /usr/local/var/lib
mkdir /usr/local/var/lib/dsp
#SERVER和NODE分別表示服務(wù)器名和節(jié)點名,與gragher.pm中配置的一致
mkdir /usr/local/var/lib/dsp/SERVER/NODE
#存放從collector傳來的原始文件的目錄
mkdir /usr/local/var/lib/dsp/SERVER/NODE/incoming

l 在/etc/crontab中增加兩條定時任務(wù),用于定時從文件上傳目錄獲取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文件

其中可配置服務(wù)器、節(jié)點、展示粒度、域名列表等
注意服務(wù)器名和節(jié)點名要和存放數(shù)據(jù)的目錄保持一致,否則展示器無法找到相關(guān)服務(wù)器和節(jié)點的數(shù)據(jù)文件,如:

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文件,并進(jìn)行相關(guān)配置

其中dataroot為存放數(shù)據(jù)文件的目錄,configfile為dsc-gragher.cfg文件的路徑,cachepath為存放cache文件的目錄,htmlpath為存放html相關(guān)文件的目錄。

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應(yīng)用的cgi-bin路徑下,啟動web應(yīng)用后,訪問http://xxxxxx/cgi-bin/dsc-grapher.pl即可查看到當(dāng)前頁面。

3 數(shù)據(jù)文件的傳輸

Collector采集的Xml數(shù)據(jù)文件需要傳輸?shù)絇resenter才能被解析和展示。Collector的文件傳送需要先將生成的xml文件轉(zhuǎn)移到本地的待上傳(upload)目錄,然后使用一個定時任務(wù)將文件每分鐘傳到Presenter的指定目錄。本章將介紹xml文件的傳輸流程。

3.1 將生成的文件轉(zhuǎn)移到upload目錄

請首先在Collector的dsc運行目錄下創(chuàng)建upload目錄,然后在upload目錄下創(chuàng)建NODE目錄,NODE為當(dāng)前監(jiān)控的主機(jī)節(jié)點名,然后再NODE目錄下建立DEST目錄,DEST為要接受xml的安裝了Presentor的主機(jī)名,一個NODE下可以創(chuàng)建多個DEST目錄。

/etc/crontab文件中加入下列定時任務(wù):

* * * * * 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模塊,安裝步驟同上

該定時任務(wù)啟動后將會從運行目錄獲取xml文件并傳輸?shù)?{run_dir}/upload/NODE/DEST下,同時刪除運行目錄下的xml文件。

3.2 通過ssh上傳到DSP服務(wù)器

3.2.1 ssh免密登錄的配置

在collector安裝的服務(wù)器上輸入以下命令生成key文件:

ssh-keygen  -t  dsa  -C  dsc-uploader  -f  $HOME/.ssh/dsc_uploader_id

將該dsc_uploader_id.pub文件中生成的key加入目的服務(wù)器的 authorized_keys文件中,執(zhí)行以下命令:

ssh-copy-id -i $HOME/.ssh/dsc_uploader_id root@10.21.40.152

輸入目的服務(wù)器對應(yīng)用戶的密碼
至此即可免密進(jìn)行ssh登錄

3.2.2 上傳文件

通過定時任務(wù)執(zhí)行upload-rsync.sh腳本將待上傳的xml文件傳送到目的服務(wù)器的指定目錄,在/etc/crontab文件中加入下列定時任務(wù):

* * * * * 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 

請修改為對應(yīng)的待上傳文件的目錄

4 dsc.conf配置文件

dsc.conf是dsc的核心配置文件,dsc命令根據(jù)其中的配置項,對DNS的流量進(jìn)行監(jiān)控和采集,并輸出xml文件。本章主要介紹dsc.conf配置文件的含義。注意:dsc.conf文件每句要以“;”結(jié)尾。下面將介紹dsc.conf的主要配置項。

4.1 local address

指定DNS服務(wù)器的本地IP地址。它用于確定IP分組的“方向”:發(fā)送、接收或其他??梢酝ㄟ^重復(fù)本地地址行的任意次數(shù)來指定多個本地地址。

Example: local address 172.16.0.1;
Example: local address 2001:4f8:0:2::13;

4.2 run dir

啟動后為dsc當(dāng)前目錄的目錄。 這里將寫入XML文件。

Example: run dir "/var/run/dsc";

4.3 minfree bytes

DSC運行系統(tǒng)的磁盤最小空間,若當(dāng)前低于這個最小空間,xml文件將直接丟棄不再寫入,直到有足夠的空間為止。

4.4 pid_file

DSC進(jìn)程的pid存儲的路徑

Example:pid_file "/run/dsc.pid";

4.5 bpf program

berkely過濾器程序,用來限制報文的數(shù)量和類型。需要寫在interface配置項之前。

#只采集udp53端口的DNS數(shù)據(jù),若這樣配置,基于IP的采集器就無法工作。
Example:  bpf program  "udp port 53";

只展示DNS查詢信息

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

4.6 interface

指明探測的接口名/網(wǎng)卡名,可以指定多個接口,也可以是pcap文件

Example: interface fxp0;
Example: interface “/home/dsms/data/dns.pcap”;

4.7 match vlan

設(shè)置vlan的編號。 如果設(shè)置了該配置項,只有屬于這些vlan的數(shù)據(jù)才會被計算??墒褂每崭駚砼渲枚鄠€。

Example:  match vlan  101  102;

4.8 output_format

輸出文件格式,默認(rèn)為xml格式,可支持json/xml

Example:  output_format XML;
Example:  output_format JSON;

4.9 statistics_interval

數(shù)據(jù)采集的事件間隔,單位是秒,默認(rèn)為60秒

Example:  statistics_interval 60;

4.10 qname_ftlter

dsc的自定義過濾器,可以在dataset中指定使用在此處定義的過濾器。定義過濾器的語句是一個正則表達(dá)式。

#qname過濾器定義
qname_filter WWW-Only ^www\. ;
#qname過濾器在dataset中使用
dataset qtype dns All:null Qtype:qtype queries-only,WWW-Only ;

4.11 dataset

DSC配置文件的核心,dsc進(jìn)程根據(jù)dataset數(shù)據(jù)集的配置采集、統(tǒng)計需要的數(shù)據(jù),可配置多個。dataset的格式如下:

dataset name protocol Label1:Indexer1 Label2:Indexer2 filter [parameters] ;

dataset為配置項關(guān)鍵字;

name為dataset的名字,這些名字和最終采集的數(shù)據(jù)名字一致,目前支持的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 為數(shù)據(jù)集合的協(xié)議,可設(shè)置為dns或者ip

label1 為維度1的名字,目前提供的label見表4.11.1和4.11.2

indexer1 為維度1的indexer,用來將報文中的信息轉(zhuǎn)化為整型數(shù)字的方法,目前提供的indexer見表4.11.1和4.11.2

label2 為維度2的名字,目前提供的label見表4.11.1和4.11.2

indexer2 為維度2的indexer,用來將報文中的信息轉(zhuǎn)化為整型數(shù)字的方法,目前提供的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 參數(shù),選填。目前支持的參數(shù)有:min-count=NN、max-cells=NN

protocol 為ip的相關(guān)Label 和indexer:

表4.11.1

protocol 為dns的相關(guān)Label 和indexer:

表4.11.2

dataset一般使用dsc.conf.simple中提供的配置即可,下面是一個dataset配置的例子:

dataset qtype dns All:null Qtype:qtype queries-only;

在上述例子中,dataset的name為qtype,protocol為dns,由于只有一個維度的數(shù)據(jù),所以該條配置中維度1的Label為All,對應(yīng)的indexer為null,維度2為Qtype,對應(yīng)的indexer為qtype,filter為queries-only,表示僅統(tǒng)計DNS查詢報文的相關(guān)數(shù)據(jù)。

5 采集結(jié)果文件格式

dsc的采集結(jié)果文件可支持XML和JSON兩種數(shù)據(jù)格式,數(shù)據(jù)格式可在dsc.conf文件中的utput_format配置項進(jìn)行配置,默認(rèn)為XML格式,DSP僅支持XML格式。

5.1 XML格式

XML格式的數(shù)據(jù)結(jié)果文件中的一個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標(biāo)簽上的屬性name為dataset的name,dimensions為維度數(shù),start_time、end_time為統(tǒng)計的起始時間戳,單位為秒,通常為60秒。

dimension標(biāo)簽表明該dataset的維度,如果只有一個維度,那么維度1應(yīng)該寫為:

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

data標(biāo)簽為具體的數(shù)據(jù),其下一層標(biāo)簽為維度1的名稱,維度1標(biāo)簽下為維度2的具體數(shù)值。

5.2 JSON格式

JSON格式的數(shù)據(jù)結(jié)果文件的一個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為統(tǒng)計的起始時間戳,單位為秒,通常為60秒。dimension標(biāo)簽表明該dataset的維度,如果只有一個維度,那么維度1應(yīng)為All。data下為具體的采集數(shù)據(jù)。

5.3文件名稱格式

XML數(shù)據(jù)文件名稱命名為時間戳.dscdata.xml,例如1532935320.dscdata.xml,數(shù)據(jù)文件存在對應(yīng)日期的文件夾下,如2018-07-30/1532935320.dscdata.xml

6 性能

6.1 磁盤占用

dsc采集器不會占用的磁盤,只要配置了文件上傳,dsc采集器會在每分鐘將采集的數(shù)據(jù)結(jié)果文件傳到dsp展示器。同時刪除本地的結(jié)果文件,所以幾乎不占用磁盤空間。

dsp展示器會將dsc上傳的xml結(jié)果文件解析為.dat結(jié)果文件,.dat文件占用的磁盤大約每天1M左右。同時dsp會保留xml結(jié)果文件7天,這些原始xml數(shù)據(jù)文件大約占用磁盤每天12M左右。

6.2 時延

dsc采集器每分鐘生成采集統(tǒng)計的結(jié)果數(shù)據(jù)文件,幾乎不存在時延。

dsp展示器每分鐘獲取從dsc通過ssh傳輸?shù)奈募?,并進(jìn)行解析展示。由于ssh傳輸和定時任務(wù)原因,可能存在1-2分鐘時延。

6.3 性能測試

10Wqps:

此時libpcap的丟包率較低,CPU占用率大約在18%-80%




20Wqps:

開始出現(xiàn)丟包


30Wqps(pcap_buffer_size為4M左右):

出現(xiàn)嚴(yán)重的丟包,超過一半被丟棄



30Wqps(pcap_buffer_size為400M左右):

由于調(diào)高了pcap_buffer_size,丟包率略有降低,但是此時CPU負(fù)載已達(dá)100%,出現(xiàn)一分鐘內(nèi)無法生成xm結(jié)果文件的問題,且監(jiān)測的流量忽高忽低。



最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容