将BIND的查询日志存储到Elasticsearch中

总结

将DNS服务器的查询日志保存到Elasticsearch中

验证环境

用途ipマスターDNSサーバー192.168.24.101スレーブDNSサーバー192.168.24.102Elasticsearchサーバー192.168.24.103

职业经历

在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 src

country ${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
广告
将在 10 秒后关闭
bannerAds