基于docker微服务日志ELK+Kafka搭建

news/2025/1/19 19:04:36/
ELK Elasticsearch Logstash Kibana 的简称
Elasticsearch 是实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能;是一套开放 REST
JAVA API 等结构提供高效搜索功能,可扩展的分布式系统。它构建于 Apache Lucene 搜索引擎库之上。
Logstash 是一个用来搜集、分析、过滤日志的工具。它支持几乎任何类型的日志,包括系统日志、错
误日志和自定义应用程序日志。它可以从许多来源接收日志,这些来源包括 syslog 、消息传递(例如
RabbitMQ )和 JMX ,它能够以多种方式输出数据,包括电子邮件、 websockets Elasticsearch
Kibana 是一个基于 Web 的图形界面,用于搜索、分析和可视化存储在 Elasticsearch 指标中的日志数
据。它利用 Elasticsearch REST 接口来检索数据,不仅允许用户创建他们自己的数据的定制仪表板视
图,还允许他们以特殊的方式查询和过滤数据
使用 spring aop 进行日志收集,然后通过 kafka 将日志发送给 logstash logstash 再将日志写入
elasticsearch ,这样 elasticsearch 就有了日志数据了,最后,则使用 kibana 将存放在
elasticsearch 中的日志数据显示出来,并且可以做实时的数据图表分析等等。

 

为什么要用 ELK
最开始我些项目的时候,都习惯用 log4j 来把日志写到 log 文件中,后来项目有了高可用的要求,我们就
进行了分布式部署 web ,这样我们还是用 log4j 这样的方式来记录 log 的话,那么就有 N 台机子的 N log
目录,这个时候查找 log 起来非常麻烦,不知道问题用户出错 log 是写在哪一台服务器上的,后来,想到
一个办法,干脆把 log 直接写到数据库中去,这样做,虽然解决了查找异常信息便利性的问题了,但存
在两个缺陷 :
1 log 记录好多,表不够用啊,又得分库分表了,
2 ,连接 db ,如果是数据库异常,那边 log 就丢失了,那么为了解决 log 丢失的问题,那么还得先将 log
在本地,然后等 db 连通了后,再将 log 同步到 db ,这样的处理办法,感觉是越搞越复杂。
ELK 职能分工
logstash 做日志对接,接受应用系统的 log ,然后将其写入到 elasticsearch 中, logstash 可以支持 N
log 渠道, kafka 渠道写进来的、和 log 目录对接的方式、也可以对 reids 中的 log 数据进行监控读
取,等等。
elasticsearch 存储日志数据,方便的扩展特效,可以存储足够多的日志数据。
kibana 则是对存放在 elasticsearch 中的 log 数据进行:数据展现、报表展现,并且是实时的。

 1.docker环境搭建ELK+Kafka

搭建 elasticsearch 集群环境
elasticsearchCluster 文件夹拷贝虚拟机
使用 Xshell 连接服务器,在服务器上切换至 elasticsearchCluster 目录
赋权 chmod 777 *.sh
创建镜像 ./createElasticsearchImage.sh
创建容器 ./createElasticsearchContainer.sh
设置宿主机内存
sysctl -w vm.max_map_count=262144
重新启动 docker
systemctl restart docker
根据集群分配修改 kibana.yml elasticsearch 的地址
docker cp kibana.yml kgc_kibana:/usr/local/kibana-6.2.4-linux-x86_64/config/
重新启动 kibana docker restart kgc_kibana
安装 logstash kafka, 镜像
修改 kafka server.properties 连接地址
# 修改为宿主机 IP 192.168.31.113
advertised.listeners = PLAINTEXT : //kafka : 9092

 

修改logstash.conf文件

input{
kafka {
bootstrap_servers => ["kafka:9092"] # 修改为 kafka IP
auto_offset_reset => "latest" 将文件夹 kafka logstash 复制到服务器,执行命令,生产镜像
ProviderController.java
consumer_threads => 5
decorate_events => true
topics => ["user-error"] # 数组形式,可以填写多个
type => "user-error" # 可以自由指定
}
}
output {
elasticsearch {
hosts => [ "elasticsearch:9200"] # 指向 Elasticsearch 服务地址,可以有多个,注意
IP 和端口和实际保持一致
index => "%{[type]}log-%{+YYYY-MM-dd}"
}
}

 将文件夹kafkalogstash复制到服务器,执行命令,生产镜像

docker build -t kgc/logstash 路径 /logstash/

根据镜像,生产容器

