当前位置: 首页> 健康> 母婴 > 淄博刚刚发布紧急通知_宣传片制作企业_厦门网站seo外包_做网站的公司有哪些

淄博刚刚发布紧急通知_宣传片制作企业_厦门网站seo外包_做网站的公司有哪些

时间:2025/7/9 1:40:41来源:https://blog.csdn.net/weixin_44490884/article/details/142973465 浏览次数:0次
淄博刚刚发布紧急通知_宣传片制作企业_厦门网站seo外包_做网站的公司有哪些

Elasticsearch学习文档

Elastic 中文社区:https://elasticstack.blog.csdn.net/?type=blog

Elasticsearch版本:7.14.0

文档更新日期:2024年10月15日

1.1 相关术语

全文搜索引擎

全文搜索引擎是目前广泛应用的主流搜索引擎,工作原理是计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。这个过程类似于通过字典中的检索字表查字的过程。

倒排索引

1)正排索引:文档 →单词
2)倒排索引:倒排索引是实现“单词→文档矩阵”的一种具体存储形式,通过倒排索引,可以根据单词快速获取包含这个单词的文档列表。

首先对文档集合中的文档根据分词器(比如IK分词器)进行分词,并且去掉停用词,然后对关键词建立倒排列表,倒排列表记载了出现过某个单词的所有文档的文档列表及单词在该文档中出现的位置信息,根据倒排列表,即可获知哪些文档包含某个单词。
在这里插入图片描述
例如,要查询“搜索引擎”这个关键词在哪些文档中出现过。 首先通过倒排索引可以查询到该关键词出现的文档位置是在 1 和 3 中;然后再通过正排索引查询到文档 1和 3 的内容并返回结果。

1.2 介绍

The Elastic Stack, 包括 ElasticsearchKibanaBeatsLogstash(也称为 ELK Stack)。能够安全可靠地获取任何来源、任何格式的数据,然后实时地对数据进行搜索、分析和可视化。Elaticsearch,简称为 ES,由 Elastic 公司创建,是一个开源的高扩展的分布式全文搜索引擎,底层基于开源的搜索引擎库 Lucene,适用于所有类型的数据,包括文本、数字、地理空间、结构化和非结构化数据,是整个 Elastic Stack 技术栈的核心。它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理 PB 级别的数据。

Lucene 是一个搜索引擎工具包,用 Java 编写,主要用来构建倒排索引(一种数据结构)和对这些索引进行检索,从而实现全文检索功能。

缺点:仅仅是一个基础类库,没有考虑到高并发和分布式的场景。

目前市面上流行的搜索引擎软件,主流:ElasticsearchSolr,这两款都是基于 Lucene 搭建的,可以独立部署启动的搜索引擎服务软件。

ELK Stack

Beats用于日志收集,然后将数据传给 Logstash,通过 Logstash 强大的数据清洗功能,最终把数据写入到 Elasticsearch 中,并由 Kibana 进行可视化。

(1)Elasticsearch :负责数据存储,并快速地搜索及分析数据。

(2)Logstash :一个开源的日志处理工具,负责数据的采集、处理,基于灵活的 Pipeline 管道架构来处理数据,支持多种输入数据源和多种输出数据源。

(3)Kibana:负责数据展示,分析,管理,监督,警报及方案

(4)Beats:轻量级的数据收集端,集合了多种单一用途数据采集器,从成百上千或成千上万台机器和系统向 Logstash 或 Elasticsearch 发送数据。

Filebeat 用于日志传送,Packetbeat 用于网络数据传送, Metricbeat 用于系统和应用程序指标监视。

1.3 基本概念

一个 cluster集群由一个或多个 nodes 节点组成,在每个 node 里,包含一个或更多的 shards分片,这些 shards 可以是 primary shard(主分片),也可以是 replica shard(副本分片),每个 shard 里包含一个 index 的全部或部分数据,一个 index 由一个或多个 shard 组成。每个 index 包含无数的 documents,每个 document由相同属性的 JSON 文档组成。
在这里插入图片描述

1.3.1 Cluster

Cluster ,集群,Elasticsearch 集群由一个或多个节点组成,可通过集群名称进行标识。通常Cluster是可以在 Elasticsearch 里的配置文件中设置的。

