ELK6.0部署:Elasticsearch+Logstash+Kibana搭建分布式日志平臺

一、前言

1、ELK簡介

ELK是Elasticsearch+Logstash+Kibana的簡稱

ElasticSearch是一個基于Lucene的分布式全文搜索引擎,提供 RESTful API進行數據讀寫

Logstash是一個收集,處理和轉發事件和日志消息的工具

Kibana是Elasticsearch的開源數據可視化插件,為查看存儲在ElasticSearch提供了友好的Web界面,并提供了條形圖,線條和散點圖,餅圖和地圖等分析工具

總的來說,ElasticSearch負責存儲數據,Logstash負責收集日志,并將日志格式化后寫入ElasticSearch,Kibana提供可視化訪問ElasticSearch數據的功能。

2、ELK工作流

應用將日志按照約定的Key寫入Redis,Logstash從Redis中讀取日志信息寫入ElasticSearch集群。Kibana讀取ElasticSearch中的日志,并在Web頁面中以表格/圖表的形式展示。

二、準備工作

1、服務器&軟件環境說明

服務器

一共準備3臺CentOS7 Server

服務器名IP說明

es1192.168.1.31部署ElasticSearch主節點

es2192.168.1.32部署ElasticSearch從節點

elk192.168.1.21部署Logstash + Kibana + Redis

這里為了節省,只部署2臺Elasticsearch,并將Logstash + Kibana + Redis部署在了一臺機器上。

如果在生產環境部署,可以按照自己的需求調整。

軟件環境

項說明

Linux ServerCentOS 7

Elasticsearch6.0.0

Logstash6.0.0

Kibana6.0.0

Redis4.0

JDK1.8

2、ELK環境準備

由于Elasticsearch、Logstash、Kibana均不能以root賬號運行。

但是Linux對非root賬號可并發操作的文件、線程都有限制。

所以,部署ELK相關的機器都要調整:

修改文件限制

# 修改系統文件vi /etc/security/limits.conf#增加的內容* soft nofile 65536* hard nofile 65536* soft nproc 2048* hard nproc 4096

調整進程數

#修改系統文件vi /etc/security/limits.d/20-nproc.conf#調整成以下配置*? ? ? ? ? soft? ? nproc? ? 4096root? ? ? soft? ? nproc? ? unlimited

調整虛擬內存&最大并發連接

#修改系統文件vi /etc/sysctl.conf#增加的內容vm.max_map_count=655360fs.file-max=655360

保存之后執行 sysctl -p 生效

JDK8安裝

CentO安裝JDK8:https://ken.io/note/centos-java-setup

創建ELK專用用戶

useradd elk

創建ELK相關目錄并賦權

#創建ELK APP目錄mkdir /usr/elk#創建ELK 數據目錄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

三、Elasticsearch 部署

本次一共要部署兩個Elasticsearch節點,所有文中沒有指定機器的操作都表示每個Elasticsearch機器都要執行該操作

1、準備工作

移動Elasticsearch到統一目錄

#移動目錄mv /home/download/elasticsearch-6.0.0 /usr/elk#賦權chown -R elk:elk /usr/elk/elasticsearch-6.0.0/

開放端口

#增加端口firewall-cmd --add-port=9200/tcp --permanentfirewall-cmd --add-port=9300/tcp --permanent#重新加載防火墻規則firewall-cmd --reload

切換賬號

#賬號切換到 elksu - elk

數據&日志目錄

創建Elasticsearch主目錄mkdir /elk/es#創建Elasticsearch數據目錄mkdir /elk/es/data#創建Elasticsearch日志目錄mkdir /elk/es/logs

2、Elasticsearch 配置

修改配置

#打開目錄cd/usr/elk/elasticsearch-6.0.0#修改配置vi config/elasticsearch.yml

