日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

内核堆栈 用户堆栈_弹性堆栈介绍

發(fā)布時(shí)間:2023/12/3 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 内核堆栈 用户堆栈_弹性堆栈介绍 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

內(nèi)核堆棧 用戶堆棧

當(dāng)您運(yùn)行對(duì)公司至關(guān)重要的軟件時(shí),您將無法擁有僅用于分析一段時(shí)間前發(fā)生的事情的日志,讓客戶端告訴您您的應(yīng)用程序已損壞,而您甚至不知道發(fā)生了什么是真實(shí)的問題。 解決該問題的方法之一是使用監(jiān)視和日志記錄。

大多數(shù)應(yīng)用程序都將具有日志記錄,即使它只是一個(gè)文本文件,也需要使用grep或tail等工具來查看發(fā)生了什么。 但這是查看日志的一種非常被動(dòng)的方式,因?yàn)槟仨毑扇〈胧?#xff0c;并且可能只有在出現(xiàn)問題時(shí)才查看日志。 您需要的是讓日志告訴您正在發(fā)生的事情,而今天我們將為此而邁出第一步。

通過標(biāo)題,您可能已經(jīng)知道我們將要討論Elasticstack 。 我的這篇文章旨在為您提供開始收集和分析日志的基本方法,而無需您處理我經(jīng)歷的所有困難。

彈性堆棧

Elastic Stack在被稱為ELK之前,是一組工具,可幫助您collect , structure , store , analyse并還可以針對(duì)某些情況創(chuàng)建actions 。

彈性堆棧由4個(gè)組件組成:

  • Kibana是一種可視化工具,可從ElasticSearch讀取數(shù)據(jù)。 您可以創(chuàng)建儀表板或手動(dòng)查詢ElasticSearch 。
  • ElasticSearch是日志的存儲(chǔ)。 您可以從Beats或Logstash發(fā)送日志,并將其存儲(chǔ)在索引中。 您可以具有多個(gè)索引來存儲(chǔ)來自多個(gè)源的數(shù)據(jù)。
  • Logstash是負(fù)責(zé)處理日志的應(yīng)用程序,您可以將日志解析為更有用的數(shù)據(jù),并將其發(fā)送到ElasticSearch 。
  • Beats或Filebeat是一種輕量級(jí)的工具,可讀取日志并將其發(fā)送到ElasticSearch或Logstash 。 該工具的唯一目的是讀取日志文件,它無法執(zhí)行任何復(fù)雜的操作。 如果需要執(zhí)行復(fù)雜的操作,則可以將該日志發(fā)送到Logstash以便將其解析為所需的信息。

Logstash

我們從Logstash開始,因?yàn)樗悄占徒馕鋈罩镜姆绞?#xff08;是的,我提到過Beats但您無需啟動(dòng)它)。

Logstash是日志處理器和檢索器。 Logstash的主要功能是為非結(jié)構(gòu)化日志文件提供結(jié)構(gòu),處理日志分為三個(gè)步驟:

  • 輸入–接收或獲取日志。
  • 過濾器–處理或過濾。
  • 輸出–將日志發(fā)送到永久存儲(chǔ)。

輸入項(xiàng)

Logstash可以從日志文件中檢索數(shù)據(jù),而且還可以從多個(gè)來源獲取數(shù)據(jù),例如:

  • 文字檔
  • 資料庫
  • Shell命令
  • Queue列
  • Http請(qǐng)求

如果要查看Logstash支持的所有輸入插件,請(qǐng)檢查docs 。

現(xiàn)在,我一直在使用的輸入以及我將解釋如何使用的輸入是:

  • 文字檔
  • 資料庫
  • Shell命令

文字文件輸入

存儲(chǔ)日志的最常見方法之一是位于計(jì)算機(jī)中某個(gè)位置的文本文件,通常是/var/log 。 Logstash有一個(gè)插件可以讀取文件,并像tail -f一樣不斷監(jiān)視新行。

要使用該插件非常簡(jiǎn)單,只需添加文件的路徑,Logstash就會(huì)處理其余的事情,不用擔(dān)心旋轉(zhuǎn)文件,該插件也知道如何處理。

