ELK日誌分析系統詳解

但願人長久zz發表於2020-11-29

一、ELK日誌分析系統簡介

ELK 是elastic公司提供的一套完整的日誌收集以及展示的解決方案。是三個開源軟體的縮寫,分別表示:Elasticsearch , Logstash, Kibana ,
它們都是開源軟體。

Elasticsearch 是個開源分散式搜尋引擎,提供蒐集、分析、儲存資料三大功能。它的特點有:分散式,零配置,自動發現,索引自動分片,索引副本機制,restful風格介面,多資料來源,自動搜尋負載等。

Logstash 主要是用來日誌的蒐集、分析、過濾日誌的工具,支援大量的資料獲取方式。一般工作方式為c/s架構,client端安裝在需要收集日誌的主機上,server端負責將收到的各節點日誌進行過濾、修改等操作在一併發往elasticsearch上去。

Kibana 也是一個開源和免費的工具,Kibana可以為 Logstash 和 ElasticSearch 提供的日誌分析友好的 Web 介面,可以幫助彙總、分析和搜尋重要資料日誌。

日誌伺服器

  • 提高安全性
  • 集中存放日誌
  • 缺陷:對日誌的分析困難

日誌分析系統

  • Elasticsearch
  • Logstash
  • Kibana

日誌處理步驟

  • 1.將日誌進行集中化管理
  • 2.將日誌格式化(Logstash)並輸出到Elasticsearch
  • 3.對格式化後的資料進行索引和儲存(Elasticsearch)
  • 4.前端資料的展示(Kibana)

二、Elasticsearch介紹

Elasticsearch概述

  • 提供了一個分散式多使用者能力的全文搜尋引擎

Elasticsearch核心概念

  • 接近實時
  • 叢集
  • 節點
  • 索引
  • 分片和副本

三、Logstash介紹

Logstash介紹

  • 一款強大的資料處理工具
  • 可實現資料傳輸、格式處理、格式化輸出
  • 資料輸入、資料加工(如過濾,改寫等)以及資料輸出

LogStash主要元件

  • Shipper:日誌收集者,負責監控本地日誌檔案的變化,及時把日誌檔案的最新內容收集起來。通常,遠端代理端(agent)只需要執行這個元件即可
  • Indexer:日誌儲存者,負責接收日誌並寫入到本地檔案
  • Broker:日誌hub,負責連線多個shipper和多個indexer
  • Search and Storage:允許對事件進行搜尋和儲存
  • Web Interface:基於web的展示介面

四、Kibana介紹

Kibana介紹

  • 一個針對Elasticsearch的開源分析及視覺化平臺
  • 搜尋、檢視儲存在Elasticsearch索引中的資料
  • 通過各種圖表進行高階資料分析及展示

Kibana主要功能

  • Elasticsearch無縫之整合
  • 整合資料,複雜資料分析
  • 讓更多團隊成員受益
  • 介面靈活,分享更容易
  • 配置簡單,視覺化多資料來源
  • 簡單資料匯出

五、部署ELK日誌分析系統

案例拓撲:在這裡插入圖片描述

需求描述:

  • 配置ELK日誌分析群集
  • 使用Logstash收集日誌
  • 使用Kibana檢視分析日誌

部署Elasticsearch(同時在elc-1、elk-2部署)

安裝金鑰及elasticsearch源

[root@elk-1 ~]# vi /etc/hosts
//新增  
192.168.254.10 elk-1
192.168.254.11 elk-2

[root@elk-1 ~]# rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch
[root@elk-1 ~]# cd /etc/yum.repos.d/

[root@elk-1 yum.repos.d]# vi elasticsearch.repo 
//新增
[elasticsearch-2.x]
name=elasticsearch
baseurl=http://packages.elastic.co/elasticsearch/2.x/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enable=1
 
                                                                                        
[root@elk-1 ~]# yum list               //檢視yum清單      

[root@elk-1 ~]# yum -y install elasticsearch java       //安裝elasticsearch java

[root@elk-1 ~]# java -version      //檢視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)

 修改配置檔案
 [root@elk-1 ~]# vi /etc/elasticsearch/elasticsearch.yml
 cluster.name: elastic    //17行 叢集名稱
 node.name:node1     //23行 節點名稱
 path.data: /data/es-data  //33行 工作目錄
 path.logs: /var/log/elasticsearch/      //37行 日誌目錄
 bootstrap.memory_lock: true      //防止交換swap分割槽
 http.port: 9200            //開啟埠         
建立目錄及開啟服務
[root@elk-1 ~]# mkdir -p /data/es-data
[root@elk-1 ~]# chown -R elasticsearch:elasticsearch /data/es-data
[root@elk-1 ~]# systemctl start elasticsearch
[root@elk-1 ~]# netstat -anpt | grep 9200
tcp6       0      0 :::9200                 :::*                    LISTEN      13919/java          
tcp6       0      0 192.168.254.10:9200     192.168.254.10:56960    ESTABLISHED 13919/java       

