ELK的日志解决方案

本文介绍了ELK(Elasticsearch,Logstash,Kibana)日志解决方案,包括各组件的功能、Elasticsearch的安装步骤、配置和分词器自定义,以及如何在Springboot项目中整合ES进行数据存储和查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ELK的日志解决方案

什么是ELK

在这里插入图片描述

  1. Elasticsearch(ES):是一个分布式搜索和分析引擎,用于实时搜索、分析和存储大量数据。它能够处理大规模的数据,并提供强大的搜索功能。
  2. Logstash:是一个用于数据收集、转换和传输的工具。它能够从不同的来源收集日志和事件数据,然后对这些数据进行处理和转换,最终发送到Elasticsearch等目标存储。
  3. Kibana:是一个用于数据可视化的工具,可以与Elasticsearch集成,提供强大的图形化界面,用于实时分析和查询数据。Kibana使用户能够创建各种图表、仪表板和报表,以更好地理解数据。

​ ELK被广泛用于日志分析、实时监控、安全事件检测等场景。它提供了一个强大的工具集,可以帮助组织更好地理解其数据,做出更明智的决策。ELK的组件也可以独立使用,根据需要进行定制和配置.

Elasticsearch安装

1.拉取镜像(手动指定版本,避免冲突)

docker pull logstash:7.17.7

2.配置文件

  • 第一步:在 Linux 上创建三个数据挂载目录

在这里插入图片描述

  • 第二步:在conf目录下创建elasticsearch.yml文件,并通过chmod 777 elasticsearch.yml修改权限。

  • 第三步: 配置elasticsearch.yml文件
    在这里插入图片描述

http:
  host: 0.0.0.0
  cors:
    enabled: true
    allow-origin: "*"
xpack:
  security:
    enabled: false
  • **第四步:**修改linux的vm.max_map_count
    在这里插入图片描述
[root@localhost conf]#  sysctl -w vm.max_map_count=262144
vm.max_map_count = 262144
[root@localhost conf]#  sysctl -a|grep vm.max_map_count
sysctl: reading key "net.ipv6.conf.all.stable_secret"
sysctl: reading key "net.ipv6.conf.br-77cea35f59fa.stable_secret"
sysctl: reading key "net.ipv6.conf.default.stable_secret"
sysctl: reading key "net.ipv6.conf.docker0.stable_secret"
sysctl: reading key "net.ipv6.conf.enp4s0.stable_secret"
sysctl: reading key "net.ipv6.conf.lo.stable_secret"
sysctl: reading key "net.ipv6.conf.veth15fadfa.stable_secret"
sysctl: reading key "net.ipv6.conf.virbr0.stable_secret"
sysctl: reading key "net.ipv6.conf.virbr0-nic.stable_secret"
vm.max_map_count = 262144

3.创建运行


docker run  -itd \
--name es \
--privileged \
--network wn_docker_net \
--ip 172.18.12.70 \
-p 9200:9200 \
-p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms4g -Xmx4g" \
-v /usr/local/software/elk/elasticsearch/conf/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /usr/local/software/elk/elasticsearch/data:/usr/share/elasticsearch/data \
-v /usr/local/software/elk/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
elasticsearch:7.17.7

4.ES的分词器

  • 下载分词器压缩包并上传到linux(注意版本)

    在这里插入图片描述

  • 进入容器
    在这里插入图片描述

在这里插入图片描述

  • 重启容器
docker restart  es

5.自定义分词器

​ 进入容器的ik/config文件
在这里插入图片描述
在这里插入图片描述

​ 查看配置文件IKAnalyzer.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
        <comment>IK Analyzer 扩展配置</comment>
        <!--用户可以在这里配置自己的扩展字典 -->
        <entry key="ext_dict"></entry>
         <!--用户可以在这里配置自己的扩展停止词字典-->
        <entry key="ext_stopwords"></entry>
        <!--用户可以在这里配置远程扩展字典 -->
        <!-- <entry key="remote_ext_dict">words_location</entry> -->
        <!--用户可以在这里配置远程扩展停止词字典-->
        <!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>

创建一个自己的分词文件ext_dict.dic

蜗牛学苑
测试
网络
安全

编辑配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
        <comment>IK Analyzer 扩展配置</comment>
        <!--用户可以在这里配置自己的扩展字典 -->
        <entry key="ext_dict">ext_dict_my.dic</entry>
         <!--用户可以在这里配置自己的扩展停止词字典-->
        <entry key="ext_stopwords"></entry>
        <!--用户可以在这里配置远程扩展字典 -->
        <!-- <entry key="remote_ext_dict">words_location</entry> -->
        <!--用户可以在这里配置远程扩展停止词字典-->
        <!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>

重启容器并测试

KIbana

  • 安装kibana
docker pull kibana:7.17.7
  • 创建容器并运行
docker run -it \
--name kibana \
--privileged \
--network wn_docker_net \
--ip 172.18.12.71 \
-e "ELASTICSEARCH_HOSTS=http://192.168.163.129:9200" \
-p 5601:5601 \
-d kibana:7.17.7

Springboot整合ES

从数据库读取资源,将其放入ES中,进行查询

ES实体类

package com.wnhz.scc.domain.doc;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;
import java.math.BigDecimal;
import java.util.Date;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Document(indexName = "book_index",createIndex = true)
public class BookDoc {
    @Id
    @Field(type = FieldType.Long)
    private Long id;
    @Field(type = FieldType.Text)
    private String title;
    private String isbn;
    @Field(type = FieldType.Text)
    private String introduction;
    @Field(type = FieldType.Keyword)
    private String author;
    @Field(type = FieldType.Double)
    private BigDecimal price;
    @Field(type = FieldType.Date)
    private Date createTime;
}

dao

@Repository
public interface IBookDocDao extends ElasticsearchRepository<BookDoc,String> {
}

service

package com.wnhz.ssc.query.service.impl;
import com.wnhz.scc.domain.doc.BookDoc;
import com.wnhz.scc.domain.entity.Book;
import com.wnhz.ssc.query.dao.IBookDocDao;
import com.wnhz.ssc.query.service.IBookDocService;
import com.wnhz.ssc.query.service.IBookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class BookDocServiceImpl implements IBookDocService {
    @Autowired
    private IBookDocDao bookDocDao;
    @Autowired
    private IBookService ibs;
    @Override
    public void loadFromDb() {
        List<Book> books = ibs.findAll();
        books.forEach(book->{
            BookDoc bookDoc = new BookDoc();
            bookDoc.setAuthor(book.getAuthor());
            bookDoc.setId(book.getId());
            bookDoc.setTitle(book.getTitle());
            bookDoc.setIntroduction(book.getIntroduction());
            bookDoc.setIsbn(book.getIsbn());
            bookDoc.setCreateTime(book.getCreateTime());
            bookDocDao.save(bookDoc);
        });
        System.out.println("数据导入ES成功....");
    }
}

测试

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@RunWith(SpringRunner.class)
public class BookDocServiceImplTest {
    @Autowired
    private IBookDocService ibds;
    @Test
    public void loadFromDb() {
        ibds.loadFromDb();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值