file插件的用法如下:

input {file {path => /var/log/app/realworld.logid => realworld} }

按照我們上面配置Logstash的方式,每一行都是一個(gè)日志條目。 但是有時(shí)候我們的日志不是那么簡(jiǎn)單,我們有諸如堆棧跟蹤之類的東西,或者我們將JSON寫入日志中。 在這種情況下,我們需要它們?cè)谝黄鸩庞幸饬x,這就是Logstash提供codecs的原因,這是擴(kuò)展輸入插件的一種方式。 這些編解碼器之一是Multiline 。

例如,下面有使用Spring的應(yīng)用程序的日志,當(dāng)我們有堆棧跟蹤時(shí),我們希望將其分組為一行。

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

因此,如果我們想從日志中捕獲堆棧跟蹤,我們可以做一個(gè)簡(jiǎn)單的正則表達(dá)式來對(duì)所有以空間開頭的內(nèi)容進(jìn)行分組。

input {file {path => /var/log/app/realworld.logid => realworldcodec => multiline {pattern => "^\s"what => "previous"}} }

但是在這種情況下,我們可以走得更遠(yuǎn)。 由于這些日志來自使用Spring的應(yīng)用程序,并且所有日志都遵循某種格式,因此我們可以將與該格式不匹配的所有內(nèi)容歸為一組,其中包括堆棧跟蹤,JSON和對(duì)象。

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意思?

“否定”是用于定義是否要將正則表達(dá)式匹配或不匹配的行分組的選項(xiàng)。 在第一個(gè)示例中,省略了字段negate ,因此其默認(rèn)值為False 。 negate => false意味著線將被組合在一起時(shí),正則表達(dá)式匹配 。 negate => true表示當(dāng)匹配正則表達(dá)式時(shí),行將被分組在一起。

在what是Logstash將如何組的請(qǐng)求。 previous意味著匹配的行將與上一行分組,而next行則很明顯。

數(shù)據(jù)庫

由于Logstash使用Java運(yùn)行,因此您可以訪問JDBC支持的任何數(shù)據(jù)庫。 對(duì)于Postgres,您可以看到查詢表pg_locks的鎖數(shù)。

像這樣的配置是:

input {jdbc {jdbc_connection_string => "jdbc:postgres://localhost:5432/main"jdbc_user => "postgres"jdbc_password => "postgres"jdbc_driver_class => "org.postgresql.Driver"statement_filepath => "/etc/logstash/queries/query-locks.sql"schedule => "* * * * *"tags => ["jdbc","staging-1","query-locks", "main"]} }

以jdbc_開頭的字段jdbc_用于連接數(shù)據(jù)庫的信息。 然后,我們有statement_filepath ,它指向要運(yùn)行Logstash的查詢文件,您也可以將statement選項(xiàng)用于更多臨時(shí)查詢。 最后,我們有schedule選項(xiàng),這是您要運(yùn)行查詢的頻率,該值基于Linux crontab,在此示例中,它將每分鐘運(yùn)行一次。

tags幫助您識(shí)別正在運(yùn)行的查詢。 它只是一個(gè)字符串?dāng)?shù)組,您可以添加任何內(nèi)容。

Logstash將解析所有字段并將其發(fā)送到輸出中定義的數(shù)據(jù)存儲(chǔ)。

使用JDBC輸入時(shí)需要注意的一點(diǎn)是,您需要Logstash類路徑中的jar。 在Logstash安裝文件夾中,轉(zhuǎn)到libs/jars并添加數(shù)據(jù)庫驅(qū)動(dòng)程序的jar。

執(zhí)行力

有時(shí),您可能希望從Logstash不太支持的來源獲取數(shù)據(jù)。 在這種情況下,您可以使用exec輸入插件來執(zhí)行命令行應(yīng)用程序,并將結(jié)果作為日志行。

input { exec {command => "/usr/bin/retrieve-data.sh"schedule => "* * * * *"tags => ["retrieve-data","staging"]} }

