ELK + kafka 日志方案

news2024/11/26 12:21:56

概述

本文介绍使用ELK(elasticsearch、logstash、kibana) + kafka来搭建一个日志系统。主要演示使用spring aop进行日志收集,然后通过kafka将日志发送给logstash,logstash再将日志写入elasticsearch,这样elasticsearch就有了日志数据了,最后,则使用kibana将存放在elasticsearch中的日志数据显示出来,并且可以做实时的数据图表分析等等。

详细

本文介绍使用ELK(elasticsearch、logstash、kibana) + kafka来搭建一个日志系统。主要演示使用spring aop进行日志收集,然后通过kafka将日志发送给logstash,logstash再将日志写入elasticsearch,这样elasticsearch就有了日志数据了,最后,则使用kibana将存放在elasticsearch中的日志数据显示出来,并且可以做实时的数据图表分析等等。

为什么用ELK

以前不用ELK的做法

最开始我些项目的时候,都习惯用log4j来把日志写到log文件中,后来项目有了高可用的要求,我们就进行了分布式部署web,这样我们还是用log4j这样的方式来记录log的话,那么就有N台机子的N个log目录,这个时候查找log起来非常麻烦,不知道问题用户出错log是写在哪一台服务器上的,后来,想到一个办法,干脆把log直接写到数据库中去,这样做,虽然解决了查找异常信息便利性的问题了,但存在两个缺陷:

1,log记录好多,表不够用啊,又得分库分表了,

2,连接db,如果是数据库异常,那边log就丢失了,那么为了解决log丢失的问题,那么还得先将log写在本地,然后等db连通了后,再将log同步到db,这样的处理办法,感觉是越搞越复杂。

现在ELK的做法

好在现在有了ELK这样的方案,可以解决以上存在的烦恼,首先是,使用elasticsearch来存储日志信息,对一般系统来说可以理解为可以存储无限条数据,因为elasticsearch有良好的扩展性,然后是有一个logstash,可以把理解为数据接口,为elasticsearch对接外面过来的log数据,它对接的渠道,有kafka,有log文件,有redis等等,足够兼容N多log形式,最后还有一个部分就是kibana,它主要用来做数据展现,log那么多数据都存放在elasticsearch中,我们得看看log是什么样子的吧,这个kibana就是为了让我们看log数据的,但还有一个更重要的功能是,可以编辑N种图表形式,什么柱状图,折线图等等,来对log数据进行直观的展现。

ELK职能分工

  • logstash做日志对接,接受应用系统的log,然后将其写入到elasticsearch中,logstash可以支持N种log渠道,kafka渠道写进来的、和log目录对接的方式、也可以对reids中的log数据进行监控读取,等等。

  • elasticsearch存储日志数据,方便的扩展特效,可以存储足够多的日志数据。

  • kibana则是对存放在elasticsearch中的log数据进行:数据展现、报表展现,并且是实时的。

怎样用ELK

首先说明一点,使用ELK是不需要开发的,只需要搭建环境使用即可。搭建环境,可以理解为,下载XX软件,然后配置下XX端口啊,XX地址啊,XX日志转发规则啊等等,当配置完毕后,然后点击XX bat文件,然后启动。

Logstash配置

可以配置接入N多种log渠道,现状我配置的只是接入kafka渠道。

配置文件在\logstash-2.3.4\config目录下

要配置的是如下两个参数体:

  • input:数据来源。

  • output:数据存储到哪里。

input {
  kafka {
    zk_connect => "127.0.0.1:2181"
    topic_id => "mylog_topic"
 }
}
filter {
  #Only matched data are send to output.
}
output {
  #stdout{}
  # For detail config for elasticsearch as output, 
  # See: https://www.elastic.co/guide/en/logstash/current/plugins-outputs-elasticsearch.html
  elasticsearch {
    action => "index"          #The operation on ES
    hosts  => "127.0.0.1:9200"   #ElasticSearch host, can be array.
    index  => "my_logs"         #The index to write data to.
  }
}
Elasticsearch配置

配置文件在\elasticsearch-2.3.3\config目录下的elasticsearch.yml,可以配置允许访问的IP地址,端口等,但我这里是采取默认配置。

Kibana配置

配置文件在\kibana-4.5.4-windows\config目录下的kibana.yml,可以配置允许访问的IP地址,端口等,但我这里是采取默认配置。

这里有一个需要注意的配置,就是指定访问elasticsearch的地址。我这里是同一台机子做测试,所以也是采取默认值了。

# The Elasticsearch instance to use for all your queries.
# elasticsearch.url: "http://localhost:9200"

关于ELK的配置大致上,就这样就可以了,当然其实还有N多配置项可供配置的,具体可以google。这里就不展开说了。

具体的配置请下载运行环境,里面有具体的配置。

和spring aop日志对接

elk环境搭建完毕后,需要在应用系统做日志的aop实现。

部分spring配置
<aop:aspectj-autoproxy />
<aop:aspectj-autoproxy proxy-target-class="true" />
     