docker run -d --name kgc_kafka -p 9092:9092 --network kgc_elastic_cluster --
network-alias kafka kgc/kafka
#logstash
docker run -d -it --name kgc_logstash --network kgc_elastic_cluster --network
alias logstash kgc/logstash

 

 编写程序,修改端口号与连接kafka

server :
port : 8088
spring :
kafka :
producer :
bootstrap-servers : 192.168.31.113 : 9092

ProviderController.java

@RestController
public class ProviderController {
@Autowired
private KafkaTemplate<String, String> KafkaTemplate;
@RequestMapping(value = "/test" )
public String test() throws Exception{
System.out.println(KafkaTemplate);
for (int i = 0; i < 10; i++) {
KafkaTemplate.send("wangzhuanyun", "dm", "wzy222222--->" + i);
}
return "send msg over...";
}
}

 


http://www.ppmy.cn/news/1564482.html

相关文章

在 Windows 上,如果忘记了 MySQL 密码 重置密码

在 Windows 上&#xff0c;如果忘记了 MySQL 密码&#xff0c;可以通过以下方法重置密码&#xff1a; 方法 1&#xff1a;以跳过权限验证模式启动 MySQL 并重置密码 停止 MySQL 服务&#xff1a; 打开 命令提示符 或 PowerShell&#xff0c;输入以下命令停止 MySQL 服务&#…

ChatGPT升级AI私人助理功能:新增定时播报全网热点与定制每日学习健身计划

ChatGPT 可以通过 Tasks 功能&#xff0c;设置发送每周全球新闻简报、提供每日 15 分钟健身计划、设置语言学习等任务提醒、发送每日笑话、创建每日晚餐计划、提醒生日等重要事件。 1 月 15 日消息&#xff0c;OpenAI 公司今天在 X 平台发布推文&#xff0c;宣布以测试版形式&a…

线上工单引发的思考:Spring Boot 中 @Autowired 与 @Resource 的区别

最近接手了离职同事负责的业务&#xff0c;在处理一个线上工单的时候&#xff0c;看了下历史逻辑&#xff0c;在阅读他们写的代码时&#xff0c;发现他们竟然把Autowired和Resource注解混用。今天就借此机会聊聊SpringBoot项目中这两者之间的区别。 1. 注解来源 Autowired&am…

初步认识 Neo4j 图数据库

Neo4j 是一种高性能的图数据库管理系统&#xff0c;基于图论设计&#xff0c;能够高效地存储和查询复杂的关系数据。以下是关于 Neo4j 的详细介绍&#xff1a; 核心特性 数据模型&#xff1a; Neo4j 使用图数据模型&#xff0c;将数据以节点&#xff08;Node&#xff09;、关系…

自动连接校园网wifi脚本实践(自动网页认证)

目录 起因执行步骤分析校园网登录逻辑如何判断当前是否处于未登录状态&#xff1f; 书写代码打包设置开机自动启动 起因 我们一般通过远程控制的方式访问实验室电脑&#xff0c;但是最近实验室老是断电&#xff0c;但重启后也不会自动连接校园网账户认证&#xff0c;远程工具&…

音乐播放器实现:前端HTML,CSS,JavaScript综合大项目

音乐播放器实现:前端HTML&#xff0c;CSS&#xff0c;JavaScript综合大项目 项目概述项目视图效果一、侧边栏相关代码&#xff08;一&#xff09;HTML代码&#xff08;二&#xff09;css代码 二、登录页面&#xff08;一&#xff09;HTML代码&#xff08;二&#xff09;css代码…

WPF 复杂页面布局及漂亮 UI 界面设计全解析

在 WPF 开发领域&#xff0c;打造一个既具备复杂功能又拥有美观 UI 界面的应用程序是众多开发者追求的目标。复杂页面布局与漂亮的 UI 设计不仅能提升用户体验&#xff0c;还能展现应用的专业性和独特性。本文将深入探讨如何在 WPF 中实现复杂页面布局以及设计出令人眼前一亮的…

【北京迅为】iTOP-4412全能版使用手册-第八十五章 一键烧写QT程序到开发板

iTOP-4412全能版采用四核Cortex-A9&#xff0c;主频为1.4GHz-1.6GHz&#xff0c;配备S5M8767 电源管理&#xff0c;集成USB HUB,选用高品质板对板连接器稳定可靠&#xff0c;大厂生产&#xff0c;做工精良。接口一应俱全&#xff0c;开发更简单,搭载全网通4G、支持WIFI、蓝牙、…