此輸入非常易于使用,您可以選擇:

  • command :您要使用的shell命令。
  • schedule :您要運(yùn)行命令的頻率與jdbc-input計(jì)劃相同。
  • tags :用于以后識(shí)別結(jié)果的信息。

使用此插件,您不必?fù)?dān)心結(jié)果會(huì)多行顯示, Logstash會(huì)將所有內(nèi)容分組在一行中。

過濾

可以說我們正在從所有輸入中接收數(shù)據(jù),但是我們需要以有用的方式轉(zhuǎn)換數(shù)據(jù)。 我們不僅希望擁有日志行,還希望統(tǒng)計(jì)信息能夠?qū)崟r(shí)查看正在發(fā)生的事情,并將收到的日志轉(zhuǎn)換為結(jié)構(gòu)正確的數(shù)據(jù)。

Grok Parser

在大多數(shù)情況下,使用Grok Parser插件。 大多數(shù)情況下,日志中的數(shù)據(jù)不是結(jié)構(gòu)化格式,但是我們?nèi)匀恍枰馕鲞@些非結(jié)構(gòu)化數(shù)據(jù)并為其賦予一些含義。 如果要求和,就不能將數(shù)字作為字符串。 Grok不會(huì)通過使用正則表達(dá)式來構(gòu)造數(shù)據(jù), Logstash具有一組涵蓋大多數(shù)情況的內(nèi)置正則表達(dá)式。

這是過濾器的示例。

我們正在從互聯(lián)網(wǎng)接收HTTP請(qǐng)求,我們想跟蹤哪些端點(diǎn)的請(qǐng)求最多,我們的日志結(jié)構(gòu)如下:

192.168.0.1 GET /索引

因此,我們添加了一個(gè)Grok過濾器來結(jié)構(gòu)化:

filter {grok {match => { "message" => "%{IP:client} %{WORD:method} %{URIPATHPARAM:request}"}} }

該過濾器中發(fā)生了什么?

match是指檢查我們收到的日志的消息字段并將其轉(zhuǎn)換為結(jié)構(gòu)化數(shù)據(jù)。

因此,我們收到了來自網(wǎng)絡(luò)服務(wù)器的請(qǐng)求:

我希望Logstash獲取日志并將其轉(zhuǎn)換為結(jié)構(gòu)化數(shù)據(jù)(這是JSON,就像現(xiàn)在的一切一樣)。 我們將匹配器設(shè)為:

"%{IP:client} %{WORD:method} %{URIPATHPARAM:request}"

grok的語法為%{PATTERN:field}

模式是您要如何匹配該字段以及將在數(shù)據(jù)中使用哪種正則表達(dá)式,而該字段將是要存儲(chǔ)該數(shù)據(jù)的字段(位明顯)。 您可以在此處查看所有可用模式。

如果Logstash無法正確解析該模式,它將添加一個(gè)名為_grokparsefailure的標(biāo)簽。

由于它只是一堆用于解析數(shù)據(jù)的正則表達(dá)式,因此您可以創(chuàng)建自己的模式。 為此,您需要在Logstash文件夾中創(chuàng)建一個(gè)名為patterns的文件夾(您將需要檢查安裝位置)。 文件名可以命名為任意名稱, Logstash將讀取其中的所有內(nèi)容。

grok {match => {"path" => "/%{FILE_VERSION:version}_%{BU_ID:id}\.csv$"}patterns_dir => ["/elasticsearch/logstash/example/patterns"] }

還有一種將文件保存在其他文件夾中,然后在配置文件中聲明的方法。

該文件的內(nèi)容必須遵循PATTERN_NAME regex的模式,因此您將以類似以下內(nèi)容結(jié)束:

FILE_VERSION \w+\d{6}(?=_) BU_ID \d{3}(?=\.)

如果您不打算重復(fù)使用正則表達(dá)式并希望內(nèi)聯(lián)它,則也可以這樣做:

%{DATESTAMP:timestamp} (?<mti_before>\w{46})(?<mti>\w{4})%{GREEDYDATA}

