
日志主要包括系统日志、应用程序日志和安全日志。系统运维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因。经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误。
开源实时日志分析ELK平台由ElasticSearch、Logstash和Kiabana三个开源工具组成:
1)ElasticSearch是一个基于Lucene的开源分布式搜索服务器。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是第二流行的企业搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。在elasticsearch中,所有节点的数据是均等的。
2)Logstash是一个完全开源的工具,它可以对你的日志进行收集、过滤、分析,支持大量的数据获取方法,并将其存储供以后使用(如搜索)。说到搜索,logstash带有一个web界面,搜索和展示所有日志。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。
3)Kibana 是一个基于浏览器页面的Elasticsearch前端展示工具,也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。
ELK工作原理展示图:

如上图:Logstash收集AppServer产生的Log,并存放到ElasticSearch集群中,而Kibana则从ES集群中查询数据生成图表,再返回给Browser。
ELK环境部署
一、准备工作
(1)系统环境
系统:CentOS7.2
防火墙:关闭
Centos7防火墙关闭方法与Centos6的有所区别
CentOS6关闭防火墙使用以下命令:
//临时关闭
service iptables stop
//禁止开机启动
chkconfig iptables off
CentOS7中关闭防火墙使用以下命令:
//临时关闭
systemctl stop firewalld
//禁止开机启动
systemctl disable firewalld
selinux:关闭
selinux关闭方式有两种,一种是临时关闭,另一种是永久关闭。
临时关闭方式:
setenforce 0
永久关闭方式:
编辑配置文件/etc/selinux/config
将SELINUX=enforcing 改为 SELINUX=disabled
(2)ELK源码包(Elasticsearch、Logstash 、Kibana )
ELK官网下载地址https://www.elastic.co/downloads,下载相应的软件包

二、部署ElasticSearch
将下载好的源码包上传至linux服务器
[root@node1 src]# ll
total 449592
-rw-r--r-- 1 root root 91526572 Aug 23 11:15 elasticsearch-6.3.2.zip
-rw-r--r-- 1 root root 191071620 Jul 6 14:07 jdk1.8.zip
-rw-r--r-- 1 root root 30408272 May 16 11:08 kibana-4.3.1-linux-x64.tar.gz
-rw-r--r-- 1 root root 144211416 Aug 23 13:55 logstash-6.3.2.tar.gz
注意:ELK的安装jdk的版本必须要求1.8以上
(1)安装jdk
[root@node1 src]# unzip jdk1.8.zip
[root@node1 src]# mv jdk /usr/local/jdk
[root@node1 src]# vim /etc/profile #在末尾增加以下内容
JAVA_HOME=/usr/local/jdk1.8.0_181
export JAVA_HOME
PATH=$JAVA_HOME/bin:$PATH
export PATH
[root@node1 src]# source /etc/profile #刷新配置
[root@node1 src]# java -version #检验jdk版本
openjdk version "1.8.0_171"
OpenJDK Runtime Environment (build 1.8.0_171-b10)
OpenJDK 64-Bit Server VM (build 25.171-b10, mixed mode)
(2)安装ElasticSearch
2.1、解压并移动至/usr/local下
[root@node1 src]# unzip elasticsearch-6.3.2.zip
[root@node1 src]# mv elasticsearch-6.3.2 /usr/local/elasticsearch
2.2、修改配置文件elasticsearch.yml
[root@node1 local]# vim elasticsearch/config/elasticsearch.yml #修改或增加以下配置



2.3、创建数据目录和日志目录
[root@node1 local]# mkdir /data/elasticsearch
[root@node1 local]# mkdir /var/log/elasticsearch
2.4、创建elk用户(elasticsearch不能以root用户身份启动)
[root@node1 local]# useradd elk
2.5、修改文件所属主、所属组
[root@node1 local]# chown -R elk:elk elasticsearch
[root@node1 local]# chown -R elk:elk /data/elasticsearch/
[root@node1 local]# chown -R elk:elk /var/log/elasticsearch
2.6、启动elasticsearch
[root@node1 local]# su - elk
Last login: Fri Aug 24 15:42:08 CST 2018 on pts/0
[elk@node1 ~]$ nohup /usr/local/elasticsearch/bin/elasticsearch > /dev/null &
2.7、验证elasticsearch是否安装成功

