一、ELK使用的组件的功能:
Logstash:
采集、处理、传输日志,
Elasticsearch:
搜索引擎,保存日志
Kibana:
数据可视化显示
Kafka:
消息队列,用于缓存logstash到es传输的日志,防止日志爆发,es来不及储存而引起数据丢失。
Zookeeper:
Kafka集群搭建依赖于Zookeeper集群
架构解析:
1.logstash占用资源比较大的情况解决
目前该系统采用logstash,但是logstash在jvm中运行,消耗服务器资源较大,可以采用Beats作为日志采集工具解决这个问题,具体见https://www.ibm.com/developerworks/cn/opensource/os-cn-elk-filebeat/index.html
2.为什么引入消息队列
如果logstash推送给es的消息过快 ,可能造成es来不及存储,同事Logstash缓存的数据量有限,这就容易造成数据丢失的问题。所以引入消息队列缓存数据,防止数据丢失。
3.Kibana单点故障的问题
这个问题有两种解决办法,第一种是在服务器中挂一个vip,然后用vip对外提供服务,如果服务器挂掉,可以直接在另外一台上把vip挂上即可,不需要用户修改什么配置。但是这种需要去操作,比较麻烦;第二种是用Nginx作一个反向代理,keepalived配置一个ip漂移,当服务器挂掉之后,IP直接在另外一台上生效,对外提供服务,一旦挂掉的服务器重启之后,主备自动切换,因此不备的服务器性能要求可以没有那么高,只是在意外发生的时候提供服务而已。
三、集群安装步骤
1.系统准备:
集群IP、主机名、hosts文件的修改。
2.软件下载上传解压:
直接进官网下载ELK相关版本的软件,上传到服务器中,并解压。其中软件有(jdk1.8,logstash6.5.4,elasticsearch6.5.4,kibana6.5.4,kafka2.11,zookeeper3.4.13),后期如果需要做kibana的高可用,也可以选择下载keepalived等。
3、配置Java环境变量
修改/etc/profile文件,在之后追加一下内容:
export JAVA_HOME=/opt/app/jdk1.8.0_121
export PATH= J A V A H O M E / b i n : JAVA_HOME/bin: JAVAHOME/bin:PATH
export CLASSPATH=.: J A V A H O M E / l i b / d t . j a r : JAVA_HOME/lib/dt.jar: JAVAHOME/lib/dt.jar:JAVA_HOME/lib/tools.jar
输入 . /etc/profile 命令使环境变量生效
3.ES安装
es安装过程中需要注意的是,es不能用由root用户启动,必须先添加新的普通用户,并更改安装目录的所属,之后再启动es,es再启动的过程中可能会遇到各种报错,可以参照文档的上的处理方法修改更改即可。具体安装可以参照一下的链接:https://www.jianshu.com/p/975326e65f65
Es的中文文档(部分翻译为中文)
http://cwiki.apachecn.org/display/Elasticsearch/Index
4.Kibana安装
https://www.jianshu.com/p/0ce405db9ceb
Logstash安装
https://blog.csdn.net/CleverCode/article/details/78632887
Kafka集群部署
https://www.jianshu.com/p/98b8ea0e0ac3
至此集群就搭建完毕了,以下内容理论可行,并没有验证;
Kibana的高可用
挂载虚拟ip使用keepalived进行作ip漂移,这个可以在网上查到很多资料,可以进一步研究以下。
Zookeeper 安装
1 解压
2 新建 logs data 目录
3 创建 myid /data/myid
4配置zookeeper配置文件
zoo_sample.cfg 这个文件是官方给我们的zookeeper的样板文件,给他复制一份命名为zoo.cfg,zoo.cfg是官方指定的文件命名规则
#tickTime:
这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。
#initLimit:
这个配置项是用来配置 Zookeeper 接受客户端(这里所说的客户端不是用户连接 Zookeeper 服务器的客户端,而是 Zookeeper 服务器集群中连接到 Leader 的 Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过 5个心跳的时间(也就是 tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 52000=10 秒
#syncLimit:
这个配置项标识 Leader 与Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是52000=10秒
#dataDir:
快照日志的存储路径
#dataLogDir:
事物日志的存储路径,如果不配置这个那么事物日志会默认存储到dataDir制定的目录,这样会严重影响zk的性能,当zk吞吐量较大的时候,产生的事物日志、快照日志太多
#clientPort:
这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。修改他的端口改大点
#启动服务(3台都需要操作)
./zkServer.sh start
kafka
有Zookeeper文件,我们可以根据Kafka内带的zk集群来启动,但是建议使用独立的zk集群
server.properties 这个文件
#broker.id=0 每台服务器的broker.id都不能相同
#hostname
host.name=192.168.7.100
#在log.retention.hours=168 下面新增下面三项
message.max.byte=5242880
default.replication.factor=2
replica.fetch.max.bytes=5242880
#设置zookeeper的连接端口
zookeeper.connect=192.168.7.100:12181,192.168.7.101:12181,192.168.7.107:12181
#从后台启动Kafka集群(3台都需要启动)
cd
/opt/kafka/kafka_2.11-0.9.0.1//bin #进入到kafka的bin目录
./kafka-server-start.sh -daemon …/config/server.properties
Es
复制虚拟机时 rm -rf /etc/udev/rules.d/70-persistent-net.rules
清除网卡缓存 或 删掉 UUID MAC
1.安装 配置文件 修改即可
cluster.name: myes
node.name: node10
node.master: true
node.data: true
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
network.host: 192.168.56.10
discovery.zen.ping.unicast.hosts: [“192.168.56.10”, “192.168.56.11”,“192.168.56.12”]
discovery.zen.minimum_master_nodZZes: 1
解决方法
修改三个配置文件,*代表所有用户
vi /etc/security/limits.conf
#添加配置
vi /etc/security/limits.d/90-nproc.conf
#添加配置
curl -XGET ‘http://169.254.123.11:9200/_cluster/state/nodes?pretty’
Kibana
server.port: 5601
server.host: “169.254.123.11”
server.rewriteBasePath
setting to tell Kibana if it should remove the basePath#server.basePath: “”
server.basePath
or require that they are rewritten by your reverse proxy.false
before Kibana 6.3 and willtrue
starting in Kibana 7.0.#server.rewriteBasePath: false
#server.maxPayloadBytes: 1048576
#server.name: “your-hostname”
elasticsearch.url: “http://169.254.123.11:9200”