部署ELK企業日誌分析系統

部署ELK企業日誌分析系統

前言:

​ 日誌分析是運維工程師解決系統故障,發現問題的主要手段。日誌主要包括系統日誌、應用程序日誌和安全日誌。系統運維和開發人員可以通過日誌瞭解服務器軟硬件信息、檢查配置過程中的錯誤及錯誤發生的原因。經常分析日誌可以瞭解服務器的負荷,性能安全性,從而及時採取措施糾正錯誤。

一:介紹ELK

1、ELK的含義

​ ELK由ElasticSearch、Logstash和Kiabana三個開源工具組成。Elasticsearch是個開源分佈式搜索引擎,它的特點有:分佈式,零配置,自動發現,索引自動分片,索引副本機制,restful風格接口,多數據源,自動搜索負載;Logstash是一個完全開源的工具,它可以對你的日誌進行收集、過濾,並將其存儲,供以後使用(如,搜索);Kibana 也是一個開源和免費的工具,Kibana可以爲 Logstash ElasticSearch 提供友好的日誌分析Web 界面,可以幫助您彙總、分析和搜索重要數據日誌。

2、ELK工作原理

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-fqW3d5aB-1585494064447)(C:\Users\xumin\AppData\Roaming\Typora\typora-user-images\1585454158822.png)]

Logstash收集AppServer產生的Log,並存放到ElasticSearch集羣中,而Kibana則從ES集羣中查詢數據生成圖表,再返回給Browser。簡單來說,進行日誌處理分析,一般需要經過以下幾個步驟:

  1. 將日誌進行集中化管理(beats)
  2. 將日誌格式化(logstash)
  3. 對格式化後的數據進行索引和存儲(elasticsearch)
  4. 前端數據的展示(kibana)

3、ElasticSearch介紹

​ Elasticsearch是一個基於Lucene的搜索服務器。它提供了一個分佈式多用戶能力的全文搜索引擎,基於RESTful web接口。Elasticsearch是用Java開發的,並作爲Apache許可條款下的開放源碼發佈,是第二流行的企業搜索引擎。設計用於雲計算中,能夠達到實時搜索,穩定,可靠,快速,安裝使用方便。

(1)基礎核心概念
  • 接近實時(NRT)
    lasticsearch是一個接近實時的搜索平臺,這意味着,從索引一個文檔直到這個文檔能夠被搜索到有一個輕微的延遲(通常是1秒)

  • 集羣(cluster)
    一個集羣就是由一個或多個節點組織在一起,它們共同持有你整個的數據,並一起提供索引和搜索功能。其中一個節點爲主節點,這個主節點是可以通過選舉產生的,並提供跨節點的聯合索引和搜索的功能。集羣有一個唯一性標示的名字,默認是elasticsearch,集羣名字很重要,每個節點是基於集羣名字加入到其集羣中的。因此,確保在不同環境中使用不同的集羣名字。一個集羣可以只有一個節點。

  • 節點(node)
    節點就是一臺單一的服務器,是集羣的一部分,存儲數據並參與集羣的索引和搜索功能。像集羣一樣,節點也是通過名字來標識,默認是在節點啓動時隨機分配的字符名。當然,你可以自己定義。該名字也很重要,在集羣中用於識別服務器對應的節點。
    節點可以通過指定集羣名字來加入到集羣中。默認情況,每個節點被設置成加入到elasticsearch集羣。如果啓動了多個節點,假設能自動發現對方,他們將會自動組建一個名爲elasticsearch的集羣。

  • 索引(index)
    一個索引就是一個擁有幾分相似特徵的文檔的集合。一個索引由一個名字來標識(必須全部是小寫字母的),並且當我們要對對應於這個索引中的文檔進行索引、搜索、更新和刪除的時候,都要使用到這個名字。在一個集羣中,可以定義任意多的索引。(索引相對於關係型數據庫的庫)

  • 類型(type)
    在一個索引中,可以定義一種或多種類型。一個類型是索引的一個邏輯上的分類/分區,其語義完全由自己來定。通常,會爲具有一組共同字段的文檔定義一個類型。(類型相對於關係型數據庫的表)

  • 文檔(document)
    一個文檔是一個可被索引的基礎信息單元。文檔以JSON(Javascript Object Notation)格式來表示,而JSON是一個到處存在的互聯網數據交互格式。在一個index/type裏面,可以存儲任意多的文檔。注意,雖然一個文檔在物理上位於一個索引中,實際上一個文檔必須在一個索引內被索引和分配一個類型。(文檔相對於關係型數據庫的列)

  • 分片和副本(shards & replicas)
    在實際情況下,索引存儲的數據可能超過單個節點的硬件限制。如一個10億文檔需1TB空間可能不適合存儲在單個節點的磁盤上,或者從單個節點搜索請求太慢了。爲了解決這個問題,elasticsearch提供將索引分成多個分片的功能。當在創建索引時,可以定義想要分片的數量。每一個分片就是一個全功能的獨立的索引,可以位於集羣中任何節點上。