<!-- 扫描web包,应用Spring的注解 -->
<context:component-scan  base-package="com.demodashi">
    <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" />
    <context:exclude-filter type="annotation" expression="javax.inject.Named" />
    <context:exclude-filter type="annotation" expression="javax.inject.Inject" />
</context:component-scan>
部分java代码

package com.demodashi.aop.annotation;
import java.lang.annotation.*;    
     
/**  
 *自定义注解 拦截service  
 */    
     
@Target({ElementType.PARAMETER, ElementType.METHOD})    
@Retention(RetentionPolicy.RUNTIME)    
@Documented    
public  @interface ServiceLogAnnotation {    
     
    String description()  default "";    
}


package com.demodashi.aop.annotation;
import java.lang.annotation.*;    
     
/**  
 *自定义注解 拦截Controller  
 */    
     
@Target({ElementType.PARAMETER, ElementType.METHOD})    
@Retention(RetentionPolicy.RUNTIME)    
@Documented    
public  @interface ControllerLogAnnotation {    
     
    String description()  default "";    
}

代码截图

image.png

日志和kafka、和logstash、elasticsearch、kibana直接的关系

ELK,kafka、aop之间的关系

1、aop对日志进行收集,然后通过kafka发送出去,发送的时候,指定了topic(在spring配置文件中配置为 topic="mylog_topic")

2、logstash指定接手topic为 mylog_topic的kafka消息(在config目录下的配置文件中,有一个input的配置)

3、然后logstash还定义了将接收到的kafka消息,写入到索引为my_logs的库中(output中有定义)

4、再在kibana配置中,指定要连接那个elasticsearch(kibana.yml中有配置,默认为本机)

5、最后是访问kibana,在kibana的控制台中,设置要访问elasticsearch中的哪个index。

部署ELK + kafka环境

我本机的环境是jdk8.0,我记得测试的过程中,elasticsearch对jdk有特别的要求,必须是jdk7或者以上。

下载运行环境附件,并解压后,看到如下:

image.png

这些运行环境,在每个软件里面,都有具体的启动说明,如kafka的目录下,这样:

image.png

按照启动说明的命令来执行,即可启动。

这里需要说明一点,最先启动,应该是zookeeper,然后才是其他的,其他几个没有严格区分启动顺序。

直接在window下面,同一台机子启动即可。除了kibana-4.5.4-windows外,其他几个也是可以在linux下运行的。

                                                                             本文由“未央天际人家账号”发布,2023年11月2日

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1162427.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++】关于构造函数后面冒号“:“的故事------初始化列表(超详细解析,小白一看就懂)

目录 一、前言 二、 初始化的概念区分 三、初始化列表 &#xff08;重点&#xff09; &#x1f4a6;初始化列表的概念理解 &#x1f4a6;初始化列表的注意事项 四、共勉 一、前言 在之前的博客学习中&#xff0c;我们已经学习了【C】的六大默认成员函数 &#xff0c;想必大…

MySQL数据库入门到精通——运维篇(2)

MySQL数据库入门到精通——运维篇&#xff08;2&#xff09; 1. 分库分表1.1 分库分表介绍1.1.1 现在的问题1.1.2 拆分策略1.1.2.1 垂直拆分策略1.1.2.2 水平拆分策略 1.2 Mycat概述1.3 Mycat入门1.4 Mycat配置1.4.1 Schema标签1.4.2 Datanode标签1.4.3 Datahost标签1.4.4 rule…

蓝桥杯每日一题2023.11.2

题目描述 等差素数列 - 蓝桥云课 (lanqiao.cn) 题目分析 对于此题我们需要求出最小的公差并且长度为10&#xff0c; 1.确保序列开始为素数 2.确定枚举的个数 注意&#xff1a;序列中数只是d的变化&#xff0c;可以通过此计算将开始数字后9个数字都计算出来&#xff0c;d是…

PostgreSQL逻辑管理结构

