快速搭建一套elk日誌系統

背景:在開發調試階段,發現bug後開始在服務器上查找日誌,但是這個過程真的好痛苦.
一種方式是直接在服務器上tail -f 或者tail -n 直接查看,但是日誌太多,不容易發現問題
另一種方式導出最近的日誌到本地,打開本地編輯器一點一點查看
但是兩種方式都很麻煩,有沒有輕鬆一點的方法呢?
在這個開源的時代,一直聽說elk架構,那就搭建這個日誌系統,感受下這個系統的魅力吧

基本服務介紹

什麼是elasticsearch

Elasticsearch 是一個分佈式可擴展的實時搜索和分析引擎, 一切設計都是爲了提高搜索的性能

 1. 分佈式實時文件存儲,並將每一個字段都編入索引,使其可以被搜索。
 2. 實時分析的分佈式搜索引擎。
 3. 可以擴展到上百臺服務器,處理PB級別的結構化或非結構化數據。

什麼是Filebeat

go語言開發的,一個輕量級的日誌收集的工具,消耗更少的cpu 和 內存。

什麼是Logstash

Logstash 是一個輕量級、開源的服務器端數據處理管道,允許您從各種來源收集數據,進行動態轉換,並將數據發送到您希望的目標
但是logstash java開發,依賴jvm,相對filebeat還是比較消耗服務器資源

主要工作過程是是 input->filter->output 
獲取輸入, 過濾解析, 重新輸出,配置比較簡單

什麼是Kibana

Kibana 是一款開源的數據分析和可視化平臺,它是 Elastic Stack 成員之一,設計用於和 Elasticsearch 協作。
可以使用 Kibana 對 Elasticsearch 索引中的數據進行搜索、查看、交互操作。
可以很方便的利用圖表、表格及地圖對數據進行多元化的分析和呈現。

怎麼使用?

因爲logstash服務比較重,所以我們主要是通過filebeat來採集日誌信息,都交給logstash,通過logstash過濾輸出到elasticsearch中.
建議的服務搭建

1. 獨立的es集羣
2. 每個服務器上安裝filebeat進行日誌採集
3. 單獨的logstash服務,來接收filebeat日誌,過濾並輸出到es中
4. 單獨的kibana服務,來做數據段web頁面展示

來貼張常用的架構圖
在這裏插入圖片描述

安裝服務

官網 https://www.elastic.co/cn/downloads/
首先我選擇安裝目錄爲

mkdir -p /usr/local/elk

0 服務器先安裝 jdk環境, 版本jdk8 以上

推薦yum安裝

1 下載安裝 elasticsearch

下載elasticsearch 下載安裝包,並解壓

cd /usr/local/elk
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.6.0-linux-x86_64.tar.gz
tar xvf elasticsearch-7.6.0-linux-x86_64.tar.gz

使用默認配置,啓動服務

cd /usr/local/elk/elasticsearch-7.6.0/bin
./elasticsearch -d

好吧,出師不利,剛啓動遇到第一個問題,elasticsearch不允許root用戶啓動(後面幾個服務也是不允許),所以我先創建elstic用戶和組,並設置elk目錄屬於elstic用戶組

錯誤顯示爲

java.lang.RuntimeException: can not run elasticsearch as root

解決方式

	創建elastic用戶
	adduser elastic
	設置密碼
	passwd elastic
	修改目錄權限
	chown -R  elstic /etc/usr/elk
	切換用戶
	su elastic

然後成功啓動
可以訪問elsticsearch接口試下
在這裏插入圖片描述

2下載安裝啓動kibana

下載並解壓

cd /usr/local/elk/
wget https://artifacts.elastic.co/downloads/kibana/kibana-7.6.0-linux-x86_64.tar.gz
tar xvf kibana-7.6.0-linux-x86_64.tar.gz

修改配置,使其能夠外網訪問,並且配置爲中文版

vim /usr/local/elk/kibana-7.6.0-linux-x86_64/config/kibana.xml

修改1. 改爲外網可訪問形式(不建議,最好限制ip)
		server.host: "0.0.0.0"
修改2. 最後一行增加
		 i18n.locale: "zh-CN"

注意:服務器上要開放外網訪問端口,默認爲 5601

然後瀏覽器訪問 外網ip:5601,很開心進入管理頁面,並且是中文版呦
在這裏插入圖片描述

3 下載安裝 filebeat

cd /usr/local/elk/
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.6.0-linux-x86_64.tar.gz
tar xvf filebeat-7.6.0-linux-x86_64.tar.gz

這裏我們重點講下filebeat的配置
通用設計是 filebeat讀取日誌,輸出到logstash,經過logstash解析後,輸出到 elasticsearch
問題1.增麼配置filebeat讀取日誌呢?
我們打開filebeat.xml,進行如下配置

# filebeat 輸入標識
filebeat.inputs:

# Each - is an input. Most options can be set at the input level, so
# you can use different inputs for various configurations.
# Below are the input specific configurations.
# 定義輸入類型,爲日誌類型
- type: log
  # Change to true to enable this input configuration.
  # 開啓配置
  enabled: true

  # Paths that should be crawled and fetched. Glob based paths.
  # 讀取日誌文件羅京
  paths:
    - /data/logs/cheetahcafe_server/test/info.log
    - # 增加自定義字段
  fields:
     log_name: cheetahcafe-test
  tail_files: true
    #- c:\programdata\elasticsearch\logs\*
