目 錄
- 一、ELK的具體含義
-
- ①說說ELK
- ②使用 ELK的原因
- ③完整日志系統它的基本特征
- ④ELK 工作的原理是什麼
- 環境準備
- 二、ELK Elasticsearch 叢集的部署操作
-
- ①配置環境
- ②部署 Elasticsearch 軟體
-
- (1)安裝elasticsearch—rpm包
- (2)加載系統服務
- (3)修改elasticsearch主配置檔案
- (4)建立資料存放路徑并授權
- (5)啟動elasticsearch是否成功開啟
- (6)檢視節點資訊
- ③安裝 Elasticsearch-head 插件
-
- (1)編譯安裝 node
- (2)安裝 phantomjs
- (3)安裝 Elasticsearch-head 資料可視化工具
- (4)修改 Elasticsearch 主配置檔案
- (5)啟動 elasticsearch-head 服務
- (6)通過 Elasticsearch-head 檢視 Elasticsearch 資訊
- (7)插入索引
- 三、 ELK Logstash 的部署操作(詳細)
-
- 1.更改主機名
- 2.安裝Apahce服務(httpd)
- 3.安裝Java環境
- 4.安裝logstash
- 5.測試 Logstash
- 6.定義 logstash配置檔案
- 四、ELK Kiabana的部署操作
-
- 1.安裝 Kiabana
- 2.設定 Kibana 的主配置檔案
- 3.啟動 Kibana 服務
- 4.驗證 Kibana
- 5.将 Apache 伺服器的日志(通路的、錯誤的)添加到 Elasticsearch 并通過 Kibana 顯示
- 五、Filebeat+ELK 部署
-
- ①實驗步驟
-
- (1)安裝 Filebeat
- (2)設定 Kibana 的主配置檔案
- (3)在 Logstash 元件所在節點上建立一個 Logstash 配置檔案
一、ELK的具體含義
①說說ELK
ELK平台是一套完整的日志集中處了解決方案,将 ElasticSearch、Logstash 和 Kiabana 三個開源工具配合使用, 完成更強大的使用者對日志的查詢、排序、統計需求。
●ElasticSearch:
- 是基于Lucene(一個全文檢索引擎的架構)開發的分布式存儲檢索引擎,用來存儲各類日志。
- Elasticsearch 是用 Java 開發的,可通過 RESTful Web 接口,讓使用者可以通過浏覽器與Elasticsearch 通信。
- Elasticsearch 是個分布式搜尋和分析引擎,優點是能對大容量的資料進行接近實時的存儲、搜尋和分析操作。
●Logstash:
- 作為資料收集引擎。它支援動态的從各種資料源搜集資料,并對資料進行過濾、分析、豐富、統一格式等操作,然後存儲到使用者指定的位置,一般會發送給 Elasticsearch。
- Logstash 由JRuby 語言編寫,運作在 Java 虛拟機(JVM)上,是一款強大的資料處理工具, 可以實作資料傳輸、格式處理、格式化輸出。Logstash 具有強大的插件功能,常用于日志處理。
●Kiabana:
- 是基于 Node.js 開發的展示工具,可以為 Logstash 和 ElasticSearch 提供圖形化的日志分析 Web 界面展示,可以彙總、分析和搜尋重要資料日志。
●Filebeat:
- 輕量級的開源日志檔案資料搜集器。通常在需要采集資料的用戶端安裝 Filebeat,并指定目錄與日志格式,Filebeat 就能快速收集資料,并發送給 logstash 進行解析,或是直接發給 Elasticsearch 存儲,性能上相比運作于 JVM 上的 logstash 優勢明顯,是對它的替代。
②使用 ELK的原因
日志主要包括系統日志、應用程式日志和安全日志。
系統運維和開發人員可以通過日志了解伺服器軟硬體資訊、檢查配置過程中的錯誤及錯誤發生的原因。經常分析日志可以了解伺服器的負荷,性能安全性,進而及時采取措施糾正錯誤。
往往單台機器的日志我們使用grep、awk等工具就能基本實作簡單分析,但是當日志被分散的儲存不同的裝置上。如果你管理數十上百台伺服器,你還在使用依次登入每台機器的傳統方法查閱日志。這樣是不是感覺很繁瑣和效率低下。當務之急我們使用集中化的日志管理,例如:開源的syslog,将所有伺服器上的日志收集彙總。集中化管理日志後,日志的統計和檢索又成為一件比較麻煩的事情,一般我們使用grep、awk和wc等Linux指令能實作檢索和統計,但是對于要求更高的查詢、排序和統計等要求和龐大的機器數量依然使用這樣的方法難免有點力不從心。
一般大型系統是一個分布式部署的架構,不同的服務子產品部署在不同的伺服器上,問題出現時,大部分情況需要根據問題暴露的關鍵資訊,定位到具體的伺服器和服務子產品,建構一套集中式日志系統,可以提高定位問題的效率。
③完整日志系統它的基本特征
收集:能夠采集多種來源的日志資料
傳輸:能夠穩定的把日志資料解析過濾并傳輸到存儲系統
存儲:存儲日志資料
分析:支援 UI 分析
警告:能夠提供錯誤報告,監控機制
④ELK 工作的原理是什麼
(1)在所有需要收集日志的伺服器上部署Logstash;或者先将日志進行集中化管理在日志伺服器上,在日志伺服器上部署 Logstash。
(2)Logstash 收集日志,将日志格式化并輸出到 Elasticsearch 群集中。
(3)Elasticsearch 對格式化後的資料進行索引和存儲。
(4)Kibana 從 ES 群集中查詢資料生成圖表,并進行前端資料的展示。
環境準備
Node1節點(2C/4G):node1/192.168.17.166 Elasticsearch Kibana
Node2節點(2C/4G):node2/192.168.17.199 Elasticsearch
Apache節點:apache/192.168.17.133 Logstash Apache
systemctl stop firewalld
setenforce 0
二、ELK Elasticsearch 叢集的部署操作
(在Node1、Node2節點上操作)
①配置環境
#更改主機名、配置域名解析、檢視Java環境
Node1節點:hostnamectl set-hostname node1
Node2節點:hostnamectl set-hostname node2
vim /etc/hosts
192.168.17.166 node1
192.168.17.199 node2
java -version #如果沒有安裝,yum -y install java
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-b12)
OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode)
②部署 Elasticsearch 軟體
(1)安裝elasticsearch—rpm包
#上傳elasticsearch-5.5.0.rpm到/opt目錄下
cd /opt
rpm -ivh elasticsearch-5.5.0.rpm
(2)加載系統服務
systemctl daemon-reload
systemctl enable elasticsearch.service
(3)修改elasticsearch主配置檔案
cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak
vim /etc/elasticsearch/elasticsearch.yml
--17--取消注釋,指定叢集名字
cluster.name: my-elk-cluster
--23--取消注釋,指定節點名字:Node1節點為node1,Node2節點為node2
node.name: node1
--33--取消注釋,指定資料存放路徑
path.data: /data/elk_data
--37--取消注釋,指定日志存放路徑
path.logs: /var/log/elasticsearch/
--43--取消注釋,改為在啟動的時候不鎖定記憶體
bootstrap.memory_lock: false
--55--取消注釋,設定監聽位址,0.0.0.0代表所有位址
network.host: 0.0.0.0
--59--取消注釋,ES 服務的預設監聽端口為9200
http.port: 9200
--68--取消注釋,叢集發現通過單點傳播實作,指定要發現的節點 node1、node2
discovery.zen.ping.unicast.hosts: ["node1", "node2"]
grep -v "^#" /etc/elasticsearch/elasticsearch.yml
(4)建立資料存放路徑并授權
mkdir -p /data/elk_data
chown elasticsearch:elasticsearch /data/elk_data/
(5)啟動elasticsearch是否成功開啟
systemctl start elasticsearch.service
netstat -antp | grep 9200
(6)檢視節點資訊
浏覽器通路 http://192.168.17.166:9200 、 http://192.168.17.199:9200 檢視節點 Node1、Node2 的資訊。
浏覽器通路 http://192.168.17.166:9200/_cluster/health?pretty 、 http://192.168.17.199:9200/_cluster/health?pretty檢視群集的健康情況,可以看到 status 值為 green(綠色), 表示節點健康運作。
浏覽器通路 http://192.168.17.166:9200/_cluster/state?pretty 檢查群集狀态資訊。
#使用上述方式檢視群集的狀态對使用者并不友好,可以通過安裝 Elasticsearch-head 插件,可以更友善地管理群集。
③安裝 Elasticsearch-head 插件
Elasticsearch 在 5.0 版本後,Elasticsearch-head 插件需要作為獨立服務進行安裝,需要使用npm工具(NodeJS的包管理工具)安裝。
安裝 Elasticsearch-head 需要提前安裝好依賴軟體 node 和 phantomjs。
- node:是一個基于 Chrome V8 引擎的 JavaScript 運作環境。
- phantomjs:是一個基于 webkit 的JavaScriptAPI,可以了解為一個隐形的浏覽器,任何基于 webkit 浏覽器做的事情,它都可以做到。
(1)編譯安裝 node
#上傳軟體包 node-v8.2.1.tar.gz 到/opt
yum install gcc gcc-c++ make -y
cd /opt
tar zxvf node-v8.2.1.tar.gz
cd node-v8.2.1/
./configure
make && make install
(2)安裝 phantomjs
#上傳軟體包 phantomjs-2.1.1-linux-x86_64.tar.bz2 到
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
(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
(4)修改 Elasticsearch 主配置檔案
vim /etc/elasticsearch/elasticsearch.yml
......
--末尾添加以下内容--
http.cors.enabled: true #開啟跨域通路支援,預設為 false
http.cors.allow-origin: "*" #指定跨域通路允許的域名位址為所有
systemctl restart elasticsearch
(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
(6)通過 Elasticsearch-head 檢視 Elasticsearch 資訊
通過浏覽器通路http://192.168.17.166:9100 和 http://192.168.17.199:9100位址并連接配接群集。如果看到群集健康值為 green 綠色,代表群集很健康。
(7)插入索引
#通過指令插入一個測試索引,索引為 index-demo,類型為 test。
curl -X PUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'
//輸出結果如下:
{
"_index" : "index-demo",
"_type" : "test",
"_id" : "1",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 2,
"failed" : 0
},
"created" : true
}
浏覽器通路 http://192.168.17.166:9100/ 檢視索引資訊,可以看見索引預設被分片5個,并且有一個副本。
點選“資料浏覽”,會發現在node1上建立的索引為 index-demo,類型為 test 的相關資訊。
三、 ELK Logstash 的部署操作(詳細)
(在 Apache 節點上操作)
Logstash 一般部署在需要監控其日志的伺服器。在本案例中,Logstash 部署在 Apache 伺服器上,用于收集 Apache 伺服器的日志資訊并發送到 Elasticsearch。
1.更改主機名
hostnamectl set-hostname apache
2.安裝Apahce服務(httpd)
yum -y install httpd
systemctl start httpd
3.安裝Java環境
yum -y install java
java -version
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.測試 Logstash
Logstash 指令常用選項:
-f:通過這個選項可以指定 Logstash 的配置檔案,根據配置檔案配置 Logstash 的輸入和輸出流。
-e:從指令行中擷取,輸入、輸出後面跟着字元串,該字元串可以被當作 Logstash 的配置(如果是空,則預設使用 stdin 作為輸入,stdout 作為輸出)。
-t:測試配置檔案是否正确,然後退出。
定義輸入和輸出流:
#輸入采用标準輸入,輸出采用标準輸出(類似管道)
logstash -e 'input { stdin{} } output { stdout{} }'
......
www.baidu.com #鍵入内容(标準輸入)
2020-12-22T03:58:47.799Z node1 www.baidu.com #輸出結果(标準輸出)
www.sina.com.cn #鍵入内容(标準輸入)
2017-12-22T03:59:02.908Z node1 www.sina.com.cn #輸出結果(标準輸出)
//執行 ctrl+c 退出
#使用 rubydebug 輸出詳細格式顯示,codec 為一種編解碼器
logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'
......
www.baidu.com #鍵入内容(标準輸入)
{
"@timestamp" => 2020-12-22T02:15:39.136Z, #輸出結果(處理後的結果)
"@version" => "1",
"host" => "apache",
"message" => "www.baidu.com"
}
#使用 Logstash 将資訊寫入 Elasticsearch 中
logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.80.10:9200"] } }'
輸入 輸出 對接
......
www.baidu.com #鍵入内容(标準輸入)
www.sina.com.cn #鍵入内容(标準輸入)
www.google.com #鍵入内容(标準輸入)
//結果不在标準輸出顯示,而是發送至 Elasticsearch 中,可浏覽器通路 http://192.168.80.10:9100/ 檢視索引資訊和資料浏覽。
6.定義 logstash配置檔案
Logstash 配置檔案基本由三部分組成:input、output 以及 filter(可選,根據需要選擇使用)。
#格式如下:
input {...}
filter {...}
output {...}
#在每個部分中,也可以指定多個通路方式。例如,若要指定兩個日志來源檔案,則格式如下:
input {
file { path =>"/var/log/messages" type =>"syslog"}
file { path =>"/var/log/httpd/access.log" type =>"apache"}
}
#修改 Logstash 配置檔案,讓其收集系統日志/var/log/messages,并将其輸出到 elasticsearch 中。
chmod +r /var/log/messages #讓 Logstash 可以讀取日志
vim /etc/logstash/conf.d/system.conf
input {
file{
path =>"/var/log/messages" #指定要收集的日志的位置
type =>"system" #自定義日志類型辨別
start_position =>"beginning" #表示從開始處收集
}
}
output {
elasticsearch { #輸出到 elasticsearch
hosts => ["192.168.17.166:9200"] #指定 elasticsearch 伺服器的位址和端口
index =>"system-%{+YYYY.MM.dd}" #指定輸出到 elasticsearch 的索引格式
}
}
systemctl restart logstash
覽器通路 http://192.168.17.166:9100/ 檢視索引資訊
四、ELK Kiabana的部署操作
(在 Node1 節點上操作)
1.安裝 Kiabana
#上傳軟體包 kibana-5.5.1-x86_64.rpm 到/opt目錄
cd /opt
rpm -ivh kibana-5.5.1-x86_64.rpm
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"
3.啟動 Kibana 服務
systemctl start kibana.service
systemctl enable kibana.service
netstat -natp | grep 5601
4.驗證 Kibana
浏覽器通路 http://192.168.17.166:5601
第一次登入需要添加一個 Elasticsearch 索引:
Index name or pattern
//輸入:system-* #在索引名中輸入之前配置的 Output 字首“system”
單擊 “create” 按鈕建立,單擊 “Discover” 按鈕可檢視圖表資訊及日志資訊。
資料展示可以分類顯示,在“Available Fields”中的“host”,然後單擊 “add”按鈕,可以看到按照“host”篩選後的結果
5.将 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.17.166:9200"]
index => "apache_access-%{+YYYY.MM.dd}"
}
}
if [type] == "error" {
elasticsearch {
hosts => ["192.168.17.166:9200"]
index => "apache_error-%{+YYYY.MM.dd}"
}
}
}
cd /etc/logstash/conf.d/
/usr/share/logstash/bin/logstash -f apache_log.conf
浏覽器通路 http://192.168.17.166:9100 檢視索引是否建立
浏覽器通路 http://192.168.17.166:5601 登入 Kibana,單擊“Create Index Pattern”按鈕添加索引, 在索引名中輸入之前配置的 Output 字首 apache_access-*,并單擊“Create”按鈕。在用相同的方法添加 apache_error-*索引。
選擇“Discover”頁籤,在中間下拉清單中選擇剛添加的 apache_access-* 、apache_error-* 索引, 可以檢視相應的圖表及日志資訊。
五、Filebeat+ELK 部署
實驗環境
主機 | 作業系統 | IP位址 | 安裝包 / 軟體 / 工具 |
---|---|---|---|
node1 | CentOS7 | 192.168.17.166 | Elasticsearch |
node2 | CentOS7 | 192.168.17.199 | Elasticsearch |
apache | CentOS7 | 192.168.17.133 | httpd / Logstash |
Filebeat | CentOS7 | 192.168.17.99 | Filebeat |
①實驗步驟
192.168.17.99
(1)安裝 Filebeat
#上傳軟體包 filebeat-6.2.4-linux-x86_64.tar.gz 到/opt目錄
tar zxvf filebeat-6.2.4-linux-x86_64.tar.gz
mv filebeat-6.2.4-linux-x86_64/ /usr/local/filebeat
(2)設定 Kibana 的主配置檔案
cd /usr/local/filebeat
vim filebeat.yml
filebeat.prospectors:
- type: log #指定 log 類型,從日志檔案中讀取消息
enabled: true
paths:
- /var/log/messages #指定監控的日志檔案
- /var/log/*.log
fields: #可以使用 fields 配置選項設定一些參數字段添加到 output 中
service_name: filebeat
log_type: log
service_id: 192.168.17.99
--------------Elasticsearch output-------------------
(全部注釋掉)
----------------Logstash output---------------------
output.logstash:
hosts: ["192.168.17.99:5044"] #指定 logstash 的 IP 和端口
#啟動 filebeat
./filebeat -e -c filebeat.yml
(3)在 Logstash 元件所在節點上建立一個 Logstash 配置檔案
apache(192.168.17.133)
cd /etc/logstash/conf.d
vim logstash.conf
input {
beats {
port => "5044"
}
}
output {
elasticsearch {
hosts => ["192.168.17.166:9200"]
index => "%{[fields][service_name]}-%{+YYYY.MM.dd}"
}
stdout {
codec => rubydebug
}
}
#啟動 logstash
logstash -f logstash.conf
浏覽器通路 http://192.168.17.133:5601 登入 Kibana,單擊“Create Index Pattern”按鈕添加索引“filebeat-*”,單擊 “create” 按鈕建立,單擊 “Discover” 按鈕可檢視圖表資訊及日志資訊。