CentOs 7.3下ELK日誌分析系統搭建

系統環境
爲了安裝時不出錯,建議選擇這二者選擇同樣的版本,本文所有選擇5.3版本。html

  • System: Centos release 7.3
  • Java: openjdk version "1.8.0_131"
  • ElasticSearch: 5.3.1

Elasticsearch是個開源分佈式搜索引擎,它的特色有:分佈式,零配置,自動發現,索引自動分片,索引副本機制,restful風格接口,多數據源,自動搜索負載等。java

  • Logstash: 5.3.1

Logstash是一個徹底開源的工具,他能夠對你的日誌進行收集、過濾,並將其存儲供之後使用(如,搜索)。node

  • Kibana: 5.3.1

Kibana 也是一個開源和免費的工具,它Kibana能夠爲 Logstash 和 ElasticSearch 提供的日誌分析友好的 Web 界面,能夠幫助您彙總、分析和搜索重要數據日誌。linux

ELK 關係:bootstrap

LEK:logstatsh 收集日誌,存到elasticserach (存儲,產生索引,搜索) 到kibana展示(view)後端

官網首頁下載tar源碼包
將以上的源碼包上傳至centos服務器上/usr/local/src目錄下
tips: Logstash 的運行依賴於 Java 運行環境, Logstash 1.5 以上版本不低於 java 7 推薦使用最新版本的 Java 。因爲咱們只是運行 Java 程序,而不是開發,下載 JRE 便可。首先,在 Oracle 官方下載新版 jre ,下載地址: http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.htmlcentos

1、準備

1. 下載jdk-8u131-linux-x64.tar,上傳至CentOS上。

2. 解壓源碼包

經過終端新建java文件夾,並解壓至/usr/local/java文件夾下瀏覽器

# mkdir -pv /usr/local/java
 # tar -zxvf /usr/local/src/jdk-8u131-linux-x64.tar.gz -C /usr/local/java

3. 設置jdk環境變量

這裏採用全局設置方法,就是修改etc/profile,它是是全部用戶的共用的環境變量ruby

# vi /etc/profile

在末尾添加以下圖所示:
此處輸入圖片的描述服務器

請記住,在上述添加過程當中,等號兩側不要加入空格,否則會出現「不是有效的標識符」,由於source /etc/profile 時不能識別多餘到空格,會理解爲是路徑一部分。

而後保存使profile生效

source /etc/profile

4. 檢驗是否安裝成功

java -version

成功則顯示以下
檢驗是否安裝成功

2、Elasticsearch安裝配置

1. 解壓elasticsearch-5.3.1.tar源碼包

下載連接:https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.3.1.tar.gz
解壓至/usr/local/目錄下

tar -zxvf /usr/local/src/elasticsearch-5.3.1.tar.gz  -C /usr/local/

2. 修改配置文件

修改 /usr/local/elasticsearch-5.3.1/config/elasticsearch.yml
配置文件。
如下供參考配置,實際以需求爲準:

vi /usr/local/elasticsearch-5.3.1/config/elasticsearch.yml 
 # 這裏指定的是集羣名稱,須要修改成對應的,開啓了自發現功能後,ES會按照此集羣名稱進行集羣發現
cluster.name: skynet_es_cluster
node.name: skynet_es_cluster_dev1 

 # 數據目錄
path.data: /data/elk/data

 # log 目錄
path.logs: /data/elk/logs

 # 修改一下ES的監聽地址,這樣別的機器也能夠訪問
network.host: 0.0.0.0

# 默認的端口號
http.port: 9200
discovery.zen.ping.unicast.hosts: ["172.18.5.111", "172.18.5.112"]
 # discovery.zen.minimum_master_nodes: 3
 # enable cors,保證_site類的插件能夠訪問es
http.cors.enabled: true
http.cors.allow-origin: "*"

 # Centos6不支持SecComp,而ES5.2.0默認bootstrap.system_call_filter爲true進行檢測,因此致使檢測失敗,失敗後直接致使ES不能啓動。
bootstrap.memory_lock: false
bootstrap.system_call_filter: false

注意,設置參數的時候:後面要有空格!
tips:ElasticSearch 配置文件譯文解析

3. 修改系統參數

確保系統有足夠資源啓動ES

設置內核參數

vi /etc/sysctl.conf
# 增長如下參數
vm.max_map_count=655360

執行如下命令,確保生效配置生效:

sysctl -p

設置資源參數

vi /etc/security/limits.conf
# 修改
* soft nofile 65536
* hard nofile 131072
* soft nproc 65536
* hard nproc 131072

設置用戶資源參數

vi /etc/security/limits.d/20-nproc.conf
# 設置elk用戶參數
elk    soft    nproc     65536

4. 添加啓動用戶,設置權限

啓動ElasticSearch5版本要非root用戶,須要新建一個用戶來啓動ElasticSearch

