基於ELK的日誌分析/存儲/展示

基於ELK的日誌分析/存儲/展示

背景介紹

在我們日常生活中,我們經常需要回顧以前發生的一些事情;或者,當出現了一些問題的時候,可以從某些地方去查找原因,尋找發生問題的痕跡。無可避免需要用到文字的、圖像的等等不同形式的記錄。用計算機的術語表達,就是 LOG,或日誌。

日誌,對於任何系統來說都是及其重要的組成部分。在計算機系統裏面,更是如此。但是由於現在的計算機系統大多比較複雜,很多系統都不是在一個地方,甚至都是跨國界的;即使是在一個地方的系統,也有不同的來源,比如,操作系統,應用服務,業務邏輯等等。他們都在不停產生各種各樣的日誌數據。根據不完全統計,我們全球每天大約要產生 2EB(1018)的數據。

面對如此海量的數據,又是分佈在各個不同地方,如果我們需要去查找一些重要的信息,難道還是使用傳統的方法,去登陸到一臺臺機器上查看?看來傳統的工具和方法已經顯得非常笨拙和低效了。於是,一些聰明人就提出了建立一套集中式的方法,把不同來源的數據集中整合到一個地方。

一個完整的集中式日誌系統,是離不開以下幾個主要特點的:

- 收集-能夠採集多種來源的日誌數據
- 傳輸-能夠穩定的把日誌數據傳輸到中央系統
- 存儲-如何存儲日誌數據
- 分析-可以支持 UI 分析
- 警告-能夠提供錯誤報告,監控機制

ELK簡介

ELK並不是一款軟件,而是一套完整的日誌解決方案,由Elasticsearch、Logstash、Kibana這三款開源軟件組成;通常是配合使用,而且又先後歸於 Elastic.co 公司名下,故被簡稱爲 ELK 協議棧

Elasticsearch是基於Lucene開發的分佈式存儲檢索引擎,用來存儲各類日誌;

Logstash對日誌進行收集、分析,並將其存儲供以後使用;

Kibana是基於Node.js開發的展示工具,爲Logstash和Elasticsearch提供用於日誌展示的web頁面,還用於幫助彙總、分析和搜索重要日誌數據。

基於ELK的日誌分析/存儲/展示

基本流程是 logstash 負責從各種數據源裏採集數據,然後再寫入 Elasticsearch,Elasticsearch 對這些數據創建索引,然後由 Kibana 對其進行各種分析並以圖表的形式展示。

部署安裝ELK

  • 實驗環境
主機名 IP地址 相關軟件包
CentOS7-1(linux-node1) 172.16.10.138 jdk、logstash、elasticsearch、kibana
CentOS7-2(linux-node2) 172.16.10.147 jdk、elasticsearch
  • 安裝部署步驟
  • 關閉兩臺服務器的防火牆
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0

安裝Elasticsearch、java環境

rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch      //導入密鑰

cd /etc/yum.repo.d/
vim elasticsearch.repo       //配置yum倉庫

[elasticsearch-2.x]
name=Elasticsearch repository for 2.x packages
baseurl=http://packages.elastic.co/elasticsearch/2.x/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enable=1

yum list    //重新加載yum倉庫

yum install elasticsearch -y

yum install java -y  (1.8.0版本)

java -version     //查看java環境的版本信息確認是否安裝
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)
  • 安裝完成後可以查看命令存放目錄

cd /usr/share/elasticsearch/bin

基於ELK的日誌分析/存儲/展示

  • 修改Elasticsearch的配置文件

vim /etc/elasticsearch/elasticsearch.yml

-------cluster羣集----------------
17行 集羣名稱
cluster.name: silence    //開啓 (自定義) 
---------node節點-----------------
23行 節點名稱
node.name: linux-node1       //開啓 (自定義) 
-----------paths路徑------------
 工作目錄
33:path.data: /data/es-data        //數據存放位置
37:path.logs: /var/log/elasticsearch/      //日誌存放位置

43行 防止交換swap分區
bootstrap.memory_lock: true      //鎖定內存

54行 監聽網絡
network.host: 0.0.0.0