網頁測試

在這裡插入圖片描述

在這裡插入圖片描述

//建立索引
[root@elk-1 ~]# curl -i -XGET 'http://192.168.254.10:9200/_count?pretty' -d '{
  "query": {
       "match_all": {}
   }
   }'

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

{
  "count" : 3,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "failed" : 0
  }
}
安裝Elasticsearch外掛
[root@elk-1 ~]# /usr/share/elasticsearch/bin/plugin install mobz/elasticsearch-head

測試

  http://192.168.254.10:9200/_plugin/head/

在這裡插入圖片描述

elasticsearch叢集部署

[root@elk-1 ~]#  vi /etc/elasticsearch/elasticsearch.yml
discovery.zen.ping.unicast.hosts: ["192.168.254.10", "192.168.254.11"]      //新增elk-1、elk-2 IP

重啟服務
[root@elk-1 ~]# systemctl restart elasticsearch.service 

測試

 http://192.168.254.10:9200/_plugin/head/

在這裡插入圖片描述

檢視日誌

[root@elc-1 ~]# less /var/log/elasticsearch/elastic.log 

在這裡插入圖片描述
發現無法分配記憶體

修改配置檔案
[root@elc-1 ~]# vi /etc/security/limits.conf 
// Shift+g跳到最後一行 o 新增

elasticsearch soft memlock unlimited          # memlock引數指定使用者可以鎖定其地址空間的記憶體量
elasticsearch hard memlock unlimited

關於Memlock

     [root@elk-1 ~]# systemctl restart elasticsearch.service 

安裝監控元件

[root@elk-1 ~]# /usr/share/elasticsearch/bin/plugin install lmenezes/elasticsearch-kopf

測試

在這裡插入圖片描述
在這裡插入圖片描述

Logstash部署 (在apache上)

安裝httpd並開啟服務
[root@apache ~]# yum -y install httpd
[root@apache ~]# systemctl start httpd
[root@apache ~]# netstat - anpt | grep httpdtcp6       0      0 :::80                   :::*                    LISTEN      57520/httpd         
[root@apache html]# echo '<h1>ky06</h1>' > /var/www/html/index.html
[root@apache html]# curl http://192.168.254.12<h1>ky06</h1>

[root@apache ~]# rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch
[root@apache ~]# vi /etc/yum.repos.d/logstash.repo

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

[root@apache ~]# yum -y install logstash java
[root@apache ~]# ln -s /opt/logstash/bin/logstash /usr/local/bin/
[root@apache ~]# logstash -e 'input { stdin{} } output { stdout{} }'
www.baidu.coSettings: Default filter workers: 2
Logstash startup completed
www.baidu.com                             # 輸入
2020-11-24T11:17:51.412Z apache www.baidu.cowww.baidu.com
www.hao123.com                        # 輸入
2020-11-24T11:18:20.206Z apache www.hao123.com

logstash命令選項解釋:
-f:指定logstash的配置檔案,根據配置檔案配置logstash
-e:後面跟著字串,該字串可以被當做logstash的配置(如果是“ ”,則預設使用stdin做輸入,stdout為輸出)
-t:測試配置檔案是否正確,然後退出
#輸入採用標準輸入,輸出採用標準輸出

[root@apache ~]# logstash -e 'input { stdin{} } output { stdout{ codec => rubydebug } }'
www.baidu.com                    # 輸入
Settings: Default filter workers: 2
Logstash startup completed
{
       "message" => "www.baidu.com",
      "@version" => "1",
    "@timestamp" => "2020-11-24T11:28:53.599Z",
          "host" => "apache"
}
[root@apache ~]# logstash -e 'input { stdin{} } output { elasticsearch { hosts => ["192.168.254.10:9200"] } }'
Settings: Default filter workers: 2
Logstash startup completed
ghw111
abc222 
333ddd

檢視索引資訊在這裡插入圖片描述

[root@apache ~]# chmod o+r /var/log/messages		# 增加可讀的許可權
[root@apache ~]# vi /etc/logstash/conf.d/system.conf
input {
       file {
          path => "/var/log/messages"
          type => "system"
          start_position => "beginning"
        }
      }

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

在這裡插入圖片描述


[root@elk-1 ~]# tar zxf kibana-4.3.1-linux-x64.tar.gz
[root@elk-1 ~]# vim kibana-4.3.1-linux-x64/config/kibana.yml
//2行 
server.port: 5601

//5行
server.host: "0.0.0.0"


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

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

yum install screen -y


[root@elk-1 ~]# kibana-4.3.1-linux-x64/bin/kibana  ###啟動監聽
  

相關文章