Java开发 - ELK初体验
前言
前面我们讲过消息队列,曾提到消息队列也具有保存消息日志的能力,今天要说的EL看也具备这个能力,不过还是要区分一下功能的。消息队列的日志主要指的是Redis的AOF,实际上只是可以利用了消息队列来保存,却并不是消息队列本身的能力。ELK是当今非常流行的日志采集保存和查询的框架,然而他们俩各有用处,可以说互不干扰使用,且都是必须的,下面,我们来了解ELK。
ELK
什么是ELK
ELK是如今比较流行的一套框架,主要用于日志的采集保存和查询。线上情况,我们不能通过控制台来实时查看,但却可以通过日志输出来定位问题,查看必要的信息。如果保存成文件,也必然是极庞大的体量,并不适合我们去翻看,查找信息,这才有了ELH,其实对于ELK,大家也并不陌生,其中的E,就是我们前段时间学习的ES,全名Elasticsearch,中文名:全文搜索引擎。是不是很惊喜和意外?所以当然,L和K也是两个单独的系统,他们统称为ELK,下面,我们将逐一介绍这三个东西是什么。
E
E是我们前段时间学习的ES,全名Elasticsearch,中文名:全文搜索引擎。额~这个还要继续说吗?我觉得不用了吧?下面贴个前面的博客链接,大家点进去详细了解吧。
Java开发 - Elasticsearch初体验
L
L全称logstash,是一套日志采集工具,我们在前面没有讲过,它是一款开源的日志采集,处理和输出的软件,每秒可以处理上条数据,并且可以同时从多个数据来源采集并转换数据,然后将数据输出到指定的存储单元中(官方推荐的存储单元为Elasticsearch)。
数据来源可以是任何可存储数据的东西,如数据库,日志,redis等。
LogStash处理过程分为三步:
- input:数据输入,即数据的采集过程;
- filter:和过滤器一样哎,明显是采集完数据后可以在中间对数据进行一定的处理;
- output:处理完的数据当然是要输出啦,输出到指定的存储位置;
logstash和ES的关系很密切,一个常用的功能就是完成数据库和ES数据的同步,免去了我们手动同步的麻烦。
我们通过配置logstash,来监听数据库中单表,多表的更新变化,它本质上是一个定时器,实现简单,MQ实现ES与数据库同步则是实时性的、复杂性更高的、一致性强的。此处,我收回前言中提到的,Redis通过MQ来保存日志不是MQ本身功能的话,这话欠妥了。因为保存日志虽然是logstash的功能,但它也是通过封装一些实现来完成这个功能的。
在监听数据表变化的时候,我们需要规范的数据表结构。这段话我看到很多人都有说,博主觉得也对,但也不对,logstash在工作的时候确实需要监控表中某字段变化,但也不是说名字要固定为某字段,其实这个column是可以在配置中指定的,毕竟每一个人对数据的定义都不一样,出现名字不同的情况时有发生。
不过在使用logstash的时候也出现了一些不一样的声音。Logstash运行内存较大,占用CPU过高,影响性能,其还没有消息队列缓存,有数据丢失的隐患。基于此,出现了两种情况:
一类人选择对logstash进行调优,推荐这篇博客可以看看:ELK下之Logstash性能调优(从千/秒=>万/秒=>10万/秒
另一类人选择ELK + Filebeat,Filebeat会将日志数据收集并结构化后传输到Logstash上,如果filebeat直接传输给es,就会占用掉es的大量资源。这种工作方式推荐这篇博客看:基于ELK搭建网站实时日志监控平台
怎么办,感觉那两篇博客写的都比博主写的好啊,还更详细,如果有用,博主也不介意大家过去看哈,学习的目的是学会,而不是为了流量。即使如此,博主还是要硬着头皮把这篇博客写完。突然想到,要是我不去搜集资料,大家也看不到这么优秀的博文,我就是那个引路人,我太棒了。
K
K是Kibana,是ES的可视化工具,日志系统总不能一个个文件打开来看,这很不友好,这个可视化工具可以很好的帮到我们,我们可以在里面对需要的信息进行筛选过滤,快速查抄需要的有效信息。
Kibana的安装并不复杂,但有一个条件,需要和ES的版本保持一致。logstash则没有这样的要求,但为了好看,也保持一致吧。
L和E的那些事
都写到这里了,要给大家提一嘴,ELK不需要添加任何Java代码,全部通过配置完成。
当安装好软件,做好配置之后,logstash会自动监听配置中指定的表的字段,只要该字段发生变化,logstash就会收集变化行的信息,并周期性的向ES进行提交,ES中的数据就会自动和数据库中的变化数据同步了。
logstash的监听是通过Mybatis拦截器统一处理监听字段,一般是更新时间字段,在字段变化时就可以被监听到,这个可以解决监听非时间字段时,修改某数据时监听不到的的情况。
以上数据同步功能在ES中我们没有讲过,实际上这个问题也是很麻烦,不通过ELK,就需要手动去完成数据的同步,这是非常麻烦的。
除了上面提到的,还有一个很有意思的功能,比如我们有多个字段做了分词,当需要搜索某个词的时候需要对这几个做了分词的字段分别进行搜索关键词操作,logstash则简化了此步骤,它会将做了分词的几个字段合并成一个叫search_text的字段,所以在使用了ELK时,搜索关键词时,直接搜索search_text字段即可。
安装使用
E
关于ES的Docker安装启动,可在Docker中搜索elasticsearch,选择8.5.2版本,pull,下载完之后打开终端,输入:
docker run --name es -d -e ES_JAVA_OPTS="-Xms1g -Xmx1g" -e "discovery.type=single-node" -p 9200:9200 -p 9300:9300 elasticsearch:8.5.2
ES_JAVA_OPTS="-Xms1g -Xmx1g" 配置启动时内存大小,不配置的话默认是2G。
L
关于logstash的Docker安装启动,可在Docker中搜索logstash,选择8.5.2版本,pull,下载完之后打开终端,输入:
docker run -d --name logstash -p 4560:4560 logstash:8.5.2
k
关于kibana的Docker安装启动,可在Docker中搜索kibana,选择8.5.2版本,pull,下载完之后打开终端,输入:
docker run --name kb -d -p 5601:5601 kibana:8.5.2
登录kibana
登录kibana时会提示如下问题:
且我们也没设置过账号密码,提示需要去配置kibana.yml文件?博主跟着网上做了一大堆配置,发现最后都没有用,所以暂时不要去动他们的yml文件,就用原来的,先配置好基础的信息再说,点击forget password,弹出提示信息让我们在es中设置密码,在终端输入:
docker exec -it es /bin/bash
bin/elasticsearch-reset-password --username kibana
会给你生成一个New value,上面账号填kibana,密码就是这个新的New value,点Conform按钮,就出现了下面的配置成功页面:
配置成功后,又出现问题了:
怎么又出现了一个登录页面,我们真的没有设置密码呀,这时候,只能去添加密码了,发现了一个问题,后面再说,先说添加密码。其实在es启动时,就生成了一个elastic的超级用户,密码我们需要用同样的方式直接生成:
用这个用户和密码登录:
天可怜见,终于进来了。现在说说刚刚的问题是啥,通过官方的博客:Elastic:使用 Docker 安装 Elastic Stack 8.x 并开始使用
发现我们和官方进入的方式不太一样:
官方是通过token令牌完成配置的,而我们是通过设置kibana进来的,不知道这两种有什么差别,猜测应该属于登录后自动获取的登录令牌进来的,大家知道的可以留言告诉博主。
关于这个问题,我们在后台的用户管理列表发现了一点端倪:
kibana用户已经被禁止使用了,在这里我们也可以手动添加用户,而已经存在的用户则是不能进行编辑的,应该是留给其他服务用的默认账户密码,官方不希望我们修改,怕引起其他的错误。
结语
如果自己做,还是推荐官方的做法。到此,他们之间的安装和基础配置算是完成了。关于kibana的使用,可以参见上面那篇博客,博主试了下可以的,更多使用方式,大家可自行查找,博主后期也会出一些详细案例教程出来,真是不容易啊,各种坑,对了如果实在要修改yml文件,你会遇到几个问题,顺带说下:
vim文件无法打开yml文件,需要安装vim,安装时提示你没有权限,这时候进入容器要通过此命令:
docker exec -it -u 0 xxxxx /bin/bash
介入后安装vim:
docker stop es-node01
docker stop kib-01
这时候就可以通过vim打开yml文件了,比较坑的是,每个容器都需要这么做一遍,目前还没找到好的解决办法,有好的解决办法的小伙伴请不吝赐教。
关于ELK,也是博大精深的东西啊,微服务中每一项都不可小觑,是在下孟浪了,学无止尽,学无止尽啊,你我共勉。
相关文章:

Java开发 - ELK初体验
前言 前面我们讲过消息队列,曾提到消息队列也具有保存消息日志的能力,今天要说的EL看也具备这个能力,不过还是要区分一下功能的。消息队列的日志主要指的是Redis的AOF,实际上只是可以利用了消息队列来保存,却并不是消…...

AI_Papers周刊:第六期
CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 2023.03.13—2023.03.19 文摘词云 Top Papers Subjects: cs.CL 1.UPRISE: Universal Prompt Retrieval for Improving Zero-Shot Evaluation 标题:UPRISE:改进零样本评估…...
JS运行环境、包管理、打包工具总结
🌳JS运行环境-node.js 运行环境就是代码解析和执行的程序,比如jvm等虚拟机,他们的主要工作就是根据设定的语法规则解析编译代码,然后运行代码。 js的语法规则遵循ES规范。 🍁node.js Node.Js官网 Node.js是一种基于Ch…...

day4网络编程(广播和组播)
1.广播 发送端(类似于客户端) 流程: 创建套接字 填充接收端(服务器)网络信息结构体 bind(非必须绑定) 设置允许广播 向接收端(服务器)发送数据 关闭套接字文件 #include <stdio.h> #in…...
Vue3 自动引入组件及函数、动态生成侧边栏路由
Vue3 自动引入组件及函数、动态生成侧边栏路由 1、安装依赖 npm install -D unplugin-auto-import unplugin-icons unplugin-vue-components插件使用说明 unplugin-auto-import 说明 —— 自动引入函数、组件 unplugin-vue-components 说明 —— 自动注册组件 unplugin-ic…...

人工智能交互系统界面设计
文章目录前言一、项目介绍二、项目准备三、项目实施1.导入相关库文件2.人脸信息验证功能3.语音交互与TCP数据通信4.数据信息可视化四、相关附件前言 在现代信息化时代,图形化用户界面(Graphical User Interface, GUI)已经成为各种软件应用和…...

蓝桥杯嵌入式第一课--创建工程
概述学习本节之前,必须要先安装好 keil5 以及 CubeMX 等软硬件环境,如果你已经安装完成,请告诉自己:考试现在开始!从CubeMX开始CubeMX是创建工程模板的软件,也是我们比赛时第一个要进行操作的软件。一、选择…...

Java面向对象:接口的学习
本文介绍了Java中接口的基本语法, 什么是接口, java中的接口 语法规则, 接口的使用,接口的特性,如何实现多个接口,接口间的继承,以及抽象类和接口的区别 Java接口的学习一.接口的概念二.Java中的接口1.接口语法规则2.接口的使用3.接口的特性4.实现多个接口5.接口间的继承三.抽象…...

西瓜视频登录页面
题目 代码 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>登录页面</title><style>td{width: 160px;height: 25px;}img{width: 20px;height: 20px;}.number, .password{background: rgba(0,0,0,.05);}.numbe…...
【springboot】常用快捷键:
Ctrl快捷键介绍Ctrl F在当前文件进行文本查找 (必备)Ctrl R在当前文件进行文本替换 (必备)Ctrl Z撤销 (必备)Ctrl Y删除光标所在行 或 删除选中的行 (必备)Ctrl X剪切光标所在行…...
宝塔控制面板常用Linux命令大全
宝塔面板是站长朋友们常见的一款服务器运维面板,可以通过 Web 端轻松管理服务器,提升运维效率。大家在服务器中安装宝塔面板会用到宝塔面板特定的脚本命令。今天这篇文章为大家整理汇总了宝塔面板常用Linux命令,这样方便大家收藏查找。 1、安…...

C语言实现单链表(超多配图,这下不得不学会单链表了)
目录 一:什么是链表? 二:创建源文件和头文件 (1)头文件 (2)源文件 三:实参和形参 四:一步步实现单向链表 (1)建立一个头指针并置空 (2)打印链表,便于…...

SQL编写优化技巧
一、底层原理 sql慢是因为没有走索引,因此需要添加索引然它走索引联合索引需要匹配最左匹配原则(索引回表)如果查询列超出索引的key, 会导致回表,回表数量多,则会走全表扫描 索引是分聚集索引、非聚集索引…...

【基础算法】单链表的OJ练习(6) # 复制带随机指针的链表 #
文章目录🍇前言🍎复制带随机指针的链表🍑写在最后🍇前言 本章的链表OJ练习,是最后的也是最难的。对于本题,我们不仅要学会解题的思路,还要能够通过这个思路正确的写出代码,也就是思路…...
Activity生命周期完成EvenetLog回调
Activity 生命周期 系统EvenetLog回调 EventLog路径: Android13/frameworks/base/core/java/android/app/EventLogTags.logtags wm_on_create_called wm_on_restart_called wm_on_start_called wm_on_resume_called wm_on_top_resumed_gained_called wm_on_top_resumed_lost_c…...

西安石油大学C语言期末真题实战
很简单的一道程序阅读题,pa’默认为a【0】,接下来会进行3次循环 0 1 2 输出结果即可 前3题就是一些基础定义,在此不多赘述 要注意不同的数据类型的字节数不同 a<<2 b>>1(b>>1;就是说b自身右位移一位(…...
【Shell】Shell变量
Shell变量系统预定义变量自定义变量基本语法定义变量撤销变量命名规则使用变量只读变量删除变量变量类型系统预定义变量 $HOME、$PWD、$SHELL、$SUSER等 实例 yysubuntu:~$ echo $HOME #查看系统变量的值 /home/yys yysubuntu:~$ set #显示当前shell中所有变量自定义变量…...

你是真的“C”——结构体中鲜有人知的“秘密”
你是真的“C”——结构体中的精髓剖析【内存对齐】 【位段】 😎前言🙌结构体内存对齐:😊结构体内存对齐存在的意思是什么?😘内存对齐例子详细剖析:😘结构体中的位段:&…...
2023年“网络安全”赛项江苏省淮安市赛题解析(超详细)
2023年中职组江苏省淮安市“网络空间安全”赛项 ①.2023年中职组江苏省淮安市任务书②.2023年中职组江苏省淮安市解析③.需要环境或者不懂的可以私信博主!①.2023年中职组江苏省淮安市任务书 任务一:服务器内部信息获取 任务环境说明: 服务器场景:Server210510(关闭链接…...

【二分查找】
二分查找704. 二分查找35. 搜索插入位置34. 在排序数组中查找元素的第一个和最后一个位置结语704. 二分查找 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
postgresql|数据库|只读用户的创建和删除(备忘)
CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...