摘要: 前段时间研究的Log4j+Kafka中,有人建议把Kafka收集到的日志存放于ES(ElasticSearch,一款基于Apache Lucene的开源分布式搜索引擎)中便于查找和分析,在研究此方案可行性的时候,我发现ELK(ElasticSearch, Logstash, Kibana)平台恰好可以同时实现日志收集、日志搜索和日志分析的功能,于是又去学习了一番。之后发现如果使用这三者,收集日志也可以不再使用Kafka了,Logstash就可以帮我们完成。当然,虽然Logstash也支持使用Kafka作为数据源输入,但是使用这三者就没有必要再增加系统复杂度了。
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收集AppServer产生的Log,并存放到ElasticSearch集群中,而Kibana则从ES集群中查询数据生成图表,再返回给Browser。
ELK平台搭建
系统环境
System: Centos release 6.7 (Final)
ElasticSearch: 6.2.2
Logstash: 2.1.1
Kibana: 4.3.0
Java: openjdk version "1.8.0_65"
注:由于Logstash的运行依赖于Java环境, 而Logstash 1.5以上版本不低于java 1.8,因此推荐使用最新版本的Java。因为我们只需要Java的运行环境,所以可以只安装JRE,不过这里我依然使用JDK,请自行搜索安装。
ELK下载:https://www.elastic.co/downloads/
一、
**elasticsearch-head:**ES的一个后台可视化管理界面是单独启动的,
需要安装
elasticsearch-head。
安装地址:
二、配置ElasticSearch:
1
2
3 1tar -zxvf elasticsearch-2.1.0.tar.gz
2cd elasticsearch-2.1.0
3
然后编辑ES的配置文件:
1
2 1vi config/elasticsearch.yml
2
修改以下配置项:
1
2
3
4
5
6
7
8 1cluster.name=es_cluster
2node.name=node0
3path.data=/tmp/elasticsearch/data
4path.logs=/tmp/elasticsearch/logs
5#当前hostname或IP(如果是虚拟机,则为虚拟机的IP)
6network.host=192.168.145.128
7network.port=9200
8
其他的选项保持默认,然后启动ES:
1
2 1./bin/elasticsearch
2
嗯这时可能会报错。常见的比如
1
2
3
4
5 1ERROR: [2] bootstrap checks failed
2[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
3[2]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
4
5
一般出现在这些位置
max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536]解决办法 此处引用自:http://blog.csdn.net/u012371450/article/details/51776505 感谢原作者分享宝贵经验
1
2
3
4
5
6
7
8
9 1另开一个终端用root操作
2//输入密码....
3[root@localhost ~]# cp /etc/security/limits.conf /etc/security/limits.conf.bak
4[root@localhost ~]# cat /etc/security/limits.conf | grep -v "esadmin" > /tmp/system_limits.conf
5[root@localhost ~]# echo "esadmin hard nofile 65536" >> /tmp/system_limits.conf
6[root@localhost ~]# echo "esadmin soft nofile 65536" >> /tmp/system_limits.conf
7[root@localhost ~]# mv /tmp/system_limits.conf /etc/security/limits.conf
8
9
记得换成自己的es用户名,我的esadmin
最后问你要不要保存,输入yes
然后在你执行es的用户终端,退出你这个es用户,然后重新进入一下。不然更改不会生效!
1
2
3
4
5
6
7
8 1//比如
2su root
3//输入密码...
4su esadmin
5然后验证
6ulimit -Hn
765536//输出这个就算对了
8
max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144] 解决办法 此处引用自:https://www.cnblogs.com/sloveling/p/elasticsearch.html。感谢原作者分享宝贵经验
1
2
3
4
5
6
7
8
9
10
11
12
13
14 1切换到root用户修改配置sysctl.conf
2
3vi /etc/sysctl.conf
4
5添加下面配置:
6
7vm.max_map_count=655360
8
9并执行命令:
10
11sysctl -p
12
13然后,重新启动elasticsearch,即可启动成功。
14
1
2 1./bin/elasticsearch
2
可以看到,它跟其他的节点的传输端口为9300,接受HTTP请求的端口为9200。
使用ctrl+C停止。当然,也可以使用后台进程的方式启动ES:
1
2 1./bin/elasticsearch &
2
然后可以打开页面localhost:9200,将会看到以下内容:
返回展示了配置的cluster_name和name,以及安装的ES的版本等信息。
刚刚安装的head插件,它是一个用浏览器跟ES集群交互的插件,可以查看集群状态、集群的doc内容、执行搜索和普通的Rest请求等。现在也可以使用它打开localhost:9200/_plugin/head页面来查看ES集群状态:
可以看到,现在,ES集群中没有index,也没有type,因此这两条是空的