一、 ELK日志分析系統概述
1.1ELK簡介
- ELK是三個開源軟體的縮寫,分別表示:Elasticsearch , Logstash, Kibana , 它們都是開源軟體,新增了一個FileBeat,它是一個輕量級的日志收集處理工具(Agent),Filebeat占用資源少,適合于在各個服務器上搜集日志后傳輸給Logstash,官方也推薦此工具,
- Elasticsearch是個開源分布式搜索引擎,提供搜集、分析、存盤資料三大功能,
- 它的特點有:分布式,零配置,自動發現,索引自動分片,索引副本機制,restful風格介面,多資料源,自動搜索負載等,主要負責將日志索引并存盤起來,方便業務方檢索查詢,
- Logstash 主要是用來日志的搜集、分析、過濾日志的工具,支持大量的資料獲取方式,
- 一般作業方式為c/s架構,client端安裝在需要收集日志的主機上,server端負責將收到的各節點日志進行過濾、修改等操作在一并發往elasticsearch上去,
- 是一個日志收集、過濾、轉發的中間件,主要負責將各條業務線的各類日志統一收集、過濾后,轉發給 Elasticsearch 進行下一步處理,
- Kibana 也是一個開源和免費的工具,Kibana可以為 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以幫助匯總、分析和搜索重要資料日志,

