日志分析系统 [ 3 ] --- Kibana 部署与使用,Kafka 和 zookeeper 集群的部署与使用,日志收集系统ELK

企业级日志分析系统-ELK

日志收集系统ELK搭建

ELK简介

在传统项目中,如果在生产环境中,有多台不同的服务器集群,如果生产环境需要通过日志定位项目的Bug的话,需要在每台节点上使用传统的命令方式查询,这样效率非常低下。因此我们需要集中化的管理日志,ELK则应运而生。ELK=ElasticSeach+Logstash+Kibana,日志收集原理如下所示:

1、每台服务器集群节点安装Logstash日志收集系统插
2、每台服务器节点将日志输入到Logstash
3、Logstash将该日志格式化为json格式,根据每天创建不同的索引,输出到ElasticSearch
4、浏览器使用安装Kibana查询日志信息

一、Kibana 部署与使用

1、部署 Kibana

curl -L -O https://artifacts.elastic.co/downloads/kibana/kibana-7.10.0-linux-x86_64.tar.gz
tar xf kibana-7.10.0-linux-x86_64.tar.gz -C /usr/local/

mv  /usr/local/kibana-7.10.0-linux-x86_64  /usr/local/kibana

2、设置

设置变量

[elastic@n2 kibana]$ cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

10.9.29.168 ela1
10.9.29.169 ela2
10.9.29.170 ela3

设置环境
/kibana/config/kibana.yml

server.host: "0.0.0.0"
elasticsearch.hosts: ["http://ela1:9200", "http://ela2:9200", "http://ela3:9200"]
i18n.locale: "zh-CN"

3、运行 Kibana

没有需要需要运行Filebeat和Logstash 继续添加数据

给普通用户权限 并切换普通用户

