一、ELK概述
1.1、 ELK是什麼?
ELK 是elastic公司提供的一套完整的日誌收集、展示解決方案,是三個產品的首字母縮寫,分別是ElasticSearch、Logstash 和 Kibana。
1、ElasticSearch
- ElasticSearch是一個基於Lucene的開源分佈式搜索服務器。它的特點有:分佈式,零配置,自動發現,索引自動分片,索引副本機制,restful風格接口,多數據源,自動搜索負載等。它提供了一個分佈式多用戶能力的全文搜索引擎,基於RESTful web接口。
- Elasticsearch是用Java開發的,並作爲Apache許可條款下的開放源碼發佈,是第二流行的企業搜索引擎。設計用於雲計算中,能夠達到實時搜索,穩定,可靠,快速,安裝使用方便。
- 在elasticsearch中,所有節點的數據是均等的。
2、Logstash
- Logstash是一個完全開源的工具,它可以對你的日誌進行收集、過濾、分析,支持大量的數據獲取方法,並將其存儲供以後使用(如搜索)。
- logstash帶有一個web界面,搜索和展示所有日誌。一般工作方式爲c/s架構,client端安裝在需要收集日誌的主機上,server端負責將收到的各節點日誌進行過濾、修改等操作在一併發往elasticsearch上去。
3、Kibana
- Kibana 是一個基於瀏覽器頁面的Elasticsearch前端展示工具,也是一個開源和免費的工具。
- Kibana可以爲 Logstash 和 ElasticSearch 提供的日誌分析友好的 Web 界面,可以幫助您彙總、分析和搜索重要數據日誌。
1.2、ELK工作原理
如上圖:Logstash收集AppServer產生的Log,並存放到ElasticSearch集羣中,而Kibana則從ES集羣中查詢數據生成圖表,再返回給Browser。
二、ELK部署
2.1、部署環境準備
配置和安裝ELK日誌分析系統,安裝集羣方式,2個elasticsearch節點,1個kibaha節點,監控apache服務器日誌。
主機名 | IP地址 | 主要軟件 |
---|---|---|
node1 | 192.168.100.131 | Elasticsearch + Kibana |
node2 | 192.168.100.132 | Elasticsearch |
apache | 192.168.100.133 | Logstash Apache |
- 部署ELK所需要的安裝包已經放在百度雲盤上。
鏈接:https://pan.baidu.com/s/1pUnMeojBue9DHxpX78C9aA
提取碼:w4qz
2.2、配置elasticsearch服務器
- 這裏有兩個elasticsearch服務器 node1 和 node2 需要配置,IP地址分別是192.168.100.131 和192.168.100.132。
2.2.1、配置elasticsearch環境
- 更改主機名,配置域名解析,安裝環境編譯包,查看Java版本
- node1和node2的配置相同,這裏就不重複介紹了
[root@node1 ~]# hostnamectl set-hostname node1 #更改主機名
[root@node2 ~]# hostnamectl set-hostname node2
[root@node1 ~]# vi /etc/hosts
192.168.100.131 node1
192.168.100.132 node2
#安裝編譯包
[root@node1 ~]# yum -y install gcc-c++ gcc make pcre
[root@node1 ~]# yum install -y java-1.8.0
[root@node1 ~]# java -version
openjdk version "1.8.0_181"
OpenJDK Runtime Environment (build 1.8.0_181-b13)
OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)
2.2.2、部署elasticsearch軟件
1、安裝elasticsearch—rpm包
上傳elasticsearch-5.5.0.rpm到/opt目錄下
[root@node1 ~]# cd /opt
[root@node1 opt]# rpm -ivh elasticsearch-5.5.0.rpm
2、加載系統服務
[root@node1 opt]# systemctl daemon-reload
[root@node1 opt]# systemctl enable elasticsearch.service
3、更改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"] ####集羣發現通過單播實現
[root@node1 opt]# grep -v "^#" /etc/elasticsearch/elasticsearch.yml
4、創建數據存放路徑並授權
[root@node1 opt]# mkdir -p /data/elk_data
[root@node1 opt]# chown elasticsearch:elasticsearch /data/elk_data/
5、啓動elasticsearch是否成功開啓
[root@node1 elasticsearch]# systemctl daemon-reload #修改了配置文件,要重新加載
[root@node1 elasticsearch]# systemctl start elasticsearch.service
[root@node1 opt]# netstat -antp | grep 9200
tcp6 0 0 :::9200 :::* LISTEN 7124/java
6、查看節點信息 用真機的瀏覽器打開 http://192.168.100.131:9200 顯示節點的信息
2.2.3、檢查集羣信息
1、檢查羣集健康情況
在真機瀏覽器192.168.100.1 打開 http://192.168.100.131:9200/_cluster/health?pretty
2、檢查羣集狀態信息
輸入http://192.168.100.131:9200/_cluster/state?pretty
2.2.4、安裝elasticsearch-head插件
上面查看集羣的方式不太方便,但是我們可以通過安裝 elasticsearch-head 插件後,來管理集羣。
elasticsearch-head是一個界面化的集羣操作和管理工具,可以對集羣進行傻瓜式操作。你可以通過插件把它集成到elasticsearch(5.0版本後不支持此方式),也可以安裝成一個獨立webapp。
node1、node2都要安裝head插件,步驟相同。
//上傳node-v8.2.1.tar.gz到/opt
編譯安裝node組件依賴包,耗時比較長,大約30分鐘。
[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 #j3參數指多線程編譯,編譯速度會大大提高
[root@node1 node-v8.2.1]# make install
// 安裝phantomjs
上傳軟件包到/usr/local/src/
[root@localhost node-v8.2.1]# cd /usr/local/src/
[root@localhost src]# tar xjvf phantomjs-2.1.1-linux-x86_64.tar.bz2
[root@localhost src]# cd phantomjs-2.1.1-linux-x86_64/bin
[root@localhost bin]# cp phantomjs /usr/local/bin
###安裝elasticsearch-head###
[root@localhost bin]# cd /usr/local/src/
[root@localhost src]# tar xzvf elasticsearch-head.tar.gz
[root@localhost src]# cd elasticsearch-head/
[root@localhost elasticsearch-head]# npm install
設置 elasticsearch 跨域訪問
[root@localhost ~]# cd ~
[root@localhost ~]# vi /etc/elasticsearch/elasticsearch.yml ####下面配置文件,插末尾##
http.cors.enabled: true
http.cors.allow-origin: "*"
[root@localhost ~]# systemctl restart elasticsearch
//啓動elasticsearch-head 服務器
[root@localhost ~]# cd /usr/local/src/elasticsearch-head/
[root@localhost elasticsearch-head]# npm run start & ####切換到後臺運行
[root@localhost elasticsearch-head]# netstat -lnupt |grep 9100
tcp 0 0 0.0.0.0:9100 0.0.0.0:* LISTEN 114739/grunt
[root@localhost elasticsearch-head]# netstat -lnupt |grep 9200
tcp6 0 0 :::9200 :::* LISTEN 114626/java
2.2.5、使用elasticsearch-head
在真機上打開瀏覽器輸入node1和node2的地址查看集羣狀況。http://192.168.100.131:9100/
http://192.168.100.132:9100/
模擬在node1節點命令上創建索引、類型,查看網頁版elasticsearch。
[root@node1 ~]# curl -XPUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'
下圖可以看見索引默認被分片5個,並且有一個副本
進入數據瀏覽可以查看索引名稱和類型。
2.3、安裝 logstash服務器
2.3.1、配置環境
更改主機名、關閉防火牆、關閉核心防護
1、更改主機名
hostnamectl set-hostname apache
su
2、關閉防火牆
systemctl stop firewalld
setenforce 0
3、關閉核心防護
sed -i '7s/enforcing/disabled/' /etc/sysconfig/selinux
2.3.1、安裝Apahce、logstash
1、安裝Apahce服務(httpd)
[root@apache ~]# yum -y install httpd
[root@apache ~]# systemctl start httpd
2、安裝Java環境
[root@apache ~]# java -version ###如果沒有裝,安裝yum -y install java-1.8.0
openjdk version "1.8.0_181"
OpenJDK Runtime Environment (build 1.8.0_181-b13)
OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)
3、安裝logstash
上傳logstash-5.5.1.rpm到/opt目錄下
[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軟連接
2.4、logstash與elasticsearch對接
使用 logstash 命令測試 logstash 和 elasticsearch 是否功能正常,完成對接
字段描述解釋:
● -f 通過這個選項可以指定logstash的配置文件,根據配置文件配置logstash
● -e 後面跟着字符串 該字符串可以被當做logstash的配置(如果是” ”,則默認使用stdin做爲輸入、stdout作爲輸出)
● -t 測試配置文件是否正確,然後退出
//使用logstash將信息寫入elasticsearch中輸入 輸出 對接
[root@apache opt]# logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.100.131:9200"] } }'
。。。。。。。。省略。。。。。。。
The stdin plugin is now waiting for input:
10:40:06.558 [Api Webserver] INFO logstash.agent - Successfully started Logstash API endpoint {:port=>9600}
www.baidu.com ###輸入內容
www.sina.com.cn ###輸入內容
www.google.com.cn ###輸入內容
登錄宿主機打開瀏覽器 輸入http://192.168.100.131:9100/ 查看索引信息,會多出 logstash-2020.03.25索引。
點擊數據瀏覽查看響應的內容就是在命令行輸入的信息。
【登錄192.168.100.133 Apache主機 做對接配置】
Logstash配置文件主要由三部分組成:input、output、filter(根據需要)
[root@apache opt]# chmod o+r /var/log/messages #給其他用戶一個只讀權限
[root@apache opt]# ll /var/log/messages
-rw----r--. 1 root root 572555 4月 16 23:50 /var/log/messages
[root@apache opt]# vi /etc/logstash/conf.d/system.conf
input {
file{
path => "/var/log/messages"
type => "system"
start_position => "beginning"
}
}
output {
elasticsearch {
hosts => ["192.168.100.131:9200"]
index => "system-%{+YYYY.MM.dd}"
}
}
[root@apache opt]# systemctl restart logstash.service
登錄192.168.100.1 真機
打開瀏覽器 輸入http://192.168.100.131:9100/ 查看索引信息,會多出 system-2020.03.25
2.5、在node1主機安裝kibana
上傳kibana-5.5.1-x86_64.rpm 到/usr/local/src目錄
[root@node1 ~]# cd /usr/local/src/
[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
server.port: 5601 #### kibana打開的端口
server.host: "0.0.0.0" ####kibana偵聽的地址
elasticsearch.url: "http://192.168.100.131:9200" ###和elasticsearch建立聯繫
kibana.index: ".kibana" ####在elasticsearch中添加.kibana索引
[root@node1 kibana]# systemctl start kibana.service ###啓動kibana服務
[root@node1 kibana]# systemctl enable kibana.service ###開機啓動kibana服務
登錄宿主機使用瀏覽器輸入192.168.100.131:5601
首次登錄創建一個索引名字:system-* 這是對接系統日誌文件
然後點擊create即可
然後點最左上角的Discover按鈕,再點下面的 host旁邊的add 右面的圖中只顯示 Time 和host 選項。
2.6、對接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
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.100.131:9200"]
index => "apache_access-%{+YYYY.MM.dd}"
}
}
if [type] == "error" {
elasticsearch {
hosts => ["192.168.100.131:9200"]
index => "apache_error-%{+YYYY.MM.dd}"
}
}
}
[root@apache conf.d]# /usr/share/logstash/bin/logstash -f apache_log.conf
登錄宿主機打開瀏覽器輸入http://192.168.100.133
再次打開瀏覽器 輸入http://192.168.100.131:9100/ 連接,查看索引信息
能發現apache_access-2020.03.25、apache_error-2020.03.25
打開瀏覽器 輸入http://192.168.100.131:5601
點擊左下角有個management選項-----index patterns----create index pattern----分別創建apache_error-* 和 apache_access-* 的索引
到了這裏我們的ELK日誌分析已經搭建成功,也介紹了使用方法,可以通過ELK完成日誌分析了。