【原】【轉(zhuǎn)】ELK技術(shù)實(shí)戰(zhàn)-安裝Elk 5.x平臺(tái) 5.4.1

主要參考原文地址:http://www.ywnds.com/?p=9776
ELK Stack是軟件集合Elasticsearch、Logstash躁锁、Kibana的簡(jiǎn)稱(chēng)咽瓷,由這三個(gè)軟件及其相關(guān)的組件可以打造大規(guī)模日志實(shí)時(shí)處理系統(tǒng)召烂。

其中串塑,Elasticsearch 是一個(gè)基于 Lucene 的沼琉、支持全文索引的分布式存儲(chǔ)和索引引擎,主要負(fù)責(zé)將日志索引并存儲(chǔ)起來(lái)桩匪,方便業(yè)務(wù)方檢索查詢(xún)打瘪。

Logstash是一個(gè)日志收集、過(guò)濾傻昙、轉(zhuǎn)發(fā)的中間件闺骚,主要負(fù)責(zé)將各條業(yè)務(wù)線(xiàn)的各類(lèi)日志統(tǒng)一收集、過(guò)濾后妆档,轉(zhuǎn)發(fā)給 Elasticsearch 進(jìn)行下一步處理僻爽。

Kibana是一個(gè)可視化工具,主要負(fù)責(zé)查詢(xún) Elasticsearch 的數(shù)據(jù)并以可視化的方式展現(xiàn)給業(yè)務(wù)方贾惦,比如各類(lèi)餅圖进泼、直方圖、區(qū)域圖等纤虽。

所謂“大規(guī)模”绞惦,指的是 ELK Stack 組成的系統(tǒng)以一種水平擴(kuò)展的方式支持每天收集逼纸、過(guò)濾、索引和存儲(chǔ) TB 規(guī)模以上的各類(lèi)日志济蝉。

通常杰刽,各類(lèi)文本形式的日志都在處理范圍,包括但不限于 Web 訪(fǎng)問(wèn)日志王滤,如 Nginx/Apache Access Log 贺嫂。

基于對(duì)日志的實(shí)時(shí)分析,可以隨時(shí)掌握服務(wù)的運(yùn)行狀況雁乡、統(tǒng)計(jì) PV/UV第喳、發(fā)現(xiàn)異常流量、分析用戶(hù)行為踱稍、查看熱門(mén)站內(nèi)搜索關(guān)鍵詞等曲饱。
版本跳躍

ELK在5.0版本以后(從2.x版本直接全部升級(jí)為5.x版本)悠抹,Elastic公司將原來(lái)的ELK Stack稱(chēng)之為Elastic Stack,原因是引入了Beats套件扩淀。
Elastic Products全家福:

Paste_Image.png

Elastic Stack平臺(tái)搭建
對(duì)于ELK部署使用而言楔敌,下面是一個(gè)再常見(jiàn)不過(guò)的架構(gòu)了,如下圖:
ELK技術(shù)實(shí)戰(zhàn)-安裝Elk 5.x平臺(tái)

上圖是ELK Stack實(shí)際應(yīng)用中典型的一種架構(gòu)驻谆,其中:
1)filebeat:部署在具體的業(yè)務(wù)機(jī)器上卵凑,通過(guò)定時(shí)監(jiān)控的方式獲取增量的日志,并轉(zhuǎn)發(fā)到Kafka消息系統(tǒng)暫存胜臊。
2)Kafka:以高吞吐量的特征勺卢,作為一個(gè)消息系統(tǒng)的角色,接收從filebeat收集轉(zhuǎn)發(fā)過(guò)來(lái)的日志区端,通常以集群的形式提供服務(wù)值漫。
3)logstash:然后,Logstash從Kafka中獲取日志织盼,并通過(guò)Input-Filter-Output三個(gè)階段的處理杨何,更改或過(guò)濾日志,最終輸出我們感興趣的數(shù)據(jù)沥邻。通常危虱,根據(jù)Kafka集群上分區(qū)(Partition)的數(shù)量,1:1確定Logstash實(shí)例的數(shù)量唐全,組成Consumer Group進(jìn)行日志消費(fèi)埃跷。
4)elasticsearch:最后,Elasticsearch存儲(chǔ)并索引Logstash轉(zhuǎn)發(fā)過(guò)來(lái)的數(shù)據(jù)邮利,并通過(guò)Kibana查詢(xún)和可視化展示弥雹,達(dá)到實(shí)時(shí)分析日志的目的。
Elasticsearch/Kibana還可以通過(guò)安裝x-pack插件實(shí)現(xiàn)擴(kuò)展功能延届,比如監(jiān)控Elasticsearch集群狀態(tài)剪勿、數(shù)據(jù)訪(fǎng)問(wèn)授權(quán)等。
我們一步步安裝部署Elastic Stack系統(tǒng)的各個(gè)組件方庭,然后以網(wǎng)站訪(fǎng)問(wèn)日志為例進(jìn)行數(shù)據(jù)實(shí)時(shí)分析厕吉。
首先,到ELK 官網(wǎng)下載需要用到的Filebeat/Logstash/Elasticsearch/Kibana軟件安裝包械念。(推薦下載編譯好的二進(jìn)制可執(zhí)行文件头朱,直接解壓執(zhí)行就可以部署)

  1. 系統(tǒng)環(huán)境