默认情况下,会生成一个叫做 “elasticsearch” 的集群,可以在 config/elasticsearch.yml 里修改集群的名称:
在这里插入图片描述

GET _cluster/health 获取整个 cluster 的状态。

{"cluster_name": "elasticsearch","status": "yellow","timed_out": false,"number_of_nodes": 1,"number_of_data_nodes": 1,"active_primary_shards": 2,"active_shards": 2,"relocating_shards": 0,"initializing_shards": 0,"unassigned_shards": 4,"delayed_unassigned_shards": 0,"number_of_pending_tasks": 0,"number_of_in_flight_fetch": 0,"task_max_waiting_in_queue_millis": 0,"active_shards_percent_as_number": 33.3333333333333
}

响应信息中最重要的字段是 status 。状态可能是下列三个值之一:

  • green

    所有的主分片和副本分片都已分配。你的集群是 100% 可用的。

  • yellow

    所有的主分片已经分片了,但至少还有一个副本是缺失的。不会有数据丢失,所以搜索结果依然是完整的。不过,高可用性在某种程度上被弱化。如果 更多的 分片消失,你就会丢数据了。把 yellow 想象成一个需要及时调查的警告。

  • red

    至少一个主分片(以及它的全部副本)都在缺失中。这意味着缺少数据:搜索只能返回部分数据,而分配到这个分片上的写入请求会返回一个异常。

1.3.2 node

单个 Elasticsearch 实例。 在大多数环境中,每个节点都在单独的服务器或虚拟机上运行。

一个集群由一个或多个 node 组成,在测试的环境中,可以把多个 node 运行在一个 server 上。在实际的部署中,大多数情况下一个 server 运行一个 node。

1.3.3 index

在 Elasticsearch 中,索引是文档的集合。

1.3.4 shard

比如,一个具有 10 亿文档的索引占据 1 TB 的磁盘空间,而任一节点都没有这样大的磁盘空间;或者单个节点处理搜索请求,响应太慢。

为了解决这个问题,Elasticsearch 提供了将索引划分成多份的能力,这些份就叫做分片(shard)。有两种类型的分片:primary shard 和 replica shard。

1)Primary shard: 每个文档都存储在一个 primary shard。

2)Replica shard: 每个主分片可以具有零个或多个副本。 replica 是主分片的副本。replica 只能是只读的,不可以进行写入操作。

1.3.5 Document

Elasticsearch 是面向文档的,这意味着索引或搜索的最小数据单元是文档。文档通常是数据的 JSON表示形式。

1.3.6 SQL VS Elasticsearch

SQLElasticsearch
row(行)document(文档)
table(表)index(索引)
database(数据库)cluster集群实例

1.4 ES下载与安装

ES下载地址:https://www.elastic.co/cn/downloads/past-releases#elasticsearch

windows环境:

解压后,进入 bin 文件目录,双击 elasticsearch.bat 文件,启动 ES 服务
在这里插入图片描述

NOTE:9300端口为Elasticsearch集群间组件的通信端口,9200端口为浏览器访问的http协议RESTful端口。

检查 Elasticsearch 是否已运行,浏览器输入:http://localhost:9200

{"name" : "CodePrince","cluster_name" : "elasticsearch","cluster_uuid" : "6DyvUh-SSkaeGquP_sJRFg","version" : {"number" : "7.14.0","build_flavor" : "default","build_type" : "zip","build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f","build_date" : "2020-03-26T06:34:37.794943Z","build_snapshot" : false,"lucene_version" : "8.4.0","minimum_wire_compatibility_version" : "6.8.0","minimum_index_compatibility_version" : "6.0.0-beta1"},"tagline" : "You Know, for Search"
}

TIPS: Ctrl+C 停止运行

如何选择elasticsearch自带的JDK?

添加系统变量ES_HOME,修改elasticsearch bin目录下的elasticsearch-env,配置ES_JAVA_HOME这个变量,指向es安装包自带的jdk目录

在这里插入图片描述

1.5 SpringBoot集成ElasticSearch

官方文档:https://docs.spring.io/spring-data/elasticsearch/docs/4.4.5/reference/html/

