ELK简介

什么是ELK

ELK:

E:Elasticsearch 全文搜索引擎

L:logstash 日志采集工具

K:Kibana ES的可视化工具

ELK是当今业界非常流行的日志采集保存和查询的系统

我们编写的程序,会有很多日志信息,但是日志信息的保存和查询是一个问题

idea控制台是临时显示的位置,我们可以将它保存在文件中

但是即使保存在文件中,海量日志信息要想查询需要的条目也是问题

所以我们使用ELK来保存

为什么需要ELK

保存并能够快速便捷的查询查看日志信息就是新出现的需求了

ELK这个组合可以完成这个任务

Elasticsearch负责将日志信息保存,查询时可以按关键字快速查询

那么这些日志怎么收集呢?

利用logstash这个软件可以监听一个文件,将这个文件中出现的内容经过处理发送到指定端口

我们就可以监听我们程序输出的日志文件,然后将新增的日志信息保存到ES中

Kibana来负责进行查询和查看结果

日志的管理工具还有一套叫链路追踪

和ELK有类似的效果,感兴趣的同学可以自己搜索

Logstash

什么是logstash

Logstash是一款开源的日志采集,处理,输出的软件,每秒可以处理数以万计条数据,可以同时从多个来源采集数据,转换数据,然后将数据输出至自己喜欢的存储库中(官方推荐的存储库为Elasticsearch)

上面图片数据源可以是任何产生数据的介质,数据库,redis,java的日志文件均可

输出目标一般也是能够保存数据的媒体,数据库,redis,ES等

LogStash内部有3个处理数据的步骤

  • input 将数据源的数据采集到Logstash
  • filter (非必要)如果需要可以对采集到的数据进行处理
  • output 将处理好的数据保存到目标(一般就是ES)

其中采集数据的用法比较多样,还支持各种插件

logstash实现数据库和ES数据的同步

logstash还有一个非常常用的功能

就是能够自动完成数据库数据和ES中数据的同步问题

实现原理

我们可以配置logstash监听数据库中的某个表

一般设计为监听表中数据的变化,在规范的数据表结构中,logstash可能监听gmt_modified列

只要gmt_modified列数据有变化,就收集变化的数据行,将这行数据的信息更新到ES

下面我们就在虚拟机环境下实现搜索操作

实现虚拟机搜索功能

之前我我们已经修改了yml文件,将搜索的目标更换为虚拟机中的ES

在虚拟机的连接环境中,我们使用SpuEntity来实现ES的连接

我们可以看到SpuEntity类中没有任何编写分词的属性

原因是为了更高效的实现分词,logstash将所有需要分词的列拼接组合成了一个新列search_text

当需要查询时只需要查询search_text字段即可

修改持久层

我们需要修改一下SpuForElasticRepository的代码

@Repository
public interface SpuForElasticRepository extends
ElasticsearchRepository<SpuEntity,Long> { // 所有更新数据的操作都由Logstash负责,这里无需编写数据更新代码 // 方法名查询
Page<SpuEntity> querySpuEntitiesBySearchTextMatches(
String keyword,Pageable pageable);
// 或者调用查询语句的方法
@Query("{\"match\":{\"search_text\":{\"query\":\"?0\"}}}")
Page<SpuEntity> querySearchByText(String keyword,Pageable pageable);
}

业务逻辑层接口

因为实体类泛型类型的变化

ISearchService接口中的返回值泛型也要修改一下

public interface ISearchService {

    // ES分页查询spu的方法
// ↓↓↓↓↓↓↓↓↓↓↓
JsonPage<SpuEntity> search(String keyword, Integer page, Integer pageSize); // 向ES中加载数据的方法
void loadSpuByPage();
}

原来的业务逻辑层实现类,要废弃,可以删除

如果不想删除也要把之前代码注释,还是必须删除@Service注解

原有Service(Search)LocalServiceImpl修改为

//@Service
//@Slf4j
@Deprecated
public class ServiceLocalServiceImpl {
}

新建SearchRemoteServiceImpl实现类代码如下

