一、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-8u261-linux-x64.tar.gz
#cp -a jdk1.8.0_261 /usr/local/jdk1.8
(2)安裝jdk
#安裝gcc
yum -y install gcc
#配置jdk的環境變量
#vim /etc/profile
#添加:
export JAVA_HOME=/usr/local/jdk1.8
export JAVA_BIN=/usr/local/jdk1.8/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(建立索引模式)