58行 端口號
http.port: 9200

基於ELK的日誌分析/存儲/展示

  • 創建數據存放目錄、開啓服務
mkdir -p /data/es-data      //創建數據存放目錄

chown -R elasticsearch:elasticsearch /data/es-data/    //修改屬主屬組信息

systemctl start elasticsearch.service   //開啓服務

netstat -ntap | grep 9200        //檢查端口是否開啓

基於ELK的日誌分析/存儲/展示

  • web網頁測試

瀏覽器輸入 172.16.10.138:9200

基於ELK的日誌分析/存儲/展示

  • 可以使用兩種方法和ES進行交互

第一種 JAVA API

第二種 RESTful API (通過json格式交互)

  • RESTful API (通過json格式交互)
curl -i -XGET 'http://172.16.10.147:9200/_count?pretty' -d '{
"query": {
    "match_all": {}
}
}'

//輸出顯示
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
Content-Length: 95

{
  "count" : 0,
  "_shards" : {
    "total" : 0,
    "successful" : 0,
    "failed" : 0
  }
}

基於ELK的日誌分析/存儲/展示

  • 內存解鎖和文件限制

生產環境中必須要修改(注意)

vim /etc/security/limits.conf
G到行尾添加
elasticsearch soft memlock unlimited
elasticsearch hard memlock unlimited
* soft nofile 65535        
* hard nofile 65535
//重啓生效   (生產環境中建議重啓)
  • ES插件之elasticsearch-head
/usr/share/elasticsearch/bin/plugin install mobz/elasticsearch-head        //下載ES插件

安裝位置/usr/share/elasticsearch/plugins/head

基於ELK的日誌分析/存儲/展示

  • 網頁測試插件

瀏覽器訪問 172.16.10.138:9200/_plugin/head/

基於ELK的日誌分析/存儲/展示

  • 添加複合查詢測試
添加 複合查詢
/index-demo/test    POST
{
  "user":"tom",
  "mesg":"hello world"
}

提交請求

----------返回顯示--------------

{
"_index": "index-demo",
"_type": "test",
"_id": "AWVDUuVUPJxKK7V6Dj8E",
"_version": 1,
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"created": true
}

基於ELK的日誌分析/存儲/展示

基於ELK的日誌分析/存儲/展示

  • 部署ES羣集(在第二臺服務器上安裝部署Elasticsearch)

//這裏和上面部署第一臺是一樣的所以小編上命令,不同的地方小編會註明的哦!

rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch      //導入密鑰

cd /etc/yum.repo.d/
vim elasticsearch.repo       //配置yum倉庫

[elasticsearch-2.x]
name=Elasticsearch repository for 2.x packages
baseurl=http://packages.elastic.co/elasticsearch/2.x/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enable=1

yum list    //重新加載yum倉庫

yum install elasticsearch -y

yum install java -y  (1.8.0版本)

java -version     //查看java環境的版本信息確認是否安裝
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)

vim /etc/elasticsearch/elasticsearch.yml

-------cluster羣集----------------
17行 集羣名稱
cluster.name: silence    //開啓 (自定義) 
---------node節點-----------------
23行 節點名稱
node.name: linux-node1       //開啓 (自定義) 
-----------paths路徑------------
 工作目錄
33:path.data: /data/es-data        //數據存放位置
37:path.logs: /var/log/elasticsearch/      //日誌存放位置

43行 防止交換swap分區
bootstrap.memory_lock: true      //鎖定內存

54行 監聽網絡
network.host: 0.0.0.0

58行 端口號
http.port: 9200

69行 自動發現機制
discovery.zen.ping.unicast.hosts: ["172.16.10.147", "172.16.10.138"]          //這裏選擇單播列表自動發現機制

mkdir -p /data/es-data      //創建數據存放目錄

chown -R elasticsearch:elasticsearch /data/es-data/    //修改屬主屬組信息
  • 第一臺節點服務器也要進行修改添加

vim /etc/elasticsearch/elasticsearch.yml