​ 分片的兩個最主要原因:水平分割擴展,增大存儲量 ; 分佈式並行跨分片操作,提高性能和吞吐量

​ 副本的兩個主要原因:高可用性,以應對分片或者節點故障。出於這個原因,分片副本要在不同的節點上; 增大吞吐量,搜索可以並行在所有副本上執行。

​ 總之,每個索引可以被分成多個分片。一個索引也可以被複制0次(意思是沒有複製)或多次。一旦複製了,每個索引就有了主分片(作爲複製源的原來的分片)和複製分片(主分片的拷貝)之別。分片和副本的數量可以在索引創建的時候指定。在索引創建之後,可以在任何時候動態地改變副本的數量,但是事後不能改變分片的數量。
​ 默認情況下,Elasticsearch中的每個索引被分片5個主分片和1個副本,這意味着,如果集羣中至少有兩個節點,索引將會有5個主分片和另外5個副本分片(1個完全拷貝),這樣的話每個索引總共就有10個分片。

二:實驗部署

1、實驗環境

配置和安裝ELK日誌分析系統,安裝集羣方式,2個elasticsearch節點,並監控apache服務器日誌。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-wk0vuFcW-1585494064449)(C:\Users\xumin\AppData\Roaming\Typora\typora-user-images\1585460654020.png)]
安裝包自行下載:
鏈接:https://pan.baidu.com/s/168NI_RJhRMn3bDNRHi0VoA
提取碼:cyfc
複製這段內容後打開百度網盤手機App,操作更方便哦

2、實驗步驟

node1、node2配置Elasticsearch環境

(node1和node2配置相同,以node1爲例。唯一要改的地方是配置文件那邊的節點名稱)

(1)更改主機名、設置地址映射、關閉防火牆
[root@localhost ~]# hostnamectl set-hostname node1
[root@node1 ~]# systemctl stop firewalld.service 
[root@node1 ~]# systemctl disable firewalld.service 
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@node1 ~]# setenforce 0
[root@node1 ~]# vim /etc/sysconfig/selinux 
SELINUX=disabled	'修改爲disabled'
[root@node1 ~]# vim /etc/hosts
192.168.48.128   node1
192.168.48.138   node2
(2)安裝java環境
[root@node1 ~]# yum install -y java-1.8.0
[root@node1 ~]# java -version     ‘查看java版本’
openjdk version "1.8.0_242"
OpenJDK Runtime Environment (build 1.8.0_242-b08)
OpenJDK 64-Bit Server VM (build 25.242-b08, mixed mode)
(3)上傳軟件包(三臺都要上傳),並解壓

這邊用的xftp傳輸的,

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-2fUH5gqB-1585494064449)(C:\Users\xumin\AppData\Roaming\Typora\typora-user-images\1585462305886.png)]

