ELK学习笔记之F5利用EELK进行应用数据挖掘系列(2)-DNS

网友投稿 262 2022-11-01

ELK学习笔记之F5利用EELK进行应用数据挖掘系列(2)-DNS

0x00 概述

很多客户使用GTM/DNS为企业业务提供动态智能解析,解决应用就近性访问、优选问题。对于已经实施多数据中心双活的客户,则会使用GSLB提供双活流量调度。DNS作为企业业务访问的指路者,在整个IT基础架构系统中有着举足轻重的作用,一旦DNS无法提供服务,将导致客户无法访问业务系统,造成重大经济损失。因此构建一套高弹性分布式的高安全DNS架构是IT系统建设的基础之石,通常为了保证系统的正常运行,运维人员为了实时掌握系统运行状态如解析速率、失败率、延迟、来源地址位置、智能选路、解析类型、是否存在DNS攻击,要采集大量的实时解析、日志等数据,然而分布式的DNS架构在解决了弹性扩展与安全容错等问题的同时却也增加了运维难度,数据零散在不同的线路设备上,无法从整体上从数据中获取有价值信息,为此netops人员需要同时监控多台设备的日志、解析记录,并分析这些来自多台设备上的数据关系,将这些分散的数据集中记录、存储到统一的系统并进行数据挖掘可大大帮助运维人员实时、直观的掌握DNS系统运行状态、解析状态,帮助快速识别和定位问题。

对于一个DNS解析日志数据分析系统来说,应该考虑具备以下能力:

实时显示当前解析统计,包含实时的请求数,实时响应数、失败数能够实时区分智能解析与非智能解析数量解析请求的地理分布图,这些地理分布要能够做到根据线路、IP、域名、解析类型自动关联展现每条线路的解析统计,能够做到统计某条线路上解析的域名、解析类型、智能解析数量、非智能解析数量、失败数量、地理分布失败解析的统计,包含失败解析对应的域名,解析类型,地理分布,线路分布解析域名统计,根据不同的域名能够做到一个关联统计与这个域名有关的不同线路、不同地理位置、不同解析记录类型上的统计,这个域名的解析中有多少是智能解析的,有多少是非智能解析的,有多少是失败的,这个域名的解析在不同时刻点的解析总量等响应状态统计,通过指定的响应状态反查相关的解析来源,线路,域名等

本文描述如何结合ELK与F5 DNS logging profile,通过BIGIP HSL将日志高速发送至ELK系统,进行集中存储、分析和可视化。

0x01 logstash配置

[root@F5ELK-NODE01 ~]# cat /etc/logstash/conf.d/dns-log-to-elasticsearch.conf input { tcp { port => 514 type => 'f5-dns' }}filter { if [type] == 'f5-dns' and [message] =~ 'query:' { grok { match => { "message" => "%{TIMESTAMP_ISO8601:requesttime} %{HOSTNAME:F5hostname} qid %{NUMBER:queryid} from %{IP:clientip}#%{POSINT:clientport}: view %{GREEDYDATA:viewname}: query: %{HOSTNAME:queryname} IN %{GREEDYDATA:querytype} \+ \(%{IP:listenervs}\%%{NUMBER:routedomain}\)" } } geoip { source => "clientip" target => "geoip" } } else if [type] == 'f5-dns' and [message] =~ '; '{ grok { match => { "message" => "%{TIMESTAMP_ISO8601:responsetime} %{HOSTNAME:F5Reponsehostname} qid %{NUMBER:queryid} to %{IP:clientip}#%{POSINT:clientport}: \[%{WORD:responsecode} %{GREEDYDATA:responseflag}\] response: %{HOSTNAME:responsename}\. %{GREEDYDATA:answer}" } add_field => [ "iswideip", "no" ] } geoip { source => "clientip" target => "geoipresponse" } } else if [type] == 'f5-dns' and [message] =~ ': empty' { grok { match => { "message" => "%{TIMESTAMP_ISO8601:responsetime} %{HOSTNAME:F5Reponsehostname} qid %{NUMBER:queryid} to %{IP:clientip}#%{POSINT:clientport}: \[%{WORD:responsecode} %{GREEDYDATA:responseflag}\] response: %{GREEDYDATA:answer}" } add_field => [ "emptyresponse", "yes" ] } geoip { source => "clientip" target => "geoipresponse" } } else if [type] == 'f5-dns' { grok { match => { "message" => "%{TIMESTAMP_ISO8601:responsetime} %{HOSTNAME:F5Reponsehostname} qid %{NUMBER:queryid} to %{IP:clientip}#%{POSINT:clientport}: \[%{WORD:responsecode} %{GREEDYDATA:responseflag}\] response: %{HOSTNAME:responsename}\. %{GREEDYDATA:answer}" } } geoip { source => "clientip" target => "geoipresponse" } }}output { elasticsearch { hosts => ["192.168.214.130:9200"] index => "f5-dns-%{+YYYY.MM.dd}" template_name => "f5-dns" }}

0x02 F5 配置

