最近公司领导要求我搭建一个日志收集分析平台,用于给开发同事查看访问和业务日志,花了一段时间终于把日志平台搭建出来了,之前上网找了很多开源软件,发现还是ELK简单点,原来是想用Hadoop的,测试了一段时间,后来觉得有点复杂,其实ELK组合也符合需求了,后来还是使用ELK。这是我测试时用到的安装步骤文档,贴上来分享一下。
ELK平台介绍
日志主要包括系统日志、应用程序日志和安全日志。系统运维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因。经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误。
通常,日志被分散的储存不同的设备上。如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志。这样是不是感觉很繁琐和效率低下。当务之急我们使用集中化的日志管理,例如:开源的syslog,将所有服务器上的日志收集汇总。
集中化管理日志后,日志的统计和检索又成为一件比较麻烦的事情,一般我们使用grep、awk和wc等Linux命令能实现检索和统计,但是对于要求更高的查询、排序和统计等要求和庞大的机器数量依然使用这样的方法难免有点力不从心。
开源实时日志分析ELK平台能够完美的解决我们上述的问题,ELK由ElasticSearch、Logstash和Kiabana三个开源工具组成。官方网站:https://www.elastic.co/products
· Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
· Logstash是一个完全开源的工具,他可以对你的日志进行收集、过滤,并将其存储供以后使用(如,搜索)。
· Kibana 也是一个开源和免费的工具,它Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。
画了一个ELK工作的原理图:
如图:Logstash的agent端收集服务器产生的Log,并存放到redisd消息队列中,然后Logstash的indexer端又从redis读取数据放到ES,ES查询数据生成图表,再返回给Browser端kinaba。
ELK平台搭建
系统环境
System: Centos release 7.0
ElasticSearch: 2.3.5
Logstash: 2.3.4
Kibana: 4.5.4
Java: openjdk version "1.8.0_65"
注:由于Logstash的运行依赖于Java环境, 而Logstash 1.5以上版本不低于java 1.7,因此推荐使用最新版本的Java。因为我们只需要Java的运行环境,所以可以只安装JRE,不过这里我依然使用JDK,请自行搜索安装。
ELK下载:https://www.elastic.co/downloads/
ElasticSearch
配置ElasticSearch:
tar -zxvf elasticsearch-2.3.5.tar.gz
cd elasticsearch-2.3.5
安装Head插件(Optional):
Cd /app/elasticsearch
./bin/plugin install mobz/elasticsearch-head
然后编辑ES的配置文件:
vi config/elasticsearch.yml
修改以下配置项:
cluster.name=server
node.name=node1
path.data=/app/elasticsearch/data
path.logs=/app/elasticsearch/logs
#当前hostname或IP:
network.host=192.168.0.235
network.port=9200
其他的选项保持默认,然后使用后台方式启动ES:
nohup ./bin/elasticsearch &
然后可以打开页面localhost:9200,将会看到以下内容:
返回展示了配置的cluster_name和name,以及安装的ES的版本等信息。
刚刚安装的head插件,它是一个用浏览器跟ES集×××互的插件,可以查看集群状态、集群的doc内容、执行搜索和普通的Rest请求等。现在也可以使用它打开localhost:9200/_plugin/head页面来查看ES集群状态:
Logstash
Logstash的功能如下:
其实它就是一个收集器而已,我们需要为它指定Input和Output(当然Input和Output可以为多个)。配置Logstash:
tar -zxvf logstash-2.3.4.tar.gz
cd logstash-2.3.4
编写配置文件(名字和位置可以随意,这里我放在config目录下,取名为nginx.conf):
mkdir config
vi config/nginx.conf
输入以下内容:
input {
file {
path => "/home/logs/*/access/access.log"
codec => "json"
}
}
output {
redis{
data_type => "list"
key => "nginx-access-log"
host => "192.168.0.235"
port => "6379"
db => "2"
password => "redis"
}
}
记得要先把nginx.conf里面把日志格式设置为json:
配置indexer.conf文件:
input {
redis{
data_type => "list"
key => "nginx-access-log"
host => "192.168.0.235"
port => "6379"
db => "2"
password => "redis"
}
}
output {
elasticsearch {
hosts=> ["192.168.0.235:9200"]
index => "222nginx-access-%{+YYYY.MM.dd}"
}
}
使用agent来启动它(使用-f指定配置文件):
检查语法:
./bin/logstash agent -f config/nginx.conf –t
./bin/logstash agent -f config/indexer.conf –t
启动:
./bin/logstash agent -f config/nginx.conf
./bin/logstash agent -f config/indexer.conf
到这里,我们已经可以使用Logstash来收集日志并保存到ES中了。
用Head插件查看ES状态和内容
查看看ES的head页面:
切换到数据浏览标签:
单击某一个文档(doc),则会展示该文档的所有信息:
Kibana
配置Kibana:
tar -zxvf kibana-4.5.4-linux-x64.tar.gz
cd kibana-4.5.4-linux-x86
vi config/kibana.yml
修改以下几项:
server.port: 5601
server.host: 192.168.0.235
elasticsearch.url: http://192.168.0.235:9200
kibana.index: “.kibana”
启动kibana:
./bin/kibana
用浏览器打开该地址:
为了后续使用Kibana,需要配置至少一个Index名字或者Pattern,它用于在分析时确定ES中的Index。这里我输入之前配置的Index名字222nginx-access-*,Kibana会自动加载该Index下doc的field,并自动选择合适的field用于图标中的时间字段:
点击Create后,可以看到左侧增加了配置的Index名字:
接下来切换到Discover标签上,注意右上角是查询的时间范围,如果没有查找到数据,那么你就可能需要调整这个时间范围了,这里我选择Today:
接下来就能看到ES中的数据了:
执行搜索状态码200看看:
点击右边的保存按钮,保存该查询为status200。接下来去Visualize页面,点击新建一个柱状图(Vertical Bar Chart),然后选择刚刚保存的查询status,之后,Kibana将生成类似于下图的柱状图 :
Kinaba有很多的功能的,详情操作可到官方文档查看:
https://www.elastic.co/guide/en/kibana/current/index.html
到这里,ELK平台部署和基本的测试已完成。