[root@node1 ~]# cd /opt
[root@node1 opt]# rpm -ivh elasticsearch-5.5.0.rpm    ‘解壓數據包’
(4)加載系統服務
[root@node1 opt]# systemctl daemon-reload 
[root@node1 opt]# systemctl enable elasticsearch.service
(5)更改elasticsearch主配置文件
[root@node1 opt]# cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak
[root@node1 opt]#  vi /etc/elasticsearch/elasticsearch.yml

‘末行添加上’
cluster.name: my-elk-cluster                 ‘集羣名字’
node.name: node1                             ‘節點名字’
path.data: /data/elk_data                    ‘數據存放路徑’
path.logs: /var/log/elasticsearch/           ‘數據存放路徑’
bootstrap.memory_lock: false                 ‘不在啓動的時候鎖定內存’
network.host: 0.0.0.0                 ‘提供服務綁定的IP地址,0.0.0.0代表所有地址’
http.port: 9200                              ‘偵聽端口爲9200’
discovery.zen.ping.unicast.hosts: ["node1", "node2"]          ‘集羣發現通過單播實現’
(6)創建數據存放路徑並授權
[root@node1 opt]# mkdir -p /data/elk_data
[root@node1 opt]# chown elasticsearch:elasticsearch /data/elk_data/
(7)啓動elasticsearch是否成功開啓
[root@node1 opt]# systemctl start elasticsearch.service
[root@node1 opt]# systemctl daemon-reload
[root@node1 opt]# netstat -antp |grep 9200
tcp6       0      0 :::9200                 :::*                    LISTEN      3918/java 
(8)查看節點信息,用宿主機瀏覽器打開

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-zKPNW2Rb-1585494064450)(C:\Users\xumin\AppData\Roaming\Typora\typora-user-images\1585465047227.png)]

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-5PeY2Rlg-1585494064450)(C:\Users\xumin\AppData\Roaming\Typora\typora-user-images\1585464975550.png)]

(9)檢查羣集健康狀況和狀態信息

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-M0UcjHtC-1585494064451)(C:\Users\xumin\AppData\Roaming\Typora\typora-user-images\1585465462924.png)]

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-8dHqXNDs-1585494064451)(C:\Users\xumin\AppData\Roaming\Typora\typora-user-images\1585465406195.png)]

  • 上述查看集羣的方式,及其不方便,我們可以通過安裝elasticsearch-head插件後,來管理集羣

node1、node2安裝elasticsearch-head插件

(以node1爲例)

(1)編譯安裝node組件依賴包
[root@localhost opt]# cd /opt
[root@node1 opt]# tar xzvf node-v8.2.1.tar.gz
[root@node1 opt]# cd node-v8.2.1/
[root@node1 node-v8.2.1]# ./configure 
[root@node1 node-v8.2.1]# make -j3      ‘耗時時間較長’
[root@node1 node-v8.2.1]# make install
(2)安裝phantomjs,上傳軟件包到/usr/local/src
[root@node1 node-v8.2.1]# cd /opt
[root@node1 opt]# ls
elasticsearch-5.5.0.rpm    logstash-5.5.1.rpm  phantomjs-2.1.1-linux-x86_64.tar.bz2
elasticsearch-head.tar.gz  node-v8.2.1         rh
kibana-5.5.1-x86_64.rpm    node-v8.2.1.tar.gz
[root@node1 opt]# cp phantomjs-2.1.1-linux-x86_64.tar.bz2 /usr/local/src	'將軟件包複製到指定目錄'
[root@node1 opt]# cd /usr/local/src
[root@node1 src]# ls
phantomjs-2.1.1-linux-x86_64.tar.bz2
[root@node1 src]# tar jvxf phantomjs-2.1.1-linux-x86_64.tar.bz2
[root@node1 src]# cd phantomjs-2.1.1-linux-x86_64/bin
[root@node1 bin]# cp phantomjs /usr/local/bin	'將phantomjs命令讓系統可以識別'
(3)安裝elasticsearch-head
[root@node1 bin]# cd /usr/local/src/
[root@node1 src]# cp /opt/elasticsearch-head.tar.gz ./	'將剛剛上傳到/opt目錄下的tar包輔助到本目錄'
[root@node1 src]# ls
elasticsearch-head.tar.gz  phantomjs-2.1.1-linux-x86_64  phantomjs-2.1.1-linux-x86_64.tar.bz2
[root@node1 src]# tar zxf elasticsearch-head.tar.gz
[root@node1 src]# cd elasticsearch-head/
[root@node1 elasticsearch-head]# npm install	'初始化項目'
(4)修改主配置文件,重啓elasticsearch服務
[root@node1 elasticsearch-head]# vi /etc/elasticsearch/elasticsearch.yml
‘末行添加上個’
http.cors.enabled: true		'開啓跨域訪問支持,默認爲false'
http.cors.allow-origin: "*"		'跨域訪問允許的域名地址,支持使用正則'
[root@node1 elasticsearch-head]# systemctl restart elasticsearch
(5)啓動elasticsearch-head服務
[root@node1 elasticsearch-head]# npm run start &	'啓動項目,要切換到後臺運行' 

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-KkIoA4fl-1585494064452)(C:\Users\xumin\AppData\Roaming\Typora\typora-user-images\1585469988367.png)]

