1. 程式人生 > 其它 >ELK日誌分析系統+部署ELK

ELK日誌分析系統+部署ELK

目錄

一、ELK元件

ELK平臺是一套完整的日誌集中處理解決方案,將ElasticSearch、Logstash和Kiabana三個開源工具配合使用,完成更強大的使用者對日誌的查詢、排序、統計需求
1.ElasticSearch
(1)是基於Lucene(一個全文檢索引擎的架構)開發的分散式儲存檢索引擎,用來儲存各類日誌
(2)Elasticsearch是用Java開發的,可通過RESTful Web介面,讓使用者可以通過瀏覽器與Elasticsearch通訊
(3)Elasticsearch是個分散式搜尋和分析引擎,優點是能對大容量的資料進行接近實時的儲存、搜尋和分析操作
(4)Elasticsearch可以劃分為三種:主節點、資料節點和客戶端節點

1.master主節點:
elasticsearch.yml:
node.master:true
node.data:false
主要功能:維護元資料,管理叢集節點狀態;不負責資料寫入和查詢
配置要點:記憶體可以相對小一些,但是機器一定要穩定,最好是獨佔的機器
2.data資料節點
elasticsearch.yml:
node.master:false
node.data:true
主要功能:負責資料的寫入與查詢,壓力大
配置要點:大記憶體,最好是獨佔的機器
3.client客戶端節點
elasticsearch.yml:
node.master:true
node.data:true
主要功能:綜合上述三個節點的功能。
配置要點:大記憶體,最好是獨佔的機器。
特別說明:不建議這種配置,節點容易掛掉
4.一般配置主節點3臺伺服器,資料節點與客戶端節點配置比例一般在3:1左右,根據實際情況調節

2.Logstash
(1)作為資料收集引擎。它支援動態的從各種資料來源蒐集資料,並對資料進行過濾、分析、豐富、統一格式等操作,然後儲存到使用者指定的位置,一般會發送給Elasticsearch
(2)Logstash由JRuby語言編寫,執行在Java虛擬機器(JVM)上,是一款強大的資料處理工具,可以實現資料傳輸、格式處理、格式化輸出。Logstash具有強大的外掛功能,常用於日誌處理
3.Kibana
是基於Node.js開發的展示工具,可以為Logstash和ElasticSearch提供圖形化的日誌分析Web介面展示,可以彙總、分析和搜尋重要資料日誌
4.Filebeat
輕量級的開源日誌檔案資料蒐集器。通常在需要採集資料的客戶端安裝 Filebeat,並指定目錄與日誌格式,Filebeat就能快速收集資料,併發送給logstash進行解析,或是直接發給Elasticsearch儲存,效能上相比運行於JVM上的loqstash優勢明顯,是對它的替代

二、為什麼要使用ELK

1.日誌主要包括系統日誌,應用程式日誌和安全日誌。系統運維和開發人員可以通過日誌瞭解伺服器軟硬體資訊、檢查配置過程中的錯誤及。錯誤發生的原因。經常分析日誌可以瞭解伺服器的負荷,效能安全性,從而及時採取措施糾正錯誤
2.往往單臺機器的日誌我們使用grep、awk等工具就能基本實現簡單析,但是當日志被分散的儲存不同的裝置上。如果你管理數十上百臺伺服器,你還在使用依次登入每臺機器的傳統方法查閱日誌。這樣感覺很繁瑣和效率低下
3.當務之急我們使用集中化的日誌管理,例如∶開源的syslog,將所有伺服器上的日誌收集彙總。集中化管理日誌後,日誌的統計和檢索又成為一件比較麻煩的事情,一般我們使用grep、awk和wc等Linux命令能實現檢索和統計,但是對於要求更高的查詢、排序和統計等要求和龐大的機器數量依然使用這樣的方法難免有點力不從心
4.一般大型系統是一個分散式部署的架構,不同的服務模組部署在不同的伺服器上,問題出現時,大部分情況需要根據問題暴露的關鍵資訊,定位到具體的伺服器和服務模組,構建一套集中式日誌系統,可以提高定位問題的效率

