1. 程式人生 > >ubuntu16.04 快速搭建ELK日誌分析平臺

ubuntu16.04 快速搭建ELK日誌分析平臺

假如我們要在一臺伺服器上部署一個ssm應用,部署完,執行一段時間崩了。排查問題得時候,我們自然會想到檢視log4J日誌。可是,如果伺服器不止一個應用,而是好幾個呢,這當然可以檢視每個應用的log4J日誌。那如果不止一臺伺服器,而是好幾臺呢,難道還一個一個看?這顯然是不現實的。現在又一套開源的分散式日誌分析平臺ELK可以解決這個問題,將所有日誌收集起來,在統一,然後視覺化,提供搜尋。

那現在我這裡只有一臺伺服器,我就搭建一個單機版的,分散式的只要在單機版上覆制一部分過去就行

先看看ELK的架構:ElasticSearch、 LogStash+FileBeats、 Kibana

  • ElasticSearch: 負責資料的儲存、處理
  • LogStash、FileBeats: 負責資料的收集
  • Kibana: 提供了視覺化操作
    在這裡插入圖片描述

安裝過程

  • 1.環境準備

    • 一臺安裝ubuntu16.04 server的機器,新增root使用者,普通使用者
    • 安裝jdk1.8+,注意這裡一定要1.8以上
  • 2.安裝ElasticSearch、 LogStash+FileBeats、 Kibana

    • 這裡有個點要特別注意!ElasticSearch、 LogStash、 Kibana三者的版本一定要匹配,版本對不上會報錯。

  • 2.1ElasticSearch

普通使用者

下載:

sudo wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.0.zip

解壓:

unzip elasticsearch-6.5.0.zip

設定大記憶體:

vi /etc/sysctl.conf 
在最後新增 一行 :vm.max_map_count=655360
載入引數 :sysctl -p 

啟動:

cd elasticsearch-6.5.0/ 
./bin/elasticsearch

不用測了,只要沒報錯就成功,報錯一般只有一下情況
1.用root使用者運行了,一定要普通使用者
2.jdk不是1.8及以上
3.記憶體過小

  • 2.2LogStash+FileBeats

普通使用者

  • 2.2.1LogStash

    安裝:
    sudo apt-get update && sudo apt-get install logstash

    進去目錄下,我這裡是logstash-6.5.0

    cd logstash-6.5.0/
    新增logstash.conf檔案:
    vim logstash.conf
    新增:
    input {
            file {
                    path => "替換應用的log路徑,多個路徑可以用正則匹配"
                    start_position => "beginning" #從檔案開始處讀寫
            }
    #       stdin {}  #可以從標準輸入讀資料
    }
    # 資料過濾
    filter {
      #定義資料的格式
      grok {
        match => { "message" => "%{DATA:timestamp}\|%{IP:serverIp}\|%{IP:clientIp}\|%{DATA:logSource}\|%{DATA:userId}\|%{DATA:reqUrl}\|%{DATA:reqUri}\|%{DATA:refer}\|%{DATA:device}\|%{DATA:textDuring}\|%{DATA:duringTime:int}\|\|"}
      }
      #定義時間戳的格式
      date {
        match => [ "timestamp", "yyyy-MM-dd-HH:mm:ss" ]
        locale => "cn"
      }
      #定義客戶端的IP是哪個欄位(上面定義的資料格式)
      geoip {
        source => "clientIp"
      }
      mutate {
          rename => { "host" => "host.name" }
      }
    }
    # 輸出到本機的 ES
    output {
        elasticsearch {
                hosts => [ "127.0.0.1:9200"  ]
    
        }    
    }

啟動:

bin/logstash -f logstash.conf --config.reload.automatic

沒報錯就成功了

  • 2.2.2FileBeats

普通使用者安裝

sudo apt-get update && sudo apt-get install filebeat

進入解壓的資料夾,修改一下filebeat.yml

- type: log
   # Change to true to enable this prospector configuration.
    enabled: True

    # Paths that should be crawled and fetched. Glob based paths.
    # 讀取 Nginx 的日誌
    paths:
      - 替換應用的log路徑
#----------------------------- Logstash output --------------------------------
# 輸出到本機的 LogStash
output.logstash:
  # The Logstash hosts
  hosts: ["localhost:5044"]

啟動 FileBeat,需要以 root 身份啟動,更改配置檔案的許可權即可

sudo chown root filebeat.yml
sudo ./filebeat -e -c filebeat.yml -d "publish"

若沒報錯即成功了!

  • 2.3Kibana

普通使用者
安裝:

 wget https://artifacts.elastic.co/downloads/kibana/kibana-6.5.0-linux-x86_64.tar.gz
 tar -xzf kibana-6.5.0-linux-x86_64.tar.gz
 cd kibana-6.5.0-linux-x86_64/ 

修改外網訪問:

vim  config/ kibana.yml
修改這句:
server.host: "0.0.0.0"

啟動:

bin/kibana

沒報錯即成功了,埠預設是5601

  • 3.測試

    在本地瀏覽器,輸入ip:5601

    • 選擇第一個discover,輸入logstash,如果下兩行出現success的說明成功, 再點進去,選擇@timestamp

      • 查詢錯誤

在這裡插入圖片描述

4.分散式環境

將LogStash+FileBeat安裝在其他客戶機即可,把配置檔案輸出的elasticsearch 定位到目標ip即可

...
 output {
         elasticsearch {
                 hosts => [ "127.0.0.1:9200"  ]
     
}
...