ELK簡介

ELK是一整套解決方案,是三個(gè)軟件產(chǎn)品的首字母縮寫,Elasticsearch,Logstash和Kibana。

Logstash:負(fù)責(zé)數(shù)據(jù)的收集,處理和儲(chǔ)存

Elasticsearch:負(fù)責(zé)數(shù)據(jù)的檢索和分析

Kibana:負(fù)責(zé)可視化

體系結(jié)構(gòu)


基本流程是 logstash 負(fù)責(zé)從各種數(shù)據(jù)源里采集數(shù)據(jù),然后再寫入 Elasticsearch,Elasticsearch 對(duì)這些數(shù)據(jù)創(chuàng)建索引,然后由 Kibana 對(duì)其進(jìn)行各種分析并以圖表的形式展示。

安裝過程

具體安裝過程如下:

步驟1,安裝JDK1.8

步驟2,安裝Elasticsearch

步驟3,安裝Kibana

步驟4,安裝logstash

步驟5,安裝logstash-input-jdbc

步驟6,驗(yàn)證

logstash


Mysql in elasticsearch out

input {

jdbc {

jdbc_connection_string => "jdbc:mysql://xxx.xxx.xxx.xxx:3306/database?useCursorFetch=true&defaultFetchSize=100"

jdbc_user => "user"

jdbc_password => "password"

jdbc_validate_connection => true

jdbc_driver_library => "/usr/local/logstash/lib/mysql-connector-java-5.1.13-bin.jar"

jdbc_driver_class => "com.mysql.jdbc.Driver"

statement => "select * from article"

}

}

output {

elasticsearch {

index => "article"

hosts => "xxx.xxx.xxx.xxx:9200"

}

}

Kibana

配置ES的索引顯示


Kibana ES Dev Tools

elasticsearchAPI基于HTTP協(xié)議,以JSON為數(shù)據(jù)交互格式的RESTful API向Elasticsearch發(fā)出的請(qǐng)求的組成部分與其它普通的HTTP請(qǐng)求是一樣的:curl -X'://:/?' -d ''

VERB HTTP方法:GET, POST, PUT, HEAD, DELETE

PROTOCOL http或者h(yuǎn)ttps協(xié)議(只有在Elasticsearch前面有https代理的時(shí)候可用)

HOST Elasticsearch集群中的任何一個(gè)節(jié)點(diǎn)的主機(jī)名,如果是在本地的節(jié)點(diǎn),那么就叫l(wèi)ocalhost

PORT Elasticsearch HTTP服務(wù)所在的端口,默認(rèn)為9200

PATH API路徑(例如_count將返回集群中文檔的數(shù)量),PATH可以包含多個(gè)組件,例如_cluster/stats或者_(dá)nodes/stats/jvm

QUERY_STRING 一些可選的查詢請(qǐng)求參數(shù),例如?pretty參數(shù)將使請(qǐng)求返回更加美觀易讀的JSON數(shù)據(jù)

BODY 一個(gè)JSON格式的請(qǐng)求主體(如果請(qǐng)求需要的話)

舉例說明,為了計(jì)算集群中的文檔數(shù)量,我們可以這樣做:

curl -XGET 'http://xxx.xxx.xxx.xxx:9200/_count?pretty' -d '

{

"query": {

"match_all": {}

}

}

'

索引

在Elasticsearch中,文檔歸屬于一種類型(type),而這些類型存在于索引(index)中,我們可以畫一些簡單的對(duì)比圖來類比傳統(tǒng)關(guān)系型數(shù)據(jù)庫:

Relational DB -> Databases -> Tables -> Rows -> Columns

Elasticsearch -> Indices? -> Types? -> Documents -> Fields

我們將進(jìn)行如下操作:

為每個(gè)員工的文檔(document)建立索引,每個(gè)文檔包含了相應(yīng)員工的所有信息。

每個(gè)文檔的類型為employee。

employee類型歸屬于索引megacorp。

megacorp索引存儲(chǔ)在Elasticsearch集群中。

實(shí)際上這些都是很容易的(盡管看起來有許多步驟)。我們能通過一個(gè)命令執(zhí)行完成的操作:

PUT /megacorp/employee/1

{

"first_name" : "John",

"last_name" :? "Smith",

"age" :? ? ? ? 25,

"about" :? ? ? "I love to go rock climbing",

"interests": [ "sports", "music" ]

}

我們看到path:/megacorp/employee/1包含三部分信息:

名字 ? ? ? ? ? ? ? ? ? ? ?說明

megacorp ? ? ? ? ? ?索引名

employee ? ? ? ? ? ? 類型名

1 ? ? ? ? ? ? ? ? ? ? ? ? ? ?這個(gè)員工的ID

接下來,讓我們?cè)谀夸浿屑尤敫鄦T工信息:

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

}

搜索

檢索文檔

我們只要執(zhí)行HTTP GET請(qǐng)求并指出文檔的“地址”——索引、類型和ID既可。根據(jù)這三部分信息,我們就可以返回原始JSON文檔:

GET /megacorp/employee/1

簡單搜索

搜索全部員工的請(qǐng)求:

GET /megacorp/employee/_search

搜索姓氏中包含“Smith”的員工

GET /megacorp/employee/_search?q=last_name:Smith

使用DSL語句查詢

GET /megacorp/employee/_search

{

"query" : {

"match" : {

"last_name" : "Smith"

}

}

}

全文搜索

搜索所有喜歡“rock climbing”的員工:

GET /megacorp/employee/_search

{

"query" : {

"match" : {

"about" : "rock climbing"

}

}

}

短語搜索

匹配若干個(gè)單詞或者短語(phrases),將match查詢變更為match_phrase查詢即可:

GET /megacorp/employee/_search

{

"query" : {

"match_phrase" : {

"about" : "rock climbing"

}

}

}

聚合

Elasticsearch有一個(gè)功能叫做聚合(aggregations),它允許你在數(shù)據(jù)上生成復(fù)雜的分析統(tǒng)計(jì)。它很像SQL中的GROUP BY但是功能更強(qiáng)大。

舉個(gè)例子,讓我們找到所有職員中最大的共同點(diǎn)(興趣愛好)是什么:

GET /megacorp/employee/_search

{

"aggs": {

"all_interests": {

"terms": { "field": "interests" }

}

}

}

問題: set fielddata = true on

解決:

PUT megacorp/_mapping/employee

{

"employee": {

"properties": {

"interests": {

"type": "text",

"fielddata": true

}

}

}

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容