企业网站策划大纲模板,系统开发过程中原型有哪些作用,国家级示范校建设专题网站,酒店网站制作策划内核堆栈 用户堆栈当您运行对公司至关重要的软件时#xff0c;您将无法拥有仅用于分析一段时间前发生的事情的日志#xff0c;让客户端告诉您您的应用程序已损坏#xff0c;而您甚至不知道发生了什么是真实的问题。 解决该问题的方法之一是使用监视和日志记录。 大多数应用… 内核堆栈 用户堆栈 当您运行对公司至关重要的软件时您将无法拥有仅用于分析一段时间前发生的事情的日志让客户端告诉您您的应用程序已损坏而您甚至不知道发生了什么是真实的问题。 解决该问题的方法之一是使用监视和日志记录。 大多数应用程序都将具有日志记录即使它只是一个文本文件也需要使用grep或tail等工具来查看发生了什么。 但这是查看日志的一种非常被动的方式因为您必须采取措施并且可能只有在出现问题时才查看日志。 您需要的是让日志告诉您正在发生的事情而今天我们将为此而迈出第一步。 通过标题您可能已经知道我们将要讨论Elasticstack 。 我的这篇文章旨在为您提供开始收集和分析日志的基本方法而无需您处理我经历的所有困难。 弹性堆栈 Elastic Stack在被称为ELK之前是一组工具可帮助您collect structure store analyse并还可以针对某些情况创建actions 。 弹性堆栈由4个组件组成 Kibana是一种可视化工具可从ElasticSearch读取数据。 您可以创建仪表板或手动查询ElasticSearch 。 ElasticSearch是日志的存储。 您可以从Beats或Logstash发送日志并将其存储在索引中。 您可以具有多个索引来存储来自多个源的数据。 Logstash是负责处理日志的应用程序您可以将日志解析为更有用的数据并将其发送到ElasticSearch 。 Beats或Filebeat是一种轻量级的工具可读取日志并将其发送到ElasticSearch或Logstash 。 该工具的唯一目的是读取日志文件它无法执行任何复杂的操作。 如果需要执行复杂的操作则可以将该日志发送到Logstash以便将其解析为所需的信息。 Logstash 我们从Logstash开始因为它是您收集和解析日志的方式是的我提到过Beats但您无需启动它。 Logstash是日志处理器和检索器。 Logstash的主要功能是为非结构化日志文件提供结构处理日志分为三个步骤 输入–接收或获取日志。 过滤器–处理或过滤。 输出–将日志发送到永久存储。 输入项 Logstash可以从日志文件中检索数据而且还可以从多个来源获取数据例如 文字档 资料库 Shell命令 Queue列 Http请求 如果要查看Logstash支持的所有输入插件请检查docs 。 现在我一直在使用的输入以及我将解释如何使用的输入是 文字档 资料库 Shell命令 文字文件输入 存储日志的最常见方法之一是位于计算机中某个位置的文本文件通常是/var/log 。 Logstash有一个插件可以读取文件并像tail -f一样不断监视新行。 要使用该插件非常简单只需添加文件的路径Logstash就会处理其余的事情不用担心旋转文件该插件也知道如何处理。 file插件的用法如下 input {file {path /var/log/app/realworld.logid realworld}
} 按照我们上面配置Logstash的方式每一行都是一个日志条目。 但是有时候我们的日志不是那么简单我们有诸如堆栈跟踪之类的东西或者我们将JSON写入日志中。 在这种情况下我们需要它们在一起才有意义这就是Logstash提供codecs的原因这是扩展输入插件的一种方式。 这些编解码器之一是Multiline 。 例如下面有使用Spring的应用程序的日志当我们有堆栈跟踪时我们希望将其分组为一行。 2019-08-18 18:31:53.845 INFO 6724 --- [ main] o.s.t.web.servlet.TestDispatcherServlet : FrameworkServlet : initialization completed in 17 ms
com.andre2w.transaction.TransactionTooOldExceptionat com.andre2w.transaction.TransactionService.validateTimestamp(TransactionService.java:46)at com.andre2w.transaction.TransactionService.add(TransactionService.java:29)at com.andre2w.controllers.TransactionController.create(TransactionController.java:42)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:498)
2019-08-18 18:31:53.891 INFO 6724 --- [ main] o.s.b.t.m.w.SpringBootMockServletContext : Initializing Spring FrameworkServlet
2019-08-18 18:31:53.892 INFO 6724 --- [ main] o.s.t.web.servlet.TestDispatcherServlet : FrameworkServlet : initialization started 因此如果我们想从日志中捕获堆栈跟踪我们可以做一个简单的正则表达式来对所有以空间开头的内容进行分组。 input {file {path /var/log/app/realworld.logid realworldcodec multiline {pattern ^\swhat previous}}
} 但是在这种情况下我们可以走得更远。 由于这些日志来自使用Spring的应用程序并且所有日志都遵循某种格式因此我们可以将与该格式不匹配的所有内容归为一组其中包括堆栈跟踪JSON和对象。 input {file {path /var/log/app/realworld.logid realworldcodec multiline {pattern \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} \w \d --- \[\s\w]negate truewhat next}}
} negate what意思 “否定”是用于定义是否要将正则表达式匹配或不匹配的行分组的选项。 在第一个示例中省略了字段negate 因此其默认值为False 。 negate false意味着线将被组合在一起时正则表达式匹配 。 negate true表示当不匹配正则表达式时行将被分组在一起。 在what是Logstash将如何组的请求。 previous意味着匹配的行将与上一行分组而next行则很明显。 数据库 由于Logstash使用Java运行因此您可以访问JDBC支持的任何数据库。 对于Postgres您可以看到查询表pg_locks的锁数。 像这样的配置是 input {jdbc {jdbc_connection_string jdbc:postgres://localhost:5432/mainjdbc_user postgresjdbc_password postgresjdbc_driver_class org.postgresql.Driverstatement_filepath /etc/logstash/queries/query-locks.sqlschedule * * * * *tags [jdbc,staging-1,query-locks, main]}
} 以jdbc_开头的字段jdbc_用于连接数据库的信息。 然后我们有statement_filepath 它指向要运行Logstash的查询文件您也可以将statement选项用于更多临时查询。 最后我们有schedule选项这是您要运行查询的频率该值基于Linux crontab在此示例中它将每分钟运行一次。 tags帮助您识别正在运行的查询。 它只是一个字符串数组您可以添加任何内容。 Logstash将解析所有字段并将其发送到输出中定义的数据存储。 使用JDBC输入时需要注意的一点是您需要Logstash类路径中的jar。 在Logstash安装文件夹中转到libs/jars并添加数据库驱动程序的jar。 执行力 有时您可能希望从Logstash不太支持的来源获取数据。 在这种情况下您可以使用exec输入插件来执行命令行应用程序并将结果作为日志行。 input { exec {command /usr/bin/retrieve-data.shschedule * * * * *tags [retrieve-data,staging]}
} 此输入非常易于使用您可以选择 command 您要使用的shell命令。 schedule 您要运行命令的频率与jdbc-input计划相同。 tags 用于以后识别结果的信息。 使用此插件您不必担心结果会多行显示 Logstash会将所有内容分组在一行中。 过滤 可以说我们正在从所有输入中接收数据但是我们需要以有用的方式转换数据。 我们不仅希望拥有日志行还希望统计信息能够实时查看正在发生的事情并将收到的日志转换为结构正确的数据。 Grok Parser 在大多数情况下使用Grok Parser插件。 大多数情况下日志中的数据不是结构化格式但是我们仍然需要解析这些非结构化数据并为其赋予一些含义。 如果要求和就不能将数字作为字符串。 Grok不会通过使用正则表达式来构造数据 Logstash具有一组涵盖大多数情况的内置正则表达式。 这是过滤器的示例。 我们正在从互联网接收HTTP请求我们想跟踪哪些端点的请求最多我们的日志结构如下 192.168.0.1 GET /索引 因此我们添加了一个Grok过滤器来结构化 filter {grok {match { message %{IP:client} %{WORD:method} %{URIPATHPARAM:request}}}
} 该过滤器中发生了什么 match是指检查我们收到的日志的消息字段并将其转换为结构化数据。 因此我们收到了来自网络服务器的请求 我希望Logstash获取日志并将其转换为结构化数据这是JSON就像现在的一切一样。 我们将匹配器设为 %{IP:client} %{WORD:method} %{URIPATHPARAM:request} grok的语法为%{PATTERN:field} 模式是您要如何匹配该字段以及将在数据中使用哪种正则表达式而该字段将是要存储该数据的字段位明显。 您可以在此处查看所有可用模式。 如果Logstash无法正确解析该模式它将添加一个名为_grokparsefailure的标签。 由于它只是一堆用于解析数据的正则表达式因此您可以创建自己的模式。 为此您需要在Logstash文件夹中创建一个名为patterns的文件夹您将需要检查安装位置。 文件名可以命名为任意名称 Logstash将读取其中的所有内容。 grok {match {path /%{FILE_VERSION:version}_%{BU_ID:id}\.csv$}patterns_dir [/elasticsearch/logstash/example/patterns]
} 还有一种将文件保存在其他文件夹中然后在配置文件中声明的方法。 该文件的内容必须遵循PATTERN_NAME regex的模式因此您将以类似以下内容结束 FILE_VERSION \w\d{6}(?_)
BU_ID \d{3}(?\.) 如果您不打算重复使用正则表达式并希望内联它则也可以这样做 %{DATESTAMP:timestamp} (?mti_before\w{46})(?mti\w{4})%{GREEDYDATA} 就像正则表达式组一样您可以使用括号来指定要分组的内容然后从问号开始通知您将要使用正则表达式。 然后添加要将数据解析到的字段的名称最后您可以添加正则表达式。 Grok也将允许转换为int和float 。 您只需要在match添加一个额外的参数即可。 例如 %{IP:client:int} 使用grok插件时请注意不要通过添加模式来复制正在发送的消息 grok {match { message %{GREEDYDATA:message} }
} 这会将新消息添加到消息字段而不是替换。 JSON格式 您可能处在更好的状况并且已将日志结构化为JSON之类的格式。 为此 Logstash将为您提供免费的解析。 json {source messagetarget payload
} 这就是Logstash解析所有JSON消息并为字段设置适当的数据类型所需要做的一切。 核心价值 另一个可能有用的过滤器是Key-Value或kv 。 它用于基于两个键拆分数据。 因此如果我们的日志行如下所示 timestamp10/09/2019 10:10:50, levelINFO, messageSomething wrong might not be right 我们可以这样使用kv过滤器 filter {kv {source messagefield_split ,value_split target summary}
} 因此我们可以使用kv过滤器解析消息中的数据。 该过滤器的唯一问题是您不能在过滤步骤中设置数据类型。 变异 您可能想要更改正在接收的日志我不是在讨论对日志行的完整分析而是在进行一些小的更改。 有一个mutate过滤器可以执行此操作并且可以使用多个命令来更改日志。 您可以使用mutate过滤器进行操作的一些示例 convert 您可能已经解析了一个字段但是您需要该字段不仅仅是一个字符串。 convert命令允许您将其转换为integer float string或boolean 。 filter {mutate {convert {quantity integeris_paid boolean}}
} remove_field 您可能想从日志中删除一些敏感数据因此可以使用此命令将其删除。 filter {mutate {remove_field [sensitive_data]}
} gsub 这是一个使用正则表达式替换值的选项您可能想混淆一些不相关的数据可以为此使用该选项。 filter {mutate {gsub [# field regex resulttransaction_reference, \d{4}-\d{4}-\d{4}-\d{4}, XXXX-XXXX-XXXX-XXXX]}
} 这将用掩码版本替换所有事务引用。 输出量 这是您可以将刚刚解析的日志定向到输出或数据存储的部分。 在我们的例子中我们将使用NoSQL文档存储的Elasticsearch 但您也可以将其发送到其他地方例如CSV HTTP甚至是email 。 您可以查看Logstash的文档以查看所有输出插件。 output {elasticsearch {hosts [192.168.0.15]user elastic_userpassword elastic_passwordindex application-log}
} 在此处的示例中我们将日志发送到托管在另一台计算机上的Elasticsearch 。 弹性搜索 Elasticsearch是一个搜索分析引擎负责收集和聚合存储的数据。 它还提供对结构化或非结构化文本或数字数据的各种数据的实时搜索。 Elasticsearch所有数据都以JSON格式存储然后进行索引使您可以立即对其进行搜索。 每个存储的文档都是一组包含数据的键值对并存储在优化的数据结构中以帮助以后进行搜索。 基本构造 节点数 节点是存储和索引数据的最基本的构造之一。 有多种类型的节点。 主节点这控制集群 数据节点它保存数据并执行CRUD操作聚合和搜索。 接收节点这将在索引之前转换并丰富数据。 指数 索引是具有相似特征的文档的集合它们类似于关系数据库中的表。 索引比关系数据库更灵活因为它们是轻量级的因此可以轻松创建多个索引。 例如在日志记录中您可以为每天创建一个索引并将其类型设置为所拥有的日志类型。 每天都会创建一个新索引而对于关系数据库则不会这样做。 使用Elasticsearch 使用Elasticsearch时我们必须注意两点。 它们是templates和policies 。 范本 可以将模板视为索引的架构 Elasticsearch可以设置默认架构但是如果您希望对所拥有的数据进行汇总和计算则需要对其进行更多控制。 Elasticsearch支持哪些类型 支持的主要数据类型有 串 数值长整数短双精度浮点 日期 建筑模板 如何设置模板 好吧 Elasticsearch有一个类似REST的API您可以轻松地与之交互。 我们正在为金融科技公司的应用程序添加日志我们希望监视我们进行的资金转移。 我们用于传输的有效负载是 {paymentDate: 2019-09-14 11:25:32.321,amount: 100.00,message: Payment message,origin: {sortCode: 11-11-11,account: 838383},destination: {sortCode: 11-11-11,account: 1313123}
} 我们开始使用payment_date字段构建模板我们可以将类型设置为日期并提供字段格式 payment_date: {type: date,format: yyyy-MM-dd HH:mm:ss.SSS
} 然后我们有amount 我们与该类型添加该字段scaled_float和scaling_factor为100所以Elasticsearch可以处理在小数部分两位数使生活变得更轻松了后我们的搜索 amount: {type: scaled_float,scaling_factor: 100
} 然后我们得到的字段message只是一个字符串因此我们将使用text类型创建一个为全文搜索建立索引的字段 message: {type: text
} origin字段和destination字段实际上是相同的并且它们始终具有相同的格式因此我们可以使用keyword类型。 这种类型适用于少量的半结构化数据例如邮政编码地址电子邮件分类代码和帐号 origin: {properties: {body: {properties: {sort_code: {type: keyword},account: {type: keyword}}}}
} 现在我们有了索引的完整映射可以将其插入到Elasticsearch 。 我们只是向它发出一个PUT请求。 curl -X PUT http://elasticsearch.com/_template/transfers_template -d transfers_template.json{index_patterns: [transfers-*],mappings: {_meta: {beat: transfers,version: 7.0.1},date_detection: false,dynamic_templates: [{labels: {mapping: {type: keyword},match_mapping_type: string,path_match: labels.*}},{container.labels: {mapping: {type: keyword},match_mapping_type: string,path_match: container.labels.*}},{fields: {mapping: {type: keyword},match_mapping_type: string,path_match: fields.*}},{docker.container.labels: {mapping: {type: keyword},match_mapping_type: string,path_match: docker.container.labels.*}},{kibana.log.meta: {mapping: {type: keyword},match_mapping_type: string,path_match: kibana.log.meta.*}},{strings_as_keyword: {mapping: {ignore_above: 1024,type: keyword},match_mapping_type: string}}],properties: {timestamp: {type: date},payment_date: {type: date,format: yyyy-MM-ddTHH:mm:ss.SSSSSS},amount: {type: scaled_float,scaling_factor: 100},message: {type: text},origin: {properties: {body: {properties: {sort_code: {type: keyword},account: {type: keyword}}}}},destination: {properties: {body: {properties: {sort_code: {type: keyword},account: {type: keyword}}}}}}}
} 政策规定 此功能仅在Elasticsearch的高级版本中可用。 索引将一直被数据轰炸就像日志文件一样我们需要一个过渡策略来使磁盘不满。 在Elasticsearch的高级版本中我们拥有索引策略工具来帮助我们进行管理。 首先要知道的是索引可以处于哪些状态。 hot 是我们正在写入的索引。 warm 是我们经常查询但未写入的索引。 cold 是我们不再写的索引并且我们也不经常查询数据。 delete 是不再需要的索引可以删除。 索引从hot状态开始当我们不想再继续写索引时可以对Elasticsearch说。 我们通过max_age和max_size选项告诉它开始使用另一个索引。 在下面的示例中我们每天或在达到5GB 任意选择该数字时创建一个新索引。 {policy: {phases: {hot: {actions: {rollover: {max_age: 1d,max_size: 5GB}}}}}
} 我们不想保持所有索引都hot 因此我们可以开始改变旧索引的状态并使它们warm 。 定义将进入warm状态的策略的策略始于min_age参数这听起来很明显。 在本例中我们将min_age设置为7d 因此所有7天或更早的hot索引都将转换为warm索引。 对于warm索引我们有一些以前在hot索引中不可用的选项 actions部分允许我们在更改索引状态时进行一些更改。 我们可以看到的第一个选项是forcemerge此选项设置为1 它告诉Elasticsearch合并从hot到warm所有索引。 这很有用因为在Elastisearch当您删除文档时该文档并没有真正被删除只有标记为已删除。 在合并过程中标记为已删除的文档将被正确删除就像您将文件发送到“ Trash bin然后在以后从系统中删除它们一样。 然后我们进行shrink 该shrink用于减少索引的分片数量。 由于我们不再在该索引中编写数据因此我们不需要之前分配的所有分片。 最后我们allocate 。 在这里我们可以设置number_of_replicas 以防万一我们需要数据高度可用它比只有一个分片更安全。 warm: {min_age: 7d,actions: {forcemerge: {max_num_segments: 1},shrink: {number_of_shards: 1},allocate: {number_of_replicas: 2,require: {data: warm}}}
} 对于比我们为warm状态设置的数据还要旧的数据以及出于安全原因而仅存储的数据我们可以将其索引设置为cold 。 我们将每个大于6个月的索引设置为cold然后将其冻结。 在此步骤中进行冻结的好处是Elastisearch不会为冻结的索引使用额外的内存。 cold: {min_age: 180d,actions: {freeze: {}}
} 最后删除索引非常简单。 delete: {min_age: 365d,actions: {delete: {}}
} 我们拥有的最终政策将如下所示 {policy: {phases: {hot: {actions: {rollover: {max_age: 1d,max_size: 5GB}}},warm: {min_age: 7d,actions: {forcemerge: {max_num_segments: 1},shrink: {number_of_shards: 1},allocate: {number_of_replicas: 2,require: {data: warm}}}},cold: {min_age: 100d,actions: {freeze: {}}},delete: {min_age: 365d,actions: {delete: {}}}}}
}节拍 FileBeat Filebeat是一个轻量级的工具可以读取日志并将其发送到ElasticSearch或Logstash 。 该工具的唯一目的是读取日志文件它无法执行任何复杂的操作。 如果要执行复杂的操作则可以将日志发送到Logstash并解析为所需的信息。 如果您有多台服务器并且由于Logstash是一个繁重的应用程序而不想在所有计算机上安装Logstash 则可以使用Filebeat 它是用Go语言编写的本机已编译且非常轻量级的。 配置Filebeat并不Filebeat因为它做的并不多。 您具有包含配置的filebeat.yml filebeat.config.inputs:filebeat:inputs:- type: logpaths:- /var/log/applog/*.logoutput:logstash:hosts: [logstash:5043] 我们可以看到inputs部分该部分从文件夹读取日志Logstash中托管在其他位置的output 。 在此配置文件中我们正在从文件夹applog中读取日志。 您还可以在路径中使用全局模式来获取多个文件或捕获差异例如大写或小写字母。 多行字符串 使用Filebeat您可能需要读取多行字符串。 就像Logstash一样您可以在配置中使用multiline选项来读取文件 Logstash所有相同字段都应用于Filebeat 。 filebeat.config.inputs:- type: logpaths:- /var/log/applog/application.logmultiline:pattern: \\[\\d{2}\\/\\d{2}\\/\\d{4} \\d{2}:\\d{2}:\\d{2}]\\[\\w{2}\\]negate: Truematch: after Filebeat如何工作 Filebeat参考[7.1] | 有弹性 领域 您也可以在正在读取的日志中添加其他信息以便标识从中获取数据的文件以备日后使用。 filebeat.config.inputs:- type: logpaths:- /var/log/applog/application.logfields:file_name: application_logmultiline:pattern: \\[\\d{2}\\/\\d{2}\\/\\d{4} \\d{2}:\\d{2}:\\d{2}]\\[\\w{2}\\]negate: Truematch: after 自动加载 您还可以从配置文件中拆分输入列表这样就可以用输入更新文件而无需重新启动Filebeat 。 因此我们没有将inputs直接添加到主配置文件中而是将其提供给具有输入配置的文件。 filebeat.config.inputs:enabled: truepath: inputs.ymlreload.enabled: truereload.period: 10s inputs.yml将要加载的Filebeat - type: logpaths:- /var/log/haproxy.logfields:file_name: Haproxy基巴纳 至此我们正在收集构建和存储所有这些日志。 现在我们需要从中获得一些价值。 仅仅存储它们不是最佳选择我们需要可视化它们以获取一些反馈。 为了可视化存储到Elasticsearch所有数据您可以使用Kibana 。 它是一个应用程序允许您从Elasticsearch查询数据并基于此创建可视化效果。 在Kibana主页中我们选择了使用一种模式来连接到Elastisearch的索引该模式指定了诸如logs-*的索引名称因此我们可以搜索所有以logs-开头的索引因为我们可能是按天对日志进行了分组而不是对所有分组在一个索引中。 发现 “ Discovery区域使您可以可视化和搜索Elastichsearch存储的数据。 1 –过滤器 您有一个可以在其中使用KQL编写查询的栏 KQL是一种非常易于使用的自定义查询语言。 Kibana也将帮助您自动完成查询。 因此如果我们要搜索您可以输入 tags: retrieve-data and stats1 10000 或者您可以使用“ filters部分在该部分中您可以使用更加面向UI的方式进行搜索。 您还可以保存搜索以供以后使用这样就不必每次都重写。 保存的搜索可以在Kibana UI的其他部分中使用。 2 –日期过滤器 如果要按特定时间段过滤结果则过滤器允许您使用两个选项 绝对您可以设置所需的确切日期和时间。 相对您可以设置所需的日期和时间戳例如10 minutes ago 。 使用此选项您还可以设置从Elasticsearch获取最新数据。 3 –记录 您可以以键值方式展开和查看记录它还显示字段的类型可以是三种 t –文本字段 # –数字字段 时钟符号–日期时间 您还可以通过在左侧的“ Available Fields菜单中选择要过滤的字段来进行过滤 可视化 我们需要一种可视化所有存储良好的数据的方法而Visualize允许我们创建多种图形。 Y轴 在此示例中我们将创建一个bar graph 。 在左侧菜单中您可以设置创建图形的选项。 Aggregation 是您要执行的一种操作可以是count sum和average 。 还有更复杂的操作例如Standard Deviation和使用其他值的操作。 Field 是您要用于进行计算的字段以及要显示的值。 对于简单的聚合您可以从下拉列表中直接选择字段对于更复杂的查询可以使用QueryDSL和JSON查找值。 Custom Label 您可能不想无意义地显示数据因此您可以在此处为其添加漂亮的标签。 水桶 Aggregation 您将如何对数据进行分组。 您可能需要一段时间使用“ Date Histogram或使用特定字段来对具有端点的端点进行分组。 Field 是您将用于拆分数据的字段。 如果您需要更复杂的聚合则可以使用QueryDSL作为输入。 Interval 如果要按日期分组可以指定要分割数据的时间段。 对于其他聚合例如范围您将获得不同的间隔字段。 仪表板 现在我们可以将构建在Dashboards的可视化文件放在一起以便将所有要查看的数据聚合到一个位置。 您可以添加创建的可视化效果并调整其大小以适合您所需的屏幕。 您也可以更改对它们的搜索甚至可以全屏显示它们从而非常好地显示它们。 开发工具 Kibana还为您提供了“ Dev Tools部分其中包含一些有助于您工作的工具。 安慰 我们看到 Elasticsearch具有类似REST的API控制台也提供了与API交互的简便方法。 提供自动完成功能并立即连接到Elasticsearch因此您无需手动构建整个请求。 您可以仅通过拥有方法和路径来发出请求还可以编写带有验证和完成的JSON 。 GET _template/transfers_templatePUT /test-template-000001
{aliases: {test-template-alias: {is_write_index: true}}
} Grok调试器 当我们谈论Logstash我们看到了Grok插件及其强大功能但是Grok使用正则表达式工作并且每个人都知道正则表达式非常疯狂并且很容易破解因此调试器可以帮助我们构建模式来解析我们的代码。日志行。 我们有从服务器获取统计信息的消息共有四列但是我们必须拆分为适当的字段因此我们需要使用Grok解析器。 16765 | 10475 | 26017 | 27583%{NUMBER:stats1} \| %{NUMBER:stats2} \| %{NUMBER:stats3} \| %{NUMBER:stats4} 今天就这些 在这篇文章中我们了解了Elastic Stack的组件如何开始使用它们以及组织日志的重要性。 另外您始终可以在这里使用Elastic Stack文档以了解支持的其他功能我的帖子中未提及。 翻译自: https://www.javacodegeeks.com/2019/11/elastic-stack-introduction.html内核堆栈 用户堆栈