主節點配置(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

從節點配置(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

配置項說明

項說明

cluster.name集群名

node.name節點名

path.data數據保存目錄

path.logs日志保存目錄

network.host節點host/ip

http.portHTTP訪問端口

transport.tcp.portTCP傳輸端口

node.master是否允許作為主節點

node.data是否保存數據

discovery.zen.ping.unicast.hosts集群中的主節點的初始列表,當節點(主節點或者數據節點)啟動時使用這個列表進行探測

discovery.zen.minimum_master_nodes主節點個數

2、Elasticsearch啟動&健康檢查

啟動

#進入elasticsearch根目錄cd/usr/elk/elasticsearch-6.0.0#啟動./bin/elasticsearch

查看健康狀態

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}

四、Logstash 配置

1、準備工作

部署Redis

Redis4 安裝與配置:https://ken.io/note/centos7-redis4-setup

由于本次核心是ELK搭建,所以ken.io偷懶,Redis沒有部署集群,采用的單節點。

移動Logstash到統一目錄

#移動目錄mv /home/download/logstash-6.0.0 /usr/elk#賦權chown -R elk:elk /usr/elk/logstash-6.0.0/

切換賬號

#賬號切換到 elksu - elk

數據&日志目錄

#創建Logstash主目錄mkdir /elk/logstash#創建Logstash數據目錄mkdir /elk/logstash/data#創建Logstash日志目錄mkdir /elk/logstash/logs

2、Logstash配置

配置數據&日志目錄

#打開目錄cd/usr/elk/logstash-6.0.0#修改配置vi config/logstash.yml#增加以下內容path.data: /elk/logstash/datapath.logs: /elk/logstash/logs

配置Redis&Elasticsearch

vi config/input-output.conf#配置內容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中讀取數據,然后寫入指定的elasticsearch

Redis核心配置項說明:

配置項說明

data_type => “list”數據類型為list

key => “logstash”緩存key為:logstash

codec => “json”數據格式為:json

啟動

#進入Logstash根目錄cd/usr/elk/logstash-6.0.0#啟動./bin/logstash -f config/input-output.conf

啟動成功后,在啟動輸出的最后一行會看到如下信息:

[INFO ][logstash.pipeline? ? ? ? ] Pipeline started {"pipeline.id"=>"main"}[INFO ][logstash.agent? ? ? ? ? ] Pipelines running {:count=>1, :pipelines=>["main"]}

五、Kibana 配置

移動Kibana到統一目錄

#移動目錄mv /home/download/kibana-6.0.0-linux-x86_64 /usr/elk/kibana-6.0.0#賦權chown -R elk:elk /usr/elk/kibana-6.0.0/

開放端口

#增加端口firewall-cmd --add-port=5601/tcp --permanent#重新加載防火墻規則firewall-cmd --reload

切換賬號

#賬號切換到 elksu - elk

修改配置

#進入kibana-6.0.0根目錄cd/usr/elk/kibana-6.0.0#修改配置vi config/kibana.yml#增加以下內容server.port: 5601server.host:"192.168.1.21"elasticsearch.url:"http://192.168.1.31:9200"

啟動

#進入kibana-6.0.0根目錄cd /usr/elk/kibana-6.0.0#啟動./bin/kibana

訪問

瀏覽器訪問: 192.168.1.21:5601

警告提示:No default index pattern. You must select or create one to continue.

錯誤提示:Unable to fetch mapping. do you have indices matching the pattern?

不用擔心,這是因為還沒有寫入日志

六、測試

1、日志寫入

日歷寫入的話,寫入到logstash監聽的redis即可。

數據類型之前在/usr/elk/logstash-6.0.0/config/input-uput.conf中有配置

redis命令方式

#啟動redis客戶端#執行以下命令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 +"\"}");}

2、Kibana使用

瀏覽器訪問:192.168.1.21:5601

此時會提示:?Configure an index pattern

直接點擊create即可

瀏覽器訪問:192.168.1.21:5601/app/kibana#/discover 即可查看日志

大功告成!

七、備注

1、Kibana使用教程

https://segmentfault.com/a/1190000002972420

2、 ELK開機啟動

ELK開機啟動,需要學習下以下知識

nohup命令使用:https://www.ibm.com/developerworks/cn/linux/l-cn-nohup/index.html

自定義系統服務,可以參考Redis的開機啟動:https://ken.io/note/centos7-redis4-setup

本文由?ken.io?創作,采用CC BY 3.0 CN協議?進行許可。 可自由轉載、引用、甚至修改,但需署名作者且注明出處。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容