// 实现查询远程服务器ES的业务逻辑层实现类
@Service
@Slf4j
public class SearchRemoteServiceImpl implements ISearchService { //注入查询ES的Repository
@Autowired
private SpuForElasticRepository spuForElasticRepository;
@Override
public JsonPage<SpuEntity> search(String keyword, Integer page, Integer pageSize) {
Page<SpuEntity> spuEntities=spuForElasticRepository
.querySearchByText(keyword, PageRequest.of(page-1,pageSize));
JsonPage<SpuEntity> jsonPage=new JsonPage<>();
//赋值分页参数
jsonPage.setPage(page);
jsonPage.setPageSize(pageSize);
// 总页数
jsonPage.setTotalPage(spuEntities.getTotalPages());
// 总条数
jsonPage.setTotal(spuEntities.getTotalElements());
// 赋值数据
jsonPage.setList(spuEntities.getContent());
// 别忘了返回jsonPage
return jsonPage;
} @Override
public void loadSpuByPage() { }
}

修改控制层代码

修改SearchController中的代码

@GetMapping
@ApiOperation("根据关键字查询ES中的信息")
@ApiImplicitParams({
@ApiImplicitParam(value = "搜索关键字",name = "keyword",dataType = "string",
required = true),
@ApiImplicitParam(value = "页码",name = "page",dataType = "int",
required = true),
@ApiImplicitParam(value = "每页条数",name = "pageSize",dataType = "int",
required = true)
})
// ↓↓↓↓↓↓↓↓↓↓↓
public JsonResult<JsonPage<SpuEntity>> searchByKeyword(
String keyword,
@RequestParam(value = "page",defaultValue = "1")Integer page,
@RequestParam(value = "pageSize",defaultValue = "5") Integer pageSize
){
// ↓↓↓↓↓↓↓↓↓↓↓
JsonPage<SpuEntity> list=searchService.search(keyword,page,pageSize);
return JsonResult.ok(list); }

如果测试包test中的类报错,把他们注释或删除即可

执行查询

leaf\product\[passport]\search

启动虚拟机

如果不能查询出数据库中正确的对应的信息

需要在数据库工具软件中运行下面代码

USE mall_pms;

UPDATE pms_spu SET gmt_modified=now() WHERE  1=1;

以激活logstash对spu表的监听,并向ES中保存数据

这个操作可能有些延迟,稍等即可

再次查询,就有能够正确搜索信息了!

Logstash下ES的运行流程

安装配置好相关软件后

logstash会自动监听指定的表(一般指定监听gmt_modified列)

当gmt_modified列值变化时,logstash就会收集变化的行的信息

周期性的向ES进行提交

ES中的数据就会自动和数据库中的变化同步了

这样,我们再程序中,就无需编写任何同步ES和数据库的代码

5-17 ELK 日志采集查询保存的更多相关文章

  1. SpringCloud微服务实战——搭建企业级开发框架(三十八):搭建ELK日志采集与分析系统

      一套好的日志分析系统可以详细记录系统的运行情况,方便我们定位分析系统性能瓶颈.查找定位系统问题.上一篇说明了日志的多种业务场景以及日志记录的实现方式,那么日志记录下来,相关人员就需要对日志数据进行 ...

  2. ELK 日志采集 实战教程

    概要 带着问题去看教程: 不是用logstash来监听我们的日志,我们可以使用logback配置来使用TCP appender通过TCP协议将日志发送到远程Logstash实例. 我们可以使用Logs ...

  3. Springboot项目使用aop切面保存详细日志到ELK日志平台

    上一篇讲过了将Springboot项目中logback日志插入到ELK日志平台,它只是个示例.这一篇来看一下实际使用中,我们应该怎样通过aop切面,拦截所有请求日志插入到ELK日志系统.同时,由于往往 ...

  4. 2018年ElasticSearch6.2.2教程ELK搭建日志采集分析系统(教程详情)

    章节一  2018年 ELK课程计划和效果演示1.课程安排和效果演示    简介:课程介绍和主要知识点说明,ES搜索接口演示,部署的ELK项目演示    es: localhost:9200    k ...

  5. 2018年ElasticSearch6.2.2教程ELK搭建日志采集分析系统(目录)

    章节一  2018年 ELK课程计划和效果演示 1.课程安排和效果演示 简介:课程介绍和主要知识点说明,ES搜索接口演示,部署的ELK项目演示 章节二 elasticSearch 6.2版本基础讲解到 ...

  6. ELK太重?试试KFC日志采集

    写在前面 ELK三剑客(ElasticSearch,Logstash,Kibana)基本上可以满足日志采集.信息处理.统计分析.可视化报表等一些日志分析的工作,但是对我们来说--太重了,并且技术栈不是 ...

  7. 「视频小课堂」ELK和Kafka是怎么就玩在一起成了日志采集解决方案文字版

    视频地址:ELK和Kafka是怎么就玩在一起成了日志采集解决方案 视频文字版 今天呢我就带来了一期视频,主要就是讲ELK和Kafka之间的通讯关系通过对一张通讯图,和一些操作命令,让我们能更深入的去理 ...

  8. ELK日志平台搭建

    功能: 1. 查看当天的服务器日志信息(要求:在出现警告甚至警告级别以上的都要查询)2. 能够查看服务器的所有用户的操作日志3. 能够查询nginx服务器采集的日志(kibana作图)4. 查看tom ...

  9. ELK日志分析系统的应用

    收集和分析日志是应用开发中至关重要的一环,互联网大规模.分布式的特性决定了日志的源头越来越分散, 产生的速度越来越快,传统的手段和工具显得日益力不从心.在规模化场景下,grep.awk 无法快速发挥作 ...

