(貼一篇之前工作期間整理的elk學習筆記)
ELK官網 https://www.elastic.co
ELK日志分析系統 學習筆記
概念:ELK = elasticsearch + logstash + kibana
編程語言分別是 Java、JRuby、Ruby
概括的說,logstash 采集和結構化日志,輸入elasticsearch創建索引,kibana查詢elasticsearch這個搜索引擎 來完成數據的分析展示。
ELK 介紹:https://yq.aliyun.com/articles/73622
elasticsearch 基本概念,原理
詳見:http://www.cnblogs.com/valor-xh/p/6095894.html
基本概念
索引(Index)
ES將數據存儲於一個或多個索引中,索引是具有類似特性的文檔的集合。類比傳統的關系型數據庫領域來說,索引相當於SQL中的一個數據庫,或者一個數據存儲方案(schema)。
舉例說:pandora的所有日志可以存放於一個索引之中。
索引由其名稱(必須為全小寫字符)進行標識,並通過引用此名稱完成文檔的創建、搜索、更新及刪除操作。一個ES集群中可以按需創建任意數目的索引。
類型(Type)
類型是索引內部的邏輯分區(category/partition),然而其意義完全取決於用戶需求。因此,一個索引內部可定義一個或多個類型(type)。一般來說,類型就是為那些擁有相同的域的文檔做的預定義。
舉例說:pandora這個索引的type可以只有一個:pandoralog, 也可根據pandora的模塊 分成多個type, 比如 登陸、部署、配置...
例如,在索引中,可以定義一個用於存儲用戶數據的類型,一個存儲日志數據的類型,以及一個存儲評論數據的類型。類比傳統的關系型數據庫領域來說,類型相當於“表”。
文檔(Document)
文檔是Lucene索引和搜索的原子單位,基於JSON格式進行表示。 一個文檔就是一個保存在 es 中的 JSON 文本,可以把它理解為關系型數據庫表中的一行。每個文檔都是保存在索引中的,擁有一種type和 id。
id
Id 是用於標識文檔的,一個文檔的索引/類型/id 必須是唯一的。文檔 id 是自動生成的(如果不指定)。
field 字段
一個文檔包含了若干字段,或稱之為鍵值對。字段的值可以是簡單(標量)值(例如字符串、整型、日期),也可以是嵌套結構,例如數組或對象。一個字段類似於關系型數據庫表中的一列。每個字段的映射都有一個字段類型(不要和文檔類型搞混了),它描述了這個字段可以保存的值類型,例如整型、字符串、對象。映射還可以讓我們定義一個字段的值如何進行分析。
映射(Mapping)
ES中,所有的文檔在存儲之前都要首先進行分析。用戶可根據需要定義如何將文本分割成token、哪些token應該被過濾掉,以及哪些文本需要進行額外處理等等。
另外,ES還提供了額外功能,例如將域中的內容按需排序。事實上,ES也能自動根據其值確定域的類型。
總結來說, mapping的作用就是執行一系列的指令將輸入的數據轉成可搜索的索引項。
詳見http://blog.csdn.net/lvhong84/article/details/23936697
接下去再說說ES Cluster相關的一些概念。
集群(Cluster)
ES集群是一個或多個節點的集合,它們共同存儲了整個數據集,並提供了聯合索引以及可跨所有節點的搜索能力。
多節點組成的集群擁有冗余能力,它可以在一個或幾個節點出現故障時保證服務的整體可用性。
集群靠其獨有的名稱進行標識,默認名稱為“elasticsearch”。節點靠其集群名稱來決定加入哪個ES集群,一個節點只能屬一個集群。
如果不考慮冗余能力等特性,僅有一個節點的ES集群一樣可以實現所有的存儲及搜索功能。
節點(Node)
運行了單個實例的ES主機稱為節點,它是集群的一個成員,可以存儲數據、參與集群索引及搜索操作。
類似於集群,節點靠其名稱進行標識,默認為啟動時自動生成的隨機Marvel字符名稱。
用戶可以按需要自定義任何希望使用的名稱,但出於管理的目的,此名稱應該盡可能有較好的識別性。
節點通過為其配置的ES集群名稱確定其所要加入的集群。
分片(Shard)和副本(Replica)
ES的“分片(shard)”機制可將一個索引內部的數據分布地存儲於多個節點,它通過將一個索引切分為多個底層物理的Lucene索引完成索引數據的分割存儲功能,這每一個物理的Lucene索引稱為一個分片(shard)。
每個分片其內部都是一個全功能且獨立的索引,因此可由集群中的任何主機存儲。創建索引時,用戶可指定其分片的數量,默認數量為5個。
Shard有兩種類型:primary和replica,即主shard及副本shard。
Primary shard用於文檔存儲,每個新的索引會自動創建5個Primary shard,當然此數量可在索引創建之前通過配置自行定義,不過,一旦創建完成,其Primary shard的數量將不可更改。
Replica shard是Primary Shard的副本,用於冗余數據及提高搜索性能。
每個Primary shard默認配置了一個Replica shard,但也可以配置多個,且其數量可動態更改。ES會根據需要自動增加或減少這些Replica shard的數量。
ES集群可由多個節點組成,各Shard分布式地存儲於這些節點上。
ES可自動在節點間按需要移動shard,例如增加節點或節點故障時。簡而言之,分片實現了集群的分布式存儲,而副本實現了其分布式處理及冗余功能。
簡單的一個演示 加深對 index、doucument、type、id 的理解:
10.6.129.101:9200已搭建 通過restApi 與es交互
幾個很常用的接口:
/_cat 查看可用命令
/_cat/nodes?v
:查集群狀態
/_cat/health?v
:查詢集群健康狀態
/_cat/shards?v
:查看分片狀態
/${index}/${type}/_search?pretty
:搜索
/${index}/_search?pretty&q=xxx=xxx
:帶條件搜索
/_search?pretty :
查詢全部文檔
或
/_count?pretty
(uri后面加?v 表示 對查詢結果按類型分列展示;?pretty 表示對結果格式化輸出)
查看es 可用索引http://10.6.129.101:9200/_cat/indices?v
索引雇員文檔
- 每個雇員索引一個文檔,包含該雇員的所有信息。
- 每個文檔都將是 employee 類型 。 type
- 該類型位於 索引 megacorp 內。 index
- 該索引保存在我們的 Elasticsearch 集群中。
實踐中這非常簡單(盡管看起來有很多步驟),我們可以通過一條命令完成所有這些動作:
(拷貝下列代碼 到kibana DevTools模塊 中運行 是一個很方便的方法)
PUT /megacorp/employee/1
{
"first_name" : "John",
"last_name" : "Smith",
"age" : 25,
"about" : "I love to go rock climbing",
"interests": [ "sports", "music" ]
}
注意,路徑 /megacorp/employee/1 包含了三部分的信息:
megacorp
索引名稱
employee
類型名稱
1
特定雇員的ID
接着 再寫入兩條
PUT /megacorp/employee/2
{
"first_name" : "Jane",
"last_name" : "Smith",
"age" : 32,
"about" : "I like to collect rock albums",
"interests": [ "music" ]
}
PUT /megacorp/employee/3
{
"first_name" : "Douglas",
"last_name" : "Fir",
"age" : 35,
"about": "I like to build cabinets",
"interests": [ "forestry" ]
}
查詢es所有索引http://10.6.129.101:9200/_cat/indices?v 可以看到 新創建的megacorp 索引
檢索文檔
目前我們已經在 Elasticsearch 中存儲了一些數據, 接下來就能專注於實現應用的業務需求了。
1)第一個需求是可以檢索到單個雇員的數據。
GET /megacorp/employee/1
將 HTTP 命令由PUT
改為GET
可以用來檢索文檔,同樣的,可以使用DELETE
命令來刪除文檔,以及使用HEAD
指令來檢查文檔是否存在。如果想更新已存在的文檔,只需再次PUT
2)我們使用下列請求來搜索所有雇員
GET /megacorp/employee/_search
3)接下來,嘗試下搜索姓氏為 ``Smith`` 的雇員。為此,我們將使用一個 高亮 搜索,很容易通過命令行完成。這個方法一般涉及到一個 查詢字符串 (_query-string_) 搜索
GET /megacorp/employee/_search?q=last_name:Smith
我們仍然在請求路徑中使用_search
端點,並將查詢本身賦值給參數q=
。返回結果給出了所有的 Smith
4)Query-string 搜索通過命令非常方便地進行臨時性的即席搜索 ,但它有自身的局限性(參見 輕量 搜索)。Elasticsearch 提供一個豐富靈活的查詢語言叫做 查詢表達式 , 它支持構建更加復雜和健壯的查詢。
領域特定語言 (DSL), 指定了使用一個 JSON 請求。我們可以像這樣重寫之前的查詢所有 Smith 的搜索 :
GET /megacorp/employee/_search
{
"query" : {
"match" : {
"last_name" : "Smith"
}
}
}
這個請求使用 JSON 構造,並使用了一個 match
查詢
5)更復雜的搜索
現在嘗試下更復雜的搜索。 同樣搜索姓氏為 Smith 的雇員,但這次我們只需要年齡大於 30 的。查詢需要稍作調整,使用過濾器 filter ,它支持高效地執行一個結構化查詢。
GET /megacorp/employee/_search
{
"query" : {
"bool": {
"must": {
"match" : {
"last_name" : "smith"
}
},
"filter": {
"range" : {
"age" : { "gt" : 30 }
}
}
}
}
}
這部分與我們之前使用的 match 查詢 一樣。 |
|
這部分是一個 range 過濾器 , 它能找到年齡大於 30 的文檔,其中 gt 表示_大於(_great than)。 |
目前無需太多擔心語法問題,后續會更詳細地介紹。只需明確我們添加了一個 過濾器 用於執行一個范圍查詢,並復用之前的 match 查詢。現在結果只返回了一個雇員,叫 Jane Smith,32 歲。
6)全文搜索
截止目前的搜索相對都很簡單:單個姓名,通過年齡過濾。現在嘗試下稍微高級點兒的全文搜索——一項傳統數據庫確實很難搞定的任務。
搜索下所有喜歡攀岩(rock climbing)的雇員:
GET /megacorp/employee/_search
{
"query" : {
"match" : {
"about" : "rock climbing"
}
}
}
顯然我們依舊使用之前的 match
查詢在about
屬性上搜索 “rock climbing” 。得到兩個匹配的文檔:
{
...
"hits": {
"total": 2,
"max_score": 0.16273327,
"hits": [
{
...
"_score": 0.16273327,
"_source": {
"first_name": "John",
"last_name": "Smith",
"age": 25,
"about": "I love to go rock climbing",
"interests": [ "sports", "music" ]
}
},
{
...
"_score": 0.016878016,
"_source": {
"first_name": "Jane",
"last_name": "Smith",
"age": 32,
"about": "I like to collect rock albums",
"interests": [ "music" ]
}
}
]
}
}
|
相關性得分 |
Elasticsearch 默認按照相關性得分排序,即每個文檔跟查詢的匹配程度。第一個最高得分的結果很明顯:John Smith 的 about
屬性清楚地寫着 “rock climbing” 。
但為什么 Jane Smith 也作為結果返回了呢?原因是她的 about
屬性里提到了 “rock” 。因為只有 “rock” 而沒有 “climbing” ,所以她的相關性得分低於 John 的。
這是一個很好的案例,闡明了 Elasticsearch 如何 在 全文屬性上搜索並返回相關性最強的結果。Elasticsearch中的 相關性 概念非常重要,也是完全區別於傳統關系型數據庫的一個概念,數據庫中的一條記錄要么匹配要么不匹配。
7)短語搜索
找出一個屬性中的獨立單詞是沒有問題的,但有時候想要精確匹配一系列單詞或者短語 。 比如, 我們想執行這樣一個查詢,僅匹配同時包含 “rock” 和 “climbing” ,並且 二者以短語 “rock climbing” 的形式緊挨着的雇員記錄。
為此對 match
查詢稍作調整,使用一個叫做 match_phrase
的查詢:
GET /megacorp/employee/_search
{
"query" : {
"match_phrase" : {
"about" : "rock climbing"
}
}
}
8)高亮搜索
許多應用都傾向於在每個搜索結果中 高亮 部分文本片段,以便讓用戶知道為何該文檔符合查詢條件。在 Elasticsearch 中檢索出高亮片段也很容易。
再次執行前面的查詢,並增加一個新的 highlight
參數:
GET /megacorp/employee/_search
{
"query" : {
"match_phrase" : {
"about" : "rock climbing"
}
},
"highlight": {
"fields" : {
"about" : {}
}
}
}
當執行該查詢時,返回結果與之前一樣,與此同時結果中還多了一個叫做 highlight
的部分。這個部分包含了 about
屬性匹配的文本片段,並以 HTML 標簽 <em></em>
封裝:
9)分析聚合
終於到了最后一個業務需求:支持管理者對雇員目錄做分析。 Elasticsearch 有一個功能叫聚合(aggregations),允許我們基於數據生成一些精細的分析結果。聚合與 SQL 中的 GROUP BY
類似但更強大。
舉個例子,挖掘出雇員中最受歡迎的興趣愛好:
先開啟
PUT megacorp/_mapping/employee/
{
"properties": {
"interests": {
"type": "text",
"fielddata": true
}
}
}
執行
GET /megacorp/employee/_search
{
"aggs": {
"all_interests": {
"terms": { "field": "interests" }
}
}
}
暫時忽略掉語法,直接看看結果:
{
...
"hits": { ... },
"aggregations": {
"all_interests": {
"buckets": [
{
"key": "music",
"doc_count": 2
},
{
"key": "forestry",
"doc_count": 1
},
{
"key": "sports",
"doc_count": 1
}
]
}
}
}
可以看到,兩位員工對音樂感興趣,一位對林地感興趣,一位對運動感興趣。這些聚合並非預先統計,而是從匹配當前查詢的文檔中即時生成。如果想知道叫 Smith 的雇員中最受歡迎的興趣愛好,可以直接添加適當的查詢來組合查詢:
GET /megacorp/employee/_search
{
"query": {
"match": {
"last_name": "smith"
}
},
"aggs": {
"all_interests": {
"terms": {
"field": "interests"
}
}
}
}
all_interests
聚合已經變為只包含匹配查詢的文檔:
...
"all_interests": {
"buckets": [
{
"key": "music",
"doc_count": 2
},
{
"key": "sports",
"doc_count": 1
}
]
}
聚合還支持分級匯總 。比如,查詢特定興趣愛好員工的平均年齡:
GET /megacorp/employee/_search
{
"aggs" : {
"all_interests" : {
"terms" : { "field" : "interests" },
"aggs" : {
"avg_age" : {
"avg" : { "field" : "age" }
}
}
}
}
}
得到的聚合結果有點兒復雜,但理解起來還是很簡單的:
...
"all_interests": {
"buckets": [
{
"key": "music",
"doc_count": 2,
"avg_age": {
"value": 28.5
}
},
{
"key": "forestry",
"doc_count": 1,
"avg_age": {
"value": 35
}
},
{
"key": "sports",
"doc_count": 1,
"avg_age": {
"value": 25
}
}
]
}
輸出基本是第一次聚合的加強版。依然有一個興趣及數量的列表,只不過每個興趣都有了一個附加的 avg_age
屬性,代表有這個興趣愛好的所有員工的平均年齡。
即使現在不太理解這些語法也沒有關系,依然很容易了解到復雜聚合及分組通過 Elasticsearch 特性實現得很完美。可提取的數據類型毫無限制。
教程結語
這是一個關於 Elasticsearch 基礎描述的教程,且僅僅是淺嘗輒止,更多諸如 suggestions、geolocation、percolation、fuzzy 與 partial matching 等特性均被省略,以便保持教程的簡潔。但它確實突顯了開始構建高級搜索功能多么容易。不需要配置——只需要添加數據並開始搜索!
刪除索引
DELETE megacorp
其他的一些操作命令(
按時間查詢日志(國際時間)
Try a test query to Elasticsearch based on the fields created by the grok
filter plugin. Replace $DATE with the current date, in YYYY.MM.DD format:
curl -XGET 'localhost:9200/logstash-$DATE/_search?pretty&q=response=200'
例如 http://10.6.129.101:9200/logstash-2017.08.12/_search?pretty&q=host=10.33.42.212
其中 host=xxx可替換為host:xxx
按城市名稱查詢
curl -XGET 'localhost:9200/logstash-$DATE/_search?pretty&q=geoip.city_name=Buffalo'
)
Logstash 介紹
Logstash 是一款強大的數據處理工具,它可以實現數據傳輸,格式處理,格式化輸出,還有強大的插件功能,常用於日志處理(運行環境jvm 8)
官網地址:https://www.elastic.co/products/logstash
官方文檔:https://www.elastic.co/guide/en/logstash
Logstash管道有兩個必需的元素,input
、output
,以及一個可選的元素,filter
。輸入插件消費源數據,過濾器插件會按照你指定的方式修改數據,輸出插件將數據寫入到目的地(查看logstash安裝了哪些插件./bin/logstash-plugin list)。配置模板
input {{
}}
filter { filter {
}}
output {{
}}
示例 參見虛擬機10.6.129.101配置示例。
工作流程
Logstash 工作的三個階段:
input 數據輸入端,可以接收來自任何地方的源數據。
- file:從文件中讀取
- syslog:監聽在514端口的系統日志信息,並解析成RFC3164格式。
- redis:從redis-server list 中獲取
- beat:接收來自Filebeat的事件
Filter 數據中轉層,主要進行格式處理,數據類型轉換、數據過濾、字段添加,修改等,常用的過濾器如下。
- grok: 通過正則解析和結構化任何文本。Grok 目前是logstash最好的方式對非結構化日志數據解析成結構化和可查詢化。logstash內置了120個匹配模式,滿足大部分需求。
- mutate: 在事件字段執行一般的轉換。可以重命名、刪除、替換和修改事件字段。
- drop: 完全丟棄事件,如debug事件。
- clone: 復制事件,可能添加或者刪除字段。
- geoip: 添加有關IP地址地理位置信息。
output 是logstash工作的最后一個階段,負責將數據輸出到指定位置,兼容大多數應用,常用的有:
- elasticsearch: 發送事件數據到 Elasticsearch,便於查詢,分析,繪圖。
- file: 將事件數據寫入到磁盤文件上。
- mongodb:將事件數據發送至高性能NoSQL mongodb,便於永久存儲,查詢,分析,大數據分片。
- redis:將數據發送至redis-server,常用於中間層暫時緩存。
- graphite: 發送事件數據到graphite,用於存儲和繪制指標的流行開源工具。http://graphite.wikidot.com/
- statsd: 發送事件數據到 statsd。
Codecs編解碼器
編解碼器可以作為輸入的流過濾器。編解碼器使您可以輕松地將郵件的傳輸與序列化過程分開。流行的編解碼器包括json
,msgpack
和plain
(文本)。
簡單的兩種測試輸入輸出的配置
測試您的Logstash,運行最基本的Logstash管道。
1)例如:shell標准輸入數據
cd logstash-5.5.1
bin / logstash -e'input {stdin {}} output {stdout {}}'
2)或 端口輸入,stdout輸出
input {
beats {
port => "5043"
}
}
output {
stdout { codec => rubydebug }
}
驗證配置文件是否正確 和配置自動加載
bin/logstash -f first-pipeline.conf --config.test_and_exit
bin/logstash -f first-pipeline.conf --config.reload.automatic
該--config.reload.automatic
選項啟用自動配置重新加載,以便您每次修改配置文件時不必停止並重新啟動Logstash。
Grok 結構化數據
過濾器插件使您能夠將非結構化日志數據進行結構化 參見演示平台logstash 配置
filter {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}"}
}
}
刪除注冊文件,讓filebeat 重新讀取日志
sudo rm data/registry
geoip 補充ip信息 需下載geoip數據庫,或機器能連網
filter {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}"}
}
geoip {
source => "clientip"
}
}
logstash配置文件基礎語法:
https://www.elastic.co/guide/en/logstash/5.5/event-dependent-configuration.html
Grok 使用語法
https://www.elastic.co/guide/en/logstash/5.5/plugins-filters-grok.html
解析任意文本和結構。
Grok目前是logstash中將最壞的非結構化日志數據解析為結構化和可查詢的最佳方式。
此工具非常適用於syslog日志,apache和其他Web服務器日志,mysql日志以及通常為人類而不是計算機消費而編寫的任何日志格式。
默認情況下,Logstash約有120種模式。你可以在這里找到他們:https://github.com/logstash-plugins/logstash-patterns-core/blob/master/patterns/grok-patterns。你可以自己加入。(見patterns_dir
設定)
如果您需要幫助構建模式以匹配您的日志,您會發現 http://grokdebug.herokuapp.com和http://grokconstructor.appspot.com/應用程序非常有用!
基本演示: 訪問http://grokdebug.herokuapp.com/
日志:
55.3.244.1 GET /index.xml 15824 0.043
pattern:
%{IPV4:client} %{WORD:method} %{URIPATH:uri} %{INT:datalength} %{BASE16FLOAT:timecost}
輸出:
寫成配置:
input {
file {
path => "/var/log/http.log"
}
}
filter {
grok {
match => { "message" => "%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}" }
remove_field => [ "message" ]
}
}
filebeat 配置 fields type
- multiline:將多行文本事件(如java異常和堆棧跟蹤)消息合並到一個事件中。
filebeat.prospectors:
- input_type: log
paths:
- /var/log/*.log
fields:
type: syslog
output.logstash:
hosts: ["localhost:5043"]
logstash 配置 input tritter ,out put file,其中output:elasticsearch 可以填寫集群多個節點,自動負載均衡。端口可以不填,默認9200
input {
twitter {
consumer_key => "enter_your_consumer_key_here"
consumer_secret => "enter_your_secret_here"
keywords => ["cloud"]
oauth_token => "enter_your_access_token_here"
oauth_token_secret => "enter_your_access_token_secret_here"
}
beats {
port => "5043"
}
file {
path => “/var/log/ apache/ access.log”
type => “apache” }
}
output {
elasticsearch {
hosts => ["IP Address 1:port1", "IP Address 2:port2", "IP Address 3"]
}
file {
path => "/path/to/target/file"
}
}
elsaticsearch 查詢 上面配置的filed type :
curl -XGET 'localhost:9200/logstash-$DATE/_search?pretty&q=fields.type:syslog'
查詢推特信息
curl -XGET 'http://localhost:9200/logstash-$DATE/_search?pretty&q=client:iphone'
后台運行logstash
logstash 啟停 /etc/init.d/logstash start
# 通過這種方式啟動,logstash會自動加載 /etc/logstash/conf.d/ 下的配置文件
或后台命令行運行:
nohup /usr/share/logstash/bin/logstash -f /usr/share/logstash/bin/logstash.conf &>/dev/null &
哈希
哈希是以格式指定的鍵值對的集合"field1" => "value1"
。請注意,多個鍵值條目由空格分隔,而不是逗號。
例:
match => { “field1” => “value1” “field2” => “value2” ... }
output -elasticsearch
https://www.elastic.co/guide/en/logstash/5.5/plugins-outputs-elasticsearch.html
index
id
添加一個獨特ID
的插件配置。如果沒有指定ID,Logstash將生成一個。強烈建議您在配置中設置此ID。當您有兩個或多個相同類型的插件時,例如,如果您有2個Grok過濾器,則此功能特別有用。在這種情況下添加命名ID將有助於在使用監視API時監視Logstash。
輸出{
stdout {
id =>“my_plugin_id”
}
}
nginx 實戰 比較全面的一個示例
參考文檔http://tchuairen.blog.51cto.com/3848118/1840596/
1)注意事項:
其中nginx 日志改json 格式的方法: 在http 域內 定義名為json的log_format 格式,然后指定日志文件access.log使用該格式:
access_log logs/access.log json;
最后重新加載,或重啟nginx 以生效
如下:
http {
log_format json '{"@timestamp":"$time_iso8601",'
'"slbip":"$remote_addr",'
'"clientip":"$http_x_forwarded_for",'
'"serverip":"$server_addr",'
'"size":$body_bytes_sent,'
'"responsetime":$request_time,'
'"domain":"$host",'
'"method":"$request_method",'
'"requesturi":"$request_uri",'
'"url":"$uri",'
'"appversion":"$HTTP_APP_VERSION",'
'"referer":"$http_referer",'
'"agent":"$http_user_agent",'
'"status":"$status"}';
access_log logs/access.log json;
- input_type: log
paths:
- /usr/local/openresty/nginx/logs/access.log
fields:
type: nginxacclog
fields_under_root: true
2)grok匹配pandora 日志 示例:
.2017-08-13 12:42:25.112 MsgProcessThread-4 org.springframework.web.servlet.mvc.method INFO - ping from [/10.33.25.215:41542]
%{TIMESTAMP_ISO8601:time} %{USERNAME :thread} %{USERNAME:classpath} %{LOGLEVEL:loglevel} - %{GREEDYDATA:data}
logstash if else 語法
if EXPRESSION {
...
} else if EXPRESSION {
...
} else {
...
}
kibana 基本操作
Discover 對日志進行檢索查看
Visuallize 圖表可視化 配置;對特定規則聚合的數據進行圖表分析
Dashboard 將Visualize設置的圖表展示成儀表盤,有分組功能
Timelion 默認顯示的.es(*) 為 es 文檔個數
Dev Tools 一個RestAPI Console 與elasticsearch 進行交互
Management 創建管理索引的地方 以及 其他 的高級設置