背景介绍
ELK是由Elasticsearch、Logstash和Kibana三部分组件组成。
ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
Logstash是一个接收,处理,转发日志的工具。支持系统日志,webserver日志,错误日志,应用日志,总之包括所有可以抛出来的日志类型。
kibana 是一个开源和免费的工具,它可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。
注意:本文中所用服务器ip为10.6.2.18,可以根据自己实际情况进行修改,本文服务器操作系统使用的是centos6.8Elasticsearch的安装与配置
ElasticSearch和Logstash依赖于JDK,所以需要安装JDK:
1234# yum -y install java-1.8.0-openjdk*# java -version# javac -version查看两个版本是否一致
按照如下步骤进行下载安装Elasticsearch,如果wget的链接出错,就去官网下载最新的版本就行
1234567891011# mkdir /elk# cd /elk# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.2.2.zip# unzip elasticsearch-5.2.2.zip# groupadd elsearch# useradd elsearch -g elsearch -p elasticsearch# chown -R elsearch:elsearch elasticsearch-5.2.2# chown -R elsearch:elsearch /elk# cd elasticsearch-5.2.2# su elsearch$ ./bin/elasticsearch一执行就会报错,所以需要修改一下配置文件
123456789101112131415161718192021222324$ vim config/elasticsearch.yml添加如下内容:network.host: 10.6.2.18(你服务器的ip地址,不添加默认是本机127.0.0.1)http.port: 9200bootstrap.system_call_filter: false退出elsearch用户,使用root用户# vim /etc/security/limits.conf在该文件最后的几行,修改配置如下:# End of file* soft core unlimited* hard core unlimited* soft nofile 65536* hard nofile 131072* soft nproc 2048* hard nproc 4096# vim /etc/sysctl.conf在最下面添加如下内容:vm.max_map_count=655360切回elsearch用户,执行程序# su elsearch$ ./bin/elasticsearch -d我们可以随便去一台服务器上,也可以本机上测试一下:
123456789101112131415# curl 10.6.2.18:9200会出现如下信息,说明elasticsearch安装成功了{"name" : "sc3N8pA","cluster_name" : "elasticsearch","cluster_uuid" : "O5Wz2-34R9Gi1XTLSoLnjA","version" : {"number" : "5.2.2","build_hash" : "f9d9b74","build_date" : "2017-02-24T17:26:45.835Z","build_snapshot" : false,"lucene_version" : "6.4.1"},"tagline" : "You Know, for Search"}
Logstash的安装与配置
按照如下步骤进行下载安装Logstash,如果wget的链接出错,就去官网下载,这里建议下载All Plugins的版本,这样不用再安装插件,插件都能用,我们会用到netflow和sflow的插件,来获取sflow的报文数据
sFlow技术是一种以设备端口为基本单元的数据流随机采样的流量监控技术,不仅可以提供完整的第二层到第四层甚至全网范围内的实时流量信息,而且可以适应超大网络流量(如大于10Gbit/s)环境下的流量分析,让用户详细、实时地分析网络传输流的性能、趋势和存在的问题。
123456789101112131415161718192021222324切换回root账户# cd /elk# wget https://download.elastic.co/logstash/logstash/logstash-all-plugins-2.4.0.tar.gz# tar -zxvf logstash-all-plugins-2.4.0.tar.gz# cd logstash-2.4.0这里先介绍netflow的配置# vim netflow.conf 添加如下内容:input {udp {host => localhostport => 9996codec => netflow {versions => [5, 9]}type => netflow}}output {elasticsearch {hosts => ["10.6.2.18:9200"]index => "logstash_netflow-%{+YYYY.MM.dd}"}}
交换机配置sflow,服务器将sflow转换为netflow数据
12345678910111213141516171819202122232425博主以n9k为例,交换机配置如下:feature sflowsflow collector-ip 10.6.2.18 vrf defaultsflow collector-port 9995sflow agent-ip 10.2.1.252sflow data-source interface port-channel5配置意思是将port-channel15口的数据采集sflow发给10.6.2.18的9995端口在服务器上下载配置sflowtool如下:# cd /elk# git clone https://github.com/sflow/sflowtool# cd sflowtool/# ./boot.sh# ./configure# make# sudo make install# nohup sflowtool -p 9995 -c 127.0.0.1 -d 9996 &tcpdump查看是否有数据# tcpdump -i lo port 9996启动logstash服务# cd /elk/logstash-2.4.0# ./bin/logstash -f netflow.conf如果要停止进程,ps -ef | grep logstash ,kill 掉进程号就行
Kibana的安装与配置
按照如下步骤进行下载安装Kibana,如果wget的链接出错,就去官网下载
1234567891011# wget https://artifacts.elastic.co/downloads/kibana/kibana-5.2.2-linux-x86_64.tar.gz# tar zxvf kibana-5.2.2-linux-x86_64.tar.gz# cd kibana-5.2.2-linux-x86_64# vim config/kibana.yml添加如下内容:erver.port: 5601server.host: "10.6.2.18"elasticsearch.url: "http://10.6.2.18:9200"kibana.index: ".kibana“nohup ./bin/kibana & 启动就行了,如果要停止进程,ps -ef | grep kibana ,kill 掉进程号就行
去web管理界面配置kibana
打开http://10.6.2.18:5601/
如下图,在Index name or pattern里面填写logstash_netflow* ,在Time-field name里面选择@timestamp,最后点击create进行创建。这里可以理解一个logstash收集进程一个index pattern,文章最后我会介绍syslog的logstash配置。创建好后,点击右边Discover,选择右边的field可以进行查看关心的信息,比如netflow.ipv4_src_addr 为原地址等,你也可以在search栏目搜索你想找的关心的信息
优化界面展示
其实大家可以自己根据自己的需要点击右边的Visualize进行各种图表制作和展示。我这边推荐一个现成的netflow展示模版,导入即可用
百度网盘下载地址下载export.json,按照下面步骤倒入进kibana就行了
倒入完成后,打开Dashboard,点击上面的open,选择dashboard模版打开即可使用,最后效果如下图所示
后记
syslog的logstash配置如下
12345678910111213141516171819# cd /elk/logstash-2.4.0/# vim syslog.conf添加如下内容:input {syslog {port => "514"}}output {elasticsearch {hosts => ["10.6.2.18:9200"]index => "logstash_syslog-%{+YYYY.MM.dd}"}}# service rsyslog stop 关掉系统原本的syslog服务,不然会占用514端口# nohup ./bin/logstash -f syslog.conf最后去kibana上的Management上添加一个index pattern名为logstash_syslog* 就能使用啦
科科
和一个朋友沟通后发现也可以直接使用sflow的插件来完成该数据采集,而不需要使用sflowtool来转换数据,具体配置如下:
# cd /elk/logstash-2.4.0/
# vim sflow.conf
添加如下内容:
input {
udp {
host => ["10.6.2.18"]
port => 9995
codec => sflow {
versions => [5]
}
type => sflow
}
}
output {
elasticsearch {
hosts => ["10.6.2.18:9200"]
index => "logstash_sflow-%{+YYYY.MM.dd}"
}
}
# nohup ./bin/logstash -f sflow.conf
最后去kibana上的Management上添加一个index pattern名为logstash_sflow* 就能使用,效果如下: