分佈式日誌系統搭建-ELK(1)

需求分析

           日誌是作爲線上系統排錯的關鍵,通常我們在本機代碼調試的時候,錯誤會直接打印在控制檯上,因此我們才能進行錯誤的判斷。當系統運行在線上的時候,如果單純的通過捕獲異常 ,使用**e.printStackTrace()**進行打印肯定是不行的。因爲其他的運行信息或者異常也會將打印的信息給頂掉。
           這個時候我們就需要引入日誌系統了,這裏就不在贅述如何打印日誌了。
           上述這種情況是在單機版的情況下正常運行,這個時候我們的日誌是可以正常的進行查看。但是,當我們開始做分佈式,做微服務的時候,單機版的日誌系統對於這種情況就不適用了。、
           此時此刻,日誌記錄在多個服務器的log文件當中,而對於我們來說排錯就變得異常困難了。因爲一個服務可能做了集羣之後,生成的日誌文件還需要去查看在哪個服務器,對於開發的排錯來說大大降低了效率。
           顯然,此時此刻我們需要一個分佈式的日誌管理系統,對所有的日誌進行統一的管理。
           分佈式日誌系統ELK是指Elasticsearch+Logstash+Kibana。Elasticsearch是一個開源的全文檢索工具用於日誌存儲,Logstash是一個日誌收集工具。Kibana用於日誌查詢與展示。下面是系統簡單架構圖。Elk的系統架構圖
            ELK的架構體系十分的簡單,首先Logstash通過讀取數據源中的數據,進行過濾,然後在輸出到ElasticSearch當中去。接着使用Kibbna進行日誌的查看。
           Logstash的數據源及輸出源是多種多樣的,數據源可以有Redis,日誌文件,數據庫等,輸出源也一樣。在這裏我們以文件爲案列進行講解。

環境準備

軟件 版本
elasticsearch 6.7.0
kibana- 6.7.0
logstash 6.7.0

注意:這裏使用的所有版本都是Windows系統下的,並非Linux系統。

ElasticSearch啓動

           在解壓縮後的elasticsearch-6.7.0目錄下找到bin/elasticsearch.bat雙擊啓動即可,無需改動任何配置。如遭遇到內存大小不夠等其他原因可自行百度解決。
啓動成功案列
           可以訪問http://localhost:9200/,出現下列JSON代表啓動成功!

{
  "name" : "MjlzdTX",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "EgG3WpR8QxqVrGqidCbB-A",
  "version" : {
    "number" : "6.7.0",
    "build_flavor" : "default",
    "build_type" : "zip",
    "build_hash" : "8453f77",
    "build_date" : "2019-03-21T15:32:29.844721Z",
    "build_snapshot" : false,
    "lucene_version" : "7.7.0",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}

Kibana啓動

           在啓動Kibana之前,需要修改yml文件,選擇你需要監聽的ElasticSearch的端口號。
           打開kibana-6.7.0-windows-x86_64\config下的kibana.yml文件,找到下面這段代碼取消註釋。

# The URLs of the Elasticsearch instances to use for all your queries.
elasticsearch.hosts: "http://localhost:9200"

           修改完成後只需要訪問kibana-6.7.0-windows-x86_64\bin下的kibana.bat文件,雙擊啓動。
在這裏插入圖片描述
接着訪問http://localhost:5601,如果進入下面頁面代表啓動成功
在這裏插入圖片描述

Logstash啓動

這裏以https://grouplens.org/datasets/movielens/的
文件

文件爲例子,點擊下載存放到自己的磁盤當中去。
在logstash-6.7.0\bin的目錄下新建一個conf文件,命名爲stdin.conf文件。文件內容如下:

input {
  file {
    path => ["F:/data/ml-latest-small/movies.csv"]
    start_position => "beginning"
    sincedb_path => "nul"
  }
}

filter {
  csv {
    separator => ","
    columns => ["id","content","genre"]
  }

  mutate {
    split => { "genre" => "|" }
    remove_field => ["path", "host","@timestamp","message"]
  }

  mutate {

    split => ["content", "("]
    add_field => { "title" => "%{[content][0]}"}
    add_field => { "year" => "%{[content][1]}"}
  }


  mutate {
    convert => {
      "year" => "integer"
    }
    strip => ["title"]
    remove_field => ["path", "host","@timestamp","message","content"]
  }


}

output {
   elasticsearch {
     hosts => "http://localhost:9200"
     index => "movies"
     document_id => "%{id}"
   }
  stdout {}
}

input爲之前所講述的數據源,file/path爲文件路徑。修改爲剛纔所下載的csv文件所在地址。output爲輸出源,filter爲你要存儲在ElasticSearch中的格式,這裏放在後面在贅述,先以環境的搭建爲主。
注意,我在這裏的index是

index => “movies”
如果使用的是我的elk軟件包,最好重命名一下,索引名隨意

在你的logstash-6.7.0\bin目錄下啓動cmd命令,輸入以下指令

logstash -f stdin.conf

啓動成功後
在這裏插入圖片描述

Kibana查看

打開之前登陸的Kibana頁面,找到管理的索引模式,創建剛纔的索引(movies)。在這裏插入圖片描述
接着就可以在這裏查看剛纔所插入的信息
在這裏插入圖片描述
當然你也可以通過下面的開發者工具使用Es的命令進行搜索。

小結

elk的整體搭建其實並不是很困難,按着步驟就能走下來。這篇文章主要是爲了初學者進行elk的搭建,後續會講如何對日誌進行處理。 以及elk+redis+filebeat進行更深度的優化。

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