Spring Data Release TrainSpring Data ElasticsearchElasticsearchSpring FrameworkSpring Boot
2021.2 (Raj)4.4.x7.17.95.3.x2.7.x
2021.1 (Q)4.3.x7.15.25.3.x2.6.x
2021.0 (Pascal)4.2.x[1]7.12.05.3.x2.5.x
2020.0 (Ockham)[1]4.1.x[1]7.9.35.3.22.4.x
Neumann[1]4.0.x[1]7.6.25.2.122.3.x
Moore[1]3.2.x[1]6.8.125.2.122.2.x
Lovelace[1]3.1.x[1]6.2.25.1.192.1.x
Kay[1]3.0.x[1]5.5.05.0.132.0.x
Ingalls[1]2.1.x[1]2.4.04.3.251.5.x

NOTE:Elasticsearch、Spring Data Elasticsearch、Spring Framework、SpringBoot版本需对应

引入依赖

前提:Elasticsearch 7.14.0、springboot 2.7.5

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

SpringBoot项目操作Elasticsearch的方式:

方式一:ElasticsearchRepository<T, ID> T实体,ID文档id类型

方式二:ElasticsearchOperations和ElasticsearchRestTemplate

补充:

  • IndexOperations 定义了索引级的操作,如创建或删除索引
  • DocumentOperations 定义基于实体id存储、更新和检索实体的操作
  • SearchOperations 定义使用查询搜索多个实体的操作
  • ElasticsearchOperations 组合了 DocumentOperations 和 SearchOperations 接口。
  • ElasticsearchRestTemplate 是使用 High Level REST Client的 ElasticsearchOperations 接口的实现。

方式三:RestHighLevelClient 过时

添加配置

两种方式:配置类或配置文件,示例:在application.yml添加配置

配置项参考ElasticsearchProperties

spring:elasticsearch:uris: 127.0.0.1:9200

核心类库

QueryBuilders

查询构建器(org.elasticsearch.index.query.QueryBuilders),是构建复杂查询的强大工具集。

matchAllQuery

• 功能:匹配所有文档的查询。

• 示例:QueryBuilders.matchAllQuery()

matchQuery

• 功能:基于字段的全文本匹配查询。

• 参数:字段名,查询关键词。

• 示例:QueryBuilders.matchQuery(“title”, “elasticsearch”)

commonTermsQuery

• 功能:处理常用词的优化查询,平衡准确性和性能。

• 参数:字段名,查询文本,低频词阈值等。

• 示例:QueryBuilders.commonTermsQuery(“content”, “elasticsearch basics”)

multiMatchQuery

• 功能:在多个字段上执行匹配查询。

• 参数:查询文本,涉及的字段列表,查询类型等。

• 示例:QueryBuilders.multiMatchQuery(“elasticsearch”, “title”, “content”).type(MultiMatchQueryBuilder.Type.BEST_FIELDS)

termQuery, termsQuery

  • 功能:精确匹配单个或多个指定值。
  • QueryBuilders.termQuery(name,value)
  • QueryBuilders.termsQuery(name,values)

fuzzyQuery, prefixQuery, wildcardQuery, regexpQuery

  • 功能:模糊匹配、前缀匹配、通配符匹配、正则表达式匹配。

queryStringQuery, simpleQueryStringQuery

  • 功能:基于Lucene查询语法的查询,后者更用户友好。

boostingQuery, boolQuery

  • 功能:提升查询(提升某些查询结果的权重)和布尔查询(组合多个查询条件)。

补充:

matchBoolPrefixQuery,布尔前缀匹配

matchPhraseQuery, 短语匹配

matchPhrasePrefixQuery,短语前缀匹配

disMaxQuery,,最佳匹配查询

combinedFieldsQuery,组合字段查询

distanceFeatureQuery,距离特征查询

快速入门

Elasticsearch Object Mapping

MappingElasticsearchConverter,定义了元数据驱动对象到文档的映射。

@Document :类级注解,表示该类是映射到数据库的候选类

  • indexName 存储该实体的索引名
  • createIndex 标记是否在库启动时创建索引。 默认值为true
  • versionType 版本管理配置。 默认值为EXTERNAL