三、完整日誌系統基本特徵

1.收集∶能夠採集多種來源的日誌資料
2.傳輸∶能夠穩定的把日誌資料解析過濾並傳輸到儲存系統
3.儲存∶儲存日誌資料
4.分析∶支援UI分析
5.警告∶能夠提供錯誤報告,監控機制

四、ELK的工作原理


1.在所有需要收集日誌的伺服器上部署Logstash;或者先將日誌進行集中化管理在日誌伺服器上,在日誌伺服器上部署Loqstash
2.Logstash收集日誌,將日誌格式化並輸出到Elasticsearch群集中
3.Elasticsearch對格式化後的資料進行索引和儲存
4.Kibana從ES群集中查詢資料生成圖表,並進行前端資料的展示

五、部署ELK

5.1 伺服器準備

主機 ip 安裝包
node1 192.168.80.11 Elasticsearch、kibana、Elasticsearch-head(便於管理ES叢集)
node2 192.168.80.12 Elasticsearch
apache 192.168.80.13 httpd、Logstash

5.2 部署Elasticsearch(在node1/2上)

5.2.1 關閉防火強和安全功能

systemctl stop firewalld.service
setenforce 0

5.2.2 更改主機名並配置域名解析

--------192.168.80.11--------
hostnamectl set-hostname node1
su 

--------192.168.80.12---------
hostnamectl set-hostname node2
su 

echo '192.168.80.11 node1' >> /etc/hosts
echo '192.168.80.12 node2' >> /etc/hosts

5.2.3 配置java環境

java -version #沒有安裝就用yum安裝java

5.2.4 部署Elasticsearch軟體

1)安裝elasticsearch包並啟動服務

將elasticsearch-5.5.0.rpm包移到/opt目錄
cd /opt
rpm -ivh elasticsearch-5.5.0.rpm 

systemctl daemon-reload
systemctl enable elasticsearch.service	

2)修改主配置檔案

rpm -qpl elasticsearch-5.5.0.rpm  #檢視ES的配置目錄
cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak   #備份配置檔案

vim /etc/elasticsearch/elasticsearch.yml
#17行(修改叢集名字)
cluster.name: my-elk-cluster
#23行(修改節點名字)
node.name: node1
#33行;(修改資料存放路徑)
path.data: /data/elk_data
#37行(修改日誌存放路徑)
path.logs: /var/log/elasticsearch
#43行(不在啟動的時候鎖定記憶體)
bootstrap.memory_lock: false
#55行
network.host: 0.0.0.0
#59行(偵聽埠為9200)
http.port: 9200
#68行(指定要發現的節點 node1、node2)
discovery.zen.ping.unicast.hosts: ["node1", "node2"]

grep -v "^#" /etc/elasticsearch/elasticsearch.yml





3)建立資料存放路徑並授權

mkdir -p /data/elk_data
chown elasticsearch:elasticsearch /data/elk_data/

4)啟動elasticsearch是否開啟成功

systemctl start elasticsearch
netstat -antp |grep 9200

5)檢視節點資訊和叢集健康狀態

http://192.168.80.11:9200
http://192.168.80.12:9200
http://192.168.80.11:9200/_cluster/health?pretty
http://192.168.80.12:9200/_cluster/health?pretty

使用上述方式檢視群集的狀態對使用者並不友好,可以通過安裝Elasticsearch-head外掛,可以更方便的管理群集


5.3 安裝elasticsearch-head(node1和node2)

5.3.1 編譯安裝node

上傳軟體包node-v8.2.1.tar.gz到/opt目錄中

yum -y install gcc gcc-c++ make 
cd /opt
tar xzvf node-v8.2.1.tar.gz
cd /opt/node-v8.2.1/
./configure 
make -j4 && make install

