純手工打造一個ELK,不要太容易! 思維導圖 概述 一、什麼是ELK 二、搭建ELK 三、改進優化 寫在最後

推薦閱讀:

思維導圖

概述

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

如果能把日誌全部收集到一個平臺,然後像百度,谷歌一樣通過關鍵字搜索出相關的日誌,豈不快哉。於是就有了集中式日誌系統。ELK就是其中一款使用最多的開源產品。

一、什麼是ELK

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

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

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

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

二、搭建ELK

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

2.1 安裝ElasticSearch

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

找到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,然後搜索關鍵字,就找到相關的日誌了!

三、改進優化

上面只是用到了核心的三個組件簡單搭建的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有一些初步的認識,感謝大家的閱讀。

覺得有用就點個贊吧,你的點贊是我創作的最大動力~

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