文章目錄
- 一、 ELK日志系統簡介
- 1.1 ELK的組成
- 1.2 日志分析的步驟
- 1.3 Elasticsearch 介紹
- 1.3.1 Elasticsearch 的基礎核心概念
- 1.4 Logstash 介紹
- 1.5 Kibana 介紹
- 二、 部署Elasticsearch 群集
- 2.1 部署程序
- 1. 準備環境
- 2. 安裝Elasticsearch軟體
- 3. 更改elasticsearch主組態檔
- 4. 開啟elastisearch,并測驗
- 5. 安裝node組件(手工編譯安裝)
- 6. 安裝前端框架 phantomjs(手工編譯安裝)
- 7. 安裝elasticsearch-head插件(手工編譯安裝)
- 8. 修改elasticsearch主組態檔
- 9. 啟動elasticsearch-head 服務器
- 10. 進行訪問
- 11. 添加資料并查看
- 三、 安裝logstash
- 3.1 logstash的安裝程序
- 1. web服務器的部署
- 2. 查看JAVA環境
- 3. 安裝logstash
- 4. 測驗logstash命令
- 5. 使用logstash將資訊寫入elasticsearch中--輸入輸出對接
- 6. 修改logstash組態檔
- 三、 kibana部署與使用
- 3.1 部署kibana
- 3.2 對接apache的日志檔案
- 3.3 在kibana中進行創建、查看
一、 ELK日志系統簡介
日志分析是運維工程師解決系統故障、發現問題的主要手段,日志包含多種型別,包括程式日志、Web 訪問日志、系統日志以及安全日志等,ELK可以很好地查找以及分析所需要的內容,快速定位是否出現故障,以及哪些機器、哪些服務存在故障,
1.1 ELK的組成
ELK 由 ElasticSearch、Logstash 和 Kiabana 三個開源工具組成,其官方網站為 https://www.elastic.co/cn,
- Elasticsearch 是一個開源分布式實時分析搜索引擎,建立在全文搜索引擎庫 Apache Lucene 基礎上,同時隱藏了 Apache Lucene 的復雜性,Elasticsearch 將所有的功能 打包成一個獨立的服務,并提供了一個簡單的 RESTfulAPI 介面,它具有分布式、零配置、自動發現、索引自動分片、索引副本機制、RESTful 風格介面、多資料源、自動搜索負載等特點,
- Logstash 是一個完全開源的工具,主要用于日志收集,同時可以對資料處理,并輸出 給 Elasticsearch,
- Kibana 也是一個開源和免費的工具,Kibana 可以為 Logstash 和 ElasticSearch 提 供圖形化的日志分析 Web 界面,可以匯總、分析和搜索重要資料日志,
1.2 日志分析的步驟
Logstash 收集 AppServer 產生的 Log,并存放到 ElasticSearch 群集中,而 Kibana 則 從 ES 群集中查詢資料生成圖表,再回傳給 Browser,
- 將日志進行集中化管理,
- 將日志格式化(Logstash)并輸出到 Elasticsearch,
- 對格式化后的資料進行索引和存盤(Elasticsearch),
- 前端資料的展示(Kibana),
1.3 Elasticsearch 介紹
Elasticsearch 提供了一 個分布式多用戶能力的全文搜索引擎,基于 RESTful Web 介面,通過該介面,用戶可以通 過瀏覽器與 Elasticsearch 通信,具有實時搜索、穩定、可靠、快速、安裝使用方便等特點,
1.3.1 Elasticsearch 的基礎核心概念
- 接近實時(NRT):Elasticsearch 是一個搜索速度接近實時的搜索平臺,回應速度非常 快,從開始索引一個檔案到這個檔案能夠被搜索到只有一個輕微的延遲(通常是 1s) ,
- 群集(cluster) :在一個或多個節點上存放用戶資料,并一起提供索引和搜索功能,通過選舉產生主節點,并提供跨節點的聯合索引和搜索的功能,
- 節點(node):是指一臺單一的服務器,多個節點組織為一個群集,每個節點都存盤資料并參與群集的索引和搜索功能,默認情況,每個節點都已經加入 Elasticsearch 群集,如果群集中有多個 節點,它們將會自動組建一個名為 Elasticsearch 的群集,
- 索引(index):類似于關系型資料庫中的“庫”,當索引一個檔案后,就可以使用 Elasticsearch 搜索到該檔案,在 index 下面包含存盤資料的型別(Type),Type 類似于關系型資料 庫中的“表”,用來存放具體資料,而 Type 下面包含檔案(Document),檔案相當于關 系型資料庫的“記錄”,一個檔案是一個可被索引的基礎資訊單元,
- 分片和副本(shards & replicas):Elasticsearch 將索引分成若干個部分,每個部分稱為一個分片,每個分片就是一個全功能的獨立的索引,分片的數量一般在索引創建前指定,且創建索引后不能更改,
- 分片的兩個最主要原因如下,
水平分割擴展,增大存盤量,
分布式并行跨分片操作,提高性能和吞吐量, - Elasticsearch 將索引分片復制一份或多份,稱為副本,副本是索引 的另一個備份,用于資料冗余以及負載分擔,默認情況下 Elasticsearch 自動對索引請求進行負載分擔,
1.4 Logstash 介紹
Logstash 由 JRuby 語言撰寫,運行在 Java 虛擬機(JVM)上,常用于日志處理,Logstash 只做三件事情:資料輸入、資料加工(如過濾,改寫等) 以及資料輸出,
LogStash 的主要組件如下,
- Shipper:日志收集者,負責監控本地日志檔案的變化,及時收集最新的日志檔案內容,通常遠程代理端(agent)只需要運行這個組件即可,
- Indexer:日志存盤者,負責接收日志并寫入到本地檔案,
- Broker:日志 Hub,負責連接多個 Shipper 和多個 Indexer,
- Search and Storage:允許對事件進行搜索和存盤,
- WebInterface:基于 Web 的展示界面,
Logstash 使用管道方式進行日志的搜集處理和輸出,有點類似 Linux 系統的管道命令, 將前一個流程的處理結果發送到后一個流程繼續處理,在 Logstash 中,包括了三個階段, 分別是輸入(Input )、處理(Filter,非必需)和輸出(Output),
1.5 Kibana 介紹
Kibana可以搜索、查看存盤在 Elasticsearch 索引中的資料,并通過各種圖表進行高級資料分析及展示,讓資料看起來一目了然,
Kibana 的主要功能如下,
- Elasticsearch 無縫之集成,Kibana 架構是為 Elasticsearch 定制的,可以將任何(結構 化和非結構化)資料加入 Elasticsearch 索引,
- 整合資料,Kibana 可以讓海量資料變得更容易理解,根據資料內容可以創建形象的柱形圖、折線圖、散點圖、直方圖、餅圖和地圖,方便用戶查看,
- 復雜資料分析,Kibana 提升了 Elasticsearch 的分析能力,能夠更加智能地分析資料,執行資料轉換并且根據要求對資料切割分塊,
- 讓更多團隊成員受益,強大的資料庫可視化介面讓各業務崗位都能夠從資料集合受益,
- 介面靈活,分享更容易,使用 Kibana 可以更加方便地創建、保存、分享資料,并將可視化資料快速交流,
- 配置簡單,Kibana 的配置和啟用非常簡單,用戶體驗非常友好,Kibana 自帶 Web 服務,可以快速啟動運行,
- 可視化多資料源,Kibana 可以非常方便地把來自 Logstash、ES-Hadoop、Beats 或第三方技術的資料整合到 Elasticsearch,
- 簡單資料匯出,Kibana 可以方便地匯出感興趣的資料,與其他資料整合并融合后快速建模分析,發現新結果,
二、 部署Elasticsearch 群集
部署Elasticsearch 群集至少需要兩臺服務器
2.1 部署程序
1. 準備環境
修改主機名、hosts檔案、關閉防火墻、內核防護
[root@localhost ~]# hostnamectl set-hostname node1
[root@localhost ~]# su
[root@node1 ~]# vim /etc/hosts ##在hosts檔案中寫入下面的決議條目
14.0.0.77 node1
14.0.0.110 node2
[root@node1 ~]# systemctl stop firewalld.service
[root@node1 ~]# setenforce 0
[root@node1 ~]# java -version ##查看jdk是否安裝
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)
[root@localhost ~]# hostnamectl set-hostname node2
[root@localhost ~]# su
[root@node2 ~]# vim /etc/hosts
14.0.0.77 node1
14.0.0.110 node2
[root@node2 ~]# systemctl stop firewalld.service
[root@node2 ~]# setenforce 0
2. 安裝Elasticsearch軟體
兩個節點服務器進行相同的操作,以node1服務器為例
[root@node1 ~]# cd /opt ##將軟體包拷貝到/opt目錄下
rz waiting to receive.
[root@node1 opt]# ls
elasticsearch-5.5.0.rpm logstash-5.5.1.rpm rh
elasticsearch-head.tar.gz node-v8.2.1.tar.gz
kibana-5.5.1-x86_64.rpm phantomjs-2.1.1-linux-x86_64.tar.bz2
[root@node1 opt]# rpm -ivh elasticsearch-5.5.0.rpm ##rpm方式安裝elasticsearch軟體
警告:elasticsearch-5.5.0.rpm: 頭V4 RSA/SHA512 Signature, 密鑰 ID d88e42b4: NOKEY
準備中... ################################# [100%]
Creating elasticsearch group... OK
Creating elasticsearch user... OK
正在升級/安裝...
1:elasticsearch-0:5.5.0-1 ################################# [100%]
### NOT starting on installation, please execute the following statements to configure elasticsearch service to start automatically using systemd
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch.service
### You can start elasticsearch service by executing
sudo systemctl start elasticsearch.service
[root@node1 opt]# systemctl daemon-reload ##多載系統服務
[root@node1 opt]# systemctl enable elasticsearch.service ##設定為開機自啟動
Created symlink from /etc/systemd/system/multi-user.target.wants/elasticsearch.service to /usr/lib/systemd/system/elasticsearch.service.
3. 更改elasticsearch主組態檔
node1與node2做同樣的操作
[root@node1 opt]# cp -p /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak ##將組態檔做備份,防止錯改組態檔
[root@node1 opt]# cd /etc/elasticsearch/
[root@node1 elasticsearch]# vim elasticsearch.yml
cluster.name: my-elk-cluster ##17行,設定集群名字
node.name: node1 ##23行,設定節點名字
path.data: /data/elk_data ##33行,資料存放路徑
path.logs: /var/log/elasticsearch/ ##37行,日志存放路徑
bootstrap.memory_lock: false ##43行,不在啟動的時候鎖定記憶體
network.host: 0.0.0.0 ##55行,提供服務系結的IP地址,0.0.0.0代表所有網段
http.port: 9200 ##59行,偵聽埠9200
discovery.zen.ping.unicast.hosts: ["node1", "node2"] ##68行,集群發現通過單播實作
[root@node1 elasticsearch]# grep -v '^#' 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
http.port: 9200
discovery.zen.ping.unicast.hosts: ["node1", "node2"]
[root@node1 elasticsearch]# mkdir -p /data/elk_data ##創建elasticsearch的資料檔案存放位置
[root@node1 elasticsearch]# id elasticsearch ##查看用戶
uid=987(elasticsearch) gid=981(elasticsearch) 組=981(elasticsearch)
[root@node1 elasticsearch]# chown elasticsearch.elasticsearch /data/elk_data/ ##設定elasticsearch的資料檔案存放目錄屬組、屬主為elasticsearch
4. 開啟elastisearch,并測驗
node1和node2做同樣的操作
[root@node1 elasticsearch]# systemctl start elasticsearch.service ##需要等待一會埠開會開啟
[root@node1 elasticsearch]# netstat -ntap | grep 9200
tcp6 0 0 :::9200 :::* LISTEN 65901/java
在真機中訪問
http://14.0.0.77:9200
http://14.0.0.110:9200


