ELK是Elasticsearch+Logstash+Kibana的簡稱
ElasticSearch是一個(gè)基于Lucene的分布式全文搜索引擎,提供 RESTful API進(jìn)行數(shù)據(jù)讀寫
Logstash是一個(gè)收集,處理和轉(zhuǎn)發(fā)事件和日志消息的工具
Kibana是Elasticsearch的開源數(shù)據(jù)可視化插件搓译,為查看存儲(chǔ)在ElasticSearch提供了友好的Web界面,并提供了條形圖锋喜,線條和散點(diǎn)圖些己,餅圖和地圖等分析工具
總的來說,ElasticSearch負(fù)責(zé)存儲(chǔ)數(shù)據(jù)嘿般,Logstash負(fù)責(zé)收集日志段标,并將日志格式化后寫入ElasticSearch,Kibana提供可視化訪問ElasticSearch數(shù)據(jù)的功能炉奴。
應(yīng)用將日志按照約定的Key寫入Redis,Logstash從Redis中讀取日志信息寫入ElasticSearch集群瞻赶。Kibana讀取ElasticSearch中的日志静尼,并在Web頁面中以表格/圖表的形式展示滓玖。
服務(wù)器
一共準(zhǔn)備3臺(tái)CentOS7 Server
服務(wù)器名IP說明
es1192.168.1.31部署ElasticSearch主節(jié)點(diǎn)
es2192.168.1.32部署ElasticSearch從節(jié)點(diǎn)
elk192.168.1.21部署Logstash + Kibana + Redis
這里為了節(jié)省恬口,只部署2臺(tái)Elasticsearch痴施,并將Logstash + Kibana + Redis部署在了一臺(tái)機(jī)器上津滞。
如果在生產(chǎn)環(huán)境部署类早,可以按照自己的需求調(diào)整。
軟件環(huán)境
項(xiàng)說明
Linux ServerCentOS 7
Elasticsearch6.0.0
Logstash6.0.0
Kibana6.0.0
Redis4.0
JDK1.8
由于Elasticsearch动知、Logstash、Kibana均不能以root賬號(hào)運(yùn)行遗淳。
但是Linux對(duì)非root賬號(hào)可并發(fā)操作的文件拍柒、線程都有限制。
所以屈暗,部署ELK相關(guān)的機(jī)器都要調(diào)整:
修改文件限制
# 修改系統(tǒng)文件vi /etc/security/limits.conf#增加的內(nèi)容* soft nofile 65536* hard nofile 65536* soft nproc 2048* hard nproc 4096
調(diào)整進(jìn)程數(shù)
#修改系統(tǒng)文件vi /etc/security/limits.d/20-nproc.conf#調(diào)整成以下配置*? ? ? ? ? soft? ? nproc? ? 4096root? ? ? soft? ? nproc? ? unlimited
調(diào)整虛擬內(nèi)存&最大并發(fā)連接
#修改系統(tǒng)文件vi /etc/sysctl.conf#增加的內(nèi)容vm.max_map_count=655360fs.file-max=655360
保存之后執(zhí)行 sysctl -p 生效
JDK8安裝
CentO安裝JDK8:https://ken.io/note/centos-java-setup
創(chuàng)建ELK專用用戶
useradd elk
創(chuàng)建ELK相關(guān)目錄并賦權(quán)
#創(chuàng)建ELK APP目錄mkdir /usr/elk#創(chuàng)建ELK 數(shù)據(jù)目錄mkdir /elk#更改目錄Ownerchown -R elk:elk /usr/elkchown -R elk:elk /elk
下載ELK包并解壓
https://www.elastic.co/downloads
#打開文件夾cd/home/download#下載wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.0.0.tar.gzwget https://artifacts.elastic.co/downloads/logstash/logstash-6.0.0.tar.gzwget wget https://artifacts.elastic.co/downloads/kibana/kibana-6.0.0-linux-x86_64.tar.gz#解壓tar -zvxf elasticsearch-6.0.0.tar.gztar -zvxf logstash-6.0.0.tar.gztar -zvxf kibana-6.0.0-linux-x86_64.tar.gz
本次一共要部署兩個(gè)Elasticsearch節(jié)點(diǎn),所有文中沒有指定機(jī)器的操作都表示每個(gè)Elasticsearch機(jī)器都要執(zhí)行該操作
移動(dòng)Elasticsearch到統(tǒng)一目錄
#移動(dòng)目錄mv /home/download/elasticsearch-6.0.0 /usr/elk#賦權(quán)chown -R elk:elk /usr/elk/elasticsearch-6.0.0/
開放端口
#增加端口firewall-cmd --add-port=9200/tcp --permanentfirewall-cmd --add-port=9300/tcp --permanent#重新加載防火墻規(guī)則firewall-cmd --reload
切換賬號(hào)
#賬號(hào)切換到 elksu - elk
數(shù)據(jù)&日志目錄
創(chuàng)建Elasticsearch主目錄mkdir /elk/es#創(chuàng)建Elasticsearch數(shù)據(jù)目錄mkdir /elk/es/data#創(chuàng)建Elasticsearch日志目錄mkdir /elk/es/logs
修改配置
#打開目錄cd/usr/elk/elasticsearch-6.0.0#修改配置vi config/elasticsearch.yml
主節(jié)點(diǎn)配置(192.168.1.31)
cluster.name: es node.name: es1path.data: /elk/es/datapath.logs: /elk/es/logsnetwork.host: 192.168.1.31http.port: 9200transport.tcp.port: 9300node.master:truenode.data:truediscovery.zen.ping.unicast.hosts: ["192.168.1.31:9300","192.168.1.32:9300"]discovery.zen.minimum_master_nodes: 1
從節(jié)點(diǎn)配置(192.168.1.32)
cluster.name: es node.name: es2path.data: /elk/es/datapath.logs: /elk/es/logsnetwork.host: 192.168.1.32http.port: 9200transport.tcp.port: 9300node.master:falsenode.data:truediscovery.zen.ping.unicast.hosts: ["192.168.1.31:9300","192.168.1.32:9300"]discovery.zen.minimum_master_nodes: 1
配置項(xiàng)說明
項(xiàng)說明
cluster.name集群名
node.name節(jié)點(diǎn)名
path.data數(shù)據(jù)保存目錄
path.logs日志保存目錄
network.host節(jié)點(diǎn)host/ip
http.portHTTP訪問端口
transport.tcp.portTCP傳輸端口
node.master是否允許作為主節(jié)點(diǎn)
node.data是否保存數(shù)據(jù)
discovery.zen.ping.unicast.hosts集群中的主節(jié)點(diǎn)的初始列表,當(dāng)節(jié)點(diǎn)(主節(jié)點(diǎn)或者數(shù)據(jù)節(jié)點(diǎn))啟動(dòng)時(shí)使用這個(gè)列表進(jìn)行探測
discovery.zen.minimum_master_nodes主節(jié)點(diǎn)個(gè)數(shù)
啟動(dòng)
#進(jìn)入elasticsearch根目錄cd/usr/elk/elasticsearch-6.0.0#啟動(dòng)./bin/elasticsearch
查看健康狀態(tài)
curl http://192.168.1.31:9200/_cluster/health
如果返回status=green表示正常
{"cluster_name":"esc","status":"green","timed_out":false,"number_of_nodes":2,"number_of_data_nodes":2,"active_primary_shards":0,"active_shards":0,"relocating_shards":0,"initializing_shards":0,"unassigned_shards":0,"delayed_unassigned_shards":0,"number_of_pending_tasks":0,"number_of_in_flight_fetch":0,"task_max_waiting_in_queue_millis":0,"active_shards_percent_as_number":100.0}
部署Redis
Redis4 安裝與配置:https://ken.io/note/centos7-redis4-setup
由于本次核心是ELK搭建,所以ken.io偷懶淆攻,Redis沒有部署集群阔墩,采用的單節(jié)點(diǎn)嘿架。
移動(dòng)Logstash到統(tǒng)一目錄
#移動(dòng)目錄mv /home/download/logstash-6.0.0 /usr/elk#賦權(quán)chown -R elk:elk /usr/elk/logstash-6.0.0/
切換賬號(hào)
#賬號(hào)切換到 elksu - elk
數(shù)據(jù)&日志目錄
#創(chuàng)建Logstash主目錄mkdir /elk/logstash#創(chuàng)建Logstash數(shù)據(jù)目錄mkdir /elk/logstash/data#創(chuàng)建Logstash日志目錄mkdir /elk/logstash/logs
配置數(shù)據(jù)&日志目錄
#打開目錄cd/usr/elk/logstash-6.0.0#修改配置vi config/logstash.yml#增加以下內(nèi)容path.data: /elk/logstash/datapath.logs: /elk/logstash/logs
配置Redis&Elasticsearch
vi config/input-output.conf#配置內(nèi)容input {? redis {? ? data_type =>"list"key =>"logstash"host =>"192.168.1.21"port => 6379? ? threads => 5? ? codec =>"json"}}filter {}output {? elasticsearch {? ? hosts => ["192.168.1.31:9200","192.168.1.32:9200"]? ? index =>"logstash-%{type}-%{+YYYY.MM.dd}"document_type =>"%{type}"}? stdout {? }}
該配置就是從redis中讀取數(shù)據(jù)啸箫,然后寫入指定的elasticsearch
Redis核心配置項(xiàng)說明:
配置項(xiàng)說明
data_type => “l(fā)ist”數(shù)據(jù)類型為list
key => “l(fā)ogstash”緩存key為:logstash
codec => “json”數(shù)據(jù)格式為:json
啟動(dòng)
#進(jìn)入Logstash根目錄cd/usr/elk/logstash-6.0.0#啟動(dòng)./bin/logstash -f config/input-output.conf
啟動(dòng)成功后耸彪,在啟動(dòng)輸出的最后一行會(huì)看到如下信息:
[INFO ][logstash.pipeline? ? ? ? ] Pipeline started {"pipeline.id"=>"main"}[INFO ][logstash.agent? ? ? ? ? ] Pipelines running {:count=>1, :pipelines=>["main"]}
移動(dòng)Kibana到統(tǒng)一目錄
#移動(dòng)目錄mv /home/download/kibana-6.0.0-linux-x86_64 /usr/elk/kibana-6.0.0#賦權(quán)chown -R elk:elk /usr/elk/kibana-6.0.0/
開放端口
#增加端口firewall-cmd --add-port=5601/tcp --permanent#重新加載防火墻規(guī)則firewall-cmd --reload
切換賬號(hào)
#賬號(hào)切換到 elksu - elk
修改配置
#進(jìn)入kibana-6.0.0根目錄cd/usr/elk/kibana-6.0.0#修改配置vi config/kibana.yml#增加以下內(nèi)容server.port: 5601server.host:"192.168.1.21"elasticsearch.url:"http://192.168.1.31:9200"
啟動(dòng)
#進(jìn)入kibana-6.0.0根目錄cd /usr/elk/kibana-6.0.0#啟動(dòng)./bin/kibana
訪問
瀏覽器訪問: 192.168.1.21:5601
警告提示:No default index pattern. You must select or create one to continue.
錯(cuò)誤提示:Unable to fetch mapping. do you have indices matching the pattern?
不用擔(dān)心忘苛,這是因?yàn)檫€沒有寫入日志
日歷寫入的話扎唾,寫入到logstash監(jiān)聽的redis即可召川。
數(shù)據(jù)類型之前在/usr/elk/logstash-6.0.0/config/input-uput.conf中有配置
redis命令方式
#啟動(dòng)redis客戶端#執(zhí)行以下命令lpushlogstash '{"host":"127.0.0.1","type":"logtest","message":"hello"}'
Java代碼批量寫入(引入Jedis)
Jedis jedis =newJedis("192.168.1.21",6379);for(inti =0; i <1000; i++) {? ? jedis.lpush("logstash","{\"host\":\"127.0.0.1\",\"type\":\"logtest\",\"message\":\""+ i +"\"}");}
瀏覽器訪問:192.168.1.21:5601
此時(shí)會(huì)提示:?Configure an index pattern
直接點(diǎn)擊create即可
瀏覽器訪問:192.168.1.21:5601/app/kibana#/discover 即可查看日志
大功告成胸遇!
https://segmentfault.com/a/1190000002972420
ELK開機(jī)啟動(dòng)坛增,需要學(xué)習(xí)下以下知識(shí)
nohup命令使用:https://www.ibm.com/developerworks/cn/linux/l-cn-nohup/index.html
自定義系統(tǒng)服務(wù),可以參考Redis的開機(jī)啟動(dòng):https://ken.io/note/centos7-redis4-setup
本文由?ken.io?創(chuàng)作薄腻,采用CC BY 3.0 CN協(xié)議?進(jìn)行許可。 可自由轉(zhuǎn)載届案、引用庵楷、甚至修改,但需署名作者且注明出處楣颠。