useradd elk         #建立用戶elk
groupadd elk        #建立組elk
useradd elk -g elk  #將用戶添加到組

mkdir  -pv  /data/elk/{data,logs} # 建立數據和日誌目錄

# 修改文件全部者
chown -R elk:elk /data/elk/
chown -R elk:elk /usr/local/elasticsearch-5.3.1/

5. 啓動ES

查看內存剩餘

free -g

使用elk用戶啓動elasticsearch服務
切換至elk用戶

su elk
/usr/local/elasticsearch-5.3.1/bin/elasticsearch

檢查elasticsearch服務,以下圖所示,即成功開啓服務了,這就意味着你如今已經啓動並運行一個Elasticsearch節點了。

tips:

單個節點能夠做爲一個運行中的Elasticsearch的實例。而一個集羣是一組擁有相同cluster.name的節點,(單獨的節點也能夠組成一個集羣)能夠在elasticsearch.yml配置文件中修改cluster.name,該節點啓動時加載(須要重啓服務後纔會生效)。

EL服務

客戶端網頁訪問:
服務器要關閉防火牆

systemctl stop firewalld.service

網頁訪問以下所示:即成功了
網頁訪問

6.插件

參考連接:
Elasticsearch 5.0 —— Head插件部署指南
ElasticSearch 5.0的head插件安裝

3、安裝 Logstash

下載並安裝 Logstash ,安裝 logstash 只需將它解壓的對應目錄便可,例如: /usr/local 下:
官網下載地址:https://artifacts.elastic.co/downloads/logstash/logstash-5.3.1.tar.gz

1.解壓源碼包

tar /usr/local/src/logstash-5.3.1.tar.gz -C /usr/local/

首先,咱們經過運行最基本的Logstash管道來測試您的Logstash安裝。
Logstash管道有兩個必需的元素,input而且output,以及一個可選的元素,filter。輸入插件消耗來自源的數據,過濾器插件會按照您指定的方式修改數據,而且輸出插件將數據寫入到目的地。

Logstash管道

2.安裝完成後運行以下命令:

/usr/local/logstash-5.3.1/bin/logstash -e 'input { stdin { } } output { stdout {} }'
Sending Logstash's logs to /usr/local/logstash-5.3.1/logs     which is now configured via log4j2.properties
[2017-04-25T06:07:10,900][INFO ][logstash.pipeline        ]     Starting pipeline {"id"=>"main", "pipeline.workers"=>1,       "pipeline.batch.size"=>125, "pipeline.batch.delay"=>5,         "pipeline.max_inflight"=>125}
The stdin plugin is now waiting for input:
[2017-04-25T06:07:10,968][INFO ][logstash.pipeline        ]         Pipeline main started
[2017-04-25T06:07:11,064][INFO ][logstash.agent           ]        Successfully started Logstash API endpoint {:port=>9600}
hello world
2017-04-25T10:07:41.447Z yyp hello world

咱們能夠看到,咱們輸入什麼內容logstash按照某種格式輸出,其中-e參數參數容許Logstash直接經過命令行接受設置。這點尤爲快速的幫助咱們反覆的測試配置是否正確而不用寫配置文件。使用ctrl-c命令能夠退出以前運行的Logstash。

使用-e參數在命令行中指定配置是很經常使用的方式,不過若是須要配置更多設置則須要很長的內容。這種狀況,咱們首先建立一個簡單的配置文件,而且指定logstash使用這個配置文件。 例如:在 logstash 安裝目錄下(/usr/local/logstash-5.3.1/config)建立一個「基本配置」測試文件 logstash-simple.conf, 文件內容以下:

3.建立配置文件

cat logstash-simple.conf
input { stdin { } }
output {
    stdout { codec=> rubydebug }
}

Logstash 使用 input 和 output 定義收集日誌時的輸入和輸出的相關配置,本例中 input 定義了一個叫 "stdin" 的 input , output 定義一個叫 "stdout" 的 output 。不管咱們輸入什麼字符, Logstash 都會按照某種格式來返回咱們輸入的字符,其中 output 被定義爲 "stdout" 並使用了 codec 參數來指定 logstash 輸出格式。

使用logstash的-f參數來讀取配置文件,執行以下開始進行測試:

4.啓動

/usr/local/logstash-5.3.1/bin/logstash -f     /usr/local/logstash-5.3.1/config/logstash-simple.conf 

Sending Logstash's logs to /usr/local/logstash-5.3.1/logs which is now configured via log4j2.properties
[2017-04-25T06:18:43,294][INFO ][logstash.pipeline        ] Starting pipeline {"id"=>"main", "pipeline.workers"=>1, "pipeline.batch.size"=>125, "pipeline.batch.delay"=>5, "pipeline.max_inflight"=>125}
[2017-04-25T06:18:43,939][INFO ][logstash.pipeline        ] Pipeline main started
The stdin plugin is now waiting for input:
[2017-04-25T06:18:44,674][INFO ][logstash.agent           ] Successfully started Logstash API endpoint {:port=>9600}
hello world!
{
"@timestamp" => 2017-04-25T12:21:21.526Z,
  "@version" => "1",
      "host" => "yyp",
   "message" => "hello world!"
}

