将BIND的查询日志存储到Elasticsearch中
总结
将DNS服务器的查询日志保存到Elasticsearch中
验证环境
职业经历
在bind中设置将查询日志输出到syslog的配置。
(略)
logging {
channel "syslog_local1" {
syslog local1;
};
category queries {
"syslog_local1";
};
};
(略)
将(chroot环境)中的查询日志通过syslog传输到Elasticsearch服务器。
cat << EOF > /etc/rsyslog.d/bind_chroot.conf
$AddUnixListenSocket /var/named/chroot/dev/log
local1.* @192.168.24.103:42185
EOF
/etc/init.d/rsyslog restart
安装 Elasticsearch
yum install java-1.8.0-openjdk-deve
rpm -ivh https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.4.2.noarch.rpm
iptables -A INPUT -p tcp -m multiport --dports 8080,9200,9300 -s 127.0.0.1 -j ACCEPT
iptables -A INPUT -p tcp -m multiport --dports 8080,9200,9300 -s 192.168.24.0/24 -j ACCEPT
iptables -A INPUT -p tcp -m multiport --dports 8080,9200,9300 -j DROP
修改Elasticsearch配置文件
sed -i.org \
-e 's/#cluster\.name.*/cluster.name: named.elasticsearch/g' \
-e 's/#discovery\.zen\.ping\.multicast\.enabled.*/discovery.zen.ping.multicast.enabled: false/g' \
/etc/elasticsearch/elasticsearch.yml
差异
— /etc/elasticsearch/elasticsearch.yml.org 2015-02-07 02:19:24.338361576 +0900
+++ /etc/elasticsearch/elasticsearch.yml 2015-02-07 02:29:39.266361349 +0900
@@ -29,7 +29,7 @@
# 集群名称用于自动发现。如果在同一网络上运行多个集群,请确保使用唯一的名称。
#
#cluster.name: elasticsearch
+集群名称: named.elasticsearch#################################### 节点 #####################################
@@ -319,7 +319,7 @@
#
# 1. 禁用组播发现(默认启用):
#
#discovery.zen.ping.multicast.enabled: false
+发现.zen.ping.multicast.enabled: false
#
# 2. 在集群中配置初始的主节点列表
# 以便在启动新的节点(主节点或数据节点)时进行发现:
启动和确认 Elasticsearch。
/etc/init.d/elasticsearch start
curl -X GET http://localhost:9200/
结果
{
“状态”:200,
“名称”: “Vashti”,
“集群名称”: “named.elasticsearch”,
“版本”:{
“号码”: “1.4.2”,
“构建哈希”: “927caff6f05403e936c20bf4529f144f0c89fd8c”,
“构建时间戳”: “2014-12-16T14:11:12Z”,
“构建快照”: false,
“lucene版本”: “4.10.2”
},
“标语”: “你懂的,为了搜索”
}
确认 Elasticsearch 映射
curl http://localhost:9200/namedlog-*/_mapping?pretty
确认Elasticsearch模板
curl -XGET localhost:9200/_template/template_1
如果要检查全部模板,请使用以下命令:
shell
curl -XGET localhost:9200/_template/template*如果要删除template_1模板,请使用以下命令:
shell
curl -XDELETE localhost:9200/_template/template_1
应用 Elasticsearch 模板
curl -XPUT localhost:9200/_template/template_1 -d '
{
"template" : "namedlog-*",
"mappings" : {
"fluentd" : {
"properties" : {
"@log_name" : {
"type" : "string"
},
"@timestamp" : {
"type" : "date",
"format" : "dateOptionalTime"
},
"class_type" : {
"type" : "string",
"index" : "not_analyzed"
},
"country" : {
"type" : "string",
"index" : "not_analyzed"
},
"dst" : {
"type" : "string",
"index" : "not_analyzed"
},
"fqdn" : {
"type" : "string",
"index" : "not_analyzed"
},
"log_type" : {
"type" : "string",
"index" : "not_analyzed"
},
"src" : {
"type" : "string",
"index" : "not_analyzed"
},
"view" : {
"type" : "string",
"index" : "not_analyzed"
}
}
}
}
}
}'
删除Elasticsearch中的所有数据(索引)。
curl -XDELETE 'http://localhost:9200/namedlog-*'
安装Elasticsearch的WEB前端界面
/usr/share/elasticsearch/bin/plugin -install mobz/elasticsearch-head
自然流利的中文安装
curl -L http://toolbelt.treasuredata.com/sh/install-redhat.sh | sh
iptables -A INPUT -s 192.168.24.101 -p udp --dport 42185 -j ACCEPT
iptables -A INPUT -s 192.168.24.102 -p udp --dport 42185 -j ACCEPT
iptables -A INPUT -p udp --dport 42185 -j DROP
mkdir -p /etc/td-agent/conf.d
安装流利的插件。
yum install geoip-devel --enablerepo=epel
/usr/lib64/fluent/ruby/bin/gem install fluent-plugin-parser
/usr/lib64/fluent/ruby/bin/gem install fluent-plugin-geoip
/usr/lib64/fluent/ruby/bin/gem install fluent-plugin-flatten-hash
/usr/lib64/fluent/ruby/bin/gem install fluent-plugin-elasticsearch
提示
在安装CentOS5系时,需要使用remi的libcurl-devel包(官方和epel的版本不合适)。
使用yum命令安装gcc和libcurl-devel,启用remi仓库:yum install gcc libcurl-devel –enablerepo=remi。
echo 'include conf.d/*.conf' > /etc/td-agent/td-agent.conf
vi /etc/td-agent/conf.d/bind_queries.conf
/etc/td-agent/conf.d/bind_queries.conf
#———————————————————-
# 从各个DNS服务器的rsyslog中获取日志
# local1.info -> syslog:42185 -> named.syslog.local1.info
#———————————————————-type syslog
port 42185
tag named.rewrite#———————————————————-
# 过滤处理
# /usr/lib64/fluent/ruby/bin/gem install fluent-plugin-rewrite
#———————————————————-type copy
#———————————————————-
# 测试输出
#———————————————————-
#
# type stdout
##———————————————————-
# named.rewrite.local1.info -> named.parser
#———————————————————-type rewrite
remove_prefix named.rewrite.local1.info
add_prefix named.parser#— QUERY
key message
pattern client ([.0-9]+).[0-9]*: view ([^ ]*): [^ ]* ([^ ]*) ([^ ]* [^ ]* [^ ]*) \(([.0-9:]+)\)
replace {“log_type”:”QUERY”, “src”:”\1″,”view”:”\2″,”fqdn”:”\3″,”class_type”:”\4″,”dst”:”\5″}
last true#— 没有匹配规则的条目将被丢弃
key message
pattern .*
ignore true#———————————————————-
# 将过滤后的字符串转换为JSON格式
# /usr/lib64/fluent/ruby/bin/gem install fluent-plugin-parser
#———————————————————-type copy
#———————————————————-
# 测试输出
#———————————————————-
#
# type stdout
##———————————————————-
# named.parser -> named.geoip
#———————————————————-type parser
tag named.geoip
key_name message
format json
reserve_data yes#———————————————————-
# 添加国别代码
# yum install geoip-devel –enablerepo=epel
# /usr/lib64/fluent/ruby/bin/gem install fluent-plugin-geoip
#———————————————————-type copy
#———————————————————-
# 测试输出
#———————————————————-
#
# type stdout
##———————————————————-
# named.geoip -> named.flatten_hash
#———————————————————-type geoip
geoip_lookup_key srccountry ${country_code[‘src’]}
tag named.flatten_hash
log_level debug
flush_interval 1s#———————————————————-
# 将嵌套的JSON转换为扁平化格式
# /usr/lib64/fluent/ruby/bin/gem install fluent-plugin-flatten-hash
#———————————————————-type copy
#———————————————————-
# 测试输出
#———————————————————-
#
# type stdout
##———————————————————-
# named.flatten_hash -> named.record_reformer
#———————————————————-type flatten_hash
tag named.record_reformer
separator _#———————————————————-
# 丢弃不必要的键
# /usr/lib64/fluent/ruby/bin/gem install fluent-plugin-record-reformer
#———————————————————-type copy
#———————————————————-
# 测试输出
#———————————————————-
#
# type stdout
##———————————————————-
# named.record_reformer -> named.elasticsearch
#———————————————————-type record_reformer
tag named.elasticsearch
remove_keys message,ident,pid#———————————————————-
# 数据写入Elasticsearch
# /usr/lib64/fluent/ruby/bin/gem install fluent-plugin-elasticsearch
#———————————————————-type copy
#———————————————————-
# 测试输出
#———————————————————-type stdout
#———————————————————-
# named.elasticsearch -> elasticsearch [localhost:9200]
#———————————————————-type elasticsearch
include_tag_key true
tag_key @log_name
host localhost
port 9200
logstash_format true
logstash_prefix namedlog
flush_interval 10s
/etc/init.d/td-agent start
安装 Kibana
cd /usr/local/src/
wget https://download.elasticsearch.org/kibana/kibana/kibana-3.1.2.tar.gz
tar zxvf kibana-3.1.2.tar.gz
cd /usr/local/src/kibana-3.1.2
python -m SimpleHTTPServer 8080