@Id :应用于字段级别,文档ID,唯一标识

@Transient :默认情况下,当存储或检索文档时,所有字段都映射到文档,此注解排除该字段。

@Field :应用于字段级别,定义字段的属性

  • name :字段的名称,如果没有设置,则使用Java字段名。

  • type :字段类型,可以是Text, Keyword, Long, Integer… 如果未指定字段类型,则默认为 FieldType.Auto 。

  • format :一个或多个内置日期格式,

  • pattern :一个或多个自定义日期格式

    pattern 属性可用于添加额外的自定义格式字符串。 如果只想使用自定义日期格式,必须将 format 属性设置为空 {} 。

  • store :表示是否将原始字段值存储在Elasticsearch中,默认值为false。

  • analyzersearchAnalyzernormalizer 指定分析器和规范化器。

示例代码

@Document(indexName = "es_index")
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class ESEntity {/*必须有 id,这里的 id 是全局唯一的标识,等同于 es 中的"_id"*/@Idprivate Long id;@Field(name = "job_no")private String jobNo;@Field(name = "name")private String name;@Field(name = "english_name")private String englishName;private String job;private Integer sex;private Integer age;private BigDecimal salary;@Field(name = "job_day",type=FieldType.Date,format={}, pattern="yyyy-MM-dd HH:mm:ss")private Date jobDay;/*需要安装IK分词器,否则会报错*/@Field(name="remark",type = FieldType.Text,analyzer = "ik_smart",searchAnalyzer = "ik_smart")private String remark;
}
analyzer分词器

Elasticsearch内置的分词器standard 对中文不友好,只会一个字一个字的分,无法形成词语。

IK中文分词器

安装与ES相同版本的IK分词器:https://github.com/medcl/elasticsearch-analysis-ik/releases
在这里插入图片描述

IK分词器内置了两个子分析器,即ik_smart 和 ik_max_word

  • ik_smart:切分粒度比较粗
  • ik_max_word: 切分粒度比较细,穷举了所有可能的组合

以"我爱北京天安门"为例,测试POST请求:http://localhost:9200/_analyze

{"analyzer": "ik_smart","text": "我爱北京天安门"
}

ik_smart分词结果:我 爱 北京 天安门

ik_max_word分词结果:我 爱 北京 天安门 天安 门

字典配置

对于IK分词器不认识的词,其不能合理切分,所以有时需要手动添加一些词典。 例如:一些网络热词,ik分词器并不能很好的切分。

配置文件 IKAnalyzer.cfg.xml 位于 plugins/analysis-ik/config/IKAnalyzer.cfg.xml

IK分词器提供了两种自定义词典方式 本地+远程

在这里插入图片描述

NOTE:

(1) location 为URL,如 http://yoursite.com/getCustomDict

(2)自定义字典的文本格式为UTF8编码,字典文件后缀.dic

HanLP 中文分词器

参考文档地址:https://github.com/KennFalcon/elasticsearch-analysis-hanlp

下载与安装地址:https://github.com/KennFalcon/elasticsearch-analysis-hanlp/releases

分词方式

  • hanlp: hanlp默认分词

  • hanlp_standard: 标准分词

  • hanlp_index: 索引分词

  • hanlp_nlp: NLP分词

  • hanlp_n_short: N-最短路分词

  • hanlp_dijkstra: 最短路分词

  • hanlp_crf: CRF分词(已有最新方式)

  • hanlp_speed: 极速词典分词

Elasticsearch Repositories

根据方法名创建查询

/**
* Repository<T, ID> :T为实体类,ID为id类型
* ElasticsearchRepository<T,Long>
*/
interface BookRepository extends Repository<Book, String> {List<Book> findByNameAndPrice(String name, Integer price);
}

上面的方法名将被转换为下面的Elasticsearch json查询

{"query": {"bool" : {"must" : [{ "query_string" : { "query" : "?", "fields" : [ "name" ] } },{ "query_string" : { "query" : "?", "fields" : [ "price" ] } }]}}
}

Elasticsearch支持的关键字列表如下所示。

