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

server/2025/1/18 18:36:57/
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/server/159420.html

相关文章

SystemUI 实现音量条同步功能

需求&#xff1a;SystemUI 实现音量条同步功能 具体问题 以前在SystemUI 下拉框添加了音量条控制&#xff0c;目前发现在SystemUI下拉框显示状态的情况下&#xff0c; 按键或者底部虚拟导航点击音量加减时候&#xff0c;SystemUI音量条不更新。 如下图&#xff1a;两个Syste…

几个Linux系统安装体验(续): 中科方德服务器系统

本文介绍中科方德服务器系统&#xff08;NFSDesktop&#xff09;的安装。 下载 下载地址&#xff1a; https://www.nfschina.com/index.php?catid68 下载文件&#xff1a;本文下载的文件名称为NFSCNS-4.0-G330-x86_64-241128.iso。 下载注意事项&#xff1a;无法直接下载&…

Zookeeper 数据迁移实战:基础环境搭建与高效迁移方案全览

文章目录 一、Zookeeper数据迁移简介二、迁移zookeeper数据基础环境三、利用快照迁移zookeeper数据1、Node1最新的zk快照文件和日志文件2、将被迁移方node2的zookeeper的集群全部stop3、将源node1集群数据和日志拷贝到指定目录下4、验证优先启动拷贝的数据、日志的zookeeper节点…

Ardupilot开源无人机之Geek SDK进展2024

Ardupilot开源无人机之Geek SDK进展202501 1. 源由2. 状态3. TODO3.1 【进行中】跟踪目标框3.2 【进行中】onnxruntime版本3.3 【完成】CUDA 11.8版本3.4 【完成】pytorch v2.5.1版本3.5 【未开始】Inference性能3.6 【未开始】特定目标集Training 4. Extra-Work4.1 【完成】CU…

自动化之Ansible

一、Ansible介绍 Ansible是一个同时管理多个远程主机的软件(任何可以通过SSH协议登录的机器)&#xff0c;因此Ansible可以管理 运程虚拟机、物理机&#xff0c;也可以是本地主机(linux、windows)。 Ansible通过SSH协议实现 管理节点、远程节点的通信。 只要是能够SSH登录的主机…

接口防篡改+防重放攻击

接口防止重放攻击&#xff1a;重放攻击是指攻击者截获了一次有效请求(如交易请求),并在之后的时间里多次发送相同的请求&#xff0c;从而达到欺骗系统的目的。为了防止重放攻击&#xff0c;通常需要在系统中引入一种机制&#xff0c;使得每个请求都有一个唯一的标识符(如时间戳…

基础IO -- 动静态库(1)

目录 一、认识库 ​编辑 二、静态库 1&#xff09;粗略认识 2&#xff09;理解 一、认识库 C语言标准库&#xff1a; C标准库&#xff1a; 下面才是C的标准库&#xff0c;上面的只是配置过Vim后显示出来的 在Linux中&#xff0c;一般动态库以 .so结尾、静态库以 .a结尾 而在…

ZooKeeper 核心知识全解析:架构、角色、节点与应用

1.ZooKeeper 分布式锁怎么实现的 ZooKeeper 是一个高效的分布式协调服务&#xff0c;它提供了简单的原语集来构建更复杂的同步原语和协调数据结构。利用 ZooKeeper 实现分布式锁主要依赖于它的顺序节点&#xff08;Sequential Node&#xff09;特性以及临时节点&#xff08;Ep…