5.3.2 安裝phantomjs

上傳軟體包phantomjs-2.1.1-linux-x86_64.tar.bz2到/opt目錄中

cd /opt
tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C usr/local/src/
cd /usr/local/src/phantomjs-2.1.1-linux-x86_64/bin
cp phantomjs /usr/local/bin

5.3.3 安裝Elasticsearch-head資料視覺化工具

上傳軟體包 elasticsearch-head.tar.gz 到/opt
cd /opt
tar zxvf elasticsearch-head.tar.gz -C /usr/local/src/
cd /usr/local/src/elasticsearch-head/
npm install


5.3.4 修改Elasticsearch主配置檔案

vim /etc/elasticsearch/elasticsearch.yml
......
--末尾新增以下內容--
http.cors.enabled: true				#開啟跨域訪問支援,預設為 false
http.cors.allow-origin: "*"			#指定跨域訪問允許的域名地址為所有

systemctl restart elasticsearch

5.3.5 啟動elasticsearch-head服務

必須在解壓後的elasticsearch-head目錄下啟動服務,程序會讀取該目錄下的 gruntfile.js檔案,否則可能啟動失敗
cd /usr/local/src/elasticsearch-head/
npm run start &

> [email protected] start /usr/local/src/elasticsearch-head
> grunt server

Running "connect:server" (connect) task
Waiting forever...
Started connect web server on http://localhost:9100

#elasticsearch-head 監聽的埠是 9100
netstat -natp |grep 9100

5.3.6 瀏覽器訪問測試

http://192.168.80.11:9100/地址並連線群集。如果看到群集健康值為green綠色,代表群集很健康。

5.3.7 插入索引

通過命令插入一個測試索引,索引為gxd,型別為ggg。
curl -X PUT 'localhost:9200/gxd/ggg/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"dashuaibi","lk":"dsb"}'


5.4 部署Logstash(在apache節點)

5.4.1 更改主機名

hostnamectl set-hostname apache
su 

5.4.2 安裝apache服務(httpd)

yum -y install httpd
systemctl start httpd

5.4.3 配置java環境

java -version #沒有安裝就用yum安裝java

5.4.4 安裝並啟動logstash

上傳軟體包 logstash-5.5.1.rpm 到/opt目錄下
cd /opt
rpm -ivh logstash-5.5.1.rpm                           
systemctl start logstash.service                      
systemctl enable logstash.service

ln -s /usr/share/logstash/bin/logstash /usr/local/bin/

5.4.5 測試Logstash

Logstash命令選項 說明
-f 通過這個選項可以指定 Logstash 的配置檔案,根據配置檔案配置 Logstash 的輸入和輸出流
-e 從命令列中獲取,輸入、輸出後面跟著字串,該字串可以被當作 Logstash 的配置(如果是空,則預設使用 stdin 作為輸入,stdout 作為輸出)
-t 測試配置檔案是否正確,然後退出
1.輸入採用標準輸入,輸出採用標準輸出(類似管道)
logstash -e 'input { stdin{} } output { stdout{} }'
......
輸入:www.baidu.com
執行ctrl+c退出

2.使用 rubydebug 輸出詳細格式顯示,codec為一種編解碼器
logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'
......
輸入:www.baidu.com
執行ctrl+c退出

3.使用Logstash將資訊寫入Elasticsearch中
logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.80.11:9200"] } }'



5.4.6 定義logstash配置檔案

1)組成

Logstash 配置檔案基本由三部分組成:input、output 以及 filter(可選,根據需要選擇使用)

2)格式

1.input {...}
2.filter {...}
3.output {...}

若要指定兩個日誌來原始檔,則格式如下:
input {
	file { path =>"/var/log/messages" type =>"syslog"}
	file { path =>"/var/log/httpd/access.log" type =>"apache"}
}