69行 自動發現機制
discovery.zen.ping.unicast.hosts: ["172.16.10.138", "172.16.10.147"]          //這裏選擇單播列表自動發現機制
  • 重啓第一臺節點服務器及開啓第二臺服務器
systemctl stop elasticsearch.service
systemctl start elasticsearch.service
  • web頁面測試查看

瀏覽器訪問 172.16.10.138:9200/_plugin/head/

基於ELK的日誌分析/存儲/展示

Logstash部署

簡單來說logstash就是一根具備實時數據傳輸能力的管道,負責將數據信息從管道的輸入端傳輸到管道的輸出端;與此同時這根管道還可以讓你根據自己的需求在中間加上濾網,Logstash提供裏很多功能強大的濾網以滿足你的各種應用場景。

  • 安裝Logstash
rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch

vim /etc/yum.repos.d/logstash.repo

[logstash-2.1]
name=Logstash repository for 2.1.x packages
baseurl=http://packages.elastic.co/logstash/2.1/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enable=1

yum list

yum install logstash -y
  • 定義輸入和輸出流,類似管道
/opt/logstash/bin/logstash -e 'input { stdin{} } output { stdout{} }'
hello
  • 詳細格式顯示
/opt/logstash/bin/logstash -e 'input { stdin{} } output { stdout{ codec => rubydebug } }'

基於ELK的日誌分析/存儲/展示

  • 寫入到elasticsearch中
/opt/logstash/bin/logstash -e 'input { stdin{} } output { elasticsearch { hosts => ["172.16.10.138:9200"] } }'

基於ELK的日誌分析/存儲/展示

基於ELK的日誌分析/存儲/展示

  • 寫入ES和同時生成文本
 /opt/logstash/bin/logstash -e 'input { stdin{} } output { elasticsearch { hosts => ["172.16.10.138:9200"] } stdout { codec => rubydebug } }'
  • 創建 logstash配置文件寫入

vim /etc/logstash/conf.d/01-logstash.conf

input { stdin { } }
output {
  elasticsearch { hosts => ["172.16.10.138:9200"] }
  stdout { codec => rubydebug }
}

/opt/logstash/bin/logstash -f /etc/logstash/conf.d/01-logstash.conf
  • 使用logstash配置文件:
  • 收集系統日誌
  • 收集java異常日誌
  • 事件優化處理
ln -s /opt/logstash/bin/logstash /usr/bin/

vim file.conf

input {
      file {
          path => "/var/log/messages"
          type => "system"
          start_position => "beginning"
      }
}

output {
     elasticsearch {
          hosts => ["172.16.10.138:9200"]
          index => "system-%{+YYYY.MM.dd}"
     }
}

logstash -f /root/file.conf

基於ELK的日誌分析/存儲/展示

基於ELK的日誌分析/存儲/展示

部署kibana

  • 下載安裝kibana服務
wget https://download.elastic.co/kibana/kibana/kibana-4.3.1-linux-x64.tar.gz   //這裏使用wget下載軟件包,也可以複製鏈接至迅雷下載好之後共享上傳

tar zxvf kibana-4.3.1-linux-x64.tar.gz -C /usr/local/

cd /usr/local/
mv kibana-4.3.1-linux-x64/ kibana
  • 修改kibana的配置文件

vim /usr/local/kibana/config/kibana.yml


//2行 
server.port: 5601    //開啓端口

//5行
server.host: "0.0.0.0"    //允許訪問服務器的地址

//12行 ES地址
elasticsearch.url: "http://172.16.10.138:9200"

//20行
kibana.index: ".kibana"

screen是linux下的一種多重視窗管理程序。在使用telnet或SSH遠程登錄linux時,如果連接非正常中斷,重新連接時,系統將開一個新的session,無法恢復原來的session.screen命令可以解決這個問題。


yum install screen -y
  • 啓動監聽

/usr/local/kibana/bin/kibana

ctrl+a+d  進行丟入後臺

http://172.16.10.138:5601/

基於ELK的日誌分析/存儲/展示

基於ELK的日誌分析/存儲/展示

基於ELK的日誌分析/存儲/展示

基於ELK的日誌分析/存儲/展示

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章