- type: log
  enabled: true
  paths:
    - /data/logs/cheetahcafe_server/dev/info.log
  fields:
      log_name: cheetahcafe-dev
  tail_files: true
  # Exclude lines. A list of regular expressions to match. It drops the lines that are
  # matching any regular expression from the list.
  #exclude_lines: ['^DBG']


上面配置可以看到,我們配置了多個日誌輸入,如果有多個服務日誌需要監控的化,可以採用上面這種配置,並且設置 fields字段,進行區分

問題2 怎麼輸出到 logstash中?
默認配置文件很給力,都有示例,太好用了

同樣我們還是打開配置文件,進行如下配置,
1 註釋 output  elasticsearch ,默認的是這種形式,但是我們不採用,先註釋掉
#output.elasticsearch:
  # Array of hosts to connect to.
#  hosts: ["localhost:9200"]

  # Protocol - either `http` (default) or `https`.
  #protocol: "https"

  # Authentication credentials - either API key or username/password.
  #api_key: "id:api_key"
  #username: "elastic"
  #password: "changeme"

開啓logstash配置,配置中有註釋說明哦,非常簡單

#----------------------------- Logstash output --------------------------------
output.logstash:
  # The Logstash hosts
  # Logstash 主機地址,我們默認本機的5044端口
  hosts: ["localhost:5044"]

  # Optional SSL. By default is off. 開啓ssl
  # List of root certificates for HTTPS server verifications
  #ssl.certificate_authorities: ["/etc/pki/root/ca.pem"]

  # Certificate for SSL client authentication
  #ssl.certificate: "/etc/pki/client/cert.pem"

  # Client Certificate Key
  #ssl.key: "/etc/pki/client/cert.key"

配置後可以進行啓動filebeat

cd /usr/local/elk/filebeat-7.6.0-linux-x86_64
nohup ./filebeat -c filebeat.yml &

4 下載安裝 logstash

wget https://artifacts.elastic.co/downloads/logstash/logstash-7.6.0.tar.gz
tar xvf logstash-7.6.0.tar.gz

我們同樣要考慮下面兩個問題來進行配置
1.我們怎麼讀取日誌輸入?
通過filebeat把日誌輸入到logstash中,我們打開配置文件,進行下面配置

cd /usr/local/elk/logstash-7.6.0/config
cp logstash-sample.conf logstash.conf
vim logstash.conf
配置日誌輸入,beats配置
input {
  beats {
  	# beats的端口號
    port => 5044
    # 是否開啓ssl加密,否
    ssl => false
  }
}

2.我們輸出到哪裏?
我們日誌輸出到elasticsearch中,上面說到此時有兩個filebeats輸入,我們怎麼進行區分呢?
此時 filebeats中的fields字段此時就有很大用處了

輸出配置,輸出到elasticsearch中
output {
  elasticsearch {
    # es的服務和端口
    hosts => ["http://localhost:9200"]
    # 輸出到es中索引的創建格式,此時注意  {[fields][log_name]} ,這裏使用了filebeats中配置的自定義屬性進行區分索引
    index => "%{[fields][log_name]}-%{+YYYY.MM.dd}"
    #index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
    #user => "elastic"
    #password => "changeme"
  }
}

這樣我們很輕鬆就配置好了 logstash,下面進行啓動服務


cd /usr/local/elk/logstash-7.6.0/bin
nohup ./logstash -f ../config/logstash-es.conf &

通過上面操作,我們就成功配置和啓動我們的elk日誌系統了
下面開心的到kibana中使用下吧

使用kibana

最後一步,我們來看下怎麼使用吧? 瀏覽器訪問 ip+端口,打開面板

創建索引模式

首先 我們先創建個索引模式,爲了能夠簡單對統一索引進行合併展示
點擊 管理 -> 索引模式,然後創建索引模式
在這裏插入圖片描述
因爲我們的索引是根據項目並且按天進行創建的,所以可以按照項目名來創建索引模式就行了, 很簡單…

查看日誌信息

創建好索引模式,我們就可以在 側邊欄的 “發現” 中找到想要查看的數據了, 默認查看的字段比較多,但是基本都是我們不關係的,
可以在可用字段中選擇 message,只展示時間和message 就可以了,下面是展示效果

在這裏插入圖片描述

總結

回顧整體流程

1 使用filebeat採集數據,輸出到logstash中
2 logstash 接收filebeat的日誌,輸出到elasticsearch中
3 kibana 連接了elasticsearch, 能夠展示索引數據,並做些數據彙總,展示,篩選的操作

感受到的不足

1 logstash 只對日誌的接收和輸出做了處理,沒有使用filter進行日誌篩選和結構化處理,
	所以查看日誌的時候,是通過message的字段,整體查看的
2 kibana沒有增加權限校驗,直接對外開放比較危險, 可以簡單處理,增加對訪問的ip限制
  比如 只允許內網訪問 等

遇到的問題

  1. elasticsearch服務和logstash服務不能用root用戶啓動
    解決方式:創建個其它用戶,使用其它用戶啓動

在這裏插入圖片描述

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