Keyword 关键字Sample 样本Elasticsearch Query StringElasticsearch查询字符串
AndfindByNameAndPrice{ "query" : { "bool" : { "must" : [ { "query_string" : { "query" : "?", "fields" : [ "name" ] } }, { "query_string" : { "query" : "?", "fields" : [ "price" ] } } ] } }}
OrfindByNameOrPrice{ "query" : { "bool" : { "should" : [ { "query_string" : { "query" : "?", "fields" : [ "name" ] } }, { "query_string" : { "query" : "?", "fields" : [ "price" ] } } ] } }}
IsfindByName{ "query" : { "bool" : { "must" : [ { "query_string" : { "query" : "?", "fields" : [ "name" ] } } ] } }}
NotfindByNameNot{ "query" : { "bool" : { "must_not" : [ { "query_string" : { "query" : "?", "fields" : [ "name" ] } } ] } }}
BetweenfindByPriceBetween{ "query" : { "bool" : { "must" : [ {"range" : {"price" : {"from" : ?, "to" : ?, "include_lower" : true, "include_upper" : true } } } ] } }}

可以定义为具有以下返回值类型,

List

Stream

SearchHits

List<SearchHit>

Stream<SearchHit>

SearchPage

NOTE:

(1)也可以使用 @Query 注解在方法上声明查询

(2)@Highlight 注解标注在方法上,定义返回值结果中高亮显示哪些字段。

Elasticsearch Operations

Spring Data Elasticsearch定义以下接口,用来操作和管理elasticsearch文档、索引、查询等

(1)IndexOperations 定义了索引操作,如创建或删除索引。

(2)DocumentOperations 定义了文档操作。检索文档时,将只返回找到的实体。

(3)SearchOperations 定义了查询操作,搜索时,每个实体可以获得额外的信息。

(4)ElasticsearchOperations 组合了 DocumentOperationsSearchOperations 接口。

ElasticsearchRestTemplate

ElasticsearchRestTemplate ,基于High Level REST Client,实现了 ElasticsearchOperations接口

Search Result Types 搜索结果类型

(1)当使用 DocumentOperations 接口的方法检索文档时,只返回找到的实体。

(2)当使用 SearchOperations 接口的方法检索文档时,每个实体都可以获得额外的信息,例如找到的实体的分数或sortValues。

NOTE:为了返回这些信息,每个实体都被包装在一个 SearchHit 对象中,该对象包含这些特定于实体的附加信息。 这些 SearchHit 对象本身在 SearchHits 对象中返回,该对象还包含有关整个搜索的信息,如maxScore或请求的聚合。

SearchHit

包含以下信息:

Id、Score 分数、Sort Values 排序值、Highlight fields 突出显示字段、The retrieved entity of type 检索实体…

SearchHits

包括以下信息:

Number of total hits 总命中数、Total hits relation 总命中数关系、Maximum score 最高分数、SearchHit 对象的列表

Queries查询

SearchOperationsReactiveSearchOperations 接口中定义的方法都接受一个 Query 形参,该形参定义了要执行的查询以进行搜索。

Query 是一个接口,Spring Data Elasticsearch提供了三种实现: CriteriaQueryStringQueryNativeSearchQuery

CriteriaQuery

基于CriteriaQuery 的查询允许创建查询来搜索数据,而不需要知道Elasticsearch查询的语法或基础知识。

支持链式和组合 Criteria 对象来构建查询,这些对象指定了搜索文档必须满足的标准。

示例代码:

Criteria criteria = new Criteria("age").between(20,30).and("job").is("前端开发");
CriteriaQuery query = new CriteriaQuery(criteria);
StringQuery

StringQuery接受一个Elasticsearch查询作为JSON字符串。

示例代码

Query query = new SearchQuery("{ \"match\": { \"firstname\": { \"query\": \"Jack\" } } } ");
NativeSearchQuery

NativeSearchQuery支持构建一个复杂的查询,或者一个不能通过 Criteria API来表达的查询时使用的类,例如在构建查询和使用聚合时。 它允许使用来自Elasticsearch库的所有不同的 QueryBuilder 实现,因此被称为“native”。

示例代码如下