如上顯示,說明成功了。

4.測試Elasticsearch 和 Logstash 來收集日誌數據

接下來咱們在 logstash 安裝目錄下建立一個用於測試 logstash 使用 elasticsearch 做爲 logstash 的後端的測試文件 logstash-test.conf,該文件中定義了stdout和elasticsearch做爲output,這樣的「多重輸出」即保證輸出結果顯示到屏幕上,同時也輸出到elastisearch中。
前提要保證elasticsearch和logstash都正常啓動(須要先啓動elasticsearch,再啓動logstash)

cat logstash-test.conf
input { stdin { } }
output {
    elasticsearch {hosts => "192.168.30.132:9200" } #elasticsearch服務地址
    stdout { codec=> rubydebug }
}

開啓服務,執行以下命令:

/usr/local/logstash-5.3.1/bin/logstash  -f /usr/local/logstash-5.3.1/config/logstash-test.conf

咱們可使用 curl 命令發送請求來查看 ES 是否接收到了數據:

curl 'http://192.168.30.132:9200/_search?pretty'

返回結果:

{
"took" : 13,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"failed" : 0
},
"hits" : {
    "total" : 1,
    "max_score" : 1.0,
    "hits" : [
  {
        "_index" : ".kibana",
        "_type" : "config",
        "_id" : "5.3.1",
        "_score" : 1.0,
        "_source" : {
        "buildNum" : 14844
        }
    }
  ]
}
}

至此,你已經成功利用 Elasticsearch 和 Logstash 來收集日誌數據了。

4、kibana的安裝

1. 解壓kibana-5.3.1-linux-x86_64源碼包

下載地址:https://artifacts.elastic.co/downloads/kibana/kibana-5.3.1-linux-x86_64.tar.gz

解壓至/usr/local/下
tar -zxvf /usr/local/src/kibana-5.3.1-linux-x86_64.tar.gz  -C /usr/local/

2.配置kibana

編輯kibana.yml配置文件
vi /usr/local/kibana-5.3.1-linux-x86_64/config/kibana.yml 

修改如下參數:
server.port: 5601           #開啓默認端口5601
server.host: 「192.168.30.132」   #站點地址
elasticsearch.url: http://192.168.30.132:9200   #指向elasticsearch服務的ip地址
kibana.index: 「.kibana」

3.啓動

執行如下命令啓動:
/usr/local/kibana-5.3.1-linux-x86_64/bin/kibana

4.測試瀏覽器訪問

訪問:http://192.168.30.132:5601
以下圖所示,說明成功訪問了
kibana

5.配置ES索引

kibana第一次使用時,會要求建立index,只要按照默認值便可。

注意:
首次會提示沒有索引。。。。

首先須要加上咱們剛剛創建的索引index => "logstash--%{+YYYY-MM}" 點擊setting->indices, 在這裏咱們能夠Configure an index pattern, 也就是說能夠配置 正則匹配的index,

cat logstash-simple.conf
input {
    stdin{}
}

output {
    elasticsearch {
        action => "index"            # 在ES上操做index
        hosts  => "192.168.30.132:9200"   # ES地址
        index  => "logstash-%{+YYYY-MM}"   #索引名
    }
}

能夠看到默認的index是"logstash-*", 默認是從logstash導出的數據, 由於咱們在logstash中配置的索引就是logstash開頭的,因此這裏咱們保持默認不變.

下面還有一個Time-field name, 通常來講time都是一個必要的字段, 而且這個字段的類型是date類型! 不是string!!! 若是沒有時間字段, 那麼將上面的" Index contains time-based events" 取消就OK.

問題
一、出現Configure an index pattern create是灰色的的問題

這個問題是配置文件的問題,修改logstash的配置文件,使其輸出到elasticsearch,其中的index選項配置爲kibana上的index,好比我是index => "logstash-%{+YYYY-MM}" ,這個時候重啓logstash,kibana就保持默認的logstash-*索引既可,應該可以看到Create按鈕了

參考資料:第一次接觸elk日誌系統,搭建過程當中遇到種種問題,借鑑網上分享的知識,終於成功搭建elk日誌系統,好記性不如爛筆頭!

  1. Elasticsearch+Logstash+Kibana教程
  2. Elasticsearch 官方文檔參考
  3. Logstash 官方文檔參考
  4. Kibana User Guide 官方文檔參考

Galle,斯里蘭卡
你手裏的光陰是無限的,你的世紀,一個接着一個。

相關文章
相關標籤/搜索