ELK相关TODO

  • 快速开始文档(https://www.cnblogs.com/lbhym/p/15934416.html)
  • SpringBoot整合ELK
  • ELK接入Kafka(待Kafka快速开始文档完成之后)

Kafka相关TODO

  • Kafka快速开始文档,包含下载、配置、启动、Java Client等
  • 管理Kafka及常见问题解决,包含Kafka Manager、AdminClient、Kafka命令行说明(Shell脚本)

前言

​ 快速开始文档中,讲解了ELK三个组件的下载、安装、配置、启动等过程。只要按照文章走一下,就可以看到一个单机版的ELK三件套。本文会带你整合SpringBoot、ELK、Kafka,组成最常见的日志系统。当然,这套组合不仅能作为日志系统,也能作为大数据流处理的前半部分(数据的收集)。后面也会带来大数据相关的随笔文章。本文也会附带相关源码,链接如下:

Github:https://github.com/MrLing1997/elasticsearch-study

依赖导入

​ 虽然整合的是SpringBoot,但是为了方便前期学习、理解,我们就不用SpringData Elasticsearch的starter了。在熟悉了ES官方提供的Java客户端后,可以再使用SpringData Elasticsearch,其提供了很多非常方便的注解。除了注解,还有starter提供的自动配置等功能。更多相关功能和用法可以自行去查看Spring Data官方文档或相关博客。

​ 这里我们只导入ES提供的Java客户端,然后手动去初始化ES。注意导入的版本,最好和服务器的ES版本保持一致。但是由于前段时间log4j的漏洞,导致7.14之前的版本全都被遗弃了,所以这里最低只能导入7.14版本。不过只要版本差距不大,一般不会有问题。

<!-- Elasticsearch服务 -->
<!-- 生成环境中,依赖版本最好和服务器的ES的版本保持一致,因为log4j的漏洞,7.14.0之前的部分依赖被遗弃无法成功下载-->
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>7.14.0</version>
</dependency>
<!-- Elasticsearch Java高级客户端 -->
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.14.0</version>
</dependency>

初始化ES客户端

​ 首先去yml或properties添加配置信息。这个配置key不是上面的jar包提供的,而是我们自己自定义的,然后通过@Value注解获取值。所以你的key不一定要和我一样。配置如下:

elasticsearch:
host: ip
port: port

​ 然后初始化RestHighLevelClient即可:

@Configuration
@Slf4j
public class ElasticSearchConfig{
@Value("${elasticsearch.host}")
private String host;
@Value("${elasticsearch.port}")
private int port; @Bean
public RestHighLevelClient restHighLevelClient() {
RestHighLevelClient restHighLevelClient = null;
try {
log.info("elasticsearch start init...");
restHighLevelClient = new RestHighLevelClient(RestClient.builder(new HttpHost(host, port, "http")));
log.info("elasticsearch init success!");
}catch (Exception e){
log.error("elasticsearch init had exception:{}", ExceptionUtils.getStackTrace(e));
}
return restHighLevelClient;
}
}

造数据

​ 自己手动编两个数据总觉得不带劲,一是数据量太少,二是太麻烦。我这里推荐一个开源的,自动生成数据的工具,依赖如下,记得排除snakeyaml,可能会和你的springboot中的yaml产生冲突。

				<dependency>
<groupId>com.github.javafaker</groupId>
<artifactId>javafaker</artifactId>
<version>1.0.2</version>
<exclusions>
<exclusion>
<artifactId>snakeyaml</artifactId>
<groupId>org.yaml</groupId>
</exclusion>
</exclusions>
</dependency>

​ 造数据的工具类和实体类很简单,直接贴一下代码:

@Data
@Accessors(chain = true)
public class User {
private Long id;
private String traceId;
private String name;
private String birthday;
private String job;
private String address;
private String company;
}
public class GenerateUserUtil {
private static final Faker faker = new Faker(); public static User generate(){
return new User()
.setId(System.currentTimeMillis())
.setTraceId(UUID.randomUUID().toString())
.setName(faker.name().name())
.setBirthday(DateFormat.format(faker.date().birthday(18,60)))
.setJob(faker.job().title())
.setAddress(faker.address().fullAddress())
.setCompany(faker.company().name());
}
}

往ES写数据

​ 往ES写数据之前,需要新建索引、定义mapping。根据你的实体类然后定义mapping即可。下面一共有三个类,ESConstant中定义了索引常量字符串和mapping。ESUtil封装了RestHighLevelClient,向外提供了创建索引和添加文档两个方法。WriteLogService模拟业务的服务类,不停产生数据和写日志。

public class ESConstant {
public static final String ES_USER_INDEX_PREFIX = "user"; public static final String MAPPING ="{\n" +
" \"properties\": {\n" +
" \"id\":{\n" +
" \"type\": \"long\"\n" +
" },\n" +
" \"traceId\":{\n" +
" \"type\": \"keyword\"\n" +
" },\n" +
" \"name\":{\n" +
" \"type\": \"text\"\n" +
" , \"analyzer\": \"standard\"\n" +
" },\n" +
" \"birthday\":{\n" +
" \"type\": \"date\"\n" +
" },\n" +
" \"job\":{\n" +
" \"type\": \"text\"\n" +
" , \"analyzer\": \"standard\"\n" +
" },\n" +
" \"address\":{\n" +
" \"type\": \"text\"\n" +
" , \"analyzer\": \"standard\"\n" +
" },\n" +
" \"company\":{\n" +
" \"type\": \"text\"\n" +
" , \"analyzer\": \"standard\"\n" +
" }\n" +
" }\n" +
" }"; }
@Component
public class ESUtil {
@Autowired
RestHighLevelClient restHighLevelClient; public void createIndex(String indexName,String mapping,int shards,int replicas) throws IOException {
CreateIndexRequest createIndexRequest = new CreateIndexRequest(indexName);
//设置索引的配置,1个分片1个副本。由于我们是单机ES,这个配置无关紧要,正式的线上环境记得要配置
HashMap<String,String> indexOption = new HashMap<>();
indexOption.put("index.number_of_shards",String.valueOf(shards));
indexOption.put("index.number_of_replicas",String.valueOf(replicas));
createIndexRequest.settings(indexOption);
//设置索引mapping,即字段的定义
createIndexRequest.mapping(mapping, XContentType.JSON);
CreateIndexResponse createIndexResponse = restHighLevelClient.indices().create(createIndexRequest, RequestOptions.DEFAULT);
} public void addDocument(String document,String indexName) throws IOException {
IndexRequest indexRequest = new IndexRequest(indexName);
indexRequest.source(document,XContentType.JSON);
restHighLevelClient.index(indexRequest, RequestOptions.DEFAULT);
}
}
@Service
@Slf4j
public class WriteLogService implements CommandLineRunner{
@Autowired
RestHighLevelClient restHighLevelClient;
@Autowired
ESUtil esUtil; private static final Gson gson = new GsonBuilder().serializeNulls().create(); @Override
public void run(String... args) {
try {
//运行前检查索引是否存在,不存在就新建一个
if (!restHighLevelClient.indices().exists(new GetIndexRequest(ES_USER_INDEX_PREFIX), RequestOptions.DEFAULT)) {
esUtil.createIndex(ES_USER_INDEX_PREFIX, MAPPING, 1, 1);
}
while (true) {
String user = gson.toJson(GenerateUserUtil.generate());
log.info("generate user:{}", user);
esUtil.addDocument(user, ES_USER_INDEX_PREFIX);
Thread.sleep(1000);
}
}catch (Exception e){
log.error("service had exception:{}", ExceptionUtils.getStackTrace(e));
}
}
}

​ 写入成功之后,就可以去Kibana的index Manager中添加user索引了。

【Elastic-2】SpringBoot整合ELK、SpringBoot写ES的更多相关文章

  1. ELK教程3:logstash的部署、SpringBoot整合ELK+Filebeat

    本篇文章主要讲解如下安装Logstash,logstash依赖于Java环境,首先安装Java,安装脚本如下: yum install java logstash安装 Logstash的安装脚本如下: ...

  2. 【Spring Cloud & Alibaba全栈开源项目实战】:SpringBoot整合ELK实现分布式登录日志收集和统计

    一. 前言 其实早前就想计划出这篇文章,但是最近主要精力在完善微服务.系统权限设计.微信小程序和管理前端的功能,不过好在有群里小伙伴的一起帮忙反馈问题,基础版的功能已经差不多,也在此谢过,希望今后大家 ...

  3. 8、SpringBoot整合之SpringBoot整合MongoDB

    SpringBoot整合MongoDB 一.创建项目,选择依赖 仅选择Spring Web.Spring Data MongoDB即可 二.引入相关依赖(非必要) 这里只是为了实体类的创建方便而引入l ...

  4. 3、SpringBoot整合之SpringBoot整合JDBC

    SpringBoot整合JDBC 一.创建SpringBoot项目 选择Spring Web.JDBC API.MySQL Driver 二.在pom配置文件中修改JDBC版本,导入lombok &l ...

  5. 2、SpringBoot整合之SpringBoot整合servlet

    SpringBoot整合servlet 一.创建SpringBoot项目,仅选择Web模块即可 二.在POM文件中添加依赖 <!-- 添加servlet依赖模块 --> <depen ...

  6. 1、SpringBoot整合之SpringBoot整合JSP

    SpringBoot整合JSP 一.创建SpringBoot项目,仅选择Web模块即可 二.在POM文件中添加依赖 <!-- 添加servlet依赖模块 --> <dependenc ...

  7. 5、SpringBoot整合之SpringBoot整合MybatisPlus

    SpringBoot整合MybatisPlus 目录(可点击直接跳转,但还是建议按照顺序观看,四部分具有一定的关联性): 实现基础的增删改查 实现自动填充功能 实现逻辑删除 实现分页 首先给出四部分完 ...

  8. 9、SpringBoot整合之SpringBoot整合SpringSecurity

    SpringBoot整合SpringSecurity 一.创建项目,选择依赖 选择Spring Web.Thymeleaf即可 二.在pom文件中导入相关依赖 <!-- 导入SpringSecu ...

  9. SpringBoot非官方教程 | 第二十六篇: sprinboot整合elk,搭建实时日志平台

    转载请标明出处: 原文首发于https://www.fangzhipeng.com/springboot/2017/07/11/sprinboot25-elk/ 本文出自方志朋的博客 这篇文章主要介绍 ...

随机推荐

  1. Solon 开发,七、自定义注解开发汇总

    Solon 开发 一.注入或手动获取配置 二.注入或手动获取Bean 三.构建一个Bean的三种方式 四.Bean 扫描的三种方式 五.切面与环绕拦截 六.提取Bean的函数进行定制开发 七.自定义注 ...

  2. 开源数据可视化BI工具SuperSet(使用)

    上一篇介绍了Linux 下如何安装SuperSet ,本篇简单介绍一下如何使用 1.输入安装时设置的用户名密码登录控制台  2.控制界面如下  3.第一步添加数据源(已安装好的mysql) 点击 da ...

  3. Abp vnext EFCore 实现动态上下文DbSet踩坑记

    背景 我们在用EFCore框架操作数据库的时候,我们会遇到在 xxDbContext 中要写大量的上下文 DbSet<>; 那我们表少还可以接受,表多的时候每张表都要写一个DbSet, 大 ...

  4. 谷歌浏览器和火狐浏览器如何查看HTTP协议

    谷歌浏览器和火狐浏览器如何查看HTTP协议 谷歌浏览器查看HTTP协议 火狐浏览器查看HTTP协议

  5. 人口信息普查系统-JavaWeb-二

    上次发表了人口普查系统的题目要求,今天和大家分享一下我的技术方案. 技术上用到的是html+jsp+JavaBean+servlet+JavaScript 其实现在的前端页面主流还是html,它可以实 ...

  6. Atcoder ARC-063

    ARC063(2020.7.16) A \(A\) 题如果洛谷评分很低就不看了. B 可以发现一定是选择在一个地方全部买完然后在之后的一个地方全部卖完,那么我们就只需要即一个后缀最大值就可以计算答案了 ...

  7. SP5971 LCMSUM - LCM Sum

    一个基于观察不依赖于反演的做法. 首先 \(\rm lcm\) 是不好算的,转化为计算 \(\rm gcd\) 的问题,求: \[\sum\limits_{i = 1} ^ n \frac{in}{\ ...

  8. Nacos极简教程

    简介 Nacos是服务发现与注册,服务配置中心. Nacos 具有如下特性: 服务发现和服务健康监测:支持基于DNS和基于RPC的服务发现,支持对服务的实时的健康检查,阻止向不健康的主机或服务实例发送 ...

  9. 详解git fetch与git pull的区别(实操)

    感谢原文作者:R-H-R 原文链接:https://blog.csdn.net/riddle1981/article/details/74938111 git fetch和git pull都可以将远端 ...

  10. IDEA:修改JAVA文件自动引入import.*包

    感谢大佬:https://blog.csdn.net/fly910905/article/details/90208744 问题描述 Intellij Idea工具在java文件中,经常会自动导入im ...