NativeSearchQuery query = new NativeSearchQueryBuilder().withQuery(QueryBuilders.multiMatchQuery(keywords, "name", "remark"))//.withQuery(QueryBuilders.termsQuery("name","李","王")).withPageable(PageRequest.of(0, 5)).withSorts(SortBuilders.scoreSort().order(SortOrder.DESC)).withHighlightFields(new HighlightBuilder.Field("name").preTags("<span style='color:red'>").postTags("</span>"),new HighlightBuilder.Field("remark").preTags("<span style='color:red'>").postTags("</span>")).build();

综合案例

需求:使用elasticsearchRestTemplate实现高亮查询,同时重组返回值数据

@Autowired
private ElasticsearchRestTemplate elasticsearchRestTemplate;@Test
public void testHighlightQuery(){String keywords = "李";NativeSearchQuery query = new NativeSearchQueryBuilder().withQuery(QueryBuilders.multiMatchQuery(keywords, "name", "remark"))//.withQuery(QueryBuilders.termsQuery("name","李","王")).withPageable(PageRequest.of(0, 5)).withSorts(SortBuilders.scoreSort().order(SortOrder.DESC)).withHighlightFields(new HighlightBuilder.Field("name").preTags("<span style='color:red'>").postTags("</span>"),new HighlightBuilder.Field("remark").preTags("<span style='color:red'>").postTags("</span>")).build();SearchHits<ESEntity> searchHits = elasticsearchRestTemplate.search(query, ESEntity.class);List<ESEntity> list = new ArrayList<>();if(!searchHits.isEmpty()){for (SearchHit<ESEntity> searchHit : searchHits) {ESEntity curContent = searchHit.getContent();Map<String, List<String>> highlightFields = searchHit.getHighlightFields();Set<String> keySet = highlightFields.keySet();if(keySet.size()>0){for(String key:keySet){String temp = highlightFields.get(key).toString().substring(1,highlightFields.get(key).toString().length()-1);switch (key) {case "name":curContent.setName(temp);break;case "remark":curContent.setRemark(temp);break;default:break;}}list.add(curContent);}}}list.forEach(System.out::println);
}

前端如何解析高亮字段?

NOTE:vue可使用v-html属性来解析高亮字段文本

1.6 ELK

需求:通过ELK 技术栈搭建可视化的日志分析平台

下载与安装

下载与安装统一版本7.14.0的ElasticsearchKibanaLogstash

下载地址:https://www.elastic.co/cn/downloads/past-releases

启动顺序:首先启动Elasticsearch:9200 ,然后启动Logstash: ,最后启动Kibana:5601

NOTE:启动logstash时,进入logstash/bin,cmd执行:.\logstash.bat -f …/config/logstash.conf

工作流程

在这里插入图片描述
(1)在所有需要收集日志的服务器上部署Logstash,或者先将日志进行集中化管理在日志服务器上,在日志服务器上部署Logstash。

(2)Logstash收集日志,将日志格式化并输出到ES集群中。

(3)ES对格式化后的数据进行索引和存储。

(4)Kibana从ES群集中查询数据生成图表,并进行前端数据的显示。

Logstash

简介

Logstash 是一个数据流引擎,可以摄入日志,文件,指标或者网路真实数据。经过 Logstash 的处理,变为可以使用的 Web Apps 可以消耗的数据,也可以存储于数据中心,或变为其它的流式数据。

数据源包括: Beats、云厂商的服务、消息队列、数据库、IOT设备…

以日志数据为例,原始的 Log 数据,经过 Logstash 的处理,可以把非结构化的数据变成结构化的数据,还可以使用 Filter 来对数据继续加工,如下图所示:
在这里插入图片描述

核心组件

在这里插入图片描述
Logstash 实例是一个正在运行的 Logstash 进程。建议在 Elasticsearch 的单独主机上运行 Logstash,确保两个组件有足够的计算资源可用。

管道(pipeline)是配置为处理给定工作负载的插件集合。一个 Logstash 实例可以运行多个管道(彼此独立)

Logstash 管道有两个必需元素,输入(inputs)和输出(ouputs),以及一个可选元素 filters。

进入到 Logstash 安装目录,并修改 config/logstash.yml 文件,将 config.reload.automatic 设置为 true。

