Docker安装Kafka+ELK日志收集

1 篇文章 0 订阅

Docker安装Kafka+ELK日志收集

介绍

ELK由Elasticsearch、Logstash和Kibana三部分组件组成。
可以去官网看看了解更多:https://www.elastic.co/cn/products/ 还有 https://www.elastic.co/cn/elk-stack

在这里插入图片描述

接下来我就开始介绍在Docker中安装Kafka+ELK进行日志的收集,本人也是小白,所以参考了网上的一些资料进行学习安装,然后记录一下自己的安装步骤,首先感谢下面的博主提供的参考资料:
https://blog.csdn.net/yhq1913/article/details/86523014
https://www.jianshu.com/p/b81e1b7c0efb
https://blog.csdn.net/qq_42595077/article/details/87450034
https://blog.csdn.net/wiselyman/article/details/88346551
https://www.jianshu.com/p/5df9db5cda8f
https://blog.csdn.net/belonghuang157405/article/details/82149257
https://www.cnblogs.com/demodashi/p/8458072.html
还有一些其他的资料大家也可以参考一下:
https://elk-docker.readthedocs.io/
接下来我们看看Kafka和ELK的关系,下面的图是上面链接中拿来的。
在这里插入图片描述

然后开始我们的搭建。

安装的前提条件

  1. 安装Docker,这个应该不用多说,这里我使用的是Docker Toolbox。还可以指定一下docker machine的存储位置,可以参考:https://www.cnblogs.com/ginponson/p/8601320.html (但是修改完存储路径之后,貌似我的Kitematic 不太好使了,我也不知道是什么原因,我看到网上也有相关的问题:https://github.com/trex-group/Big-Data/issues/6) 以及设置国内镜像:https://www.jianshu.com/p/b18122eaddc3
  2. Docker至少得分配4GB的内存; Elasticsearch至少需要单独2G的内存;所以配置好的尽量分配大一点
  3. 防火墙开放相关端口;
  4. vm.max_map_count至少需要262144
    我们主要介绍一下怎么设置vm.max_map_count,不设置的话在安装过程中会提示你需要设置。
    在这里插入图片描述

首先我们先连上我们的VirtualBox中的Docker,我这里使用SecureCRT这款工具去连接我们的Docker。
Docker默认用户名和密码是:username:docker,password:tcuser
在这里插入图片描述

然后我们就连接上了在这里插入图片描述

设置vm.max_map_count的方式有两种。

  1. 正在运行的机器(不是永久的):
sysctl -w vm.max_map_count=262144
  1. 永久性的修改,在/etc/sysctl.conf文件中添加一行
grep vm.max_map_count /etc/sysctl.conf # 查找当前的值。

vm.max_map_count=262144 # 修改或者新增

我们来介绍一下这种方案。
首先我们用root用户修改配置sysctl.conf

sudo vi /etc/sysctl.conf

添加下面配置

vm.max_map_count=655360

并执行命令

sudo sysctl -p

在这里插入图片描述

安装Kafka

先使用命令 docker search kafka 查看kafka的安装包

docker search kafka

结果我使用命令的时候报了这么一个错误。

error during connect: Get https://192.168.99.100:2376/v1.39/images/json: dial tcp 192.168.99.100:2376: connectex: No connection could be made because the target machine actively refused it.

执行docker version的时候也是同样的错误:
在这里插入图片描述
所以大家安装好docker的时候最好使用docker version查看一下docker的安装有什么问题。

错误原因:可能是之前我就安装了virtual box,与其自带不同,没有设定值吧。

解决方法:
https://blog.csdn.net/fanfan4569/article/details/71340556
https://blog.csdn.net/fxbin123/article/details/78474174

然后我们继续。
在这里插入图片描述

选择

docker pull wurstmeister/kafka

在这里插入图片描述

Zookeeper

安装Kafka需要安装Zookeeper

同样的操作安装zookeeper

docker search zookeeper

在这里插入图片描述
选择

docker pull wurstmeister/zookeeper

在这里插入图片描述

启动Zookeeper和Kafka镜像

首先启动zookeeper

docker run -d --name zookeeper --publish 2181:2181 --volume /etc/localtime:/etc/localtime wurstmeister/zookeeper:latest

在这里插入图片描述

然后在启动Kafka

docker run -d --name kafka --publish 9092:9092 --link zookeeper --env KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 
--env KAFKA_ADVERTISED_HOST_NAME=kafka所在宿主机的IP --env KAFKA_ADVERTISED_PORT=9092 --volume /etc/localtime:/etc/localtime 
wurstmeister/kafka:latest

中间的kafka所在宿主机的IP,如果不这么设置,可能会导致在别的机器上访问不到kafka。
所以我们这里的命令是:

docker run -d --name kafka --publish 9092:9092 --link zookeeper --env KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 
--env KAFKA_ADVERTISED_HOST_NAME=192.168.99.100 --env KAFKA_ADVERTISED_PORT=9092 --volume /etc/localtime:/etc/localtime 
wurstmeister/kafka:latest

安装ELK

接下来我们来安装ELK

docker pull sebp/elk 

在这里插入图片描述

执行命令,将镜像运行为容器,为了保证ELK能够正常运行,加了-e参数限制使用最小内存及最大内存。

