内核堆栈 用户堆栈_弹性堆栈介绍
內核堆棧 用戶堆棧
當您運行對公司至關重要的軟件時,您將無法擁有僅用于分析一段時間前發生的事情的日志,讓客戶端告訴您您的應用程序已損壞,而您甚至不知道發生了什么是真實的問題。 解決該問題的方法之一是使用監視和日志記錄。
大多數應用程序都將具有日志記錄,即使它只是一個文本文件,也需要使用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 => "^\s"what => "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/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_用于連接數據庫的信息。 然后,我們有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.sh"schedule => "* * * * *"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 => "message"target => "payload" }這就是Logstash解析所有JSON消息并為字段設置適當的數據類型所需要做的一切。
核心價值
另一個可能有用的過濾器是Key-Value或kv 。 它用于基于兩個鍵拆分數據。 因此,如果我們的日志行如下所示:
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過濾器解析消息中的數據。 該過濾器的唯一問題是您不能在過濾步驟中設置數據類型。
變異
您可能想要更改正在接收的日志,我不是在討論對日志行的完整分析,而是在進行一些小的更改。 有一個mutate過濾器可以執行此操作,并且可以使用多個命令來更改日志。
您可以使用mutate過濾器進行操作的一些示例:
- convert :您可能已經解析了一個字段,但是您需要該字段不僅僅是一個字符串。 convert命令允許您將其轉換為integer , float , string或boolean 。
- remove_field :您可能想從日志中刪除一些敏感數據,因此可以使用此命令將其刪除。
- gsub :這是一個使用正則表達式替換值的選項,您可能想混淆一些不相關的數據,可以為此使用該選項。
這將用掩碼版本替換所有事務引用。
輸出量
這是您可以將剛剛解析的日志定向到輸出或數據存儲的部分。 在我們的例子中,我們將使用NoSQL文檔存儲的Elasticsearch ,但您也可以將其發送到其他地方,例如CSV , HTTP甚至是email 。
您可以查看Logstash的文檔以查看所有輸出插件。
output {elasticsearch {hosts => ["192.168.0.15"]user => "elastic_user"password => "elastic_password"index => "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/*.log"output:logstash:hosts: ["logstash:5043"]我們可以看到inputs部分,該部分從文件夾讀取日志Logstash中托管在其他位置的output 。 在此配置文件中,我們正在從文件夾applog中讀取日志。 您還可以在路徑中使用全局模式來獲取多個文件或捕獲差異,例如大寫或小寫字母。
多行字符串
使用Filebeat您可能需要讀取多行字符串。 就像Logstash一樣,您可以在配置中使用multiline選項來讀取文件, Logstash所有相同字段都應用于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: afterFilebeat如何工作 Filebeat參考[7.1] | 有彈性
領域
您也可以在正在讀取的日志中添加其他信息,以便標識從中獲取數據的文件,以備日后使用。
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自動加載
您還可以從配置文件中拆分輸入列表,這樣就可以用輸入更新文件,而無需重新啟動Filebeat 。 因此,我們沒有將inputs直接添加到主配置文件中,而是將其提供給具有輸入配置的文件。
filebeat.config.inputs:enabled: truepath: inputs.ymlreload.enabled: truereload.period: 10sinputs.yml將要加載的Filebeat :
- type: logpaths:- "/var/log/haproxy.log"fields: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 。 在左側菜單中,您可以設置創建圖形的選項。
水桶
儀表板
現在,我們可以將構建在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
內核堆棧 用戶堆棧
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的内核堆栈 用户堆栈_弹性堆栈介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ps怎么绘制草稿(ps怎么绘制草稿图片)
- 下一篇: jdk 版本和内部版本对应_JDK 14