系統環境
為了安裝時不出錯,建議選擇這兩者選擇一樣的版本,本文全部選擇5.3版本。
- System: Centos release 7.3
- Java: openjdk version "1.8.0_131"
- ElasticSearch: 5.3.1
Elasticsearch是個開源分布式搜索引擎,它的特點有:分布式,零配置,自動發現,索引自動分片,索引副本機制,restful風格接口,多數據源,自動搜索負載等。
- Logstash: 5.3.1
Logstash是一個完全開源的工具,他可以對你的日志進行收集、過濾,並將其存儲供以后使用(如,搜索)。
- Kibana: 5.3.1
Kibana 也是一個開源和免費的工具,它Kibana可以為 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以幫助您匯總、分析和搜索重要數據日志。
ELK 關系:
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.html
一、准備
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,它是是所有用戶的共用的環境變量
# vi /etc/profile
在末尾添加如下圖所示:
請記住,在上述添加過程中,等號兩側不要加入空格,不然會出現“不是有效的標識符”,因為source /etc/profile 時不能識別多余到空格,會理解為是路徑一部分。
然后保存使profile生效
source /etc/profile
4. 檢驗是否安裝成功
java -version
成功則顯示如下
二、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,該節點啟動時加載(需要重啟服務后才會生效)。
客戶端網頁訪問:
服務器要關閉防火牆
systemctl stop firewalld.service
網頁訪問如下所示:即成功了
6.插件
參考鏈接:
Elasticsearch 5.0 —— Head插件部署指南
ElasticSearch 5.0的head插件安裝
三、安裝 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。輸入插件消耗來自源的數據,過濾器插件會按照您指定的方式修改數據,並且輸出插件將數據寫入到目的地。
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 來收集日志數據了。
四、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
如下圖所示,說明成功訪問了
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.
問題
1、出現Configure an index pattern create是灰色的的問題
這個問題是配置文件的問題,修改logstash的配置文件,使其輸出到elasticsearch,其中的index選項配置為kibana上的index,比如我是index => "logstash-%{+YYYY-MM}" ,這個時候重啟logstash,kibana就保持默認的logstash-*索引既可,應該能夠看到Create按鈕了
參考資料:第一次接觸elk日志系統,搭建過程中遇到種種問題,借鑒網上分享的知識,終於成功搭建elk日志系統,好記性不如爛筆頭!
Galle,斯里蘭卡
你手里的光陰是無限的,你的世紀,一個接着一個。