就像正則表達(dá)式組一樣,您可以使用括號(hào)來指定要分組的內(nèi)容,然后從問號(hào)開始通知您將要使用正則表達(dá)式。 然后,添加要將數(shù)據(jù)解析到的字段的名稱,最后,您可以添加正則表達(dá)式。

Grok也將允許轉(zhuǎn)換為int和float 。 您只需要在match添加一個(gè)額外的參數(shù)即可。 例如: %{IP:client:int}

使用grok插件時(shí),請(qǐng)注意不要通過添加模式來復(fù)制正在發(fā)送的消息:

grok {match { message => "%{GREEDYDATA:message}" } }

這會(huì)將新消息添加到消息字段,而不是替換。

JSON格式

您可能處在更好的狀況,并且已將日志結(jié)構(gòu)化為JSON之類的格式。 為此, Logstash將為您提供免費(fèi)的解析。

json {source => "message"target => "payload" }

這就是Logstash解析所有JSON消息并為字段設(shè)置適當(dāng)?shù)臄?shù)據(jù)類型所需要做的一切。

核心價(jià)值

另一個(gè)可能有用的過濾器是Key-Value或kv 。 它用于基于兩個(gè)鍵拆分?jǐn)?shù)據(jù)。 因此,如果我們的日志行如下所示:

timestamp=10/09/2019 10:10:50, level=INFO, message=Something wrong might not be right

我們可以這樣使用kv過濾器:

filter {kv {source => "message"field_split => ","value_split => "="target => "summary"} }

因此,我們可以使用kv過濾器解析消息中的數(shù)據(jù)。 該過濾器的唯一問題是您不能在過濾步驟中設(shè)置數(shù)據(jù)類型。

變異

您可能想要更改正在接收的日志,我不是在討論對(duì)日志行的完整分析,而是在進(jìn)行一些小的更改。 有一個(gè)mutate過濾器可以執(zhí)行此操作,并且可以使用多個(gè)命令來更改日志。

您可以使用mutate過濾器進(jìn)行操作的一些示例:

  • convert :您可能已經(jīng)解析了一個(gè)字段,但是您需要該字段不僅僅是一個(gè)字符串。 convert命令允許您將其轉(zhuǎn)換為integer , float , string或boolean 。
filter {mutate {convert => {"quantity" => "integer""is_paid" => "boolean"}} }
  • remove_field :您可能想從日志中刪除一些敏感數(shù)據(jù),因此可以使用此命令將其刪除。
filter {mutate {remove_field => ["sensitive_data"]} }
  • gsub :這是一個(gè)使用正則表達(dá)式替換值的選項(xiàng),您可能想混淆一些不相關(guān)的數(shù)據(jù),可以為此使用該選項(xiàng)。
filter {mutate {gsub => [# field regex result"transaction_reference", "\d{4}-\d{4}-\d{4}-\d{4}", "XXXX-XXXX-XXXX-XXXX"]} }

這將用掩碼版本替換所有事務(wù)引用。

輸出量

這是您可以將剛剛解析的日志定向到輸出或數(shù)據(jù)存儲(chǔ)的部分。 在我們的例子中,我們將使用NoSQL文檔存儲(chǔ)的Elasticsearch ,但您也可以將其發(fā)送到其他地方,例如CSV , HTTP甚至是email 。

您可以查看Logstash的文檔以查看所有輸出插件。

output {elasticsearch {hosts => ["192.168.0.15"]user => "elastic_user"password => "elastic_password"index => "application-log"} }

在此處的示例中,我們將日志發(fā)送到托管在另一臺(tái)計(jì)算機(jī)上的Elasticsearch 。

彈性搜索

Elasticsearch是一個(gè)搜索分析引擎,負(fù)責(zé)收集和聚合存儲(chǔ)的數(shù)據(jù)。 它還提供對(duì)結(jié)構(gòu)化或非結(jié)構(gòu)化文本或數(shù)字?jǐn)?shù)據(jù)的各種數(shù)據(jù)的實(shí)時(shí)搜索。

Elasticsearch所有數(shù)據(jù)都以JSON格式存儲(chǔ),然后進(jìn)行索引,使您可以立即對(duì)其進(jìn)行搜索。 每個(gè)存儲(chǔ)的文檔都是一組包含數(shù)據(jù)的鍵值對(duì),并存儲(chǔ)在優(yōu)化的數(shù)據(jù)結(jié)構(gòu)中,以幫助以后進(jìn)行搜索。

基本構(gòu)造

節(jié)點(diǎn)數(shù)

節(jié)點(diǎn)是存儲(chǔ)和索引數(shù)據(jù)的最基本的構(gòu)造之一。 有多種類型的節(jié)點(diǎn)。

  • 主節(jié)點(diǎn):這控制集群
  • 數(shù)據(jù)節(jié)點(diǎn):它保存數(shù)據(jù)并執(zhí)行CRUD操作,聚合和搜索。
  • 接收節(jié)點(diǎn):這將在索引之前轉(zhuǎn)換并豐富數(shù)據(jù)。

指數(shù)

索引是具有相似特征的文檔的集合,它們類似于關(guān)系數(shù)據(jù)庫中的表。

索引比關(guān)系數(shù)據(jù)庫更靈活,因?yàn)樗鼈兪禽p量級(jí)的,因此可以輕松創(chuàng)建多個(gè)索引。 例如,在日志記錄中,您可以為每天創(chuàng)建一個(gè)索引,并將其類型設(shè)置為所擁有的日志類型。

每天都會(huì)創(chuàng)建一個(gè)新索引,而對(duì)于關(guān)系數(shù)據(jù)庫則不會(huì)這樣做。

使用Elasticsearch

使用Elasticsearch時(shí),我們必須注意兩點(diǎn)。 它們是templates和policies 。

范本

可以將模板視為索引的架構(gòu), Elasticsearch可以設(shè)置默認(rèn)架構(gòu),但是如果您希望對(duì)所擁有的數(shù)據(jù)進(jìn)行匯總和計(jì)算,則需要對(duì)其進(jìn)行更多控制。

Elasticsearch支持哪些類型? 支持的主要數(shù)據(jù)類型有:

  • 數(shù)值(長,整數(shù),短,雙精度,浮點(diǎn))
  • 日期

建筑模板

如何設(shè)置模板? 好吧, Elasticsearch有一個(gè)類似REST的API,您可以輕松地與之交互。

我們正在為金融科技公司的應(yīng)用程序添加日志,我們希望監(jiān)視我們進(jìn)行的資金轉(zhuǎn)移。 我們用于傳輸?shù)挠行ж?fù)載是:

{"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字段構(gòu)建模板,我們可以將類型設(shè)置為日期并提供字段格式:

"payment_date": {"type": "date","format": "yyyy-MM-dd HH:mm:ss.SSS" }

然后我們有amount ,我們與該類型添加該字段scaled_float和scaling_factor為100所以Elasticsearch可以處理在小數(shù)部分兩位數(shù)使生活變得更輕松了后,我們的搜索:

"amount": {"type": "scaled_float","scaling_factor": "100" }

然后,我們得到的字段message只是一個(gè)字符串,因此我們將使用text類型創(chuàng)建一個(gè)為全文搜索建立索引的字段:

"message": {"type": "text" }

origin字段和destination字段實(shí)際上是相同的,并且它們始終具有相同的格式,因此我們可以使用keyword類型。 這種類型適用于少量的半結(jié)構(gòu)化數(shù)據(jù),例如郵政編碼,地址,電子郵件,分類代碼和帳號(hào):

"origin": {"properties": {"body": {"properties": {"sort_code": {"type": "keyword"},"account": {"type": "keyword"}}}} }

現(xiàn)在我們有了索引的完整映射,可以將其插入到Elasticsearch 。 我們只是向它發(fā)出一個(gè)PUT請(qǐng)求。

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"}}}}}}} }

政策規(guī)定

此功能僅在Elasticsearch的高級(jí)版本中可用。

索引將一直被數(shù)據(jù)轟炸,就像日志文件一樣,我們需要一個(gè)過渡策略來使磁盤不滿。 在Elasticsearch的高級(jí)版本中,我們擁有索引策略工具來幫助我們進(jìn)行管理。

首先要知道的是索引可以處于哪些狀態(tài)。

  • hot :是我們正在寫入的索引。
  • warm :是我們經(jīng)常查詢但未寫入的索引。
  • cold :是我們不再寫的索引,并且我們也不經(jīng)常查詢數(shù)據(jù)。
  • delete :是不再需要的索引,可以刪除。

索引從hot狀態(tài)開始,當(dāng)我們不想再繼續(xù)寫索引時(shí),可以對(duì)Elasticsearch說。 我們通過max_age和max_size選項(xiàng)告訴它開始使用另一個(gè)索引。 在下面的示例中,我們每天或在達(dá)到5GB (任意選擇該數(shù)字)時(shí)創(chuàng)建一個(gè)新索引。

{"policy": {"phases": {"hot": {"actions": {"rollover": {"max_age": "1d","max_size": "5GB"}}}}} }

我們不想保持所有索引都hot ,因此我們可以開始改變舊索引的狀態(tài)并使它們warm 。 定義將進(jìn)入warm狀態(tài)的策略的策略始于min_age參數(shù),這聽起來很明顯。 在本例中,我們將min_age設(shè)置為7d ,因此所有7天或更早的hot索引都將轉(zhuǎn)換為warm索引。

對(duì)于warm索引,我們有一些以前在hot索引中不可用的選項(xiàng), actions部分允許我們?cè)诟乃饕隣顟B(tài)時(shí)進(jìn)行一些更改。

我們可以看到的第一個(gè)選項(xiàng)是forcemerge此選項(xiàng)(設(shè)置為1 ,它告訴Elasticsearch合并從hot到warm所有索引。 這很有用,因?yàn)樵贓lastisearch當(dāng)您刪除文檔時(shí),該文檔并沒有真正被刪除,只有標(biāo)記為已刪除。 在合并過程中,標(biāo)記為已刪除的文檔將被正確刪除,就像您將文件發(fā)送到“ Trash bin然后在以后從系統(tǒng)中刪除它們一樣。

然后我們進(jìn)行shrink ,該shrink用于減少索引的分片數(shù)量。 由于我們不再在該索引中編寫數(shù)據(jù),因此我們不需要之前分配的所有分片。

最后我們allocate 。 在這里,我們可以設(shè)置number_of_replicas ,以防萬一我們需要數(shù)據(jù)高度可用,它比只有一個(gè)分片更安全。

"warm": {"min_age": "7d","actions": {"forcemerge": {"max_num_segments": 1},"shrink": {"number_of_shards": 1},"allocate": {"number_of_replicas": 2,"require": {"data": "warm"}}} }

對(duì)于比我們?yōu)閣arm狀態(tài)設(shè)置的數(shù)據(jù)還要舊的數(shù)據(jù),以及出于安全原因而僅存儲(chǔ)的數(shù)據(jù),我們可以將其索引設(shè)置為cold 。 我們將每個(gè)大于6個(gè)月的索引設(shè)置為cold然后將其凍結(jié)。 在此步驟中進(jìn)行凍結(jié)的好處是Elastisearch不會(huì)為凍結(jié)的索引使用額外的內(nèi)存。

"cold": {"min_age": "180d","actions": {"freeze": {}} }

最后,刪除索引非常簡(jiǎn)單。

"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": {}}}}} }

節(jié)拍

FileBeat

Filebeat是一個(gè)輕量級(jí)的工具,可以讀取日志并將其發(fā)送到ElasticSearch或Logstash 。 該工具的唯一目的是讀取日志文件,它無法執(zhí)行任何復(fù)雜的操作。 如果要執(zhí)行復(fù)雜的操作,則可以將日志發(fā)送到Logstash并解析為所需的信息。

如果您有多臺(tái)服務(wù)器,并且由于Logstash是一個(gè)繁重的應(yīng)用程序而不想在所有計(jì)算機(jī)上安裝Logstash ,則可以使用Filebeat (它是用Go語言編寫的,本機(jī)已編譯且非常輕量級(jí)的)。

配置Filebeat并不Filebeat因?yàn)樗龅牟⒉欢唷?您具有包含配置的filebeat.yml :

filebeat.config.inputs:filebeat:inputs:- type: logpaths:- "/var/log/applog/*.log"output:logstash:hosts: ["logstash:5043"]

我們可以看到inputs部分,該部分從文件夾讀取日志Logstash中托管在其他位置的output 。 在此配置文件中,我們正在從文件夾applog中讀取日志。 您還可以在路徑中使用全局模式來獲取多個(gè)文件或捕獲差異,例如大寫或小寫字母。

多行字符串

使用Filebeat您可能需要讀取多行字符串。 就像Logstash一樣,您可以在配置中使用multiline選項(xiàng)來讀取文件, Logstash所有相同字段都應(yīng)用于Filebeat 。

filebeat.config.inputs:- type: logpaths:- "/var/log/applog/application.log"multiline:pattern: "\\[\\d{2}\\/\\d{2}\\/\\d{4} \\d{2}:\\d{2}:\\d{2}]\\[\\w{2}\\]"negate: Truematch: after

Filebeat如何工作 Filebeat參考[7.1] | 有彈性

領(lǐng)域

您也可以在正在讀取的日志中添加其他信息,以便標(biāo)識(shí)從中獲取數(shù)據(jù)的文件,以備日后使用。

filebeat.config.inputs:- type: logpaths:- "/var/log/applog/application.log"fields:file_name: "application_log"multiline:pattern: "\\[\\d{2}\\/\\d{2}\\/\\d{4} \\d{2}:\\d{2}:\\d{2}]\\[\\w{2}\\]"negate: Truematch: after

自動(dòng)加載

您還可以從配置文件中拆分輸入列表,這樣就可以用輸入更新文件,而無需重新啟動(dòng)Filebeat 。 因此,我們沒有將inputs直接添加到主配置文件中,而是將其提供給具有輸入配置的文件。

filebeat.config.inputs:enabled: truepath: inputs.ymlreload.enabled: truereload.period: 10s

inputs.yml將要加載的Filebeat :

- type: logpaths:- "/var/log/haproxy.log"fields:file_name: "Haproxy"

基巴納

至此,我們正在收集,構(gòu)建和存儲(chǔ)所有這些日志。 現(xiàn)在我們需要從中獲得一些價(jià)值。 僅僅存儲(chǔ)它們不是最佳選擇,我們需要可視化它們以獲取一些反饋。

為了可視化存儲(chǔ)到Elasticsearch所有數(shù)據(jù),您可以使用Kibana 。 它是一個(gè)應(yīng)用程序,允許您從Elasticsearch查詢數(shù)據(jù)并基于此創(chuàng)建可視化效果。

在Kibana主頁中,我們選擇了使用一種模式來連接到Elastisearch的索引,該模式指定了諸如logs-*的索引名稱,因此我們可以搜索所有以logs-開頭的索引,因?yàn)槲覀兛赡苁前刺鞂?duì)日志進(jìn)行了分組,而不是對(duì)所有分組在一個(gè)索引中。

發(fā)現(xiàn)

“ Discovery區(qū)域使您可以可視化和搜索Elastichsearch存儲(chǔ)的數(shù)據(jù)。

1 –過濾器

您有一個(gè)可以在其中使用KQL編寫查詢的欄, KQL是一種非常易于使用的自定義查詢語言。 Kibana也將幫助您自動(dòng)完成查詢。

因此,如果我們要搜索,您可以輸入:

tags: "retrieve-data" and stats1 >= 10000

或者,您可以使用“ filters部分,在該部分中,您可以使用更加面向UI的方式進(jìn)行搜索。

您還可以保存搜索以供以后使用,這樣就不必每次都重寫。 保存的搜索可以在Kibana UI的其他部分中使用。

2 –日期過濾器

如果要按特定時(shí)間段過濾結(jié)果,則過濾器允許您使用兩個(gè)選項(xiàng):

  • 絕對(duì):您可以設(shè)置所需的確切日期和時(shí)間。
  • 相對(duì):您可以設(shè)置所需的日期和時(shí)間戳,例如10 minutes ago 。 使用此選項(xiàng),您還可以設(shè)置從Elasticsearch獲取最新數(shù)據(jù)。

3 –記錄

您可以以鍵值方式展開和查看記錄,它還顯示字段的類型,可以是三種:

  • t –文本字段
  • # –數(shù)字字段
  • 時(shí)鐘符號(hào)–日期時(shí)間

您還可以通過在左側(cè)的“ Available Fields菜單中選擇要過濾的字段來進(jìn)行過濾

可視化

我們需要一種可視化所有存儲(chǔ)良好的數(shù)據(jù)的方法,而Visualize允許我們創(chuàng)建多種圖形。

Y軸

在此示例中,我們將創(chuàng)建一個(gè)bar graph 。 在左側(cè)菜單中,您可以設(shè)置創(chuàng)建圖形的選項(xiàng)。

  • Aggregation :是您要執(zhí)行的一種操作,可以是count , sum和average 。 還有更復(fù)雜的操作,例如Standard Deviation和使用其他值的操作。
  • Field :是您要用于進(jìn)行計(jì)算的字段以及要顯示的值。 對(duì)于簡(jiǎn)單的聚合,您可以從下拉列表中直接選擇字段,對(duì)于更復(fù)雜的查詢,可以使用QueryDSL和JSON查找值。
  • Custom Label :您可能不想無意義地顯示數(shù)據(jù),因此您可以在此處為其添加漂亮的標(biāo)簽。
  • 水桶

  • Aggregation :您將如何對(duì)數(shù)據(jù)進(jìn)行分組。 您可能需要一段時(shí)間使用“ Date Histogram或使用特定字段來對(duì)具有端點(diǎn)的端點(diǎn)進(jìn)行分組。
  • Field :是您將用于拆分?jǐn)?shù)據(jù)的字段。 如果您需要更復(fù)雜的聚合,則可以使用QueryDSL作為輸入。
  • Interval :如果要按日期分組,可以指定要分割數(shù)據(jù)的時(shí)間段。 對(duì)于其他聚合(例如范圍),您將獲得不同的間隔字段。
  • 儀表板

    現(xiàn)在,我們可以將構(gòu)建在Dashboards的可視化文件放在一起,以便將所有要查看的數(shù)據(jù)聚合到一個(gè)位置。 您可以添加創(chuàng)建的可視化效果,并調(diào)整其大小以適合您所需的屏幕。 您也可以更改對(duì)它們的搜索,甚至可以全屏顯示它們,從而非常好地顯示它們。

    開發(fā)工具

    Kibana還為您提供了“ Dev Tools部分,其中包含一些有助于您工作的工具。

    安慰

    我們看到, Elasticsearch具有類似REST的API,控制臺(tái)也提供了與API交互的簡(jiǎn)便方法。 提供自動(dòng)完成功能并立即連接到Elasticsearch因此您無需手動(dòng)構(gòu)建整個(gè)請(qǐng)求。 您可以僅通過擁有方法和路徑來發(fā)出請(qǐng)求,還可以編寫帶有驗(yàn)證和完成的JSON 。

    GET _template/transfers_templatePUT /test-template-000001 {"aliases": {"test-template-alias": {"is_write_index": true}} }

    Grok調(diào)試器

    當(dāng)我們談?wù)揕ogstash我們看到了Grok插件及其強(qiáng)大功能,但是Grok使用正則表達(dá)式工作,并且每個(gè)人都知道正則表達(dá)式非常瘋狂并且很容易破解,因此調(diào)試器可以幫助我們構(gòu)建模式來解析我們的代碼。日志行。

    我們有從服務(wù)器獲取統(tǒng)計(jì)信息的消息,共有四列,但是我們必須拆分為適當(dāng)?shù)淖侄?#xff0c;因此我們需要使用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

    內(nèi)核堆棧 用戶堆棧

    創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

    總結(jié)

    以上是生活随笔為你收集整理的内核堆栈 用户堆栈_弹性堆栈介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。