http://14.0.0.77:9200/_cluster/health?pretty
http://14.0.0.110:9200/_cluster/health?pretty


http://14.0.0.77:9200/_cluster/state?pretty
http://14.0.0.110:9200/_cluster/state?pretty


5. 安裝node組件(手工編譯安裝)
軟體包之前已經拷貝到/opt目錄下了,直接進行解壓安裝
[root@node1 elasticsearch]# cd /opt
[root@node1 opt]# yum install gcc gcc-c++ -y
[root@node1 opt]# tar zxvf node-v8.2.1.tar.gz ##解壓
[root@node1 node-v8.2.1]# ./configure ##configure配置
[root@node1 node-v8.2.1]# make -j4 ##編譯安裝,-j4是指四個執行緒運行,編譯速度比較慢,大概20分鐘
[root@node1 node-v8.2.1]# make install ##安裝
6. 安裝前端框架 phantomjs(手工編譯安裝)
[root@node1 opt]# tar jvxf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/local/src/ ##解壓
[root@node1 opt]# cd /usr/local/src/phantomjs-2.1.1-linux-x86_64/
[root@node1 phantomjs-2.1.1-linux-x86_64]# cd bin/
[root@node1 bin]# ls
phantomjs
[root@node1 bin]# cp phantomjs /usr/local/bin/ ##將腳本拷貝到指定目錄下,便于系統識別
7. 安裝elasticsearch-head插件(手工編譯安裝)
[root@node1 bin]# cd /opt
[root@node1 opt]# tar zxvf elasticsearch-head.tar.gz -C /usr/local/src/
[root@node1 opt]# cd /usr/local/src/elasticsearch-head/
[root@node1 elasticsearch-head]# npm install ##等待安裝
8. 修改elasticsearch主組態檔
[root@node1 elasticsearch-head]# vim /etc/elasticsearch/elasticsearch.yml ##在檔案末尾寫入下面兩句
http.cors.enabled: true ##開啟跨域訪問支持,默認為false
http.cors.allow-origin: "*" ##跨域訪問允許的域名地址
[root@node1 elasticsearch-head]# systemctl restart elasticsearch.service
9. 啟動elasticsearch-head 服務器
[root@node1 elasticsearch-head]# pwd
/usr/local/src/elasticsearch-head
[root@node1 elasticsearch-head]# npm run start & ##開啟服務,在后臺運行
[1] 112187
[root@node1 elasticsearch-head]#
> elasticsearch-head@0.0.0 start /usr/local/src/elasticsearch-head
> grunt server
Running "connect:server" (connect) task
Waiting forever...
Started connect web server on http://localhost:9100 ##埠為9100
[root@node1 elasticsearch-head]# netstat -ntap | grep 9100
tcp 0 0 0.0.0.0:9100 0.0.0.0:* LISTEN 112197/grunt
10. 進行訪問
在真機中進行訪問
14.0.0.77:9100
14.0.0.110:9100