[root@node1 elasticsearch-head]# netstat -lnupt |grep 9100
tcp        0      0 0.0.0.0:9100            0.0.0.0:*               LISTEN      50390/grunt         
[root@node1 elasticsearch-head]# netstat -lnupt |grep 9200
tcp6       0      0 :::9200                 :::*                    LISTEN      50300/java

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-ozg4CjA6-1585494064452)(C:\Users\xumin\AppData\Roaming\Typora\typora-user-images\1585470823238.png)]

(6)創建索引index-demo,類型爲test
[root@node1 ~]# curl -XPUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"wang","mesg":"hello"}'

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Wn6XAVx5-1585494064453)(C:\Users\xumin\AppData\Roaming\Typora\typora-user-images\1585487288470.png)]

第二種方法:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-ZGlVaP79-1585494064453)(C:\Users\xumin\AppData\Roaming\Typora\typora-user-images\1585486959327.png)]

部署logstash(Apache服務器上)

(1)安裝apache服務
[root@localhost ~]# hostnamectl set-hostname apache
[root@apache ~]# yum -y install httpd
[root@apache ~]# systemctl start httpd
(2)安裝java環境
[root@apache ~]# yum -y install java-1.8.0
[root@apache ~]# java -version
(3)安裝logstash
[root@apache ~]# cd /opt
[root@apache opt]# rpm -ivh logstash-5.5.1.rpm       ‘安裝logstash’
[root@apache opt]# systemctl start logstash.service         ‘啓動logstash’
[root@apache opt]# systemctl enable logstash.service
[root@apache opt]# ln -s /usr/share/logstash/bin/logstash /usr/local/bin/   ‘建立logstash軟連接’
(4)logstash(Apache)與elasticsearch(node)功能是否正常,做對接測試
[root@apache opt]# logstash -e 'input { stdin{} } output { stdout{} }'
‘沒問題按ctrl+c結束’

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-q8y4dpCc-1585494064454)(C:\Users\xumin\AppData\Roaming\Typora\typora-user-images\1585488397753.png)]

(5)使用rubydebug顯示詳細輸出,codec爲一種編解碼器
[root@apache opt]# logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Bffl4cx8-1585494064454)(C:\Users\xumin\AppData\Roaming\Typora\typora-user-images\1585488600285.png)]

(6)使用logstash將信息寫入elasticsearch中
[root@apache opt]# logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.48.128:9200"] } }'

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-as0HGBfL-1585494064455)(C:\Users\xumin\AppData\Roaming\Typora\typora-user-images\1585488883683.png)]

