ELK+kafka构建日志收集系统之环境安装

ELK+kafka构建日志收集系统之环境安装

1.背景

ELK由Elasticsearch、Logstash和Kibana三部分组件组成;

Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。

Logstash是一个完全开源的工具,它可以对你的日志进行收集、分析,并将其存储供以后使用

kibana 是一个开源和免费的工具,它可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。

那本章主要内容为ELK+Kafka的安装,对于什么是ELK、Kafka就不过多的介绍了。

2.搭建环境

本次选择搭建环境为 ubuntu16 并使用docker容器完成快速搭建

3.ELK+Kafka 执行原理图

在这里插入图片描述

4.搭建步骤

整体搭建步骤分为:

  • Kafka以及zookpeer的安装
  • elk的安装
  • 使用springboot发送消息到kafka并使用kibana查看日志

5.开始搭建

5.1:搭建Kafka以及zookpeer

1、下载镜像

docker pull wurstmeister/zookeeper  
docker pull wurstmeister/kafka  

2、启动镜像

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

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

3、测试发送消息

执行Docker ps,找到kafka的Container ID,进入容器内部:

docker exec -it ${CONTAINER ID} /bin/bash   

进入kafka默认目录

cd opt/kafka_2.11-0.10.1.1/  

下面就是跟一般的kafka没什么区别了

创建一个主题:

bin/kafka-topics.sh --create --zookeeper zookeeper:2181 --replication-factor 1 --partitions 1 --topic mykafka  

运行一个消息生产者,指定topic为刚刚创建的主题

bin/kafka-console-producer.sh --broker-list localhost:9092 --topic mykafka  

运行一个消费者,指定同样的主题

bin/kafka-console-consumer.sh --zookeeper zookeeper:2181 --topic mykafka --from-beginning  

这时在生产者输入测试消息,在消费者就可以接收消息了
到此Kafka安装完成,接下来安装ELK

5.2搭建ELK

1、ELK的帮助手册
Docker Hub官网:https://hub.docker.com/r/sebp/elk/
Docker ELK使用文档:http://elk-docker.readthedocs.io/

2、安装前提条件:
Docker至少得分配3GB的内存;
Elasticsearch至少需要单独2G的内存;
防火墙开放相关端口;
vm.max_map_count至少需要262144,附永久修改vm.max_map_count方法如下图:
在这里插入图片描述
执行命令:sysctl -p 查看
在这里插入图片描述
3、安装ELK
1、执行命令,将镜像pull到本地来;

docker pull sebp/elk 

2、执行命令,将镜像运行为容器,为了保证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 

3、打开浏览器,输入:http://宿主机ip:5601,看到如下界面说明安装成功
在这里插入图片描述
4、配置使用
4.1:使用以下命令进入容器

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

4.2:进入容器后执行命令:

/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 然后在执行就可以了。

4.3:当命令成功被执行后,看到:Successfully started Logstash API endpoint {:port=>9600} 信息后,输入:this is a dummy entry 然后回车,模拟一条日志进行测试。

4.4:打开浏览器,输入:http://宿主机ip:9200/_search?pretty 如图,就会看到我们刚刚输入的日志内容

4.5:到此,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 => "dmservice-%{+YYYY.MM.dd}"
    #user => "elastic"
    #password => "changeme"
  }
}

  • 执行命令
 vim /etc/init.d/logstash

打开logstash启动文件后,找到第29 30行,为logstash启动用户,都改为root,效果如下

 LS_USER=root    //原来默认为logstash
 LS_GROUP=root  //原为默认为logstash
  • 启动logstash
/etc/init.d/logstash start

到此,logstash已经连接上Kafka并且实时监控消息发送到es存储,接下来我们使用Springboot发送一下消息试一下

5.3 搭建Springboot项目,实现Kafka继承并发送消息到Kafka

该项目使用springboot版本为 1.5.6.RELEASE

1、创建Springboot项目,添加web以及Kafka依赖

pom.xml 引用依赖如下

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.kafka</groupId>
            <artifactId>spring-kafka</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
2、application.yml添加一下配置
spring:
  kafka:
    producer:
      bootstrap-servers: kafka.yhq:9092
      key-serializer: org.apache.kafka.common.serialization.StringSerializer
      value-serializer: org.apache.kafka.common.serialization.StringSerializer
3、application.yml添加一下配置

编写controller,实现消息发送,代码如下

/**
 * elk+kafka 日志记录
 *
 * @author sam
 */
@RestController
public class KafkaController {

    @Resource
    private KafkaTemplate<String, String> kafkaTemplate;

    @RequestMapping("/sendMsgToKafka")
    public String sendMsgToKafka() {
        for (int i =60; i < 70; i++) {
            kafkaTemplate.send("user_consumer", "dm", "hello,kafka!---->" + i);
        }
        return "发送消息到Kafka完毕";
    }

}

4、启动项目,使用postman进行测试访问

访问后显示 “发送消息到Kafka完毕” 则数据发送成功,如下图
在这里插入图片描述

5、访问es查看存储的数据

在这里插入图片描述
若此处获取到了数据,则logstash配置是没有问题的,否则检查logstash

6、使用kibana展示数据

操作步骤

点击 management --> Index Patterns
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

到此,ELK+Kafka实现搭建企业级实时日志分析平台已完成,有问题欢迎交流!

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值