11. 添加資料并查看
[root@node1 elasticsearch-head]# curl -XPUT '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
}

三、 安裝logstash
這里還是再準備兩臺centos7的虛擬機,一臺作為web服務器,安裝apache服務,另外一臺安裝logstash收集apache的日志,并交給elasticsearch進行存盤,
3.1 logstash的安裝程序
1. web服務器的部署
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# setenforce 0
[root@localhost ~]# hostnamectl set-hostname apache
[root@localhost ~]# su
[root@apache ~]# yum install httpd -y
[root@apache ~]# systemctl start httpd
2. 查看JAVA環境
[root@apache ~]# java -version ##如果沒有安裝,使用yum install java -y 安裝
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
[root@apache ~]# cd /opt
將軟體包拷貝到這個目錄下
[root@apache opt]# rpm -ivh logstash-5.5.1.rpm ##安裝logstash
警告:logstash-5.5.1.rpm: 頭V4 RSA/SHA512 Signature, 密鑰 ID d88e42b4: NOKEY
準備中... ################################# [100%]
正在升級/安裝...
1:logstash-1:5.5.1-1 ################################# [100%]
Using provided startup.options file: /etc/logstash/startup.options
Successfully created system startup script for Logstash
[root@apache opt]# systemctl start logstash.service ##開啟服務
[root@apache opt]# systemctl enable logstash.service ##設定開機自啟動
Created symlink from /etc/systemd/system/multi-user.target.wants/logstash.service to /etc/systemd/system/logstash.service
[root@apache opt]# ln -s /usr/share/logstash/bin/logstash /usr/local/bin/ ##建立軟連接便于系統識別
logstash (Apache)與elasticsearch (node)功能是否正常,可以使用logstash命令做對接測驗,常用命令引數如下:
- -f 通過這個選項可以指定logstash的組態檔,根據組態檔配置logstash
- -e后面跟著字串該字串可以被當做logstash的配置(如果是””,則默認使用stdin做為輸入、stdout作為輸出)
- -t測驗組態檔是否正確,然后退出
4. 測驗logstash命令
- 輸入采用標準輸入輸出采用標準輸出—在Apache服務器上
[root@apache opt]# logstash -e 'input { stdin {} } output { stdout {} }'
輸入命令后會進入一個輸入輸出的狀態,我們輸入什么,就會按照格式給我們輸出出來
...
省略掉部分提示資訊
2020-09-15T14:28:01.479Z apache
www.njit.com ##這里就是自己輸入的內容
2020-09-15T14:29:54.032Z apache www.njit.com ##這是按照格式輸出的內容
zhangsan
2020-09-15T14:30:00.274Z apache zhangsan