(7)登錄宿主機查看索引信息,多出 logstash-2020.03.29,點擊數瀏覽查看響應的內容

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-RdzXzgZA-1585494064455)(C:\Users\xumin\AppData\Roaming\Typora\typora-user-images\1585489225426.png)]

(8)登錄apache主機,做對接配置
[root@apache opt]# chmod o+r /var/log/messages
[root@apache opt]# ll /var/log/messages
[root@apache opt]# vi /etc/logstash/conf.d/system.conf 

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-62GOKq51-1585494064456)(C:\Users\xumin\AppData\Roaming\Typora\typora-user-images\1585489435584.png)]

[root@apache opt]# systemctl restart logstash.service

登錄宿主機打開瀏覽器 輸入http://192.168.48.128:9100/ 查看索引信息:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-VARci7xc-1585494064456)(C:\Users\xumin\AppData\Roaming\Typora\typora-user-images\1585489689679.png)]

在node1主機安裝kibana

(1)上傳kibana-5.5.1-x86_64.rpm 到/usr/local/src目錄下
[root@node1 ~]# cd /usr/local/src/
[root@node1 src]# cp /opt/kibana-5.5.1-x86_64.rpm ./
[root@node1 src]# rpm -ivh kibana-5.5.1-x86_64.rpm 
[root@node1 src]# cd /etc/kibana/
[root@node1 kibana]# cp kibana.yml kibana.yml.bak 	'備份配置文件'
[root@node1 kibana]# vi kibana.yml	   '編輯配置文件'

2行  server.port: 5601    ‘kibana打開的端口’
7行  server.host: "0.0.0.0"     ‘kibana偵聽的地址’
21行  elasticsearch.url: "http://192.168.48.128:9200"    ‘和elasticsearch建立聯繫’
30行  kibana.index: ".kibana"       ‘在elasticsearch中添加.kibana索引’

[root@node1 kibana]# systemctl start kibana.service    ‘啓動kibana服務’
[root@node1 kibana]# systemctl enable kibana.service   ‘開機啓動kibana服務’
(2)在宿主機瀏覽器輸入192.168.48.128:5601

創建的索引對接系統日誌文件。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-SPzJGYkG-1585494064457)(C:\Users\xumin\AppData\Roaming\Typora\typora-user-images\1585490565092.png)]

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-3RU7ZFMV-1585494064457)(C:\Users\xumin\AppData\Roaming\Typora\typora-user-images\1585490942449.png)]

對接Apache主機的Apache 日誌文件

[root@apache opt]# cd /etc/logstash/conf.d/
[root@apache conf.d]# touch apache_log.conf
[root@apache conf.d]# vi apache_log.conf

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-tV33sxBz-1585494064458)(C:\Users\xumin\AppData\Roaming\Typora\typora-user-images\1585493101825.png)]

[root@apache conf.d]# /usr/share/logstash/bin/logstash -f apache_log.conf    ‘指定配置文件做測試’

打開瀏覽器,輸入192.168.48.128:9200 ,查看索引信息,能發現apache_error-2019.04.16 apache_access-2019.04.16

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-OSvUjZLo-1585494064458)(C:\Users\xumin\AppData\Roaming\Typora\typora-user-images\1585493620371.png)]

打開瀏覽器 輸入http://192.168.48.128:5601 ,點擊左下角有個management選項—index patterns—create index pattern----分別創建apache_error-* 和 apache_access-* 的索引

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-iapkymPw-1585494064458)(C:\Users\xumin\AppData\Roaming\Typora\typora-user-images\1585493725167.png)]

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-PUn0GhXr-1585494064459)(C:\Users\xumin\AppData\Roaming\Typora\typora-user-images\1585493858193.png)]

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-B6N2Vuqb-1585494064459)(C:\Users\xumin\AppData\Roaming\Typora\typora-user-images\1585494002432.png)]

當node1宕機之後,node2節點就開始承擔對接工作。

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