目录
1.什么是ELK
通俗来讲,ELK 是由 Elasticsearch、Logstash、Kibana 三个开源软件的组成,这三个软件当中,每个软件用于完成不同的功能。
- Elasticsearch: elasticsearch是一个高度可扩展的开源全文搜索和分析引擎,它可实现数据的实时全文搜索搜索、支持分布式可实现高可用、提供 API 接口,可以处理大规模日志数据,比如 Nginx、Tomcat、系统日志等功能。
- Logstash: logstash可以通过插件实现日志收集和转发,支持日志过滤,支持普通 log、自定义 json格式的日志解析。
- kibana: kibana主要是通过接口调用 elasticsearch 的数据,并进行前端数据可视化的展现。
为什么使用 ELK?
ELK 组件在海量日志系统的运维中,可用于解决以下主要问题:
- 分布式日志数据统一收集,实现集中式查询和管理
- 故障排查
- 安全信息和事件管理
- 报表功能
ELK 组件在大数据运维系统中,主要可解决的问题如下:
- 日志查询,问题排查,故障恢复,故障自愈
- 应用日志分析,错误报警
- 性能分析,用户行为分析
官方站点:https://www.elastic.co/cn/
2.搭建ELK日志系统
架构图:
由于 Logstash 比较耗资源,一般我们不会在应用服务器上直接安装 Logstash 来收集日志,我们可能会采用更轻量级的 Filebeat 来采集日志,但当多台 Filebeat 向 Logstash 传输数据再交给ES入库时,压力会比较大,可以在 Filebeat 和 Logstash 之间加上一层消息队列减轻压力,比如Redis、Kafka。
实验环境:
系统 | 节点 | JDK | Zookeeper | Kafka | Elasticsearch | logstash | kibana |
---|---|---|---|---|---|---|---|
CentOS7.6 | elk-node1 (192.168.100.111) | jdk-8u212 | zookeeper-3.4.14 | kafka_2.12-2.1.0 | elasticsearch-6.8.7 | logstash-6.8.7 | kibana-6.8.7 |
CentOS7.6 | elk-node2 (192.168.100.112) | jdk-8u212 | zookeeper-3.4.14 | kafka_2.12-2.1.0 | elasticsearch-6.8.7 | logstash-6.8.7 | kibana-6.8.7 |
CentOS7.6 | elk-node3 (192.168.100.113) | jdk-8u212 | zookeeper-3.4.14 | kafka_2.12-2.1.0 | elasticsearch-6.8.7 | logstash-6.8.7 | – |
实验准备:
~]# systemctl stop firewalld
~]# systemctl disable firewalld
~]# setenforce 0
~]# sed -i '/SELINUX/s/enforcing/disabled/g' /etc/sysconfig/selinux
~]# cat /etc/hosts
...
192.168.100.111 elk-node1
192.168.100.112 elk-node2
192.168.100.113 elk-node3
2.1 安装JDK
下载地址:https://www.oracle.com/technetwork/java/javase/downloads/java-archive-javase8-2177648.html
~]# tar xf jdk-8u212-linux-x64.tar.gz -C /usr/local/
~]# cd /usr/local/
~]# ln -sv jdk1.8.0_212/ jdk
~]# echo 'JAVA_HOME=/usr/local/jdk' > /etc/profile.d/jdk.sh
~]# echo 'PATH=$JAVA_HOME/bin:$PATH' >> /etc/profile.d/jdk.sh
~]# . /etc/profile.d/jdk.sh
~]# java -version
java version "1.8.0_212"
Java(TM) SE Runtime Environment (build 1.8.0_212-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.212-b10, mixed mode)
2.2 安装Zookeeper
下载地址: https://mirrors.tuna.tsinghua.edu.cn/apache/
zookeeper配置参数:http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_configuration
在Zookeeper的官网上有这么一句话:ZooKeeper is a centralized service for maintaining configuration information, naming, providing distributed synchronization, and providing group services. 这大概描述了Zookeeper主要可以干哪些事情:配置管理,名字服务,提供分布式同步以及集群管理。此处我们需要使用Zookeeper来管理Kafka集群。
~]# tar xf zookeeper-3.4.14.tar.gz -C /opt/
~]# cd /opt/
~]# ln -sv zookeeper-3.4.14/ zookeeper
~]# cd zookeeper/conf/
~]# cp zoo_sample.cfg zoo.cfg
~]# cat zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/opt/zookeeper/data
dataLogDir=/opt/zookeeper/log
autopurge.snapRetainCount=3
autopurge.purgeInterval=1
clientPort=2181
server.0=192.168.100.111:2888:3888
server.1=192.168.100.112:2888:3888
server.2=192.168.100.113:2888:3888
~]# mkdir ../{
data,log}
~]# echo 0 > ../data/myid #三台zk编号不同,此处为0,其余两台为1、2,与配置中的server.x有关
~]# echo 'ZK_HOME=/opt/zookeeper' > /etc/profile.d/zk.sh
~]# echo 'PATH=$ZK_HOME/bin:$PATH' >> /etc/profile.d/zk.sh
~]# source /etc/profile.d/zk.sh
~]# zkServer.sh start
~]# zkServer.sh status
~]# zkCli.sh -server localhost:2181
配置解析:
- tickTime:客户端与服务器或者服务器与服务器之间每个tickTime时间就会发送一次心跳。通过心跳不仅能够用来监听机器的工作状态,还可以通过心跳来控制Flower跟Leader的通信时间,默认2秒
- initLimit:集群中的follower服务器(F)与leader服务器(L)之间初始连接时能容忍的最多心跳数(tickTime的数量)。
- syncLimit:集群中flower服务器(F)跟leade