1.2使用ELK的原因
日志主要包括系統日志、應用程式日志和安全日志, 系統運維和開發人員可以通過日志了解服務器軟硬體資訊、檢查配置程序中的錯誤及錯誤發生的原因,經常分析日志可以了解服務器的負荷, 性能安全性, 從而及時采取措施糾正錯誤,
往往單臺機器的日志我們使用grep、awk等工具就能基本實作簡單分析,但是當日志被分散的儲存不同的設備上, 如果你管理數十上百臺服務器,你還在使用依次登錄每臺機器的傳統方法查閱日志,這樣是不是感覺很繁瑣和效率低下, 當務之急我們使用集中化的日志管理, 例如∶ 開源的syslog,將所有服務器上的日志收集匯總,集中化管理日志后, 日志的統計和檢索又成為一件比較麻煩的事情,一般我們使用grep、awk和wc等Linux命令能實作檢索和統計,但是對于要求更高的查詢、排序和統計等要求和龐大的機器數量依然使用這樣的方法難免有點力不從心,
一般大型系統是一個分布式部署的架構,不同的服務模塊部署在不同的服務器上,問題出現時, 大部分情況需要根據問題暴露的關鍵資訊,定位到具體的服務器和服務模塊,構建一套集中式日志系統, 可以提高定位問題的效率,
1.3完整日志系統基本特征
- 收集∶能夠采集多種來源的日志資料
- 傳輸∶能夠穩定的把日志資料決議過濾并傳輸到存盤系統
- 存盤∶存盤日志資料
- 分析∶支持 UI分析
- 警告∶能夠提供錯誤報告,監控機制
1.4ELK的作業原理
(1)在所有需要收集日志的服務器上部署Logstash; 或者先將日志進行集中化管理在日志服務器上, 在日志服務器上部署 Logs tash,
(2)Logstash 收集日志,將日志格式化并輸出到 Elasticsearch 群集中,
(3)Elasticsearch 對格式化后的資料進行索引和存盤,
(4)Kibana 從 ES 群集中查詢資料生成圖表,并進行前端資料的展示,
二、ELK日志分析系統集群部署的操作步驟
環境準備:
服務器型別 IP地址 需要安裝的組件 硬體
Node1節點 192.168.10.10 Elasticsearch 、 Kibana 2核4G
Node2節點 192.168.10.20 Elasticsearch 2核4G
Apache節點 192.168.10.30 Logstash、Apache 2核4G
所有服務器關閉防火墻和SElinux
systemctl stop firewalld setenforce 0
2.1ELK Elasticsearch 集群部署(在Node1、Node2節點上操作)
2.1.1更改主機名、配置域名決議、查看Java環境
Node1節點:hostnamectl set-hostname node1 Node2節點:hostnamectl set-hostname node2 vim /etc/hosts 192.168.10.10 node1 192.168.10.20 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)
2.1.2部署 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.10.10:9200 、 http://192.168.10.20:9200 查看節點 Node1、Node2 的資訊,
- 瀏覽器訪問 http://192.168.10.10:9200/cluster/health?pretty 、 http://192.168.10.20:9200/cluster/health?pretty查看群集的健康情況,可以看到 status 值為 green(綠色), 表示節點健康運行,
- 瀏覽器訪問 http://192.168.10.10:9200/cluster/state?pretty 檢查群集狀態資訊,
#使用上述方式查看群集的狀態對用戶并不友好,可以通過安裝 Elasticsearch-head 插件,可以更方便地管理群集,
2.1.3安裝 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 到
vim /etc/elasticsearch/elasticsearch.yml ...... --末尾添加以下內容-- http.cors.enabled: true #開啟跨域訪問支持,默認為 false http.cors.allow-origin: "*" #指定跨域訪問允許的域名地址為所有 systemctl restart elasticsearch
(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 & > 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 #elasticsearch-head 監聽的埠是 9100 netstat -natp |grep 9100
(6)通過 Elasticsearch-head 查看 Elasticsearch 資訊
通過瀏覽器訪問 http://192.168.10.10: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.10.10:9100/ 查看索引資訊,可以看見索引默認被分片5個,并且有一個副本,
點擊“資料瀏覽”,會發現在node1上創建的索引為 index-demo,型別為 test 的相關資訊,
2.2實體操作: ELK Elasticsearch 集群部署(在Node1、Node2節點上操作)
2.2.1更改主機名、配置域名決議、查看Java環境

2.2.2部署 Elasticsearch 軟體
(1)安裝elasticsearch—rpm包

(2)加載系統服務
![]()
(3)修改elasticsearch主組態檔





(4)創建資料存放路徑并授權
![]()
(5)啟動elasticsearch是否成功開啟

上面的步驟均需要在node1 node2操作,這里只列舉了Node1的配置,兩者配置相同,只需將組態檔中的Node節點名稱修改即可
(6)查看節點資訊
查看node1和node2節點資訊




2.2.3安裝 Elasticsearch-head 插件(node1 node2)
(1)編譯安裝 node

![]()


(2)安裝 phantomjs


(3)安裝 Elasticsearch-head 資料可視化工具
![]()

(4)修改 Elasticsearch 主組態檔

![]()
![]()
(5)啟動 elasticsearch-head 服務

![]()
(6)通過 Elasticsearch-head 查看 Elasticsearch 資訊

mode2也一樣
(7)插入索引


2.3ELK Logstash 部署(在 Apache 節點上操作)
Logstash 一般部署在需要監控其日志的服務器,在本案例中,Logstash 部署在 Apache 服務器上,用于收集 Apache 服務器的日志資訊并發送到 Elasticsearch,
2.3.1更改主機名
hostnamectl set-hostname apache
2.3.2安裝Apahce服務(httpd)
yum -y install httpd systemctl start httpd
2.3.3安裝Java環境
yum -y install java java -version
2.3.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/
2.3.5測驗 Logstash
Logstash 命令常用選項:
- -f:通過這個選項可以指定 Logstash 的組態檔,根據組態檔配置 Logstash 的輸入和輸出流,
- -e:從命令列中獲取,輸入、輸出后面跟著字串,該字串可以被當作 Logstash 的配置(如果是空,則默認使用 stdin 作為輸入,stdout 作為輸出),
- -t:測驗組態檔是否正確,然后退出,
定義輸入和輸出流:
#輸入采用標準輸入,輸出采用標準輸出(類似管道)
logstash -e 'input { stdin{} } output { stdout{} }' ...... www.baidu.com #鍵入內容(標準輸入) 2022-12-11T10:18:06.215Z apache www.baidu.com #輸出結果(標準輸出) www.sina.com.cn #鍵入內容(標準輸入) 2022-12-11T10:18:14.260Z apache www.sina.com.cn #輸出結果(標準輸出) //執行 ctrl+c 退出 #使用 rubydebug 輸出詳細格式顯示,codec 為一種編解碼器 logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }' ...... www.baidu.com #鍵入內容(標準輸入) { "@timestamp" => 2022-12-11T10:20:41.744Z, #輸出結果(處理后的結果) "@version" => "1", "host" => "apache", "message" => "www.baidu.com" } #使用 Logstash 將資訊寫入 Elasticsearch 中 logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.10.10:9200"] } }' 輸入 輸出 對接 ...... www.baidu.com #鍵入內容(標準輸入) www.sina.com.cn #鍵入內容(標準輸入) www.google.com #鍵入內容(標準輸入)
//結果不在標準輸出顯示,而是發送至 Elasticsearch 中,可瀏覽器訪問 http://192.168.10.10:9100/ 查看索引資訊和資料瀏覽,
2.3.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.10.10:9200"] #指定 elasticsearch 服務器的地址和埠 index =>"system-%{+YYYY.MM.dd}" #指定輸出到 elasticsearch 的索引格式 } } systemctl restart logstash
瀏覽器訪問 http://192.168.10.10:9100/ 查看索引資訊
2.4實體操作: ELK Logstash 部署(在 Apache 節點上操作)
2.4.1更改主機名

2.4.2安裝Apahce服務(httpd)


2.4.3安裝Java環境


2.4.4安裝logstash


2.4.5測驗 Logstash
定義輸入和輸出流:輸入采用標準輸入,輸出采用標準輸出(類似管道)

定義輸入和輸出流:使用 rubydebug 輸出詳細格式顯示,codec 為一種編解碼器



2.4.6定義 logstash組態檔


2.5ELK Kiabana 部署(在 Node1 節點上操作)
2.5.1安裝 Kiabana
#上傳軟體包 kibana-5.5.1-x86_64.rpm 到/opt目錄
cd /opt rpm -ivh kibana-5.5.1-x86_64.rpm
2.5.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" --28--取消注釋,配置es服務器的ip,如果是集群則配置該集群中master節點的ip elasticsearch.url: ["http://192.168.10.10:9200"] --37--取消注釋,設定在 elasticsearch 中添加.kibana索引 kibana.index: ".kibana" --96--取消注釋,配置kibana的日志檔案路徑(需手動創建),不然默認是messages里記錄日志 logging.dest: /var/log/kibana.log
2.5.3啟動 Kibana 服務
systemctl start kibana.service systemctl enable kibana.service netstat -natp | grep 5601
2.5.4驗證 Kibana
瀏覽器訪問 http://192.168.10.10:5601
第一次登錄需要添加一個 Elasticsearch 索引:
Index name or pattern
//輸入:system-* #在索引名中輸入之前配置的 Output 前綴“system”
單擊 “create” 按鈕創建,單擊 “Discover” 按鈕可查看圖表資訊及日志資訊,
資料展示可以分類顯示,在“Available Fields”中的“host”,然后單擊 “add”按鈕,可以看到按照“host”篩選后的結果
2.5.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.10.10:9200"] index => "apache_access-%{+YYYY.MM.dd}" } } if [type] == "error" { elasticsearch { hosts => ["192.168.10.10:9200"] index => "apache_error-%{+YYYY.MM.dd}" } } } cd /etc/logstash/conf.d/ /usr/share/logstash/bin/logstash -f apache_log.conf
瀏覽器訪問 http://192.168.10.10:9100 查看索引是否創建
瀏覽器訪問 http://192.168.10.10:5601 登錄 Kibana,單擊“Create Index Pattern”按鈕添加索引, 在索引名中輸入之前配置的 Output 前綴 apache_access-,并單擊“Create”按鈕,在用相同的方法添加 apache_error-索引,
選擇“Discover”選項卡,在中間下拉串列中選擇剛添加的 apache_access-* 、apache_error-* 索引, 可以查看相應的圖表及日志資訊,
2.6ELK Kiabana 部署(在 Node1 節點上操作)
2.6.1安裝 Kiabana

2.6.2設定 Kibana 的主組態檔并啟動kibana服務



2.6.3驗證 Kibana
① 添加system索引

② 單擊 “Discover” 按鈕可查看圖表資訊及日志資訊

2.6.4將 Apache 服務器的日志(訪問的、錯誤的)添加到 Elasticsearch 并通過 Kibana 顯示

② 啟動添加到 Elasticsearch

瀏覽器訪問Kibana測驗
瀏覽器進行訪問Apache服務器192.168.10.30,為了產生訪問日志

創建apache_access索引日志



創建apache_error索引日志


2.7Filebeat+ELK 部署(接著上面實驗做,在 Node1 節點上操作)
環境準備:
服務器型別 IP地址 需要安裝的組件 硬體
Node1節點 192.168.10.10 Elasticsearch 、 Kibana 2核4G
Node2節點 192.168.10.20 Elasticsearch 2核4G
Apache節點 192.168.10.30 Logstash、Apache 2核4G
Filebeat節點 Node1 Filebeat
2.7.1安裝 Filebeat
#上傳軟體包 filebeat-6.6.0-linux-x86_64.tar.gz 到/opt目錄
tar zxvf filebeat-6.6.0-linux-x86_64.tar.gzmv filebeat-6.6.0-linux-x86_64/ /usr/local/filebeat
2.7.2設定 filebeat 的主組態檔
cd /usr/local/filebeat vim filebeat.yml filebeat.inputs: - 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.10.10 --------------Elasticsearch output------------------- (全部注釋掉) ----------------Logstash output--------------------- output.logstash: hosts: ["192.168.10.30:5044"] #指定 logstash 的 IP 和埠 #啟動 filebeat ./filebeat -e -c filebeat.yml
2.7.3在 Logstash 組件所在節點上新建一個 Logstash 組態檔
cd /etc/logstash/conf.d vim logstash.conf input { beats { port => "5044" } } output { elasticsearch { hosts => ["192.168.10.10:9200"] index => "%{[fields][service_name]}-%{+YYYY.MM.dd}" } stdout { codec => rubydebug } } #啟動 logstash logstash -f logstash.conf
2.7.4瀏覽器訪問測驗
瀏覽器訪問 http://192.168.10.10:5601 登錄 Kibana
單擊“Create Index Pattern”按鈕添加索引“filebeat-*”,單擊 “create” 按鈕創建,單擊 “Discover” 按鈕可查看圖表資訊及日志資訊,
2.8Filebeat+ELK 部署(接著上面實驗做,我這里在Node1操作,可任意選臺虛擬機操作)
2.8.1安裝 Filebeat

![]()
2.8.2設定 filebeat 的主組態檔

![]()



在 Logstash 組件所在節點上新建一個 Logstash 組態檔(192.168.10.30)

使用logstash -f logstash.conf命令進行啟動,

2.8.3在 Node1 節點上操作,啟動 filebeat
要先啟動logstash才能啟動filebeat,否則會提示無法連接到logstash:Failed to connect: dial tcp 192.168.10.30:5044: getsockopt: connection refused

2.8.4瀏覽器訪問 http://192.168.10.10:5601 登錄 Kibana測驗
① 單擊“Create Index Pattern”按鈕添加索引“filebeat-*”,單擊 “create” 按鈕創建

② 單擊 “Discover” 按鈕可查看圖表資訊及日志資訊

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/539739.html
標籤:其他
上一篇:線段簡化的幾種演算法
下一篇:利用云服務器發布專案