[root@n2 ~]# chown elastic.elastic /usr/local/kibana/  -R
[root@n2 ~]# su - elastic
上一次登录:二 12月 29 08:20:55 EST 2020pts/0 上
^[[A[elastic@n2 cd  /usr/local/kibana/&
[elastic@n2 kibana]$ nohup  bin/kibana &
[1] 71843
[elastic@n2 kibana]$ nohup: ignoring input and appending output to ‘nohup.out’

4、访问网站

http://ip:5601
在这里插入图片描述

5、创建索引模式

Kibana需要使用索引模式来访问要浏览的Elasticsearch数据。索引模式选择要使用的数据,并允许您定义字段的属性。

索引模式可以指向特定索引,例如,您昨天的日志数据或包含您的数据的所有索引。它还可以指向 数据流或索引别名。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

6、查询数据

在这里插入图片描述

在这里插入图片描述

7.报错解决

#网页显示 Kibana server is not ready yet

1.KB、ES版本不一致(网上大部分都是这么说的)
解决方法:把KB和ES版本调整为统一版本

2.kibana.yml中配置有问题(通过查看日志,发现了Error: No Living connections的问题)
解决方法:将配置文件kibana.yml中的elasticsearch.url改为正确的链接,默认为: http://elasticsearch:9200
改为http://自己的IP地址:9200

3.浏览器没有缓过来
解决方法:刷新几次浏览器。

FATAL  Error: Port 5601 is already in use. Another instance of Kibana may be running!

5601端口被占用 查询进程是否存在

ps -ef | grep node

然后杀掉重新启动

二、Kafka 和 zookeeper 集群

1.Kafka 介绍

数据缓冲队列。同时提高了可扩展性。具有峰值处理能力,使用消息队列能够使关键组件顶住突发的访问压力,而不会因为突发的超负荷的请求而完全崩溃。是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于hadoop的批处理系统、低延迟的实时系统、web/nginx日志、访问日志,消息服务等等,用scala语言编写,Linkedin于2010年贡献给了Apache基金会并成为顶级开源 项目。

Kafka的特性:

  • 高吞吐量:kafka每秒可以处理几十万条消息。

  • 可扩展性:kafka集群支持热扩展- 持久性、

  • 可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失

  • 容错性:允许集群中节点失败(若副本数量为n,则允许n-1个节点失败)

  • 高并发:支持数千个客户端同时读写

    它主要包括以下组件

    话题(Topic):是特定类型的消息流。(每条发布到 kafka 集群的消息属于的类别,即 kafka 是面向 topic 的。)
    生产者(Producer):是能够发布消息到话题的任何对象(发布消息到 kafka 集群的终端或服务).
    消费者(Consumer):可以订阅一个或多个话题,从而消费这些已发布的消息。
    服务代理(Broker):已发布的消息保存在一组服务器中,它们被称为代理(Broker)或Kafka集群。
    partition(区):每个 topic 包含一个或多个 partition。
    replication:partition 的副本,保障 partition 的高可用。
    leader:replica 中的一个角色, producer 和 consumer 只跟 leader 交互。
    follower:replica 中的一个角色,从 leader 中复制数据。
    zookeeper:kafka 通过 zookeeper 来存储集群的信息。
    

2.zookeepe 介绍

ZooKeeper是一个分布式协调服务,它的主要作用是为分布式系统提供一致性服务,提供的功能包括:配置维护、分布式同步等。Kafka的运行依赖ZooKeeper。 也是java微服务里面使用的一个注册中心服务

ZooKeeper主要用来协调Kafka的各个broker,不仅可以实现broker的负载均衡,而且当增加了broker或者某个broker故障了,ZooKeeper将会通知生产者和消费者,这样可以保证整个系统正常运转。

在Kafka中,一个topic会被分成多个区并被分到多个broker上,分区的信息以及broker的分布情况与消费者当前消费的状态信息都会保存在ZooKeeper中,

3.部署实施

1安装配置jdk8

Kafka、Zookeeper(简称:ZK)运行依赖jdk8

tar xf jdk-8u121-linux-x64.tar.gz -C /usr/local/

echo '
JAVA_HOME=/usr/local/jdk1.8.0_181
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME PATH
' >>/etc/profile

source /etc/profile

2.安装配置Zookeeper

Kafka运行依赖ZK,Kafka官网提供的tar包中,已经包含了ZK,这里不再额下载ZK程序。

配置相互解析—三台机器
/etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

10.9.29.168 ela1
10.9.29.169 ela2
10.9.29.170 ela3

(1)安装

[root@ela1 ~]#  tar xf kafka_2.11-2.1.0.tgz -C /usr/local/

(2)配置 [需配置三台]

[root@ela1 ~]# sed -i 's/^[^#]/#&/' /usr/local/kafka_2.11-2.1.0/config/zookeeper.properties
[root@ela1 ~]#vim /usr/local/kafka_2.11-2.1.0/config/zookeeper.properties  
#添加如下配置
dataDir=/opt/data/zookeeper/data 
dataLogDir=/opt/data/zookeeper/logs 
clientPort=2181 
tickTime=2000 
initLimit=20 
syncLimit=10 

# 以下 IP 信息根据自己服务器的 IP 进行修改

server.1=10.9.29.168:2888:3888  
server.2=10.9.29.169:2888:3888
server.3=10.9.29.170:2888:3888

#创建data、log目录
[[root@ela1 ~]# mkdir -p /opt/data/zookeeper/{data,logs}
#创建myid文件
[root@ela1 ~]# echo 1 > /opt/data/zookeeper/data/myid     #myid号按顺序排 1 2 3 

配置项含义:

dataDir ZK数据存放目录。
dataLogDir  ZK日志存放目录。
clientPort  客户端连接ZK服务的端口。
tickTime        ZK服务器之间或客户端与服务器之间维持心跳的时间间隔。
initLimit       允许follower连接并同步到Leader的初始化连接时间,当初始化连接时间超过该值,则表示连接失败。
syncLimit   Leader与Follower之间发送消息时如果follower在设置时间内不能与leader通信,那么此follower将会被丢弃。
server.1=172.16.244.31:2888:3888    2888是follower与leader交换信息的端口,3888是当leader挂了时用来执行选举时服务器相互通信的端口。

3.配置Kafka

(1)配置 [三台]

[root@ela1 ~]# sed -i 's/^[^#]/#&/' /usr/local/kafka_2.11-2.1.0/config/server.properties
[root@ela1 ~]# vim /usr/local/kafka_2.11-2.1.0/config/server.properties
# 在最后修改 不要加文字
broker.id=1    #需要修改 123
listeners=PLAINTEXT://10.9.29.168:9092   #需要修改本机ip 
num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
log.dirs=/opt/data/kafka/logs
num.partitions=6
num.recovery.threads.per.data.dir=1
offsets.topic.replication.factor=2
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
log.retention.hours=168
log.segment.bytes=536870912
log.retention.check.interval.ms=300000
zookeeper.connect=10.9.29.168:2181,10.9.29.169:2181,10.9.29.170:2181  #需要修改对应ip
zookeeper.connection.timeout.ms=6000
group.initial.rebalance.delay.ms=0

配置项含义:

broker.id   每个server需要单独配置broker id,如果不配置系统会自动配置。
listeners       监听地址,格式PLAINTEXT://IP:端口。
num.network.threads
num.io.threads
socket.send.buffer.bytes
socket.receive.buffer.bytes
socket.request.max.bytes
log.dirs        日志文件目录。
num.partitions
num.recovery.threads.per.data.dir 
offsets.topic.replication.factor
log.retention.hours
log.segment.bytes
log.retention.check.interval.ms 
zookeeper.connect   ZK主机地址,如果zookeeper是集群则以逗号隔开。
zookeeper.connection.timeout.ms     连接到Zookeeper的超时时间。

4、其他节点配置

只需把配置好的安装包直接分发到其他节点,修改 Kafka的broker.id和 listeners就可以了

5、启动、验证ZK集群

(1)启动

在三个节点依次执行:

[root@ela1 ~]# cd /usr/local/kafka_2.11-2.1.0/
[root@ela1 kafka_2.11-2.1.0]# nohup bin/zookeeper-server-start.sh config/zookeeper.properties &

(2)验证

查看端口

[root@ela1 ~]# netstat -lntp | grep 2181
tcp6       0      0 :::2181                 :::*                    LISTEN      1226/java

6、启动、验证Kafka

(1)启动

在三个节点依次执行:

[root@ela1 ~]# cd /usr/local/kafka_2.11-2.1.0/
[root@ela1 kafka_2.11-2.1.0]# nohup bin/kafka-server-start.sh config/server.properties &

(2)验证

在10.9.29.168上创建topic

[root@ela1 kafka_2.11-2.1.0]# bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic testtopic
Created topic "testtopic".

参数解释:

– zookeeper指定zookeeper的地址和端口
– partitions指定partition的数量
– replication-factor指定数据副本的数量

在10.9.29.169上面查询10.9.29.168上的topic

[root@ela2 kafka_2.11-2.1.0]# bin/kafka-topics.sh --zookeeper 10.9.29.168:2181 --list
testtopic

7、模拟消息生产和消费

发送消息到10.9.29.168

[root@ela2 kafka_2.11-2.1.0]# bin/kafka-console-producer.sh --broker-list 10.9.29.168:9092 --topic testtopic
>0.0
>hello

从 10.9.29.168 接受消息

[root@ela1 kafka_2.11-2.1.0]# bin/kafka-console-consumer.sh --bootstrap-server  10.9.29.169:9092 --topic testtopic --from-beginning
0.0
hello

猜你喜欢

转载自blog.csdn.net/Houaki/article/details/111997889