System: Centos release 7.2 (Final)
ElasticSearch: 5.4.1
Logstash: 5.4.1
Kibana: 5.4.1
Java: openjdk version "1.8.0_131"
kafka: 2.10
Nginx: 1.10.1
  1. 軟件下載
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.4.1.tar.gz
wget https://artifacts.elastic.co/downloads/kibana/kibana-5.4.1-linux-x86_64.tar.gz
wget https://artifacts.elastic.co/downloads/logstash/logstash-5.4.1.tar.gz
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.4.1-linux-x86_64.tar.gz
wget http://apache.fayea.com/kafka/0.10.2.1/kafka_2.10-0.10.2.1.tgz

這里我下載是我所使用的軟件版本(都是當(dāng)前最新版),如果你想使用舊一點(diǎn)或者更新一點(diǎn)的版本可以自行下載龄减。

$ ll
total 327156
-rw-r--r-- 1 root root  1539364 Jun  5 05:33 3.2.0.tar.gz
-rw-r--r-- 1 root root 33321278 Jun  1 09:58 elasticsearch-5.4.1.tar.gz
-rw-r--r-- 1 root root  8780385 Jun  1 09:57 filebeat-5.4.1-linux-x86_64.tar.gz
-rw-r--r-- 1 root root 53791517 Jun  1 09:59 kibana-5.4.1-linux-x86_64.tar.gz
-rw-r--r-- 1 root root 92710340 Jun  1 09:59 logstash-5.4.1.tar.gz
-rw-r--r-- 1 root root  9788179 Jun  1 09:58 packetbeat-5.4.1-linux-x86_64.tar.gz
-rw-r--r-- 1 root root 38424081 Apr 26 15:59 kafka_2.10-0.10.2.1.tgz

3. 安裝Nginx
這里我們部署ELK之前项钮,需要一個(gè)產(chǎn)生日志的源,這里呢就選項(xiàng)Nginx服務(wù)器。
默認(rèn)情況下寄纵,CentOS的官方資源是沒(méi)有php-fpm和Nginx的鳖敷,需要安裝第三方資源庫(kù)即可。(此步驟可省略)

$ wget http://www.atomicorp.com/installers/atomic
$ sh ./atomic
$ yum check-update

安裝啟動(dòng)nginx(關(guān)于nginx可以看本博客也有詳細(xì)介紹)

$ yum install nginx -y
$ nginx

$ netstat -nplt | grep nginx
tcp      0      0 0.0.0.0:80        0.0.0.0:*        LISTEN      12719/nginx: master

nginx的訪(fǎng)問(wèn)日志格式定義程拭,默認(rèn)如下:

log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '

在/etc/nginx/conf.d/default.conf中添加如下一行定踱,定義nginx日志使用的格式,以及日志文件的位置恃鞋。

access_log  /var/log/nginx/access.log  main;

然后重新啟動(dòng)nginx

$ nginx -s stop
$ nginx

4. 安裝JAVA
由于kafka/logstash/elastisearch的運(yùn)行依賴(lài)于Java環(huán)境崖媚, 而Logstash 1.5以上版本依賴(lài)java版本不能低于java 1.7,因此推薦使用最新版本的Java恤浪。因?yàn)槲覀冎恍枰狫ava的運(yùn)行環(huán)境畅哑,所以可以只安裝JRE,不過(guò)這里我依然使用JDK水由。由于我使用的是CentOS7系統(tǒng)荠呐,java版本是1.8,符合需求砂客,我就使用yum直接安裝了泥张。

$ yum install java-1.8.0-openjdk

查看JAVA版本

$ java -version
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-b11)
OpenJDK 64-Bit Server VM (build 25.131-b11, mixed mode)

如果java -version沒(méi)有問(wèn)題,就不需要設(shè)置環(huán)境變量鞠值。一般使用yum安裝的jdk不需要設(shè)置JAVA_HOME環(huán)境變量媚创。如果你是使用二進(jìn)制版本安裝的jdk,那么可能需要設(shè)置一下JAVA_HOME環(huán)境變量彤恶,具體的JAVA_HOME環(huán)境變量設(shè)置根據(jù)安裝路徑不同而不同钞钙。
5. 安裝部署Kafka

確認(rèn)已安裝java運(yùn)行環(huán)境,直接解壓Kafka即可使用声离。

$ tar xvf kafka_2.10-0.10.2.1.tgz -C /usr/local/elk

解壓后芒炼,編輯配置文件:

$ cat /usr/local/elk/kafka_2.10-0.10.2.1/config/server.properties     
############################# Server Basics #############################
broker.id=0
delete.topic.enable=true

############################# Socket Server Settings #############################
listeners=PLAINTEXT://0.0.0.0:9092
num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600

############################# Log Basics #############################
log.dirs=/tmp/kafka-logs
num.partitions=1
num.recovery.threads.per.data.dir=1

############################# Log Flush Policy #############################
log.flush.interval.messages=10000
log.flush.interval.ms=1000

############################# Log Retention Policy #############################
log.retention.hours=168
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000

############################# Zookeeper #############################
zookeeper.connect=localhost:2181
zookeeper.connection.timeout.ms=6000

kafka需要依賴(lài)zookeeper,所以需要先啟動(dòng)zookeeper术徊。

$ nohup /usr/local/elk/kafka_2.10-0.10.2.1/bin/zookeeper-server-start.sh /usr/local/elk/kafka_2.10-0.10.2.1/config/zookeeper.properties &