NOTE:每次修改完配置文件后,不需要都退出Logstash,然后再重新运行。Logstash 会自动侦测到最新的配置文件的变化。

输入inputs

输入插件input用于从给定的源系统中提取或接收数据。

Logstash支持的输入插件列表:https://www.elastic.co/guide/en/logstash/current/input-plugins.html

所有输入插件都支持以下配置选项:

(1)codec:用于输入数据的编解码器,取值类型codec,默认值为 "line"

(2)id:输入input唯一标识,字符串类型,如果没有指定ID, Logstash将生成一个。 强烈建议在配置中设置此ID。

(3)type:类型主要用于激活过滤器,字符串类型,type存储为事件本身的一部分,在Kibana中可以搜索到。

(4)add_field:向事件添加字段,hash类型,默认值为{}

TCP配置项

通过TCP套接字读取事件,可以接受来自客户端的连接或连接到服务器, 取决于 mode 。

配置项参考文档:https://www.elastic.co/guide/en/logstash/current/plugins-inputs-tcp.html

常用配置项

(1)host:数据类型为字符串,默认值为0.0.0.0;mode为 server 时,监听的地址。 当mode为 client 时,表示连接的地址。可选

(2)mode:模式,默认值为 "server" ,可选值:server、client

(3)port:端口,number类型,必选

Beats配置项

Beats输入插件可以使Logstash从Beats框架下接收事件

配置项参考文档:https://www.elastic.co/guide/en/logstash/current/plugins-inputs-beats.html

常用配置项

(1)host:要监听的IP地址,数据类型为字符串,默认值为0.0.0.0

(2)port:要侦听的端口,number类型,必选

File配置项

从文件中流式处理事件

配置项参考文档:https://www.elastic.co/guide/en/logstash/current/plugins-inputs-file.html

常用配置项

(1)mode:模式,取值可以是 tail 或 read,默认值为 tail

(2)path:文件路径,数组类型,必选,绝对路径

(3)start_position:开始位置,值可以是: beginning , end ,默认是end

(4)stat_interval:取值类型为number或string_duration,默认值为 "1 second"

过滤器filters

过滤器filter用于对传入事件进行数据转换和丰富。

Logstash支持的过滤器插件列表:https://www.elastic.co/guide/en/logstash/current/filter-plugins.html

(1)grok,通过正则表达式进行匹配,并将输入的非结构化的数据变为一个结构化的数据。

(2)geoip,会对数据进行丰富,通过请求的 IP 地址,解析IP 是从哪个地方来的,具体是哪个国家,哪个地理位置。

(3)mutate,数据类型转换

(4)date,Logstash 将事件时间存储在 @timestamp 字段中,文本类型,date 过滤器将此字段转换为日期类型

配置示例:

filter {grok {match => { "message" => "%{xxx}" }}geoip {source => "clientip"}mutate {convert => {"bytes" => "integer"}}date {match => ["timestamp", "dd/MMM/yyyy:HH:mm:ss Z"]}
}
输出outputs

输出插件output,用于将数据加载或发送到给定的目标系统

Logstash支持的输出插件列表:https://www.elastic.co/guide/en/logstash/current/output-plugins.html

stdout

stdout,输出到 Logstash 运行的 console,项目上线时,禁止使用

elasticsearch

elasticsearch,数据输出到 Elasticsearch

elasticsearch配置项参考文档:https://www.elastic.co/guide/en/logstash/current/plugins-outputs-elasticsearch.html

常用配置项

(1)hosts:设置远程实例的主机,数组类型

(2)index:索引,字符串类型,将数据写入目标索引

编解码器codec

编解码器插件codec,用于更改事件的数据表示,用于input、output、filter,主要包括:

(1)line :使用 “message” 中的数据将每行转换为 Logstash 事件。 也可以将输出格式化为自定义行 。

(2)multiline: 允许你为 “message” 构成任意边界。 经常用于stacktraces 等。也可以在 filebeat 中完成。

(3)json_lines: 解析换行符分隔的 JSON 数据

(4)json: 解析所有 JSON。 仅适用于面向消息的输入/输出

(5)rubydebug:用于调试

编解码器参考文档:https://www.elastic.co/guide/en/logstash/current/codec-plugins.html

Logstash配置示例

