ELK 探索

ELK

Elasticsearch

基本概念

NRT--Near Real Time

近實時:你對文檔進行索引到你能對其進行查詢的延時很短(一般是1s)

Cluster--集群

擁有你全量數(shù)據(jù)并提供索引存儲和查詢功能的一個或多個es服務節(jié)點。

Node--服務節(jié)點

服務節(jié)點是一臺集群中的服務器,為集群提供索引和查詢能力。

Index--索引

索引是一個擁有類似特征的文檔的集合。

Document--文檔

文檔是一個可被索引的信息的基本單元。

Shards & Replicas--分區(qū)和復制

安裝ES

yum

# step1 下載rpm包
# step2 yum install 

具體可參考官方

docker

docker pull docker.elastic.co/elasticsearch/elasticsearch:6.2.4 包含xpack
docker pull docker.elastic.co/elasticsearch/elasticsearch-platinum:6.2.4 包含xpack及30天試用證書
docker pull docker.elastic.co/elasticsearch/elasticsearch-oss:6.2.4 不包含xpack

ES的關鍵配置

ES只需要很簡單的配置即可開始使用,但在投入生產之前,官方建議我們仔細閱讀如下配置:

Path Settings

如果用zip或tar包安裝,那么數(shù)據(jù)和日志的文件夾是在$ES_HOME的子文件夾下,如果保持默認配置不變,這兩個文件夾很有極大風險被刪除。

path:
  logs: /var/log/elasticsearch
  data: /var/data/elasticsearch

Cluster names

ES會將所有有共同集群名稱的服務節(jié)點加入集群。

需要注意不同的環(huán)境(測試、生產)的配置集群名的區(qū)分,否則就會出現(xiàn)不同環(huán)境的節(jié)點加入同個集群。

cluster.name: logging-prod

Node name

ES會使用隨機生成的UUID的前七位作為node id。node id 是永久的并不會因為重啟而改變,因此默認的node name也不會改變。

官方建議給出更有意義的命名方式。

node.name: prod-data-2
# 也可以設置為系統(tǒng)的HOSTNAME
node.name: ${HOSTNAME}

Network host

ES會使用回送地址(loopback addresses) 127.0.0.1 和 [::1]。對于單個開發(fā)節(jié)點來說,這樣的配置就足夠了。

但是為了集群的節(jié)點間通信呢,我們就需要指定一個非回送地址(non-loopback address):

network.host: 192.168.1.10

ES還可以識別其他的特殊值,詳見這里。

Discovery settings

ES使用的是一種自定義的集群節(jié)點對節(jié)點和主從選舉發(fā)現(xiàn)方式--“Zen Discovery“。這個發(fā)現(xiàn)方式有兩個重要的配置項:

  • discovery.zen.ping.unicast.hosts

在沒有任何網絡配置的情況下,ES會banding在回送地址并會不斷掃描9300-9305端口來連接其他在同個服務器上的其他節(jié)點。

如果需要連接其他服務器的節(jié)點,則需要我們給出種子節(jié)ip地址。種子節(jié)點的ip地址可以用如下方式給出:

discovery.zen.ping.unicast.hosts:
   - 192.168.1.10:9300
   - 192.168.1.11 # 不指定端口會訪問默認端口
   - seeds.mydomain.com # 這個域名解析出的全部ip
  • discovery.zen.minimum_master_nodes

為防止數(shù)據(jù)丟失,這個配置是非常重要的。有了這項配置,集群中的所有節(jié)點就知道選舉主節(jié)點需要的最少參與節(jié)點數(shù)。如果沒有這項配置,某個節(jié)點的網絡錯誤會導致集群分成兩個部分,從而導致數(shù)據(jù)丟失。關于集群分成兩個部分,我們可以看這個更詳細的描述,在這個更詳細的描述中,官方建議集群配置最少需要三個主節(jié)點。

# 算法:(master_eligible_nodes / 2) + 1
# 如果我們有三個主節(jié)點,則我們需要配置最少2個。(3/2) + 1 = 2
discovery.zen.minimum_master_nodes: 2

Heap size

ES會默認配置1GB的最小/最大堆容量。當我們往生產環(huán)境遷移的時候,確保ES有足夠的堆容量是很重要的一點。

官方給出如下建議:

  • 將最小Xms和最大Xmx的對容量設置為相同數(shù)值。
  • 為ES配置的對容量越大,ES可使用的緩存越大。需要指出的是,過大的對容量會導致很長的垃圾回收暫停。
  • 設置Xmx的時候,不要超過物理RAM容量的50%來保證系統(tǒng)有足夠的RAM來提供文件系統(tǒng)的緩存。
  • 設置Xmx數(shù)值的時候,不要超過JVM為壓縮對象指針的隔斷。不同java版本的隔斷不同,但都接近32GB。我們可以在ES的日志中找到如下這一行,確認一下這個數(shù)值:
heap size [1.9gb], compressed ordinary object pointers [true]
heap size
  • 更好的做法是,我們可以試著將Xmx設置為低于 the threshold for zero-based compressed oops;在大部分系統(tǒng)這個值一般確定在26GB,有些系統(tǒng)是30GB。你可以在ES的啟動時對其jvm參數(shù)多家兩行:XX:+UnlockDiagnosticVMOptions -XX:+PrintCompressedOopsMode 在啟動日志尋找如下兩行:
heap address: 0x000000011be00000, size: 27648 MB, zero based Compressed Oops
heap address: 0x0000000118400000, size: 28672 MB, Compressed Oops with base: 0x00000001183ff000
compressed oops

PS:實驗下來,使用docker啟動ES, the cutoff that the JVM uses for compressed object pointers 跟the threshold for zero-based compressed oops這兩個數(shù)值與docker容器中jvm.options中Xms和Xmx數(shù)值掛鉤,與分配給docker容器的內存不相關。

Heap dump path

使用RMP和Debian包安裝的ES服務,默認的堆轉儲文件會存放在/var/lib/elsaticsearch。如果這個路徑不適合存儲,你可以在jvm.options修改這個路徑。

-XX:HeapDumpPath=/var/lib/elasticsearch

需要指出的是,使用打包好的ES(zip,tar)開啟的ES服務,會將堆轉儲存在ES的工作目錄下,如果你想換路徑,需要修改jvm.options中# -XX:HeapDumpPath=/heap/dump/path 這一行。

GC logging

ES默認會開啟GC logging。這個也是在jvm.options中配置,且與ES日志在相同路徑。默認的日志每個文件64M,最多占用2GB磁盤空間。

LogStash

logstash

安裝LogStash

https://www.elastic.co/guide/en/logstash/current/installing-logstash.html

基本概念

管道

輸入 input

  • file:文件。從文件系統(tǒng)讀取文件,類似命令tail -0F
  • syslog:從514端口讀取系統(tǒng)日志信息并且用RFC3164格式解析。
  • redis:使用redis channels和redis lists讀取redis 服務器內容。redis經常扮演“中間人”的角色,將遠程的logstash事件按隊列傳輸。
  • beats:處理Filebeat傳遞的事件。

過濾 filter

  • grok:對任意文本進行解析和重構。
  • mutate:對事件中字段進行通用處理。
  • drop:對一些事件直接丟棄,如debug事件。
  • clone:對事件進行拷貝,可以添加或移除字段。
  • geoip:根據(jù)ip地址獲取地理位置信息。

輸出 output

  • elasticsearch:可以將事件直接傳遞給ES服務器。
  • file:可以將事件寫入磁盤文件。
  • graphite:將事件傳遞給graphite。
  • statsd:將事件傳遞給statsd。

解編碼器 Codecs

  • json:以json格式解編碼。
  • multiline:將多行文件(如java拋出的異常和堆棧信息)合并為單行事件。

一般用法

bin/logstash -f logstash-simple.conf

logstash-simple.conf一般格式

# 這里是注釋
# 這里是輸入描述
input {
  ...
}
# 這里是
filter {
  ...
}

output {
  ...
}

logstash-simple.conf樣例

input {
  beat {
    port => "5044" # 暴露給filebeat端口,使用docker請記得將5044端口映射出去。
  }
}

filter { 
  dissect {
    mapping => {
      "message" => "[%{req_msg}] %{ip} () {%{msg_body}} [%{ts} %{+ts} %{+ts} %{+ts} %{+ts}] %{method} %{uri} => %{generated_msg} (%{http_p} %{http_status}) %{other_message}"
    }
  } 
  mutate {
    replace => {"ip"=> "112.64.179.50"}
  } 
  geoip {
    source => "ip"
  }
}
  
output {
  elasticsearch { hosts => ["localhost:9200"] }
  stdout { codec => rubydebug }
}

Filebeat

Beats design

filebeat設計原理如上圖所示,主要由兩個核心組件組成:Harvester和Prospector。

Harvester

Harvester主要負責讀取單個文件的內容。

Prospector

Prospector主要負責管理Harvesters和尋找所有可以讀取的源。

目前支持兩種Prospector格式:logstdin

如果格式為log,則filebeat會根據(jù)配置,讀取全部滿足條件的文件,每個文件一個Harvester。

安裝Filebeat

https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-installation.html

一般配置

日志路徑

配置日志所在路徑或者某個日志文件??梢允褂?代表通配。

filebeat.prospectors:
- type: log
  enabled: true
  paths:
    - /var/log/*.log
    #- c:\programdata\elasticsearch\logs\*

ES配置

如果希望直接將filebeat讀取到的日志文件傳輸至ES,可以使用如下配置:

output.elasticsearch:
  hosts: ["192.168.1.42:9200"]

kibana配置

如果想使用filebeat為kibana提供的dashboard模板,可以使用如下配置:

setup.kibana:
  host: "localhost:5601"

配合logstash使用

注意:logstash和ES不能同時使用。

#----------------------------- Logstash output --------------------------------
output.logstash:
  hosts: ["127.0.0.1:5044"]

設置filebeat dashboard

filebeat setup --dashboards

配置filebeat modules

一共有三種方法:

1、開啟默認module配置:

在/etc/filebeat 路徑下(centos7)有一個modules.d文件夾,該文件夾有所有默認模塊的默認配置。默認模塊包括:apache2、mysql、system等??梢允褂胢odules enable或modules disable開啟或關閉。

./filebeat modules enable apache2 mysql

查看支持的modules:

./filebeat modules list

2、在啟動filebeat的時候開啟:

./filebeat -e --modules nginx,mysql,system

3、在filebeat.yml配置:

可在filebeat.yml最后添加:

filebeat.modules:
- module: apache2
  # Access logs
  access:
    enabled: true
    # Set custom paths for the log files. If left empty,
    # Filebeat will choose the paths depending on your OS.
    var.paths: ["/var/log/httpd/access_log*"]

    # Prospector configuration (advanced). Any prospector configuration option
    # can be added under this section.
    #prospector:

  # Error logs
  error:
    enabled: true

    # Set custom paths for the log files. If left empty,
    # Filebeat will choose the paths depending on your OS.
    var.paths: ["/var/log/httpd/error_log*"]

    # Prospector configuration (advanced). Any prospector configuration option
    # can be added under this section.
    #prospector:

具體modules可參考:https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-modules.html

Kibana

Kibana是一個開源、基于ES的分析和可視化平臺??梢杂么鎯玫臄?shù)據(jù)指標在kibana上進行搜索、查看和互動。在kibana上,你還能對數(shù)據(jù)進行更進一步的分析并用圖表、表格和地圖的形式可視化呈現(xiàn)。

搭建kibana服務

安裝

https://www.elastic.co/guide/en/kibana/current/install.html

配置

如需正常運行所需的最小配置:

# 任意ip均可訪問
server.host: "0"
# 默認端口5601
server.port: 5601 
# ES的url
elasticsearch.url: "http://localhost:9200"

其他配置可參考:https://www.elastic.co/guide/en/kibana/current/settings.html

簡單使用

需要可視化或查詢數(shù)據(jù)之前,需要在kibana中設置ES的index。

點擊左側邊欄"Management"-->"Index Patterns"-->"Create Index Pattern"即可設置。

在kibana 6.x中,會顯示ES中已有的index。用戶可根據(jù)自己的需求,設置index的正則匹配規(guī)則,如:

logstash-*
logstash-6.2.4-*
創(chuàng)建索引規(guī)則

隨后便可在頁面中,對指定的index進行查詢或可視化操作了。

可視化操作

補充:lucene 查詢語法

整體搭建流程

環(huán)境說明:

  • centos7
  • docker

ES

# 采用elasticsearch-oss的鏡像,oss代表不包含xpack的鏡像。xpack收費,提供管理、機器學習等模塊。
docker run -itd --restart=always -p 9200:9200 -p 9300:9300 docker.elastic.co/elasticsearch/elasticsearch-oss:6.2.4

將9200(數(shù)據(jù)交互、API交互端口) 9300(集群發(fā)現(xiàn)端口)暴露出來即可。

kibana

由于docker默認的kibana掃描的ES url為'http://elasticsearch.com:9200'
我采用docker build,將kibana.yml復制進docker鏡像。

kibana.yml

# Kibana is served by a back end server. This setting specifies the port to use.
server.host: "0"
server.port: 5601
elasticsearch.url: "http://192.168.2.26:9200"

Dockerfile

FROM docker.elastic.co/kibana/kibana-oss:6.2.4

COPY kibana.yml /usr/share/kibana/config/kibana.yml
USER root
RUN chown kibana /usr/share/kibana/config/kibana.yml
USER kibana

Docker build & run

# 在Dockerfile所在文件夾運行
docker build -t kibana-custom:v1 .
# 隨后
docker run -itd --restart=always -p 5601:5601 kibana-custom:v1

Logstash

# 配合filebeat使用。
# -e 后面的字符串大家也可以將其復制到.conf文件中 使用conf文件啟動logstash。
docker run -it --rm -p 5044:5044 -p 9600:9600 docker.elastic.co/logstash/logstash-oss:6.2.4 -e 'input {beats {port => "5044"}} filter{ dissect {mapping => {"message" => "[%{req_msg}] %{ip} () {%{msg_body}} [%{ts} %{+ts} %{+ts} %{+ts} %{+ts}] %{method} %{uri} => %{generated_msg} (%{http_p} %{http_status}) %{other_message}"}} mutate {replace => {"ip"=> "61.244.37.240"}}  geoip {source => "ip"}} output {elasticsearch {hosts => ["192.168.2.26:9200"]}}'

filebeat

filebeat 我采用yum安裝。

具體配置可參考之前的配置方法。

在filebeat啟動成功后,可看到有Harvester字樣輸出,即為配置成功。

贊賞是第一生產力

這篇文章的Press.one簽名:
https://press.one/file/v?s=3152ece53ee4f864fe4326ae2166f230d100a4629548ac0aef527cf2e48ea0976608dcb290c439a522a28f5db5ef05dcf3084496dbe2b1b1b53508500065e4760&h=c0f8f2fb26429366f05ddbf3c2230d8eb37e35cfab19a17a17630565813b17f4&a=866597c04655a093a3e1f31a317c7addd0df9123&f=P1&v=2

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

相關閱讀更多精彩內容

友情鏈接更多精彩內容