3)具體實操

修改Logstash配置檔案,讓其收集系統日誌/var/log/messages,並將其輸出到elasticsearch中

1.chmod +r /var/log/messages		#讓Logstash可以讀取日誌
2.vim /etc/logstash/conf.d/messages.conf
input {
    file{
        path =>"/var/log/messages"						#指定要收集的日誌的位置
        type =>"messages"								#自定義日誌型別標識
        start_position =>"beginning"					#表示從開始處收集
    }
}
output {
    elasticsearch {										#輸出到elasticsearch
        hosts => ["192.168.80.11:9200"]					#指定elasticsearch伺服器的地址和埠
        index =>"messages-%{+YYYY.MM.dd}"				#指定輸出到elasticsearch的索引格式
    }
}
3.systemctl restart logstash 
4.瀏覽器訪問 http://192.168.80.11:9100/ 檢視索引資訊



5.5 部署Kibana(在Node1節點上操作)

5.5.1 安裝Kibana

#上傳軟體包 kibana-5.5.1-x86_64.rpm 到/opt目錄
cd /opt
rpm -ivh kibana-5.5.1-x86_64.rpm

5.5.2 設定Kibana的主配置檔案

vim /etc/kibana/kibana.yml
--2--取消註釋,Kiabana 服務的預設監聽埠為5601
server.port: 5601
--7--取消註釋,設定 Kiabana 的監聽地址,0.0.0.0代表所有地址
server.host: "0.0.0.0"
--21--取消註釋,設定和 Elasticsearch 建立連線的地址和埠
elasticsearch.url: "http://192.168.80.10:9200" 
--30--取消註釋,設定在 elasticsearch 中新增.kibana索引
kibana.index: ".kibana"


5.5.3 啟動Kibana服務

systemctl start kibana.service
systemctl enable kibana.service

netstat -natp | grep 5601

5.5.4 驗證Kibana

瀏覽器訪問 http://192.168.80.10:5601
第一次登入需要新增一個 Elasticsearch 索引:
Index name or pattern
//輸入:messeges-*			#在索引名中輸入之前配置的 Output 字首“messeges”

單擊 “create” 按鈕建立,單擊 “Discover” 按鈕可檢視圖表資訊及日誌資訊。
資料展示可以分類顯示,在“Available Fields”中的“host”,然後單擊 “add”按鈕,可以看到按照“host”篩選後的結果

5.5.5 新增Apache伺服器的日誌(訪問的、錯誤的)

1.將Apache伺服器的日誌(訪問的、錯誤的)新增到 Elasticsearch 並通過Kibana顯示
vim /etc/logstash/conf.d/apache_log.conf
input {
    file{
        path => "/etc/httpd/logs/access_log"
        type => "access"
        start_position => "beginning"
    }
    file{
        path => "/etc/httpd/logs/error_log"
        type => "error"
        start_position => "beginning"
    }
}
output {
    if [type] == "access" {
        elasticsearch {
            hosts => ["192.168.80.11:9200"]
            index => "apache_access-%{+YYYY.MM.dd}"
        }
    }
	if [type] == "error" {
        elasticsearch {
            hosts => ["192.168.80.11:9200"]
            index => "apache_error-%{+YYYY.MM.dd}"
        }
    }
}

cd /etc/logstash/conf.d/
/usr/share/logstash/bin/logstash -f apache_log.conf (可能要重啟apache節點)

2.瀏覽器訪問 http://192.168.80.11:9100 檢視索引是否建立

3.登入 Kibana,單擊“Create Index Pattern”按鈕新增索引, 在索引名中輸入之前配置的Output 字首 apache_access-*,並單擊“Create”按鈕。在用相同的方法新增 apache_error-*索引。
選擇“Discover”選項卡,在中間下拉列表中選擇剛新增的 apache_access-* 、apache_error-* 索引, 可以檢視相應的圖表及日誌資訊