1.数据库逻辑结构介绍 2.数据库基本操作 2.1 创建数据库 CREATE DATABASE name [ [ WITH ] [ OWNER [] user_name ] [ TEMPLATE [] template ] [ ENCODING [] encoding ] [ LC_COLLATE [] lc_collate ] [ LC_CTYPE [] lc_ctype ] [ TABLESPACE [] tablespace ] [ CONNECTION L…

网络取证-Tomcat-简单

题干&#xff1a; 我们的 SOC 团队在公司内部网的一台 Web 服务器上检测到可疑活动。为了更深入地了解情况&#xff0c;团队捕获了网络流量进行分析。此 pcap 文件可能包含一系列恶意活动&#xff0c;这些活动已导致 Apache Tomcat Web 服务器遭到破坏。我们需要进一步调查这一…

【LeetCode:2103. 环和杆 | 模拟】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

nexus搭建npm私有镜像

假设有一个nexus服务&#xff0c;地址为&#xff1a; http://10.10.33.50:8081/ 创建存储空间 登录后创建存储空间&#xff0c;选择存储类型为File&#xff0c;并设置空间名称为 npm-private 创建仓库类型 2.1 创建hosted类型仓库 创建一个名为 npm-hosted 的本地类型仓库 2.…

SpringCloud 微服务全栈体系(十)

第十章 RabbitMQ 一、初识 MQ 1. 同步和异步通讯 微服务间通讯有同步和异步两种方式&#xff1a; 同步通讯&#xff1a;就像打电话&#xff0c;需要实时响应。 异步通讯&#xff1a;就像发邮件&#xff0c;不需要马上回复。 两种方式各有优劣&#xff0c;打电话可以立即得…

弹幕互动游戏运营模式你知道吗?

分享一个今年最新的风口项目&#xff0c;弹幕互动游戏。这种游戏类型是&#xff0c;主播真人出镜主持游戏过程&#xff0c;观众在直播间通过评论和礼物可以加入&#xff0c;并且操控游戏里的角色&#xff0c;等于是游戏和直播的结合。那普通人怎么把握这波风口呢&#xff1f; 说…

氮化硼纳米球 BN纳米球 hexagonal boron nitride

&#xff08;西&#xff09;氮化硼纳米球 &#xff08;安&#xff09;用途&#xff1a;科研 &#xff08;瑞&#xff09;平均粒径&#xff1a;50nm &#xff08;禧&#xff09;纯度&#xff1a;99.9% &#xff08;生&#xff09;比表面积&#xff1a;54.23m2/g &#xff0…

“利用Lazada API揭秘电商数据:一键获取海量商品详情!“

要使用Lazada API获取Lazada商品详情&#xff0c;您需要先注册Lazada开发者账号并获取授权码和密钥。然后&#xff0c;通过调用Lazada API的item_get接口&#xff0c;传入商品ID和国家域名后缀&#xff0c;即可获取到商品的详细信息。 以下是使用Lazada API获取Lazada商品详情…

一篇文章让你了解MySQL中的索引

索引是怎么提高查询效率的&#xff1f;可以为了提高查询效率增加索引么&#xff1f;mysql索引系统采用的数据结构是什么&#xff1f;为什么要使用B树&#xff1f;聚集索引相对于非聚集索引的区别&#xff1f;什么是回表&#xff1f;什么是索引覆盖&#xff1f;什么是最左匹配原…

BSP视频教程第28期:CANopen主从机组网实战,CAN词典工具使用方法以及吃透PDO玩法

视频教程汇总帖&#xff1a;【学以致用&#xff0c;授人以渔】2023视频教程汇总&#xff0c;DSP第12期&#xff0c;ThreadX第9期&#xff0c;BSP驱动第28期&#xff0c;USB实战第5期&#xff0c;GUI实战第3期&#xff08;2023-11-01&#xff09; - STM32F429 - 硬汉嵌入式论坛 …

华为防火墙 配置 SSLVPN

需求&#xff1a; 公司域环境&#xff0c;大陆客户端居家办公室需要连到公司域&#xff0c;这里可以在上海防火墙上面开通SSLVPN&#xff0c;员工就可以透过SSLVPN连通上海公司的内网&#xff0c;但是由于公司域控有2个站点&#xff0c;一个在上海&#xff0c;一个在台北&…

长距离工业RFID读写器的特点

长距离工业RFID读写器是一种特殊的RFID设备&#xff0c;能够在较远的距离内读取和写入RFID标签上的信息。这种读写器通常用于工业自动化、物流跟踪、车辆管理等领域&#xff0c;以实现高效、准确的跟踪和管理。 长距离工业RFID读写器采用先进的射频技术和信号处理技术&#xff…

C# 图解教程 第5版 —— 第14章 委托

文章目录 14.1 什么是委托14.2 委托概述14.3 声明委托类型14.4 创建委托对象14.5 给委托赋值14.6 组合委托14.7 为委托添加方法14.8 从委托移除方法14.9 调用委托14.10 委托的示例&#xff08;*&#xff09;14.11 调用带返回值的委托14.12 调用带引用参数的委托14.13 匿名方法1…

【笔记】excel怎么把汉字转换成拼音

1、准备好excel文件&#xff0c;复制需要转拼音列。 2、打开一个空白Word文档&#xff0c;并粘贴刚才复制的内容&#xff1b; 3、全选Word文档中刚粘贴的内容&#xff0c;点击「开始」选项卡「字体」命令组下的「拼音指南」&#xff0c;调出拼音指南对话框&#xff1b; 4、全…

java入门,哈希函数

一、前言 一听到哈希函数这种东西就感觉是数学&#xff0c;增加了人们的印象它很难。其中在数据结构中的HashMap的存储方式就用到了哈希函数&#xff0c;所以它也算是java的基础。看到哈希别惊慌&#xff0c;首先它只不过是个名称&#xff0c;我们理解它是个函数就行&#xff…

全球最强长文本大模型,一次可读35万汉字:Baichuan2-192K上线

大模型看书&#xff0c;从来没有这么快过。 国内大模型创业公司&#xff0c;正在技术前沿创造新的记录。 10 月 30 日&#xff0c;百川智能正式发布 Baichuan2-192K 长窗口大模型&#xff0c;将大语言模型&#xff08;LLM&#xff09;上下文窗口的长度一举提升到了 192K toke…