ubuntu16.04 快速搭建ELK日誌分析平臺
阿新 • • 發佈:2018-12-22
假如我們要在一臺伺服器上部署一個ssm應用,部署完,執行一段時間崩了。排查問題得時候,我們自然會想到檢視log4J日誌。可是,如果伺服器不止一個應用,而是好幾個呢,這當然可以檢視每個應用的log4J日誌。那如果不止一臺伺服器,而是好幾臺呢,難道還一個一個看?這顯然是不現實的。現在又一套開源的分散式日誌分析平臺ELK可以解決這個問題,將所有日誌收集起來,在統一,然後視覺化,提供搜尋。
那現在我這裡只有一臺伺服器,我就搭建一個單機版的,分散式的只要在單機版上覆制一部分過去就行。
先看看ELK的架構:ElasticSearch、 LogStash+FileBeats、 Kibana
- ElasticSearch: 負責資料的儲存、處理
- LogStash、FileBeats: 負責資料的收集
- Kibana: 提供了視覺化操作
安裝過程
-
1.環境準備
- 一臺安裝ubuntu16.04 server的機器,新增root使用者,普通使用者
- 安裝jdk1.8+,注意這裡一定要1.8以上
-
2.安裝ElasticSearch、 LogStash+FileBeats、 Kibana
-
這裡有個點要特別注意!ElasticSearch、 LogStash、 Kibana三者的版本一定要匹配,版本對不上會報錯。
-
-
2.1ElasticSearch
普通使用者
下載:
sudo wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.0.zip
解壓:
unzip elasticsearch-6.5.0.zip
設定大記憶體:
vi /etc/sysctl.conf
在最後新增 一行 :vm.max_map_count=655360
載入引數 :sysctl -p
啟動:
cd elasticsearch-6.5.0/
./bin/elasticsearch
不用測了,只要沒報錯就成功,報錯一般只有一下情況
1.用root使用者運行了,一定要普通使用者
2.jdk不是1.8及以上
3.記憶體過小
-
2.2LogStash+FileBeats
普通使用者
-
2.2.1LogStash
安裝:
sudo apt-get update && sudo apt-get install logstash
進去目錄下,我這裡是logstash-6.5.0
cd logstash-6.5.0/
新增logstash.conf檔案:
vim logstash.conf
新增:
input {
file {
path => "替換應用的log路徑,多個路徑可以用正則匹配"
start_position => "beginning" #從檔案開始處讀寫
}
# stdin {} #可以從標準輸入讀資料
}
# 資料過濾
filter {
#定義資料的格式
grok {
match => { "message" => "%{DATA:timestamp}\|%{IP:serverIp}\|%{IP:clientIp}\|%{DATA:logSource}\|%{DATA:userId}\|%{DATA:reqUrl}\|%{DATA:reqUri}\|%{DATA:refer}\|%{DATA:device}\|%{DATA:textDuring}\|%{DATA:duringTime:int}\|\|"}
}
#定義時間戳的格式
date {
match => [ "timestamp", "yyyy-MM-dd-HH:mm:ss" ]
locale => "cn"
}
#定義客戶端的IP是哪個欄位(上面定義的資料格式)
geoip {
source => "clientIp"
}
mutate {
rename => { "host" => "host.name" }
}
}
# 輸出到本機的 ES
output {
elasticsearch {
hosts => [ "127.0.0.1:9200" ]
}
}
啟動:
bin/logstash -f logstash.conf --config.reload.automatic
沒報錯就成功了
-
2.2.2FileBeats
普通使用者安裝
sudo apt-get update && sudo apt-get install filebeat
進入解壓的資料夾,修改一下filebeat.yml
- type: log
# Change to true to enable this prospector configuration.
enabled: True
# Paths that should be crawled and fetched. Glob based paths.
# 讀取 Nginx 的日誌
paths:
- 替換應用的log路徑
#----------------------------- Logstash output --------------------------------
# 輸出到本機的 LogStash
output.logstash:
# The Logstash hosts
hosts: ["localhost:5044"]
啟動 FileBeat,需要以 root 身份啟動,更改配置檔案的許可權即可
sudo chown root filebeat.yml
sudo ./filebeat -e -c filebeat.yml -d "publish"
若沒報錯即成功了!
-
2.3Kibana
普通使用者
安裝:
wget https://artifacts.elastic.co/downloads/kibana/kibana-6.5.0-linux-x86_64.tar.gz
tar -xzf kibana-6.5.0-linux-x86_64.tar.gz
cd kibana-6.5.0-linux-x86_64/
修改外網訪問:
vim config/ kibana.yml
修改這句:
server.host: "0.0.0.0"
啟動:
bin/kibana
沒報錯即成功了,埠預設是5601
-
3.測試
在本地瀏覽器,輸入ip:5601
-
選擇第一個discover,輸入logstash,如果下兩行出現success的說明成功, 再點進去,選擇@timestamp
- 查詢錯誤
-
4.分散式環境
將LogStash+FileBeat安裝在其他客戶機即可,把配置檔案輸出的elasticsearch 定位到目標ip即可
...
output {
elasticsearch {
hosts => [ "127.0.0.1:9200" ]
}
...