当前位置: 首页 > news >正文

【Spring Cloud】微服务日志收集系统-ELK+Kafka

目录

  • 任务背景
  • 本文相关文件资料
  • Elasticsearch
    • 特性
  • Logstash
  • Kibana
  • ELK
    • ELK的缺点
    • 引入消息中间件
  • ELK+Kafka
    • Kafka
      • 概念
  • ELK+Kafka环境搭建
    • 1.将安装素材上传至服务器 cd /usr/local/soft
    • 2.防止Elasticsearch因虚拟内存问题启动失败
    • 3.创建镜像li/centos7-elasticsearch
    • 4.创建容器
    • 5.验证Elasticsearch服务【先开放端口或关闭防火墙】
    • 6.安装Kafka
      • 修改资料中server.properties
      • 创建镜像li/centos7-kafka
      • 创建容器
    • 7.安装Logstash
      • 修改资料中logstash.conf
      • 修改资料中logstash.yml
      • 创建镜像
      • 创建容器
      • 在Logstash中定义收集规则
        • input
        • output
    • 8.安装Kibana
      • 修改资料中kibana.yml
      • 创建镜像
      • 创建容器
      • 验证Kibana
  • 在项目中发送日志信息到Kafka
    • 1.创建demo-kafka-client项目
    • 2.添加依赖
    • 3.发送消息到Kafka
      • 代码分析
    • 4.添加配置
    • 5.启动服务

任务背景

  1. 随着业务复杂度的提升以及微服务的兴起,传统单一项目会被按照业务规则进行垂直拆分,另外为了防止单点故障我们也会将重要的服务模块进行集群部署,通过负载均衡进行服务的调用。
  2. 那么随着节点的增多,各个服务的日志也会散落在各个服务器上。这对于我们进行日志分析带来了巨大的挑战,总不能一台一台的登录去下载日志吧。那么我们需要一种收集日志的工具将散落在各个服务器节点上的日志收集起来,进行统一的查询及管理统计。
  3. 那么ELK就可以做到这一点。

本文相关文件资料

  • 查看本站(CSDN)资源:微服务日志收集系统-ELK+Kafka相关安装文件,也可以在我的主页去搜
  • 下载地址:

Elasticsearch

  • Elastic Stack 成员
  • Lucene
  • Java

特性

  • 分布式实时全文搜索引擎
  • 分布式实时分析搜索引擎
  • 分布式实时大数据处理引擎

Logstash

  • Elastic Stack 成员
  • 是一个开源数据收集引擎,具有实时流水线功能
  • 数据处理管道
    • Input(采集)
    • Output(迁移JSON数据到ES服务器中)

在这里插入图片描述

Kibana

  • Elastic Stack 成员
  • 开源
  • 数据分析和可视化
    • 图形
    • 表格
  • Web端访问

在这里插入图片描述

ELK

在这里插入图片描述

ELK的缺点

单纯使用EIK实现分布式日志收集缺点:

  • 当产生日志的服务节点越来越多,Logstash也需要部署越来越多,扩展不好。
  • 读取IO文件,可能会产生日志丢失。
  • 读取文件不是实时性。

引入消息中间件

  • 当业务量增大时,日志跟着增多,直接传入会使LogStash压力过大,可能挂掉,所以需要增加一个缓冲区。
  • 日志数据解耦。为其他数据分析平台提供日志,可从Kafka中获取日志进行实时分析处理。
  • 引入Kafka,日志实时发布到Kafka,Logstash订阅并实时获取消息

ELK+Kafka

在这里插入图片描述

Kafka

  • 高吞吐、分布式消息系统
  • 消息中间件

概念

  • Producer:生产者
  • Consumer:消费者
  • Topic:主题
    在这里插入图片描述

ELK+Kafka环境搭建

1.将安装素材上传至服务器 cd /usr/local/soft

2.防止Elasticsearch因虚拟内存问题启动失败

  • 查看当前值: sysctl -a|grep vm.max_map_count
  • 修改配置文件:vim /etc/sysctl.conf
  • 设置虚拟内存:vm.max_map_count=262144
  • 从指定的文件加载系统参数:sysctl -p
  • 重启docker服务:systemctl restart docker

3.创建镜像li/centos7-elasticsearch

cd /usr/local/soft/Elasticsearch
docker build -t li/centos7-elasticsearch .

4.创建容器

docker run -d -p 9200:9200 -p 9300:9300 --restart=always --name env_elasticsearch  li/centos7-elasticsearch

5.验证Elasticsearch服务【先开放端口或关闭防火墙】

  • 访问http://宿主机IP:9200
    在这里插入图片描述

6.安装Kafka

