ELK:Elasticsearch、Logstash和Kibana三部分组成
Elasticsearch(简称ES)是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现。
Logstash 是一款强大的数据处理工具,它可以实现数据传输,格式处理,格式化输出,还有强大的插件功能,常用于日志处理。
Kibana是一个开源的分析与可视化平台,设计出来用于和Elasticsearch一起使用的。你可以用kibana搜索、查看、交互存放在Elasticsearch索引里的数据,使用各种不同的图表、表格、地图等kibana能够很轻易地展示高级数据分析与可视化。
需要相关安装包,可以直接去官网下载,地址:
下载页:https://www.elastic.co/cn/downloads
也可以通过以下链接下载
安装包
Elasticsearch5.4.0
kibana-5.4.0
jdk-8u131-linux-x64.tar.gz
logstash-2.4.1.tar(支持java8以下的版本),logstash-5.4.0.tar(Java 8 or higher is required for Logstash 5.x.),因只能上传60M内容,此处文件无法上传。
前提条件
因为 Kibana 需要 java 环境支持,所以需要配置 JDK
方法如下
(1)解压 JDK 到自己定义的目录
[zhou@myjavaweb myjre]$ pwd
/test1/myjre
[zhou@myjavaweb myjre]$ ll
total 181196
drwxr-xr-x 8 10 143 4096 Mar 15 16:35 jdk1.8.0_131
-rw-r--r-- 1 root root 185540433 May 26 17:17 jdk-8u131-linux-x64.tar.gz
(2)添加环境变量
[zhou@myjavaweb myjre]$ vi /etc/profile
.... 在配置文件下添加以下语句 ....
export JAVA_HOME=/test1/myjre/jdk1.8.0_131
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
.... 保存退出 ...
[zhou@myjavaweb myjre]$ source /etc/profile
注:/etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.并从/etc/profile.d目录的配置文件中搜集shell的设置.
编辑该配置文件,需要使用 source 命令,立即生效。
(3)测试 JDK
[zhou@myjavaweb ~]$ java -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
解压即可使用,无需配置
(1)logstash-2.4.1 解压后,进入文件夹,执行命令测试
[zhou@myjavaweb ELK_tar]$ tar xvzf logstash-2.4.1.tar.gz
[zhou@myjavaweb ELK]$ cd logstash-2.4.1/
[zhou@myjavaweb logstash-2.4.1]$ ./bin/logstash -e "input{stdin{}}output{stdout{codec=>rubydebug}}"
.... 显示如下内容 ....
Settings: Default pipeline workers: 1
Pipeline main started
.... 可以键入 hello world ! 信息,待会会显示出来 ....
hello world !
{
"message" => "hello world !",
"@version" => "1",
"@timestamp" => "2017-06-10T13:51:15.847Z",
"host" => "myjavaweb"
}
(2)elasticsearch 解压后启动
[zhou@myjavaweb elasticsearch-5.4.0]$ ./bin/elasticsearch
[2017-06-10T22:13:45,652][INFO ][o.e.t.TransportService ] [node-1] publish_address {192.168.231.134:9300}, bound_addresses {192.168.231.134:9300}
[2017-06-10T22:13:45,669][INFO ][o.e.b.BootstrapChecks ] [node-1] bound or publishing to a non-loopback or non-link-local address, enforcing bootstrap checks
[2017-06-10T22:13:48,810][INFO ][o.e.c.s.ClusterService ] [node-1] new_master {node-1}{mw45jOGiQ5Cc6zp2Bf1JZQ}{xMEHc7UKTqGIlFZ44NhObw}{192.168.231.134}{192.168.231.134:9300}, reason: zen-disco-elected-as-master ([0] nodes joined)
[2017-06-10T22:13:48,935][INFO ][o.e.h.n.Netty4HttpServerTransport] [node-1] publish_address {192.168.231.134:9200}, bound_addresses {192.168.231.134:9200}
启动成功,才能看到以下端口信息,这里启动可能会遇到问题
[root@myjavaweb ~]# netstat -ntpl | grep java
tcp6 0 0 192.168.231.134:9200 :::* LISTEN 3634/java
tcp6 0 0 192.168.231.134:9300 :::* LISTEN 3634/java
浏览器访问部署 ES 的服务器地址(我的主机地址:192.168.231.134,需要端口号)
(3)启动 kibana ,并检查端口是否监听(5601,即待会通过浏览器访问的地址和端口号)
[zhou@myjavaweb kibana-5.4.0-linux-x86_64]$ ./bin/kibana
[root@myjavaweb ~]# netstat -ntpl
.... .....
tcp 0 0 192.168.231.134:5601 0.0.0.0:* LISTEN 3322/./bin/../node/
测试环境
两台虚拟机中,均部署 logstash,另一台部署好 elasticsearch 以及 kibana,通过启动 logstash (指定配置文件),搜集日志,并传输到 elasticsearch ,最终展示在 kibana 上,注意先后顺序 logstash-> elasticsearch->kibana
示例
这里读取 Tomcat 的日志,指定 elasticsearch 的主机地址,都在一台主机上。
[zhou@myjavaweb conf]$ cat getTomcatlogs.conf
input {
file{
path => ["/test1/local_Tomcat/tomcat8/logs/catalina.2017-06-10.log"]
type => "proxy"
start_position => "beginning"
}
}
output{
# stdout{
# codec => rubydebug{}
# }
elasticsearch {
hosts => ["192.168.231.134:9200"]
index => "logstash-%{+YYYY.MM.dd}"
}
}
.... 加载配置文件启动 logstash ....
[zhou@myjavaweb conf]./bin/logstash -f ../conf/getTomcatlogs.conf
常见问题
(1)以下报错,提示,不能以 root 用户运行 elasticsearch
org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root
(2)更换用户后启动依然报错,需要赋予权限
.... 错误信息 ....
/tmp/elasticsearch/logs/my-application.log) java.io.FileNotFoundException: /tmp/elasticsearch/logs/my-application.log (Permission denied) java.io.FileNotFoundException: /tmp/elasticsearch/logs/my-application.log (Permission denied)
.... 解决办法,给 zhou 创建这个路径文件权限 ....
chown zhou.zhou -R /tmp/elasticsearch/logs/my-application.log
(3)启动异常:ERROR: bootstrap checks failed
.... 错误内容 ....
system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk
问题原因:因为Centos6不支持SecComp,而ES5.2.1默认bootstrap.system_call_filter为true进行检测,所以导致检测失败,失败后直接导致ES不能启动。
解决方法:在elasticsearch.yml中配置bootstrap.system_call_filter为false,注意要在Memory下面:
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
(4)错误 ERROR: bootstrap checks failed
.... 错误内容 ....
max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536]
max number of threads [1024] for user [lishang] likely too low, increase to at least [2048]
解决方法:切换到root用户,编辑limits.conf 添加类似如下内容
vi /etc/security/limits.conf
添加如下内容:
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
(3)其他错误可以参见这个人的博客,很详细。
http://blog.csdn.net/u012246178/article/details/63253531