随机推荐

  1. 用ffmpeg对视频进行处理

    下载安装配置教程:传送门 关键步骤Windows: 官网 合并音频和视频 with open('video/x111.mp4','wb') as f: f.write(data_30080) with ...

  2. stm32F103RCT6的DMA使用经历

    ​ DMA可以直接传输数据,减少了CPU的负担,是个很好的功能,但是用的时候难免会一头雾水.这次做个小小的串口收发程序就碰到了许多问题. 之前没有注意,选择了DMA的circular模式,然后奇怪的事 ...

  3. AcWing-3167. 星星还是树 -c++题解(模拟退火)

    ​ 在二维平面上有 n 个点,第 i 个点的坐标为 (xi,yi).请你找出一个点,使得该点到这 n个点的距离之和最小.该点可以选择在平面中的任意位置,甚至与这 n个点的位置重合. 输入格式 第一行包 ...

  4. 劳动节快乐!手写个核心价值观编码工具 - Python实现

    前言 今天是五一劳动节,祝各位无产阶级劳动者节日快乐! 然后来整活分享一些有趣的东西~ 这个小工具是我大学时做着玩的,对于各位接班人来说,12个词的核心价值观这东西,大家都非常熟悉了,这工具可以实现将 ...

  5. 【链表】【leetCode高频】: 19. 删除链表的倒数第 N 个结点

    1.题目描述 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点. 2.算法分析 知识补充: . 分析: 题目要求是删除链表中倒数第N个结点.可以使用两个指针slow,fast. 重点是 ...

  6. epoll 函数解析

    本文参考社长的 TinyWebServer 庖丁解牛 epoll 常用API epoll_create 函数 #include <sys/epoll.h> int epoll_create ...

  7. 【面试普通人VS高手系列】为什么要使用Spring 框架?

    一个工作了4年的小伙伴,他说他从线下培训就开始接触Spring,到现在已经快5年时间了. 从来没有想过,为什么要使用Spring 框架. 结果在面试的时候,竟然遇到一个这样的问题. 大脑一时间短路了, ...

  8. 软件开发架构,网络编程简介,OSI七层协议,TCP和UDP协议

    软件开发架构 什么是软件开发架构 1.软件架构是一个系统的草图. 2.软件架构描述的对象是直接构成系统的抽象组件. 3.各个组件之间的连接则明确和相对细致地描述组件之间的通讯. 4.在实现阶段,这些抽 ...

  9. python网络自动化ncclient模块,netconf协议检索与下发交换机配置

    以juniper和华为设备为例 交换机必要配置,配置简单,使用ssh模式传输 #juniperset system services netconf ssh#华为 local-user netconf ...

  10. CF1681F Unique Occurrences

    题意:一棵树,问每条路径上只出现一次的值的个数的和. 思路: 显然想到考虑边贡献.每条边权下放到下面的哪个点.\(up_i\)为上面第一个点权等于它的点.我们需要一个子树内点权等于它的点(如果满足祖孙 ...