ltm virtual listener_192.168.214.253 { destination 192.168.214.253:domain ip-protocol udp mask 255.255.255.255 profiles { my_dns { } udp_gtm_dns { } } source 0.0.0.0/0 translate-address disabled translate-port disabled vs-index 23}

root@(a)(cfg-sync Standalone)(Active)(/Common)(tmos)# list ltm profile dns-logging ltm profile dns-logging dns_local_logging_profile { enable-response-logging yes include-query-id yes log-publisher dns-local-logging}ltm profile dns my_dns { app-service none defaults-from dns enable-logging yes log-profile dns_local_logging_profile}sys log-config publisher dns-local-logging { destinations { local-syslog { } logstash-hsl { } }}sys log-config destination remote-high-speed-log logstash-hsl { pool-name logstash-pool}

0x03 elasticsearch设置

由于需要显示地理分布图,所以索引里的每个文档需要包含类型为geo_point的字段。系统默认的logstash mapping template已经包含了这样的设置,但是由于我们是自定义的index,所以系统不会使用logstash template,我们需要自定义一个模板并增加一个geoipresponse的geo_point类型字段:

{"template": "f5-dns-*","mappings": {"_default_": {"_all": {"enabled": true,"norms": false},"dynamic_templates": [{"message_field": {"path_match": "message","match_mapping_type": "string","mapping": {"type": "text","norms": false}}},{"string_fields": {"match": "*","match_mapping_type": "string","mapping": {"type": "text","norms": false,"fields": {"keyword": {"type": "keyword","ignore_above": 256}}}}}],"properties": {"@timestamp": {"type": "date","include_in_all": false},"@version": {"type": "keyword","include_in_all": false},"geoip": {"dynamic": true,"properties": {"ip": {"type": "ip"},"location": {"type": "geo_point"},"latitude": {"type": "half_float"},"longitude": {"type": "half_float"}}},"geoipresponse": {"dynamic": true,"properties": {"ip": {"type": "ip"},"location": {"type": "geo_point"},"latitude": {"type": "half_float"},"longitude": {"type": "half_float"}}}}}},"aliases": { }}

update模板:

curl -XPUT -d @dns-log-index-template_with_geoipresponse.json

注意设置好系统时间,启动logstash

/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/dns-log-to-elasticsearch.conf

0x04 Kibana设置

设置kibana可视图,最后形成dashboard:

通过上述dashboard可以直观的看到

实时解析统计,智能解析统计,非智能解析统计,地理分布(请求、响应),线路统计,请求排名前十LDNS,总解析数,失败解析数,总响应数,失败请求发生的最新时间以及对应query id,请求和响应域名top30排名,响应状态走势图,查询类型柱状图,LDNS来源(包含响应维度统计)

0x05 场景分析举例

1. 无法响应或empty响应

从上图可以看到,所有的解析请求都获得了响应,这里的总响应包含任何获得了DNS回复的解析,即便回应的是Refused,NXDOMAIN等,所以如果发生总响应明显小于总请求,说明发生了请求未获得任何类型的应答,可能为系统丢包或静默无应答,如果发生大量这样的情况则要检查系统,或者解析请求为异常包,如果解析域名明显有很多域名不在响应域名饼图中的,则可能与这些域名有关。同时也可以观察热力图,如果某些区域解析热点很高,但是相应区域的响应热点却很低,说明和这些区域存在关联。

如果请求和响应域名的饼图发生偏差,则说明有部分域名没有得到解析,或者解析的返回的日志内容是empty,也就是说这些域名可能获得是refused,nxdomain等返回:

2. 单域名解析状态跟踪

以及与之相关的线路统计,总请求数等

3. 失败解析分析

4. 水滴攻击分析

5. DDOS攻击分析

6. GTM/DNS线路解析是否均匀

总体统计下,各条线路的总解析数量应该趋于一致,如果图表显示明显某条线路解析量很大,应怀疑是否针对该线路有攻击行为,可进一步查看关联来源地区,是否存在某些LDNS总解析异常大。也需要考虑,是否其它NS线路是否失败率较高。

7. 非智能解析占比

通过观察图表,非智能解析(本例为能解析出IP,但不是最优IP)占比是否趋于稳定状态且处于较低水平,如果突然升高,是否wideip相关智能解析策略部分存在问题,是否健康检查出现问题,是否topology命中率太低。如果解析类型中出现很多不属于智能解析类型的,也会导致非智能解析占比上升

通过以上可以看出,充分灵活利用dashboard可以非常有效的帮助监控系统状态、性能以及定位问题。本例是通过dns logging profile来实现发生解析日志,某些信息要素没有存在于log中,如果希望做更多更复杂的信息关联分析可通过F5的irule发送包含更多详细信息的日志到ELK系统中来实现更丰富的数据分析。

附件,相关Kibana Visualize以及dashboard 定义的Json文件:

​​kibana dashboard json​​

​​Kibana Visualize json文件​​

​​参考​​

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:WEBENCH®接口设计工具详解
下一篇:Java设计模式七大原则之迪米特法则详解
相关文章

 发表评论

暂时没有评论,来抢沙发吧~