若出现上述访问结果,则表示elasticsearch部署成功。
注意:在启动过程中可能会报错,根据错误提示搜索解决方法,以下是本文在搭建过程中遇到的错误和解决方法,读者可作为参考。
错误[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
解决方法:编辑 limits.conf 在第一行加上如下内容:
cat /etc/security/limits.conf
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
错误[2]: max virtual memory areas vm.max_map_count [65530] is too low,increase to at least [262144]
解决方法:编辑 limits.conf 在第一行加上如下内容:
cat /etc/sysctl.conf
vm.max_map_count = 655360
执行 sysctl -p
错误[3]:max number of threads [1024] for user [elasticsearch] is too low, increase to at least [4096]
解决方法:编辑 /etc/security/limits.d/90-nproc.conf 将:
* soft nproc 1024
修改为:
* soft nproc 4096
错误[4]:ERROR: [1] bootstrap checks failed
[1]: system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk
解决方法:禁用,在elasticsearch.yml中配置新增bootstrap.system_call_filter: false
三、部署Kibana
3.1、解压并移动至/usr/local下
[root@node1 src]# tar xzvf kibana-6.3.2-linux-x86_64.tar.gz
[root@node1 src]# mv kibana-6.3.2-linux-x86_64 /usr/local/kibana-6.3.2/
3.2、修改配置文件kibana.yml
[root@node1 kibana-6.3.2]# vim config/kibana.yml #修改或增加以下内容

3.3、启动Kibana
[root@node1 kibana-6.3.2]# nohup /usr/local/kibana-6.3.2/bin/kibana > /dev/null &
3.4、检查Kibana是否安装成功
若访问出现上述截图,则表示kibana安全成功。
四、部署Logstash
在需要搜集日志的服务上部署logstash,注意,在部署logstash之前应先安装jdk,并且jdk版本在1.8以上。
4.1、解压并移动至/usr/local下
[root@node1 src]# tar -xzvf logstash-6.3.2.tar.gz
[root@node1 src]# mv logstash-6.3.2 /usr/local/logstash
4.2、编辑收集文件
[root@iZm5ehbmmjvrem6fwc38zkZ logstash]# cat services.conf
input {
file {
path => "/opt/center/log/global2018-08-27.log"
type => "cqbb_center"
start_position => "beginning"
}
}
input {
file {
path => "/opt/route/log/global2018-05-18.log"
type => "cqbb_route"
start_position => "beginning"
}
}
input {
file {
path => "/opt/web/logs/catalina.out"
type => "cqbb_web"
start_position => "beginning"
}
}
input {
file {
path => "/opt/web-old/logs/catalina.out"
type => "cqbb_web-old"
start_position => "beginning"
}
}
output {
if [type] == "cqbb_center" {
elasticsearch {
hosts => ["x.x.x.x:9200"]
index => "cqbb1_center-%{+YYYY.MM.dd}"
}
}
if [type] == "cqbb_route" {
elasticsearch {
hosts => ["x.x.x.x:9200"]
index => "cqbb1_route-%{+YYYY.MM.dd}"
}
}
if [type] == "cqbb_web" {
elasticsearch {
hosts => ["x.x.x.x:9200"]
index => "cqbb1_web-%{+YYYY.MM.dd}"
}
}
if [type] == "cqbb_web-old" {
elasticsearch {
hosts => ["x.x.x.x:9200"]
index => "cqbb1_web-old-%{+YYYY.MM.dd}"
}
}
}
说明:path定义日志的路径,type自定义程序类型,hosts定义elasticsearch服务地址端口,index表示索引。
4.3、启动logstash
[root@iZm5ehbmmjvrem6fwc38zkZ logstash]# /usr/local/logstash/bin/logstash -f services.conf &
五、验证日志是否收集成功
5.1 登陆Kibana访问地址,选择“Managemen”,然后点击“index Patterns”,如下图所示:

5.2、选择“Create index pattern”,如下图所示:

5.3、 输入索引,索引支持匹配,然后点击“Next step”,如下图所示:

5 .4、选择“timestamp”,点击“Create index pattern”,如下图所示:

5.5、选择“Discover”,然后添加message、type,如下图所以:

此时我们可以看到收集到了日志,如果你想看具体程序的日志只需点击type下对应程序后的放大镜标志:

指定程序日志的显示如下:

5.6、配置实时日志刷新
点击“Auto-refresh”,选择对应的刷新时间,例如选择“5 seconds”表示5s刷新一次,如下图所示

到此,整套ELK日志分析系统部署完成。





菜鸟自学编程
长按左侧二维码添加