ELK+kafka部署

一、ELK使用的组件的功能:
Logstash:
采集、处理、传输日志,
Elasticsearch:
搜索引擎,保存日志
Kibana:
数据可视化显示
Kafka:
消息队列,用于缓存logstash到es传输的日志,防止日志爆发,es来不及储存而引起数据丢失。
Zookeeper:
Kafka集群搭建依赖于Zookeeper集群

二、系统架构图
ELK+kafka部署_第1张图片

架构解析:
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

  1. Logstash安装
    https://blog.csdn.net/CleverCode/article/details/78632887

  2. 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 的时间长度,总的时间长度就是5
2000=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
#添加配置

  • soft nofile 65536
  • hard nofile 131072
  • soft nproc 2048
  • hard nproc 4096

vi /etc/security/limits.d/90-nproc.conf
#添加配置

  • soft nproc 4096
    vi /etc/sysctl.conf
    #添加配置
    vm.max_map_count=655360

curl -XGET ‘http://169.254.123.11:9200/_cluster/state/nodes?pretty’

Kibana

Kibana is served by a back end server. This setting specifies the port to use.

server.port: 5601

Specifies the address to which the Kibana server will bind. IP addresses and host names are both valid values.

The default is ‘localhost’, which usually means remote machines will not be able to connect.

To allow connections from remote users, set this parameter to a non-loopback address.

server.host: “169.254.123.11”

Enables you to specify a path to mount Kibana at if you are running behind a proxy.

Use the server.rewriteBasePath setting to tell Kibana if it should remove the basePath

from requests it receives, and to prevent a deprecation warning at startup.

This setting cannot end in a slash.

#server.basePath: “”

Specifies whether Kibana should rewrite requests that are prefixed with

server.basePath or require that they are rewritten by your reverse proxy.

This setting was effectively always false before Kibana 6.3 and will

default to true starting in Kibana 7.0.

#server.rewriteBasePath: false

The maximum payload size in bytes for incoming server requests.

#server.maxPayloadBytes: 1048576

The Kibana server’s name. This is used for display purposes.

#server.name: “your-hostname”

The URL of the Elasticsearch instance to use for all your queries.

elasticsearch.url: “http://169.254.123.11:9200”

你可能感兴趣的:(ELK)