【Elastic-1】ELK基本概念、環境搭建、快速開始文檔

TODO

基本概念

ElasticSearch

什麼是ElasticSearch?

首推官網的解釋: https://www.elastic.co/guide/en/elasticsearch/reference/7.11/elasticsearch-intro.html

我簡單總結下,ES(ElasticSearch的縮寫,下文大寫的ES都表示ElasticSearch)是一個分佈式的搜索和分析引擎,可以通過Logstash、Beats收集數據,並將其存儲在ES中。然後通過Kibana可視化的展示、分析你存儲的數據。上述就著名的ELK三件套,當然L不是必需的,數據也可以自己寫入。

ES不同於傳統關係型數據庫(RDBMS),ES不是將數據轉爲一列列的數據行,而是存儲已經序列化爲JSON文檔的複雜數據結構。這些文檔分佈在集羣中,可以從任何節點上立即訪問。當文檔被存儲時,它就會被編入索引,並且在1秒內就可以被搜索到,可以做到近實時。

ES使用的是一種被稱爲倒排索引的數據結構,倒排索引會列出文檔中每一個單詞,並標識出這些單詞出現過的所有文檔。所以,如果拿ES當搜索引擎使用,怎麼分詞是非常重要的。

應用場景

  • 搜索類場景,比如電商網站、招聘網站、新聞資訊等各類應用,只要涉及到搜索功能,都可以用ES來做。

  • 日誌平臺,經典的ELK三件套,日誌的收集、存儲、分析一套完成,省心又省力。

  • 數據分析,比如篩選出topN訪問量的頁面。

核心概念

  • 索引(Index):類似關係型數據庫中的數據庫,通常一類數據只放到一個索引中。比如A系統的日誌,就放到log_a索引中。系統B的訪問量統計,就放到pv_b中。

  • 類型(type):這個概念每個版本變動都比較大,ES5.X中一個index可以有多種type,6.X中一個index只能有一個type,7.X中要逐漸移除這個概念。type表示這個文檔是該index中,哪一個類別的。如果非要和關係型數據庫做個類比,可以想象成表。

  • 文檔(document):文檔就是一條JSON數據,類似於關係型數據庫中的一行數據。

  • 映射(mapping):mapping定義了文檔中,每個字段的類型等信息,類似於關係型數據庫中的表結構。

Kibana

Kibana是一個基於Node.js的可視化工具,可以利用ES的聚合功能,生成柱狀圖、餅圖、折線圖等各類圖標。而且還提供了操作ES的控制檯(Dev Tools),可以直接在控制檯中輸入RESTful API來操作ES,並且提供了一定的API提示和語法高亮,有助於我們對ES API的學習。

Kibana沒有太多複雜的概念,我們只要會用即可。最後整合ELK時,我會介紹一些基本的用法。也可以看看官方文檔,裏面還有視頻教程:https://www.elastic.co/guide/en/kibana/7.11/introduction.html

Logstash

貼一張官方的圖,Logstash的作用一目瞭然:

Logstash是一個具有實時收集數據的開源引擎,Logstash可以收集不同的數據源,然後將數據規範化的輸出到你的目的地,也就是ES。

Logstash有三個重要的組成部分,inputs、filters、outputs。inputs和outputs是必需的,需要我們配置數據的輸入源和數據的輸出源。而在實際中,filters更爲重要,它可以按照你指定的規則,過濾、操作數據。數據的格式統一,存入到ES後,有助於我們分析、查詢這些數據。

系統環境和軟件準備

操作系統

CentOS7

JDK

JDK8

yum install -y java-1.8.0-openjdk

ElasticSearch

版本號7.11,Kibana、Logstash和ES版本保持一致。

#下載es7.11壓縮包
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.11.0-linux-x86_64.tar.gz

Kibana

wget https://artifacts.elastic.co/downloads/kibana/kibana-7.11.0-linux-x86_64.tar.gz

Logstash

wget https://artifacts.elastic.co/downloads/logstash/logstash-7.11.0-linux-x86_64.tar.gz

快速開始

ElasticSearch

# 解壓壓縮包
tar -zxvf elasticsearch-7.11.0-linux-x86_64.tar.gz
# 移至你專門放軟件的目錄,儘量別在root根目錄
mv elasticsearch-7.11.0 /usr/elasticsearch/
# 修改配置文件
vim /usr/elasticsearch/elasticsearch-7.11.0/config/elasticsearch.yml

單機啓動只需簡單修改如下幾項配置即可。如果是運維的朋友,可以去官方文檔瞭解更多的配置信息:https://www.elastic.co/guide/en/elasticsearch/reference/7.11/settings.html 根據右側目錄可以快速找到自己想看的配置主題,比如Network settings。

node.name: node-1
# 因爲我部署在雲服務器上,想要外網訪問這裏要配置成0.0.0.0
# 如果是虛擬機的話就配置成ip地址,
# 如果是本機可以不改此項,默認綁到本機
# 可參考文檔:https://www.elastic.co/guide/en/elasticsearch/reference/7.11/modules-network.html
network.host: 0.0.0.0 
# 如果是雲服務器記得在防火牆裏添加9200、9300,後面Kibana用到的5601端口也要記得添加
http.port: 9200
cluster.initial_master_nodes: ["node-1"]

根據自己的機器配置,按需修改JVM內存配置。ES默認配置是1G,考慮到後面會啓動Kibana,可以增加一些。

vim /usr/elasticsearch/elasticsearch-7.11.0/config/jvm.options

# 配置初始和最大堆內存
 -Xms2g
 -Xmx2g

添加es用戶,es默認root用戶無法啓動,所以需要新建一個用戶

useradd es # 新建用戶
passwd es # 修改密碼
chown -R es /usr/elasticsearch/ #賦予軟件包所在目錄的權限

Elasticsearch 默認情況下使用 mmapfs 目錄來存儲其索引。mmap 計數的默認限制可能太低,這可能導致內存不足異常。可以以root身份運行以下命令增加限制

sysctl -w vm.max_map_count=655360

如果要永久更改這個限制可以去系統文件中修改

vim /etc/sysctl.conf         # 末尾添加如下內容vm.max_map_count=655360
# :wq後,使新增內容生效
sysctl -p

ES同樣會用到大量線程池,所以我們也需要修改一些配置,確保ES可以創建的線程數量至少爲4096個。

vim /etc/security/limits.conf# 文末添加es - nofile  65535

切換到es用戶,然後啓動ES

su es/usr/elasticsearch/elasticsearch-7.11.0/bin/elasticsearch

觀察啓動日誌,如果你的版本和我一樣,並且沒有遺漏什麼配置,應該都能正常啓動。如果沒有正常啓動,根據日誌解決問題即可。如果看不明白日誌,自行Google。

新建一個終端,或者打開瀏覽器,訪問ip:port,如果返回如下信息,就表示啓動成功。

curl http://ip:9200/

# 響應信息
{
  "name" : "node-1",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "uAIt_QYIQTy0YkATySbDhw",
  "version" : {
    "number" : "7.11.0",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "8ced7813d6f16d2ef30792e2fcde3e755795ee04",
    "build_date" : "2021-02-08T22:44:01.320463Z",
    "build_snapshot" : false,
    "lucene_version" : "8.7.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

到此爲止,單機版ES啓動完畢,說的比較詳細,後面的Kibana會適當簡略一點。建議有能力的,還是根據自己的需求過一遍文檔。可以不用全部看完,運維的朋友可以着重看看配置、集羣管理、監控等相關章節。開發的朋友可以着重看看API、client、Mapping、DSL等。

Kibana

解壓、移動

tar -zxvf kibana-7.11.0-linux-x86_64.tar.gzmv kibana-7.11.0-linux-x86_64 /usr/kibana/

賦予es用戶Kibana目錄權限

chown -R es /usr/kibana/

修改配置文件

vim /usr/kibana/kibana-7.11.0-linux-x86_64/config/kibana.yml

配置內容如下:

server.port: 5601server.host: "0.0.0.0"     # 如果ES和Kibana不在同一臺機器上,這裏改成ES所在機器的IP
elasticsearch.hosts: ["http://localhost:9200"]

啓動Kibana,觀察日誌有沒有報錯

su es/usr/kibana/kibana-7.11.0-linux-x86_64/bin/kibana

進入Kibana可視化頁面,打開瀏覽器,輸入ip:5601

Logstash

解壓、移動、賦予目錄權限

tar -zxvf logstash-7.11.0-linux-x86_64.tar.gzmv logstash-7.11.0 /usr/logstash/chown -R es /usr/logstash/

配置input、output。filter我們暫時不配置,下面的SpringBoot整合ELK再演示filter。

su es
# 先進到配置文件目錄,複製一份配置模板
cd /usr/logstash/logstash-7.11.0/config/
cp logstash-sample.conf logstash.conf
# 配置輸入輸出
vim logstash.conf

填入如下內容:

input {
  file {
    path => ["/usr/log/movies.csv"] # 待導入數據的目錄
    start_position => "beginning" # 頭從開始
  }
}
filter {
  csv {
    separator => ","
    columns => ["id","content","genre"]
  }

  mutate {
    split => { "genre" => "|" }
    remove_field => ["path", "host","@timestamp","message"]
  }

  mutate {

    split => ["content", "("]
    add_field => { "title" => "%{[content][0]}"}
    add_field => { "year" => "%{[content][1]}"}
  }

  mutate {
    convert => {
      "year" => "integer"
    }
    strip => ["title"]
    remove_field => ["path", "host","@timestamp","message","content"]
  }

}
output {
   elasticsearch {
     hosts => "http://localhost:9200"
     index => "movies"
     document_id => "%{id}"
   }
}     

上述配置文件中,我簡單說說它們的意思。其中input、filter和output就是Logstash管道的三個組件。組件裏面的file、csv、mutate、elasticsearch等,是各自組件的插件,它們有不同的功能。比如file插件就是讀取文件,而filter裏面的mutate插件可以對數據進行常規的操作,比如重命名、刪除、修改等。具體的插件用法和解釋可見如下鏈接:

在啓動Logstash前我們先往/usr/log/目錄中放些數據,數據集我是在網上找的,地址:https://grouplens.org/datasets/movielens/ 大家可以根據自己的網速、硬盤大小下載,網速慢的就下個小點的數據集。然後複製到/usr/log/目錄下即可。

# 下載測試的數據集
wget https://files.grouplens.org/datasets/movielens/ml-latest-small.zip
unzip ml-latest-small.zip 
cd ml-latest-small/
cp movies.csv /usr/log/
# 加載指定配置文件,啓動Logstash
/usr/logstash/logstash-7.11.0/bin/logstash -f /usr/logstash/logstash-7.11.0/config/logstash.conf

觀察日誌,看是否正常啓動。我第一次啓動時,由於ELK都部署在同一臺雲服務(4G內存),內存不足啓動失敗,可以去Logstash的jvm配置文件裏面適當減小最小堆內存即可。

導入成功後,就可以去Kibana的Index Management頁面看到這個數據集了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章