docker run -p 5601:5601 -p 9200:9200 -p 9300:9300 -p 5044:5044 -e ES_MIN_MEM=128m  -e ES_MAX_MEM=2048m -it --name elk sebp/elk 

在这里插入图片描述
打开浏览器,输入:http://宿主机ip:5601,看到如下界面说明安装成功

在这里插入图片描述

配置ELK

使用以下命令进入容器

docker exec -it <container-name> /bin/bash

在这里插入图片描述
进入容器后执行命令:

/opt/logstash/bin/logstash -e 'input { stdin { } } output { elasticsearch { hosts => ["localhost"] } }'

注意:如果看到这样的报错信息 Logstash could not be started because there is already another instance using the configured data directory. If you wish to run multiple instances, you must change the “path.data” setting. 请执行命令:service logstash stop 然后在执行就可以了。
然后等待一会之后输入hello world!!
在这里插入图片描述

然后可以在http://宿主机ip:9200/_search?pretty 中查看
在这里插入图片描述

到此,ELK简单配置成功,接下来配置Logstash连接Kafka将日志发送给es

进入elk容器,进入 /etc/logstash/conf.d 文件夹地址中创建文件 logstash.conf 添加一下内容:

input {
  beats {
    port => 5044
  }

     kafka {
        bootstrap_servers => ["宿主机IP:9092"]
        group_id => "test-consumer-group"
        auto_offset_reset => "latest"
        consumer_threads => 5
        decorate_events => true
        topics => ["user_consumer"]
        type => "bhy"
     }

}

output {
  elasticsearch {
    hosts => ["http://localhost:9200"]
    index => "myservice-%{+YYYY.MM.dd}"
    #user => "elastic"
    #password => "changeme"
  }
}

在这里插入图片描述

执行命令

vim /etc/init.d/logstash

打开logstash启动文件后,找到为logstash启动用户,都改为root,logstash的默认执行用户(logstash)可能会导致权限不足的问题。

LS_USER=root    //原来默认为logstash
 LS_GROUP=root  //原为默认为logstash

在这里插入图片描述

启动logstash

/etc/init.d/logstash start

到此,logstash已经连接上Kafka并且实时监控消息发送到es存储,以上的logstash配置都是参考:https://blog.csdn.net/yhq1913/article/details/86523014, 可以参考这篇博文使用Springboot发送一下消息试一下。

下面我讲一下我项目中的logstash的配置

input {
  beats {
    port => 5044
  }

     kafka {
        bootstrap_servers => ["192.168.99.100:9092"]
        topics => ["cloud-service-member"]
     }

}

output {
  elasticsearch {
    hosts => ["http://localhost:9200"]
    index => "member-service-%{+YYYY.MM.dd}"  //修改index前面的,应该是这个
    #user => "elastic"
    #password => "changeme"
  }
}

在这里插入图片描述

然后我在项目中是做了一个AOP进行拦截并把log发送到kafka。感兴趣的可以看看:
https://gitee.com/cckevincyh/cloud-demo/tree/ELK-1.0/

我们启动一下项目,访问以下我们的服务,也是查看http://宿主机ip:9200/_search?pretty,如果没有新的日志数据,可以尝试重启一下elk,之后就刷新了我们的服务页面就可以看到有新的日志进来了。
在这里插入图片描述

配置Kibana

在这里插入图片描述

我们可以看到在index pattern这里多了一个我们之前设置es的index。然后我们创建一个index pattern
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

然后我们就可以看到日志数据了。

在这里插入图片描述

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
ELK(Elasticsearch、Logstash、Kibana)是一个开源的日志管理和分析平台,能够帮助企业收集、存储、搜索、分析和可视化各种类型的日志数据。而Kafka是一个高吞吐量的分布式消息队列系统,可以用来收集和传输大规模的日志数据。Reyslog是一个开源的日志收集器,可以帮助企业从各种不同的数据源中收集日志数据。Filebeat是一个轻量级的日志收集工具,可以帮助企业从各种不同的文件中收集日志数据。 以下是ELK+kafka+reyslog+filebeat企业级部署的步骤: 1. 安装和配置Elasticsearch、Logstash和Kibana,并确保它们能够正常运行。可以使用docker-compose等工具来简化部署过程。 2. 安装和配置Kafka,并创建一个主题(topic)用于存储日志数据。 3. 安装和配置Reyslog,并将其配置为从各种不同的数据源中收集日志数据,并将其发送到Kafka主题(topic)中。 4. 安装和配置Filebeat,并将其配置为从各种不同的文件中收集日志数据,并将其发送到Kafka主题(topic)中。 5. 在Kibana中创建一个索引(index),并定义一个包含所有必需字段的映射(mapping)。然后,使用Logstash来将从Kafka主题(topic)中接收到的日志数据转换为适合索引(index)的格式,并将其存储在Elasticsearch中。 6. 在Kibana中创建一个仪表板(dashboard),并使用其可视化功能来呈现和分析日志数据。可以使用各种不同的可视化插件来创建自定义可视化效果。 7. 部署整个系统,并定期监控其性能和可用性,以确保其正常运行。 总之,ELK+kafka+reyslog+filebeat企业级部署需要进行一系列复杂的配置和设置,需要具备一定的技术知识和实践经验。建议企业可以考虑使用专业的日志管理和分析平台,如Splunk等,以简化部署和管理过程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值