以TCP为例,Logstash配置实例如下,

input{tcp{port =>9601mode => "server"host => "localhost"codec => json_lines}
}output{elasticsearch{hosts => ["http://localhost:9200"]index => "elk-log-%{+YYYY.MM.dd}"}stdout{codec => rubydebug}
}

创建项目

需求:创建Springboot项目,用于生产日志文件及日志信息

添加依赖
<dependency><groupId>net.logstash.logback</groupId><artifactId>logstash-logback-encoder</artifactId><version>5.3</version>
</dependency>
配置日志

在resources文件夹下添加 logback.xml,配置如下

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false"><!-- 日志存放路径 --><property name="log.path" value="logs" /><!--日志输出格式:%d:表示日期,%thread:表示线程名,%-5level:级别从左显示5个字符宽度,%logger{20}:logger名字最长20个字符,%method:方法名,%line:日志打印行数,%msg:日志消息,%n:换行符--><property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" /><!-- 控制台输出 --><appender name="console" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>${log.pattern}</pattern></encoder></appender><!-- 系统日志输出 --><appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${log.path}/info.log</file><!-- 循环政策:基于时间创建日志文件 --><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!-- 每天日志归档文件路径 --><fileNamePattern>${log.path}/info-%d{yyyy-MM-dd}.log</fileNamePattern><!-- 日志最大的历史 60天 --><maxHistory>60</maxHistory></rollingPolicy><encoder><pattern>${log.pattern}</pattern></encoder><filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 过滤的级别 --><level>INFO</level><!-- 匹配时的操作:接收(记录) --><onMatch>ACCEPT</onMatch><!-- 不匹配时的操作:拒绝(不记录) --><onMismatch>DENY</onMismatch></filter></appender><appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${log.path}/error.log</file><!-- 循环政策:基于时间创建日志文件 --><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!-- 每天日志归档文件路径 --><fileNamePattern>${log.path}/error-%d{yyyy-MM-dd}.log</fileNamePattern><!-- 日志最大的历史 60天 --><maxHistory>60</maxHistory></rollingPolicy><encoder><pattern>${log.pattern}</pattern></encoder><filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 过滤的级别 --><level>ERROR</level><!-- 匹配时的操作:接收(记录) --><onMatch>ACCEPT</onMatch><!-- 不匹配时的操作:拒绝(不记录) --><onMismatch>DENY</onMismatch></filter></appender><!--ELK日志配置 todo--><appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender"><destination>localhost:9601</destination><encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"><customFields>{"serviceName":"TestApp"}</customFields></encoder></appender><!-- 系统模块日志级别控制  --><logger name="prj" level="info" /><!-- Spring日志级别控制  --><logger name="org.springframework" level="warn" /><root level="info"><appender-ref ref="console" /></root><!--系统操作日志--><root level="info"><appender-ref ref="file_info" /><appender-ref ref="file_error" /><appender-ref ref="LOGSTASH" /></root>
</configuration>

NOTE:

(1)logback官方文档:https://logback.qos.ch/manual/index.html

(2)$可以从property节点加载配置,也可以直接从环境变量加载。

编写代码
@Controller
@RequestMapping("/api/log/")
public class ELKController {private static final Logger log = LoggerFactory.getLogger(ELKController.class);@RequestMapping("success")public void helloELK(){log.info( "成功啦....");}@RequestMapping("error")public void error(){try {throw new Exception("出错啦....");} catch (Exception e) {e.printStackTrace();log.error("Exception - "+e);}}
}

Kibana日志可视化

Kibana汉化方式,进入config/kibana.yml配置文件中,添加i18n.locale: "zh-CN"

启动Kibana,浏览器访问地址:http://localhost:5601/
在这里插入图片描述
点击management→开发工具,控制台输入以下命令,如下图所示,可以看出日志已经保存至Elasticsearch指定索引。
在这里插入图片描述

通过Kibana创建索引模式elk-log-*,如下图所示
在这里插入图片描述

对收集的日志进行分析,效果如下图所示:
在这里插入图片描述

关键字:淄博刚刚发布紧急通知_宣传片制作企业_厦门网站seo外包_做网站的公司有哪些

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: