ELK是個啥?看完就懂了!

思惟導圖

文章已收錄Github精選,歡迎Star:https://github.com/yehongzhi/learningSummaryjava

概述

咱們都知道,在生產環境中常常會遇到不少異常,報錯信息,須要查看日誌信息排查錯誤。如今的系統大多比較複雜,即便是一個服務背後也是一個集羣的機器在運行,若是逐臺機器去查看日誌顯然是很費力的,也不現實node

若是能把日誌所有收集到一個平臺,而後像百度,谷歌同樣經過關鍵字搜索出相關的日誌,豈不快哉。因而就有了集中式日誌系統。ELK就是其中一款使用最多的開源產品。linux

1、什麼是ELK

ELK實際上是Elasticsearch,Logstash 和 Kibana三個產品的首字母縮寫,這三款都是開源產品。git

ElasticSearch(簡稱ES),是一個實時的分佈式搜索和分析引擎,它能夠用於全文搜索,結構化搜索以及分析。程序員

Logstash,是一個數據收集引擎,主要用於進行數據收集、解析,並將數據發送給ES。支持的數據源包括本地文件、ElasticSearch、MySQL、Kafka等等。github

Kibana,爲 Elasticsearch 提供了分析和 Web 可視化界面,並生成各類維度表格、圖形。web

2、搭建ELK

環境依賴:CentOS7.5,JDK1.8,ElasticSearch7.9.3,Logstash 7.9.3,Kibana7.9.3。shell

2.1 安裝ElasticSearch

首先,到官網下載安裝包,而後使用tar -zxvf命令解壓。json

找到config目錄下的elasticsearch.yml文件,修改配置:瀏覽器

cluster.name: es-application
node.name: node-1
#對全部IP開放
network.host: 0.0.0.0
#HTTP端口號
http.port: 9200
#elasticsearch數據文件存放目錄
path.data: /usr/elasticsearch-7.9.3/data
#elasticsearch日誌文件存放目錄
path.logs: /usr/elasticsearch-7.9.3/logs

配置完以後,由於ElasticSearch使用非root用戶啓動,因此建立一個用戶。

# 建立用戶
useradd yehongzhi
# 設置密碼
passwd yehongzhi
# 賦予用戶權限
chown -R yehongzhi:yehongzhi /usr/elasticsearch-7.9.3/

而後切換用戶,啓動:

# 切換用戶
su yehongzhi
# 啓動 -d表示後臺啓動
./bin/elasticsearch -d

使用命令netstat -nltp查看端口號:

訪問http://192.168.0.109:9200/能夠看到以下信息,表示安裝成功。

2.2 安裝Logstash

首先在官網下載安裝壓縮包,而後解壓,找到/config目錄下的logstash-sample.conf文件,修改配置:

input {
  file{
    path => ['/usr/local/user/*.log']
    type => 'user_log'
    start_position => "beginning"
  }
}

output {
  elasticsearch {
    hosts => ["http://192.168.0.109:9200"]
    index => "user-%{+YYYY.MM.dd}"
  }
}

input表示輸入源,output表示輸出,還能夠配置filter過濾,架構以下:

配置完以後,要有數據源,也就是日誌文件,準備一個user.jar應用程序,而後後臺啓動,而且輸出到日誌文件user.log中,命令以下:

nohup java -jar user.jar >/usr/local/user/user.log &

接着再後臺啓動Logstash,命令以下:

nohup ./bin/logstash -f /usr/logstash-7.9.3/config/logstash-sample.conf &

啓動完以後,使用jps命令,能夠看到兩個進程在運行:

2.3 安裝Kibana

首先仍是到官網下載壓縮包,而後解壓,找到/config目錄下的kibana.yml文件,修改配置:

server.port: 5601
server.host: "192.168.0.111"
elasticsearch.hosts: ["http://192.168.0.109:9200"]

和elasticSearch同樣,不能使用root用戶啓動,須要建立一個用戶:

# 建立用戶
useradd kibana
# 設置密碼
passwd kibana
# 賦予用戶權限
chown -R kibana:kibana /usr/kibana/

而後使用命令啓動:

#切換用戶
su kibana
#非後臺啓動,關閉shell窗口即退出
./bin/kibana
#後臺啓動
nohup ./bin/kibana &

啓動後在瀏覽器打開http://192.168.0.111:5601,能夠看到kibana的web交互界面:

2.4 效果展現

所有啓動成功後,整個過程應該是這樣,咱們看一下:

瀏覽器打開http://192.168.0.111:5601,到管理界面,點擊「Index Management」能夠看到,有一個user-2020.10.31的索引。

點擊Index Patterns菜單欄,而後建立,命名爲user-*。

最後,就能夠到Discover欄進行選擇,選擇user-*的Index Pattern,而後搜索關鍵字,就找到相關的日誌了!

3、改進優化

上面只是用到了核心的三個組件簡單搭建的ELK,其實是有缺陷的。若是Logstash須要添加插件,那就所有服務器的Logstash都要添加插件,擴展性差。因此就有了FileBeat,佔用資源少,只負責採集日誌,不作其餘的事情,這樣就輕量級,把Logstash抽出來,作一些濾處理之類的工做。

FileBeat也是官方推薦用的日誌採集器,首先下載Linux安裝壓縮包:

https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.9.3-linux-x86_64.tar.gz

下載完成後,解壓。而後修改filebeat.yml配置文件:

#輸入源
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /usr/local/user/*.log
#輸出,Logstash的服務器地址
output.logstash:
  hosts: ["192.168.0.110:5044"]
#輸出,若是直接輸出到ElasticSearch則填寫這個
#output.elasticsearch:
  #hosts: ["localhost:9200"]
  #protocol: "https"

而後Logstash的配置文件logstash-sample.conf,也要改一下:

#輸入源改爲beats
input {
  beats {
    port => 5044
    codec => "json"
  }
}

而後啓動FileBeat:

#後臺啓動命令
nohup ./filebeat -e -c filebeat.yml >/dev/null 2>&1 &

再啓動Logstash:

#後臺啓動命令
nohup ./bin/logstash -f /usr/logstash-7.9.3/config/logstash-sample.conf &

怎麼判斷啓動成功呢,看Logstash應用的/logs目錄下的logstash-plain.log日誌文件:

寫在最後

目前,不少互聯網公司都是採用ELK來作日誌集中式系統,緣由很簡單:開源、插件多、易擴展、支持數據源多、社區活躍、開箱即用等等。我見過有一個公司在上面的架構中還會加多一個Kafka的集羣,主要是基於日誌數據量比較大的考慮。可是呢,基本的三大組件ElasticSearch,Logstash,Kibana是不能少的。

但願這篇文章能幫助你們對ELK有一些初步的認識,感謝你們的閱讀。

以爲有用就點個贊吧,你的點贊是我創做的最大動力~

我是一個努力讓你們記住的程序員。咱們下期再見!!!

能力有限,若是有什麼錯誤或者不當之處,請你們批評指正,一塊兒學習交流!

本文分享自微信公衆號 - java技術愛好者(yehongzhi_java)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索