1. 程式人生 > 實用技巧 >ELK日誌分析服務搭建

ELK日誌分析服務搭建

本實驗所用軟體包下載地址:連結:https://pan.baidu.com/s/1h4q8tL5fJ8TqcCzhHwAVpg 提取碼:8oaf
使用unzip解壓(yum install unzip -y)

一、ELK簡介

ELK是三個開源軟體的縮寫,分別是:Elasticsearch , Logstash, Kibana , 新增了一個 FileBeat,它是一個輕量級的日誌收集處理工具(Agent),Filebeat 佔用資源少,適合於在各個伺服器上搜集日誌後傳輸給 Logstash,官方也推薦此工具。

1.Elasticsearch 是個開源分散式搜尋引擎,提供蒐集、分析、儲存資料三大功能。它的特點有:分散式,零配置,自動發現,索引自動分片,索引副本機制,restful 風格介面,多資料來源,自動搜尋負載等。

2.Logstash 主要是用來日誌的蒐集、分析、過濾日誌的工具,支援大量的資料獲取方式。一般工作方式為 c/s 架構,client 端安裝在需要收集日誌的主機上,server 端負責將收到的各節點日誌進行過濾、修改等操作在一併發往 elasticsearch 上去。

3.Kibana 也是一個開源和免費的工具,Kibana 可以為 Logstash 和 ElasticSearch 提供的日誌分析友好的 Web 介面,可以幫助彙總、分析和搜尋重要資料日誌。

4.Filebeat 隸屬於 Beats。目前 Beats 包含四種工具:

Packetbeat #蒐集網路流量資料
Topbeat    #蒐集系統、程序和檔案系統級別的 CPU 和記憶體使用情況等資料
Filebeat   #蒐集檔案資料
Winlogbeat #蒐集 Windows 事件日誌資料 

二、實驗部署

業務請求到達nginx;nginx響應請求,並在access.log檔案中增加訪問記錄;
FileBeat蒐集新增的日誌,通過LogStash的5044埠上傳日誌;
LogStash將日誌資訊通過本機9200埠傳到Elasticsearch;
搜尋日誌的使用者通過瀏覽器訪問Kibana,伺服器埠是5601
Kibana通過9200埠訪問Elasticsearch。

1.實驗環境準備
單節點ELK:elk服務端:10.0.0.201;nginx客戶端:10.0.0.202

(1)配置yum源(兩臺機器)

wget http://mirrors.aliyun.com/repo/Centos-7.repo
wget http://mirrors.aliyun.com/repo/epel-7.repo
#關閉防火牆:systemctl stop(disable) firewalld
#關閉 SELinux:SELINUX=disabled

2.ELK-server服務端部署
(1)安裝軟體

#建立軟體存放目錄,並將elk-server.zip壓縮包上傳
mkdir /elk;cd /elk
#解壓縮,並拷貝到/usr/local/目錄下
tar -xf elasticsearch-6.2.3.tar.gz
tar -xf logstash-6.2.3.tar.gz 
tar -xf kibana-6.2.3-linux-x86_64.tar.gz
cp -a elasticsearch-6.2.3 logstash-6.2.3 kibana-6.2.3-linux-x86_64 /usr/local
tar -xf jdk-7u25-linux-x64.tar.gz
#cp -a jdk1.7.0_25 /usr/local/jdk1.7

(2)安裝jdk

#安裝gcc
yum -y install gcc

#配置jdk的環境變數
#vim /etc/profile
#新增:
export JAVA_HOME=/usr/local/jdk1.7
export JAVA_BIN=/usr/local/jdk1.7/bin
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
#source /etc/profile

(3)配置Elasticsearch

#新建elasticsearch使用者並使用該啟動啟動
useradd elasticsearch
chown -R elasticsearch.elasticsearch /usr/local/elasticsearch-6.2.3/
su - elasticsearch
$ cd /usr/local/elasticsearch-6.2.3/
$ ./bin/elasticsearch -d
#檢視程序是否啟動成功,需要等待幾分鐘
netstat -anpt|grep :9200

(4)配置logstash
Logstash 收集 nginx 日誌之使用 grok 過濾外掛解析日誌,grok 作為一個 logstash 的過濾外掛,支援根據模式解析文字日誌行,拆成欄位。

grok的正則匹配

#cd /usr/local/logstash-6.2.3/
vim vendor/bundle/jruby/2.3.0/gems/logstash-patterns-core-4.1.2/patterns/grok-patterns
#新增:
WZ ([^ ]*)
NGINXACCESS %{IP:remote_ip} \- \- \[%{HTTPDATE:timestamp}\] "%{WORD:method} %{WZ:request}
HTTP/%{NUMBER:httpversion}" %{NUMBER:status} %{NUMBER:bytes} %{QS:referer} %{QS:agent}
%{QS:xforward}

建立logstash配置檔案

#vim /usr/local/logstash-6.2.3/default.conf
input {
    beats {
        port => "5044"
    }
}
#資料過濾
filter {
    grok {
        match => { "message" => "%{NGINXACCESS}" }
     }
    geoip {
       #nginx 客戶端 ip
       source => "10.0.0.202"
     }
}
#輸出配置為本機的 9200 埠,這是 ElasticSerach 服務的監聽埠
output {
    elasticsearch {
        hosts => ["127.0.0.1:9200"]
    }
}
#進入/usr/local/logstash-6.2.3目錄下
#後臺啟動logstash:
nohup bin/logstash -f default.conf &
#檢視啟動日誌
tail -f nohup.out
#如果報錯“Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000f5550000, 178978816, 0) failed; error='Cannot allocate memory' (errno=12)”
#原因:伺服器記憶體不夠;解決辦法:vim config/jvm.options
#將-Xms1g和-Xmx1g改為:
-Xms256m
-Xmx256m

(5)配置kibana

#編輯配置檔案
vim /usr/local/kibana-6.2.3-linux-x86_64/config/kibana.yml
#修改: #server.host: "localhost" 為 server.host: "本機IP"

#進入kibana目錄
cd /usr/local/kibana-6.2.3-linux-x86_64/
#啟動並測試:
nohup bin/kibana &
#瀏覽器訪問:
10.0.0.201:5601

3.Nginx客戶端配置

#安裝依賴
yum install -y gcc* pcre-devel opensll openssl-devel zlib-devel ncurses-devel cmake bison libxml2-devel libpng-devel

#將原始碼包上傳到nginx主機上,並建立nginx使用者
useradd -r -s /sbin/nologin nginx
#解壓nginx並安裝
#cd nginx-1.17.10/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module
make && make install

#上傳filebeat軟體包並解壓到/usr/local

#編輯配置檔案
vim /usr/local/filebeat-6.2.3-linux-x86_64/filebeat.yml
#修改:
enable:false #修改為 true
paths:/var/log/*.log #修改為/var/log/nginx/*.log
#output.elasticsearch: #將此行註釋掉
#hosts: ["localhost:9200"] #將此行註釋掉
output.logstash: #取消此行註釋
hosts: ["10.0.0.201:5044"] #取消此行註釋並修改 IP 地址為 ELK 伺服器地址

#切換到/usr/local/ filebeat-6.2.3-linux-x86_64目錄下
cd /usr/local/filebeat-6.2.3-linux-x86_64
#啟動:
nohup ./filebeat -e -c filebeat.yml &
#檢視日誌:
tail -f nohup.out

#驗證:多訪問幾次nginx,然後訪問kibana進行設定
#步驟:
	#點選左上角的Discoverwe 
	#輸入 logstash-*,點選next step
	#選擇 time filter,再點選 create index pattern(建立索引模式)