修改资料中server.properties

advertised.listeners=PLAINTEXT://192.168.5.166:9092

创建镜像li/centos7-kafka

cd /usr/local/soft/Kafka
docker build -t li/centos7-kafka .

创建容器

docker run -d -p 9092:9092  --restart=always --name env_kafka  li/centos7-kafka

7.安装Logstash

修改资料中logstash.conf

bootstrap_servers => ["192.168.5.166:9092"]
hosts=> ["192.168.5.166:9200"]

修改资料中logstash.yml

xpack.monitoring.elasticsearch.url: http://192.168.5.166:9200

创建镜像

cd /usr/local/soft/Logstash
docker build -t li/centos7-logstash .

创建容器

docker run -d --restart=always --name env_logstash  li/centos7-logstash

在Logstash中定义收集规则

logstash.conf

input
  • bootstrap_servers:指向Kafka服务
  • group_id:可以自由指定
  • topics:数组形式,可以填写多个
  • type:可以自由指定
output
  • hosts:指向Elasticsearch服务地址,可以有多个,注意IP和端口和实际保持一致
  • index:表示在Elasticsearch中生成index的规则
  • user和password:Elasticsearch的用户名和密码

8.安装Kibana

修改资料中kibana.yml

elasticsearch.url: "http://192.168.5.166:9200"

创建镜像

cd /usr/local/soft/Kibana
docker build -t li/centos7-kibana .

创建容器

docker run -d -p 5601:5601  --restart=always --name env_kibana  li/centos7-kibana

验证Kibana

  • 访问http://宿主机IP:5601
    在这里插入图片描述

在项目中发送日志信息到Kafka

1.创建demo-kafka-client项目

2.添加依赖

在pom.xml中添加依赖

<dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId>
</dependency>

3.发送消息到Kafka

@RestController
public class KafkaController {@Resourceprivate KafkaTemplate<String, String> kafkaTemplate;@RequestMapping(value = "/sendMsgToKafka")public String sendMsgToKafka() {for (int i = 1; i <=10; i++) {kafkaTemplate.send("elkservice", "elk", "hello,Kafka!--->" + i);}return "发送消息到Kafka完毕";}
}

代码分析

kafkaTemplate.send(“elkservice”, “elk", “hello,Kafka!—>” + i);

  • "elkservice":Kafka中的topic,读取消息时需要指定
  • "elk":key值,Kafka用key值确定value存放在哪个分区
  • "hello,Kafka!--->" + i:发送的具体数据

4.添加配置

  • application.yml

    spring:kafka:producer:bootstrap-servers: 192.168.5.210:9092 # Kafka服务地址,可以配置多个,以逗号分隔
    

5.启动服务

  • 调用sendMsgToKafka方法发送消息

相关文章:

  • AndroidFlutter混合开发
  • 一个小时搞定JAVA面向对象(4)——继承
  • LeetCode-239.滑动窗口最大值
  • 用增之Google
  • 24、Linux网络端口
  • 详解redis配置文件
  • SQL常用语句--模糊查询LIKE
  • Android 编译 C 文件报错 fatal error: ‘jni.h‘ file not found
  • 网络安全中攻击溯源方法
  • 对人脸图像进行性别和年龄的判断
  • 结构体指针
  • 【Java高级教程】集合部分
  • 【Qt快速入门(一)】- Qt简介
  • 用Python获取Windows本机安装的所有应用程序的实现与分析
  • npm镜像源管理、nvm安装多版本node异常处理
  • [deviceone开发]-do_Webview的基本示例
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • Angular 响应式表单 基础例子
  • iOS | NSProxy
  • JAVA多线程机制解析-volatilesynchronized
  • Puppeteer:浏览器控制器
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • 成为一名优秀的Developer的书单
  • 技术:超级实用的电脑小技巧
  • 警报:线上事故之CountDownLatch的威力
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 使用 @font-face
  • 微信小程序实战练习(仿五洲到家微信版)
  • !!Dom4j 学习笔记
  • #QT 笔记一
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • (4)STL算法之比较
  • (7)svelte 教程: Props(属性)
  • (70min)字节暑假实习二面(已挂)
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (二)Optional
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (回溯) LeetCode 77. 组合
  • (七)Knockout 创建自定义绑定
  • (三)终结任务
  • (算法)Travel Information Center
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • (一)WLAN定义和基本架构转
  • (转)Google的Objective-C编码规范
  • .FileZilla的使用和主动模式被动模式介绍
  • .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划
  • .Net Redis的秒杀Dome和异步执行
  • .NET 分布式技术比较
  • .net项目IIS、VS 附加进程调试
  • .net中我喜欢的两种验证码