- 使用rubydebug顯示詳細輸出,codec為一種編解碼器
[root@apache opt]# logstash -e 'input { stdin {} } output { stdout { codec=>rubydebug } }'
...
省略掉部分提示資訊
www.njit.com ##輸入資訊,以下為輸出資訊
{
"@timestamp" => 2020-09-15T14:37:50.914Z,
"@version" => "1",
"host" => "apache",
"message" => "www.njit.com"
zhangsan ####輸入資訊,以下為輸出資訊
{
"@timestamp" => 2020-09-15T14:38:18.485Z,
"@version" => "1",
"host" => "apache",
"message" => "zhangsan"
}
5. 使用logstash將資訊寫入elasticsearch中–輸入輸出對接
[root@apache opt]# logstash -e 'input { stdin {} } output { elasticsearch { hosts=>["14.0.0.77:9200"] } }' ##將資訊寫入elasticsearch中
...
省略部分資訊
www.njit.com
在真機上進行查看


6. 修改logstash組態檔
Logstash組態檔主要由三部分組成: input、output、filter(根據需要)
[root@apache opt]# cd /var/log/
[root@apache log]# ll | grep messages
-rw-------. 1 root root 678003 9月 15 22:52 messages ##權限為管理員讀寫,需要被其它用戶讀
[root@apache log]# chmod o+r messages
[root@apache log]# ll | grep messages
-rw----r--. 1 root root 685620 9月 15 22:54 messages
[root@apache log]# cd /etc/logstash/
[root@apache logstash]# vim logstash.yml ##組態檔中寫明了子組態檔的路徑,需要到這個路徑下創建檔案才能被識別

[root@apache log]# vim /etc/logstash/conf.d/system.conf
input {
file{
path => "/var/log/messages"
type => "system"
start_position => "beginning"
}
}
output {
elasticsearch {
hosts => ["14.0.0.77:9200"]
index => "system-%{+YYYY.MM.dd}"
}
}
[root@apache logstash]# systemctl restart logstash.service
在真機中訪問,產生了新的索引檔案

三、 kibana部署與使用
3.1 部署kibana
再使用一臺新的虛擬機14.0.0.107作為kibana服務器,也可以在node1節點服務器上直接安裝
[root@localhost ~]# hostnamectl set-hostname kibana
[root@localhost ~]# su
將軟體包拷貝到當前目錄下
[root@kibana ~]# rpm -ivh kibana-5.5.1-x86_64.rpm
[root@kibana ~]# cd /etc/kibana/
[root@kibana kibana]# cp kibana.yml kibana.yml.bak
[root@kibana kibana]# vim kibana.yml
server.port: 5601 ##2行,kibana打開的埠
server.host: "0.0.0.0" ##7行,kibana偵聽的地址
elasticsearch.url: "http://14.0.0.77:9200" ##21行,和elasticsearch建立聯系
kibana.index: ".kibana" ##30行,在elasticsearch中添加.kibana索引
[root@kibana kibana]# systemctl start kibana.service
[root@kibana kibana]# systemctl enable kibana.service
Created symlink from /etc/systemd/system/multi-user.target.wants/kibana.service to /etc/systemd/system/kibana.service.
在真機查看索引



3.2 對接apache的日志檔案
[root@apache logstash]# cd /etc/logstash/conf.d/
[root@apache conf.d]# vim apache_log.conf
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 => ["14.0.0.77:9200"]
index => "apache_access-%{+YYYY.MM.dd}"
}
}
if [type] == "error" {
elasticsearch {
hosts => ["14.0.0.77:9200"]
index => "apache_error-%{+YYYY.MM.dd}"
}
}
}
[root@apache conf.d]# /usr/share/logstash/bin/logstash -f apache_log.conf ##不重啟服務,直接加載組態檔
3.3 在kibana中進行創建、查看
在真機中進行查看



在kibana中為apache日志創建索引


同樣的操作創建apache_error


轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/68214.html
標籤:其他
上一篇:樹莓派開機自動連接WiFi 及樹莓派設定固定IP地址
下一篇:Linux基礎命令