啟動(dòng)Kafka Server:(指定 JMX_PORT 端口本刽,可以通過(guò) Kafka-manager 獲取統(tǒng)計(jì)信息)

$ nohup /usr/local/elk/kafka_2.10-0.10.2.1/bin/kafka-server-start.sh /usr/local/elk/kafka_2.10-0.10.2.1/config/server.properties &

6. 安裝部署Filebeat

$ tar xvf filebeat-5.4.1-linux-x86_64.tar.gz -C /usr/local/elk/

把filebeat解壓后就可以使用了,是不是很簡(jiǎn)單弧关。

開(kāi)啟日志增量監(jiān)控 ,添加filebeat輸出源為kafka(修改filebeat.yml文件):

$ cat /usr/local/elk/filebeat-5.4.1-linux-x86_64/filebeat.yml
filebeat.prospectors:
- input_type: log
  paths:
    - /var/log/*.log

- input_type: log
  paths:
    - /var/log/nginx/*.log
  encoding: utf-8
  document_type: my-nginx-log
  scan_frequency: 10s
  harvester_buffer_size: 16384 
  max_bytes: 10485760
  tail_files: true
  
output.kafka:
  enabled: true
  hosts: ["127.0.0.1:9092"]
  topic: elk-%{[type]}
  worker: 2
  max_retries: 3
  bulk_max_size: 2048
  timeout: 30s
  broker_timeout: 10s
  channel_buffer_size: 256
  keep_alive: 60
  compression: gzip
  max_message_bytes: 1000000
  required_acks: 0
  client_id: beats

上述配置表示唤锉,F(xiàn)ilebeat定期監(jiān)控:/var/log/nginx/目錄下所有以.log結(jié)尾的文件世囊,并且將增量日志轉(zhuǎn)發(fā)到Kafka集群。filebeat支持file窿祥、tcp株憾、udp等輸入方式,輸出方式支持kafka,file嗤瞎,redis墙歪,elasticsearch、logstash等贝奇。

然后虹菲,后臺(tái)啟動(dòng)Filebeat進(jìn)程:

$ nohup /usr/local/elk/filebeat-5.4.1-linux-x86_64/filebeat -c /usr/local/elk/filebeat-5.4.1-linux-x86_64/filebeat.yml &

這時(shí)候,在瀏覽器上訪(fǎng)問(wèn)Nginx服務(wù)器并生成訪(fǎng)問(wèn)日志后掉瞳,F(xiàn)ilebeat 會(huì)及時(shí)的將日志轉(zhuǎn)發(fā)到 Kafka 集群毕源。
我們這個(gè)時(shí)候可以查一下kafka的隊(duì)列信息,可以看到有elk-log的陕习。

$ /usr/local/elk/kafka_2.10-0.10.2.1/bin/kafka-topics.sh --list --zookeeper localhost:2181
__consumer_offsets
elk-log

elk-log
具體深入kafka需要單獨(dú)學(xué)習(xí)了霎褐,如果嫌麻煩可以使用Redis比較簡(jiǎn)單。
7. 安裝配置Logstash

$ tar xvf logstash-5.4.1.tar.gz -C /usr/local/elk

把logstash解壓后就可以使用了该镣,是不是很簡(jiǎn)單冻璃。和所有的編程語(yǔ)言一樣,我們以一個(gè)輸出 “hello world” 的形式開(kāi)始我們的logstash學(xué)習(xí)损合。
7.1 開(kāi)始使用logstash
在終端中省艳,像下面這樣運(yùn)行命令來(lái)啟動(dòng) Logstash進(jìn)程:

這種寫(xiě)法了解就好,正解采用下面配置文件的用法

$ /usr/local/elk/logstash-5.4.1/bin/logstash -e 'input{stdin{}}output{stdout{codec=>rubydebug}}'
Sending Logstash's logs to /usr/local/elk/logstash-5.4.1/logs which is now configured via log4j2.properties
[logstash.setting.writabledirectory] Creating directory {:setting=>"path.queue", :path=>"/usr/local/elk/logstash-5.4.1/data/queue"}
[logstash.agent    ] No persistent UUID file found. Generating new UUID {:uuid=>"cbfff69e-1504-48f8-bd8b-6b37b8e6b1d9", :path=>"/usr/local/elk/logstash-5.4.1/data/uuid"}
[logstash.pipeline ] Starting pipeline {"id"=>"main", "pipeline.workers"=>4, "pipeline.batch.size"=>125, "pipeline.batch.delay"=>5, "pipeline.max_inflight"=>500}
[logstash.pipeline ] Pipeline main started
The stdin plugin is now waiting for input:
[2017-06-05T09:41:06,159][INFO ][logstash.agent           ] Successfully started Logstash API endpoint {:port=>9600}
 
hello world

執(zhí)行完命令塌忽,然后你會(huì)發(fā)現(xiàn)終端在等待你的輸入拍埠。沒(méi)問(wèn)題,敲入hello world土居,然后回車(chē)枣购,logstash會(huì)返回以下結(jié)果!

{
    "@timestamp" => 2017-06-05T13:41:41.840Z,
      "@version" => "1",
          "host" => "gpmaster",
       "message" => "hello world"
}

輸出沒(méi)有問(wèn)題擦耀,就證明可以正式來(lái)使用logstash了棉圈。

解釋一下命令含義
每位系統(tǒng)管理員都肯定寫(xiě)過(guò)很多類(lèi)似這樣的命令:cat randdata | awk ‘{print $2}’ | sort | uniq -c | tee sortdata。這個(gè)管道符|可以算是Linux世界最偉大的發(fā)明之一(另一個(gè)是“一切皆文件”)眷蜓。Logstash就像管道符一樣分瘾!你輸入(就像命令行的 cat )數(shù)據(jù),然后處理過(guò)濾(就像 awk 或者 uniq 之類(lèi))數(shù)據(jù)吁系,最后輸出(就像 tee )到其他地方德召。
Logstash會(huì)給事件添加一些額外信息。最重要的就是@timestamp汽纤,用來(lái)標(biāo)記事件的發(fā)生時(shí)間上岗。因?yàn)檫@個(gè)字段涉及到Logstash的內(nèi)部流轉(zhuǎn),所以必須是一個(gè)job對(duì)象蕴坪,如果你嘗試自己給一個(gè)字符串字段重命名為@timestamp的話(huà)肴掷,Logstash會(huì)直接報(bào)錯(cuò)敬锐。所以,請(qǐng)使用filters/date插件來(lái)管理這個(gè)特殊字段呆瞻。
此外台夺,大多數(shù)時(shí)候,還可以見(jiàn)到另外幾個(gè):
host – 標(biāo)記事件發(fā)生在哪里痴脾。
type – 標(biāo)記事件的唯一類(lèi)型颤介。
tags – 標(biāo)記事件的某方面屬性,這是一個(gè)數(shù)組明郭,一個(gè)事件可以有多個(gè)標(biāo)簽买窟。
你可以隨意給事件添加字段或者從事件里刪除字段。事實(shí)上事件就是一個(gè) Ruby對(duì)象薯定,或者更簡(jiǎn)單的理解為就是一個(gè)哈希也行始绍。
小貼士:每個(gè)logstash過(guò)濾插件,都會(huì)有四個(gè)方法叫add_tag, remove_tag, add_field和remove_field话侄。它們?cè)诓寮^(guò)濾匹配成功時(shí)生效亏推。
Logstash的運(yùn)行方式為主程序+配置文件。Collect年堆,Enrich和Transport的行為在配置文件中定義吞杭。配置文件的格式有點(diǎn)像json。

推薦這種

下面來(lái)創(chuàng)建一個(gè)logstash_index.conf文件:

$ cat /usr/local/elk/logstash-5.4.1/etc/logstash_index.conf
input {
    kafka  {
      #codec => "json"
      topics_pattern => "elk-.*"
      bootstrap_servers => "127.0.0.1:9092"
      auto_offset_reset => "latest"
      group_id => "logstash-g1"
    }
}
output {
    elasticsearch {                                  #Logstash輸出到elasticsearch变丧;
      hosts => ["localhost:9200"]                    #elasticsearch為本地芽狗;
      index => "logstash-nginx-%{+YYYY.MM.dd}"       #創(chuàng)建索引;
      document_type => "nginx"                       #文檔類(lèi)型痒蓬;
      workers => 1                                   #進(jìn)程數(shù)量童擎;
      user => elastic                                #elasticsearch的用戶(hù);
      password => changeme                           #elasticsearch的密碼;
      flush_size => 20000
      idle_flush_time => 10
 }
}

如上配置文件,input定義了從Redis中讀取數(shù)據(jù)攻晒;而output我是輸出到了本地的elasticsearch中存儲(chǔ)顾复。
Logstash傳遞的每條數(shù)據(jù)都帶有元數(shù)據(jù),如@version鲁捏,@timestamp芯砸,host等等,有些可以修改给梅,有些不允許修改假丧。host記錄的是當(dāng)前的主機(jī)信息。Logstash可能不會(huì)去獲取主機(jī)的信息或者獲取的不準(zhǔn)动羽,這里建議替換成自己定義的主機(jī)標(biāo)識(shí)包帚,以保證最終的日志輸出可以有完美的格式。
另外我這里添加了elasticsearch的用戶(hù)名和密碼曹质,因?yàn)楹竺嫖沂褂昧藊-pack插件婴噩,默認(rèn)用戶(hù)名是elastic,密碼是changeme羽德。
啟動(dòng)Logstash:

$ nohup /usr/local/elk/logstash-5.4.1/bin/logstash -f /usr/local/elk/logstash-5.4.1/etc/logstash_index.conf &

8. 安裝使用Elastcearch

$ tar xvf elasticsearch-5.4.1.tar.gz -C /usr/local/elk/

同Logstash一樣几莽,解壓完就可以使用了。但是注意使用elasticsearch不能使用root用戶(hù)宅静,所以這里我創(chuàng)建了一個(gè)elk用戶(hù)章蚣,把elasticsearch.2.3.2目錄及子目錄的屬主和屬組改為elk用戶(hù)了。

$ useradd elk
$ chown elk.elk -R /usr/local/elk/elasticsearch-5.4.1

修改elasticsearch配置文件姨夹,添加如下幾行(注意開(kāi)啟network.host):

$ cat /usr/local/elk/elasticsearch-5.4.1/config/elasticsearch.yml    
# ---------------------------------- Cluster -----------------------------------
cluster.name: my-application
 
# ------------------------------------ Node ------------------------------------
node.name: node-1
#node.attr.rack: r1
 
# ----------------------------------- Paths ------------------------------------
path.data: /data/elasticsearch/
path.logs: /var/log/elasticsearch/
 
# ----------------------------------- Memory -----------------------------------
bootstrap.memory_lock: false
 
# ---------------------------------- Network -----------------------------------
network.host: 0.0.0.0
http.port: 9200
 
# --------------------------------- Discovery ----------------------------------
#discovery.zen.ping.unicast.hosts: ["host1", "host2"]
#discovery.zen.minimum_master_nodes: 3
 
# ---------------------------------- Gateway -----------------------------------
#gateway.recover_after_nodes: 3

指定文檔和日志的存儲(chǔ)路徑以及監(jiān)聽(tīng)的地址和端口纤垂。注意,應(yīng)當(dāng)保證有足夠的磁盤(pán)空間來(lái)存儲(chǔ)文檔磷账,否則ES將拒絕寫(xiě)入新數(shù)據(jù)峭沦。
創(chuàng)建elasticsearch需要的數(shù)據(jù)目錄和日志目錄。

$ mkdir -p /data/elasticsearch 
$ mkdir -p /var/log/elasticsearch/ 
$ chown elk.elk /data/elasticsearch/ -R 
$ chown elk.elk /var/log/elasticsearch/ -R

啟動(dòng)elasticsearch

$ nohup sudo -u elk /usr/local/elk/elasticsearch-5.4.1/bin/elasticsearch &
$ netstat -nplt | grep 9200
tcp6       0      0 :::9200                 :::*                    LISTEN      5026/java

如果啟動(dòng)Elasticsearch出現(xiàn)以下錯(cuò)誤提示:
錯(cuò)誤1:max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
解決:打開(kāi)/etc/security/limits.conf文件逃糟,添加以下兩行代碼并保存:

* soft nofile 65536     //*表示任意用戶(hù)吼鱼,這里是elasticsearch報(bào)的錯(cuò),也可以直接填運(yùn)行elk的用戶(hù);
* hard nofile 131072

錯(cuò)誤2:memory locking requested for elasticsearch process but memory is not locked
解決:修改elasticsearch.yml文件

bootstrap.memory_lock : false

錯(cuò)誤3:max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
解決:修改內(nèi)核配置

$ sysctl -w vm.max_map_count=262144
$ sysctl -p

錯(cuò)誤4:os::commit_memory(0x00000001006cd000, 77824, 0) failed; error=’Cannot allocate memory’ (errno=12)
解決:提供內(nèi)存不足绰咽,增大主機(jī)內(nèi)存或減小elasticsearch的內(nèi)存大小
JVM默認(rèn)配置參數(shù):

$ grep -v "^#" /usr/local/elk/elasticsearch-5.4.1/config/jvm.options | grep -v "^$"
-Xms1g
-Xmx1g
-XX:+UseConcMarkSweepGC
-XX:CMSInitiatingOccupancyFraction=75
-XX:+UseCMSInitiatingOccupancyOnly
-XX:+DisableExplicitGC
-XX:+AlwaysPreTouch
-server
-Xss1m
-Djava.awt.headless=true
-Dfile.encoding=UTF-8
-Djna.nosys=true
-Djdk.io.permissionsUseCanonicalPath=true
-Dio.netty.noUnsafe=true
-Dio.netty.noKeySetOptimization=true
-Dio.netty.recycler.maxCapacityPerThread=0
-Dlog4j.shutdownHookEnabled=false
-Dlog4j2.disable.jmx=true
-Dlog4j.skipJansi=true
-XX:+HeapDumpOnOutOfMemoryError

然后使用curl訪(fǎng)問(wèn)http://localhost:9200/?pretty

$ curl http://localhost:9200/?pretty
{
  "name" : "node-1",
  "cluster_name" : "my-application",
  "cluster_uuid" : "Jf0qp0GqQ_W1MHN4pDtLdA",
  "version" : {
    "number" : "5.4.1",
    "build_hash" : "2cfe0df",
    "build_date" : "2017-05-29T16:05:51.443Z",
    "build_snapshot" : false,
    "lucene_version" : "6.5.1"
  },
  "tagline" : "You Know, for Search"
}

如果可以看到類(lèi)似上面的返回菇肃,則說(shuō)明ES單機(jī)運(yùn)行沒(méi)有問(wèn)題了。
安裝x-pack插件
x-pack是elasticsearch的一個(gè)擴(kuò)展包取募,將安全琐谤,警告,監(jiān)視玩敏,圖形和報(bào)告功能捆綁在一個(gè)易于安裝的軟件包中斗忌,雖然x-pack被設(shè)計(jì)為一個(gè)無(wú)縫的工作,但是你可以輕松的啟用或者關(guān)閉一些功能聊品。

$ /usr/local/elk/elasticsearch-5.4.1/bin/elasticsearch-plugin install x-pack

ES如果是一個(gè)集群飞蹂,需要在每一個(gè)節(jié)點(diǎn)上安裝(包括kibana)。
用戶(hù)和權(quán)限管理
x-pack安裝之后有一個(gè)超級(jí)用戶(hù)elastic 翻屈,其默認(rèn)的密碼是changeme陈哑,擁有對(duì)所有索引和數(shù)據(jù)的控制權(quán),可以使用該用戶(hù)創(chuàng)建和修改其他用戶(hù)伸眶,當(dāng)然這里可以通過(guò)kibana的web界面進(jìn)行用戶(hù)和用戶(hù)組的管理惊窖。


X-pack的elk之間的數(shù)據(jù)傳遞保護(hù)

這一步要注意下,在安裝了X-pack之后就要配置厘贼,配置之后要重啟各個(gè)組件才會(huì)生效的界酒,不然下面直接啟動(dòng)kibana的時(shí)候會(huì)報(bào)錯(cuò)。如圖嘴秸,重啟相關(guān)的東西在底部做了個(gè)匯總

Paste_Image.png

安裝完x-pack之后毁欣,我們就可以用我們所創(chuàng)建的用戶(hù)來(lái)保護(hù)elk之間的數(shù)據(jù)傳遞 安裝了X-pack之后就要改庇谆,然后重啟才可以
1:kibana<——>elasticsearch
在kibana.yml文件中配置:

elasticsearch.username: "elastic"
elasticsearch.password: "changeme"

2:logstash<——>elasticsearch

output {
    elasticsearch {
       hosts => ["http://localhost:9200"]
       user => elastic
       password => changeme
    }
}

這里如果不進(jìn)行相關(guān)配置的話(huà),elk之間的數(shù)據(jù)傳遞就會(huì)出現(xiàn)問(wèn)題凭疮。
安裝Cerebro
Cerebro時(shí)一個(gè)第三方的Elasticsearch集群管理軟件饭耳,可以方便地查看集群狀態(tài):

$ tar xvf cerebro-0.6.5.tgz -C /usr/local/elk/

下載地址(下載二進(jìn)制版):https://github.com/lmenezes/cerebro
啟動(dòng)進(jìn)程:

$ nohup /usr/local/elk/cerebro-0.6.5/bin/cerebro -Dhttp.port=1234 -Dhttp.address=0.0.0.0 &

可以在瀏覽器查看,需要輸入elasticsearch的用戶(hù)和密碼(如果安裝了x-pack)执解。


可以在管理后臺(tái)修改模板寞肖,優(yōu)化索引配置,例如:
ELK技術(shù)實(shí)戰(zhàn)-安裝Elk 5.x平臺(tái)

安裝head插件
由于elasticsearch 5.0版本變化較大衰腌,目前elasticsearch 5.0暫時(shí)不支持直接安裝head插件新蟆,但是head作者提供了另一種安裝方法。推薦使用docker直接安裝elasticsearch-head右蕊,關(guān)于head插件琼稻,直接這樣的話(huà)是不能用的,顯示為未鏈接饶囚,看另外一篇文章有解決辦法欣簇。

$ docker run -p 9100:9100 -d mobz/elasticsearch-head:5

Docker需要自行安裝即可,另外由于elasticsearch安裝了x-pack坯约,所以elasticsearch有密碼熊咽。head連接elasticsearch需要賬號(hào)密碼。
8. 安裝kibana
Kibana安裝跟logstash闹丐、elasticsearch一樣不需要安裝横殴,解壓就能用。

$ tar xvf kibana-5.4.1-linux-x86_64.tar.gz -C /usr/local/elk

安裝x-pack

$ /usr/local/elk/kibana-5.4.1-linux-x86_64/bin/kibana-plugin install x-pack
Attempting to transfer from x-pack
Attempting to transfer from https://artifacts.elastic.co/downloads/kibana-plugins/x-pack/x-pack-5.4.1.zip
Transferring 119988917 bytes....................
Transfer complete
Retrieving metadata from plugin archive
Extracting plugin archive
Extraction complete
Optimizing and caching browser bundles...
Plugin installation complete

調(diào)整配置文件卿拴,主要配置一下下面三個(gè)參數(shù):

$ cat /usr/local/elk/kibana-5.4.1-linux-x86_64/config/kibana.yml
server.port: 5601
server.host: "0.0.0.0"
server.basePath: ""
server.maxPayloadBytes: 1048576
elasticsearch.url: "http://127.0.0.1:9200"
elasticsearch.preserveHost: true
kibana.index: ".kibana"
elasticsearch.pingTimeout: 1500
elasticsearch.requestTimeout: 30000
elasticsearch.shardTimeout: 0
elasticsearch.startupTimeout: 5000
pid.file: /var/run/kibana.pid
logging.dest: stdout
logging.silent: false
logging.quiet: false
logging.verbose: false
ops.interval: 5000
i18n.defaultLocale: "en"
# elasticsearch.username: "user"
# elasticsearch.password: "pass"

啟動(dòng)Kibana

$ nohup /usr/local/elk/kibana-5.4.1-linux-x86_64/bin/kibana &
$ netstat -nplt | grep node
tcp        0      0 0.0.0.0:5601            0.0.0.0:*               LISTEN      12471/node

然后打開(kāi)瀏覽器輸入IP加端口5601即可訪(fǎng)問(wèn)衫仑,界面如下(需要輸入用戶(hù)密碼了):


默認(rèn)賬號(hào):elastic
默認(rèn)密碼:changeme
x-pack安裝之后有一個(gè)超級(jí)用戶(hù)elastic ,其默認(rèn)的密碼是changeme堕花,擁有對(duì)所有索引和數(shù)據(jù)的控制權(quán)文狱,可以使用該用戶(hù)創(chuàng)建和修改其他用戶(hù)。
初次訪(fǎng)問(wèn)Kibana的時(shí)候缘挽,需要配置一個(gè)默認(rèn)的ES索引瞄崇,一般填寫(xiě).monitoring即可,這是因?yàn)樵谏鲜霭惭bx-pack后壕曼,會(huì)自動(dòng)開(kāi)始監(jiān)控Elasticsearch集群的狀態(tài)苏研,并將監(jiān)控結(jié)果以.monitoring命名索引文件。
ELK技術(shù)實(shí)戰(zhàn)-安裝Elk 5.x平臺(tái)

ELK技術(shù)實(shí)戰(zhàn)-安裝Elk 5.x平臺(tái)

添加logstash索引(Management->index Patterns->+)
ELK技術(shù)實(shí)戰(zhàn)-安裝Elk 5.x平臺(tái)

看日志已經(jīng)出來(lái)了腮郊。
ELK技術(shù)實(shí)戰(zhàn)-安裝Elk 5.x平臺(tái)

ELK的搭建已經(jīng)基本完成摹蘑,接下來(lái)就是搭建elasticsearch集群,以及使用kibana了轧飞。
X-PACK使用
x-pack的監(jiān)控功能
X-Pack監(jiān)控組件使您能夠通過(guò)Kibana輕松監(jiān)控Elasticsearch衅鹿,您可以實(shí)時(shí)查看集群運(yùn)行狀況和性能撒踪,以及分析過(guò)去的集群,索引和節(jié)點(diǎn)指標(biāo)大渤。 此外糠涛,您可以監(jiān)控Kibana本身的性能。在群集上安裝X-Pack時(shí)兼犯,監(jiān)視代理會(huì)在每個(gè)節(jié)點(diǎn)上運(yùn)行,以從Elasticsearch收集索引指標(biāo)集漾。 通過(guò)在Kibana中安裝X-Pack切黔,您可以通過(guò)一組專(zhuān)用儀表板查看監(jiān)視數(shù)據(jù)。
ELK技術(shù)實(shí)戰(zhàn)-安裝Elk 5.x平臺(tái)

ELK技術(shù)實(shí)戰(zhàn)-安裝Elk 5.x平臺(tái)

x-pack的Graph
https://www.elastic.co/guide/en/x-pack/current/graph-getting-started.html

Redis當(dāng)隊(duì)列配置

Redis當(dāng)隊(duì)列配置


如果嫌使用kafka當(dāng)隊(duì)列太麻煩具篇,可以把Kafka換成Redis即可纬霞,配置如下:
filebeat配置

filebeat.prospectors:
- input_type: log
  paths:
    - /var/log/*.log
 
- input_type: log
  paths:
    - /var/log/nginx/*.log
  encoding: utf-8
  document_type: my-nginx-log
  scan_frequency: 10s
  harvester_buffer_size: 16384 
  max_bytes: 10485760
  tail_files: true
  
output.redis:
  enabled: true
  hosts: ["127.0.0.1:6379"]
  port: 6379
  key: filebeat
  db: 0
  worker: 1
  timeout: 5s
  max_retries: 3

logstash配置

input {
      redis {                        #去redis隊(duì)列取數(shù)據(jù);
          host => "localhost"        #連接redis服務(wù)器驱显;
          port => 6379               #連接redis端口诗芜;
          data_type => "list"        #數(shù)據(jù)類(lèi)型;
          key => "filebeat"          #隊(duì)列名稱(chēng)埃疫;
          type => "nginxlog"    #日志的類(lèi)型伏恐,用于區(qū)分index索引用;
      }
}
output {
    elasticsearch {                                  #Logstash輸出到elasticsearch栓霜;
      hosts => ["localhost:9200"]                    #elasticsearch為本地翠桦;
      index => "logstash-%{type }-%{+YYYY.MM.dd}"       #創(chuàng)建索引;
      document_type => "nginx"                       #文檔類(lèi)型胳蛮;
      workers => 1                                   #進(jìn)程數(shù)量销凑;
      flush_size => 20000
      idle_flush_time => 10
      user => elastic
      password => changeme
 }
}

查看Redis隊(duì)列信息

$ redis-cli 
127.0.0.1:6379> KEYS *
1) "filebeat"
127.0.0.1:6379> llen filebeat
(integer) 2

Redis要自行安裝了。
Nginx日志輸出為JSON格式
把Nginx日志的格式輸出成JSON格式展示在Kibana面板仅炊,生產(chǎn)環(huán)境中基本都是這么使用斗幼。
配置Nginx
主要修改nginx的訪(fǎng)問(wèn)日志格式,這里定義成json格式抚垄,以便后面logstash更好的處理蜕窿,建議生產(chǎn)環(huán)境也這樣使用。在主配置/etc/nginx/nginx.conf文件中添加如下內(nèi)容(注釋其他日志格式):

    log_format json '{"@timestamp":"$time_iso8601",'
                 '"host":"$server_addr",'
                 '"clientip":"$remote_addr",'
                 '"size":$body_bytes_sent,'
                 '"responsetime":$request_time,'
                 '"upstreamtime":"$upstream_response_time",'
                 '"upstreamhost":"$upstream_addr",'
                 '"http_host":"$host",'
                 '"url":"$uri",'
                 '"referer":"$http_referer",'
                 '"agent":"$http_user_agent",'
                 '"status":"$status"}';

在/etc/nginx/conf.d/default.conf中添加如下一行呆馁,定義nginx日志使用的格式渠羞,以及日志文件的位置声登。

access_log  /var/log/nginx/access.log  json;

然后重新啟動(dòng)nginx

$ nginx -s stop
$ nginx

配置Logstash
修改Indexer角色的配置文件:logstash_indexer.conf

$ cat /usr/local/logstash-2.3.2/etc/logstash_indexer.conf
input {
     redis {
       host => "localhost"
       data_type => "list"
       key => "filebeat"
       type => "redis-input"
    }
}
 
filter {
     json {
       source => "message"
       remove_field => "message"
     }
}
 
output {
    elasticsearch {
      hosts => ["localhost"]
      index => "logstash-nginx-%{+YYYY.MM.dd}"
      document_type => "nginx"
      # template => "/usr/local/logstash-2.3.2/etc/elasticsearch-template.json"
      workers => 1
      flush_size => 20000
      idle_flush_time => 10
   }
}

刪除elasticsearch老的數(shù)據(jù)

$ rm -fr /data/elasticsearch/*

然后重啟logstash_indexer.conf和elastisearch即可贫悄,繼續(xù)刷新Nginx日志。
打開(kāi)Kibana镰烧,應(yīng)該會(huì)讓你重新創(chuàng)建索引瓷叫,如果沒(méi)有問(wèn)題會(huì)出現(xiàn)JSON格式的日志屯吊。

啟動(dòng)代碼

nginx 
/usr/local/elk/kafka_2.10-0.10.2.1/bin/zookeeper-server-start.sh /usr/local/elk/kafka_2.10-0.10.2.1/config/zookeeper.properties &
/usr/local/elk/kafka_2.10-0.10.2.1/bin/kafka-server-start.sh /usr/local/elk/kafka_2.10-0.10.2.1/config/server.properties &
/usr/local/elk/filebeat-5.4.1-linux-x86_64/filebeat -c /usr/local/elk/filebeat-5.4.1-linux-x86_64/filebeat.yml &
/usr/local/elk/logstash-5.4.1/bin/logstash -f /usr/local/elk/logstash-5.4.1/etc/logstash_index.conf &
sudo -u elk /usr/local/elk/elasticsearch-5.4.1/bin/elasticsearch &
/usr/local/elk/cerebro-0.6.5/bin/cerebro -Dhttp.port=1234 -Dhttp.address=0.0.0.0 &
docker run -p 9100:9100 -d mobz/elasticsearch-head:5
/usr/local/elk/kibana-5.4.1-linux-x86_64/bin/kibana &

前面加 nohup 防止關(guān)掉了xshell之后送巡,kibana也關(guān)掉了,如 nohup /usr/local/elk/kibana-5.4.1-linux-x86_64/bin/kibana &

參考:http://www.reibang.com/p/f3658d267b5d

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末盒卸,一起剝皮案震驚了整個(gè)濱河市骗爆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蔽介,老刑警劉巖摘投,帶你破解...
    沈念sama閱讀 216,324評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異虹蓄,居然都是意外死亡犀呼,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)薇组,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)外臂,“玉大人,你說(shuō)我怎么就攤上這事律胀∷喂猓” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,328評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵炭菌,是天一觀的道長(zhǎng)罪佳。 經(jīng)常有香客問(wèn)我,道長(zhǎng)黑低,這世上最難降的妖魔是什么菇民? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,147評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮投储,結(jié)果婚禮上第练,老公的妹妹穿的比我還像新娘。我一直安慰自己玛荞,他們只是感情好娇掏,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著勋眯,像睡著了一般婴梧。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上客蹋,一...
    開(kāi)封第一講書(shū)人閱讀 51,115評(píng)論 1 296
  • 那天塞蹭,我揣著相機(jī)與錄音,去河邊找鬼讶坯。 笑死番电,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播漱办,決...
    沈念sama閱讀 40,025評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼这刷,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了娩井?” 一聲冷哼從身側(cè)響起暇屋,我...
    開(kāi)封第一講書(shū)人閱讀 38,867評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎洞辣,沒(méi)想到半個(gè)月后咐刨,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,307評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡扬霜,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評(píng)論 2 332
  • 正文 我和宋清朗相戀三年定鸟,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片畜挥。...
    茶點(diǎn)故事閱讀 39,688評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖婴谱,靈堂內(nèi)的尸體忽然破棺而出蟹但,到底是詐尸還是另有隱情,我是刑警寧澤谭羔,帶...
    沈念sama閱讀 35,409評(píng)論 5 343
  • 正文 年R本政府宣布华糖,位于F島的核電站,受9級(jí)特大地震影響瘟裸,放射性物質(zhì)發(fā)生泄漏客叉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評(píng)論 3 325
  • 文/蒙蒙 一话告、第九天 我趴在偏房一處隱蔽的房頂上張望兼搏。 院中可真熱鬧,春花似錦沙郭、人聲如沸佛呻。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,657評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)吓著。三九已至,卻和暖如春送挑,著一層夾襖步出監(jiān)牢的瞬間绑莺,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,811評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工惕耕, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留纺裁,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,685評(píng)論 2 368
  • 正文 我出身青樓司澎,卻偏偏與公主長(zhǎng)得像对扶,于是被迫代替她去往敵國(guó)和親区赵。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容