ELK是Elasticsearch+Logstash+Kibana的簡稱html
ElasticSearch是一個基於Lucene的分佈式全文搜索引擎,提供 RESTful API進行數據讀寫java
Logstash是一個收集,處理和轉發事件和日誌消息的工具node
總的來講,ElasticSearch負責存儲數據,Logstash負責收集日誌,並將日誌格式化後寫入ElasticSearch,Kibana提供可視化訪問ElasticSearch數據的功能。linux
應用將日誌按照約定的Key寫入Redis,Logstash從Redis中讀取日誌信息寫入ElasticSearch集羣。Kibana讀取ElasticSearch中的日誌,並在Web頁面中以表格/圖表的形式展現。nginx
一共準備3臺CentOS7 Serverredis
服務器名 | IP | 說明 |
---|---|---|
es1 | 192.168.1.31 | 部署ElasticSearch主節點 |
es2 | 192.168.1.32 | 部署ElasticSearch從節點 |
elk | 192.168.1.21 | 部署Logstash + Kibana + Redis |
這裏爲了節省,只部署2臺Elasticsearch,並將Logstash + Kibana + Redis部署在了一臺機器上。
若是在生產環境部署,能夠按照本身的需求調整。shell
項 | 說明 |
---|---|
Linux Server | CentOS 7 |
Elasticsearch | 6.0.0 |
Logstash | 6.0.0 |
Kibana | 6.0.0 |
Redis | 4.0 |
JDK | 1.8 |
因爲Elasticsearch、Logstash、Kibana均不能以root帳號運行。
可是Linux對非root帳號可併發操做的文件、線程都有限制。
因此,部署ELK相關的機器都要調整:apache
# 修改系統文件 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 4096 root soft nproc unlimited
#修改系統文件 vi /etc/sysctl.conf #增長的內容 vm.max_map_count=655360 fs.file-max=655360
以上操做重啓系統後生效json
reboot
CentO安裝JDK8:https://ken.io/note/centos-java-setupsegmentfault
useradd elk
#建立ELK APP目錄 mkdir /usr/elk #建立ELK 數據目錄 mkdir /elk #更改目錄Owner chown -R elk:elk /usr/elk chown -R elk:elk /elk
#打開文件夾 cd /home/download #下載 wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.0.0.tar.gz wget https://artifacts.elastic.co/downloads/logstash/logstash-6.0.0.tar.gz wget wget https://artifacts.elastic.co/downloads/kibana/kibana-6.0.0-linux-x86_64.tar.gz #解壓 tar -zvxf elasticsearch-6.0.0.tar.gz tar -zvxf logstash-6.0.0.tar.gz tar -zvxf kibana-6.0.0-linux-x86_64.tar.gz
本次一共要部署兩個Elasticsearch節點,全部文中沒有指定機器的操做都表示每一個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 --permanent firewall-cmd --add-port=9300/tcp --permanent #從新加載防火牆規則 firewall-cmd --reload
#帳號切換到 elk su - elk
建立Elasticsearch主目錄
mkdir /elk/es
#建立Elasticsearch數據目錄 mkdir /elk/es/data #建立Elasticsearch日誌目錄 mkdir /elk/es/logs
#打開目錄 cd /usr/elk/elasticsearch-6.0.0 #修改配置 vi config/elasticsearch.yml
cluster.name: es
node.name: es1
path.data: /elk/es/data
path.logs: /elk/es/logs
network.host: 192.168.1.31
http.port: 9200
transport.tcp.port: 9300
node.master: true node.data: true discovery.zen.ping.unicast.hosts: ["192.168.1.31:9300","192.168.1.32:9300"] discovery.zen.minimum_master_nodes: 1
cluster.name: es
node.name: es2
path.data: /elk/es/data
path.logs: /elk/es/logs
network.host: 192.168.1.32
http.port: 9200
transport.tcp.port: 9300
node.master: false node.data: true discovery.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.port | HTTP訪問端口 |
transport.tcp.port | TCP傳輸端口 |
node.master | 是否容許做爲主節點 |
node.data | 是否保存數據 |
discovery.zen.ping.unicast.hosts | 集羣中的主節點的初始列表,當節點(主節點或者數據節點)啓動時使用這個列表進行探測 |
discovery.zen.minimum_master_nodes | 主節點個數 |
#進入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 }
Redis4 安裝與配置:https://ken.io/note/centos7-redis4-setup
因爲本次核心是ELK搭建,因此ken.io偷懶,Redis沒有部署集羣,採用的單節點。
#移動目錄 mv /home/download/logstash-6.0.0 /usr/elk #賦權 chown -R elk:elk /usr/elk/logstash-6.0.0/
#帳號切換到 elk su - elk
#建立Logstash主目錄 mkdir /elk/logstash #建立Logstash數據目錄 mkdir /elk/logstash/data #建立Logstash日誌目錄 mkdir /elk/logstash/logs
#打開目錄 cd /usr/elk/logstash-6.0.0 #修改配置 vi config/logstash.yml #增長如下內容 path.data: /elk/logstash/data path.logs: /elk/logstash/logs
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"]}
#移動目錄 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
#帳號切換到 elk su - elk
#進入kibana-6.0.0根目錄 cd /usr/elk/kibana-6.0.0 #修改配置 vi config/kibana.yml #增長如下內容 server.port: 5601 server.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?
不用擔憂,這是由於尚未寫入日誌
日曆寫入的話,寫入到logstash監聽的redis便可。
數據類型以前在/usr/elk/logstash-6.0.0/config/input-uput.conf中有配置
#啓動redis客戶端 #執行如下命令 lpush logstash '{"host":"127.0.0.1","type":"logtest","message":"hello"}'
Jedis jedis = new Jedis("192.168.1.21", 6379); for (int i = 0; i < 1000; i++) { jedis.lpush("logstash", "{\"host\":\"127.0.0.1\",\"type\":\"logtest\",\"message\":\"" + i + "\"}"); }
瀏覽器訪問:192.168.1.21:5601
此時會提示: Configure an index pattern
直接點擊create便可
瀏覽器訪問:192.168.1.21:5601/app/kibana#/discover 便可查看日誌
大功告成!
ELK開機啓動,須要學習下如下知識