開源日誌分析系統ELK平臺搭建部署

開源日誌分析系統ELK平臺搭建部署html

 

 

1、前言

日誌主要包括系統日誌、應用程序日誌和安全日誌。系統運維和開發人員能夠經過日誌瞭解服務器軟硬件信息、檢查配置過程當中的錯誤及錯誤發生的緣由。常常分析日誌能夠了解服務器的負荷,性能安全性,從而及時採起措施糾正錯誤。java

一般,日誌被分散的儲存不一樣的設備上。若是你管理數十上百臺服務器,你還在使用依次登陸每臺機器的傳統方法查閱日誌。這樣是否是感受很繁瑣和效率低下。當務之急咱們使用集中化的日誌管理,例如:開源的syslog,將全部服務器上的日誌收集彙總。node

集中化管理日誌後,日誌的統計和檢索又成爲一件比較麻煩的事情,通常咱們使用grepawkwcLinux命令能實現檢索和統計,可是對於要求更高的查詢、排序和統計等要求和龐大的機器數量依然使用這樣的方法不免有點力不從心。linux

開源實時日誌分析ELK平臺可以完美的解決咱們上述的問題,ELKElasticSearchLogstashKiabana三個開源工具組成。官方網站:https://www.elastic.co/productsnginx

 

Elasticsearch是個開源分佈式搜索引擎,它的特色有:分佈式,零配置,自動發現,索引自動分片,索引副本機制,restful風格接口,多數據源,自動搜索負載等。git

Logstash是一個徹底開源的工具,他能夠對你的日誌進行收集、分析,並將其存儲供之後使用(如,搜索)。github

kibana 也是一個開源和免費的工具,他Kibana能夠爲 Logstash ElasticSearch 提供的日誌分析友好的 Web 界面,能夠幫助您彙總、分析和搜索重要數據日誌。sql


2、準備工做

準備3臺機器:apache

192.168.2.61(安裝ElasticsearchkibanaLogstashnpm

192.168.2.83(收集umember日誌)

192.168.2.93(收集Nginx日誌,安裝Logstash

 

操做系統:Centos 6.5 x64

 

下載安裝包

Elasticsearch

https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.3.0.tar.gz


Logstash

https://artifacts.elastic.co/downloads/logstash/logstash-5.3.0.tar.gz

 

kibana

https://artifacts.elastic.co/downloads/kibana/kibana-5.3.0-linux-x86_64.tar.gz

 

安裝第三方epel

rpm -ivh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

 

安裝JDK環境(全部機器)

http://120.52.72.24/download.oracle.com/c3pr90ntc0td/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz

 

cd /usr/local
tar -zxf jdk-8u131-linux-x64.tar.gz
ln -sv jdk1.8.0_131/ jdk

 

vi /etc/profile.d/jdk.sh

添加如下內容

export JAVA_HOME=/usr/local/jdk
export PATH=$PATH:/usr/local/jdk/bin

~

chmod 755 /etc/profile.d/jdk.sh
. /etc/profile.d/jdk.sh

 

查看是否生效

java –version

wKioL1lI246g6tglAAAS6w8SXrU383.png-wh_50


修改ulimit限制

vi /etc/security/limits.d/90-nproc.conf

*       soft  nproc        10240
*       hard   nproc        10240
*       soft  nofile        65536
*       hard   nofile        65536


vi /etc/sysctl.conf

添加下面內容

vm.max_map_count = 262144

而後執行如下命令

sysctl -p

3、ElasticSearch安裝配置

建立一個ELK目錄,把安裝包都放這個目錄下。

[unilife@cdh3 ~]$ mkdir elk
[unilife@cdh3 ~]$ cd elk/


解壓ElasticSearch安裝包

[unilife@cdh3 elk]$ tar -zxfelasticsearch-5.3.0.tar.gz

 

安裝Head插件

yum install npm git  #安裝node.js
git clonegit://github.com/mobz/elasticsearch-head.git
cd elasticsearch-head
npm install
npm run start &  或者 grunt server 啓動


經過http://192.168.2.61:9100/ 登陸

wKioL1lI26OwINtLAABuQjvk-Xg700.png-wh_50


而後編輯ES的配置文件:

vi config/elasticsearch.yml

修改如下配置項:

cluster.name: my-application
node.name: node-1
path.data: /tmp/elasticsearch/data
path.logs: /tmp/elasticsearch/logs
network.host=0.0.0.0
network.port=9200
http.cors.enabled: true
http.cors.allow-origin: "*"

 

其餘的選項保持默認,而後啓動ES

[unilife@cdh3 elk]$ /home/unilife/elk/elasticsearch-5.3.0/bin/elasticsearch &

wKiom1lI27rAZ-SmAADWZJ_P3_M244.png-wh_50


能夠看到,它跟其餘的節點的傳輸端口爲9300,接受HTTP請求的端口爲9200

 

而後,經過網頁打開http://192.168.2.61:9200/ ,能夠看到如下內容

wKioL1lI28vjj_FhAAAmskCfW7I809.png-wh_50


返回展現了配置的cluster_namename,以及安裝的ES的版本等信息。


4、Logstash安裝

Logstash功能以下:

wKiom1lI3AmCo-4TAACy-1Auoa8925.png-wh_50

它就是一個收集器而已,咱們須要爲它指定InputOutput(固然InputOutput能夠爲多個)。因爲咱們須要把Java項目中Log4j的日誌輸出到ElasticSearch中,所以這裏的Input就是Log4j,而Output就是ElasticSearch

tar -zxf logstash-5.3.0.tar.gz
cd logstash-5.3.0

 

編寫配置文件

vi config/log4j_to_es.conf

 

# For detail structure of this file
# Set:https://www.elastic.co/guide/en/logstash/current/configuration-file-structure.html
input {
  #For detail config for log4j as input,
  #See: https://www.elastic.co/guide/en/logstash/current/plugins-inputs-log4j.html
 log4j {
   mode => "server"
   host => "192.168.2.61"
   port => 4567
  }
}
filter {
 #Only matched data are send to output.
}
output {
  #For detail config for elasticsearch as output,
  #See: https://www.elastic.co/guide/en/logstash/current/plugins-outputs-elasticsearch.html
 elasticsearch {
   action => "index"                #The operation on ES
   hosts  =>"192.168.2.61:9200"    #ElasticSearch host, can be array.
   index  =>"dubbo"               #Theindex to write data to, can be any string.
  }

 

啓動Logstash

[unilife@cdh3 logstash-5.3.0]$./bin/logstash -f config/log4j_to_es.conf &

用 -f 選項指定配置文件

 

修改Java項目的log4j.properties,將Log4j的日誌輸出到SocketAppender

 

log4j.rootCategory=debug, stdout, R, E, socket
 
# appender socket
log4j.appender.socket=org.apache.log4j.net.SocketAppender
log4j.appender.socket.Port=4567
log4j.appender.socket.RemoteHost=192.168.2.61
log4j.appender.socket.layout=org.apache.log4j.PatternLayout
log4j.appender.socket.layout.ConversionPattern=%d[%-5p] [%l] %m%n
log4j.appender.socket.ReconnectionDelay=10000

最後從新啓動Java服務

 

Head插件查看ES狀態和內容

wKiom1lI3CbhSavPAACtAr2tpvU654.png-wh_50


wKioL1lI3CnidojOAADyZmiv_6o855.png-wh_50

 

上面使用了ESHead插件觀察了ES集羣的狀態和數據,但這只是個簡單的用於跟ES交互的頁面而已,並不能生成報表或者圖表什麼的,接下來使用Kibana來執行搜索並生成圖表。

5、Kiabana安裝

解壓安裝包

tar -zxf kibana-5.3.0.tar.gz
cd kibana-5.3.0

 

配置kibana

[unilife@cdh3 kibana-5.3.0]$ viconfig/kibana.yml

 

修改如下內容

server.host: "0.0.0.0"
elasticsearch.url: http://192.168.2.61:9200


啓動Kiabana

[unilife@cdh3 kibana-5.3.0]$ ./bin/kibana &

 

經過http://192.168.2.61:5601/ 訪問Kibana

wKiom1lI3E2wAzxgAAFBb8WidDc280.png-wh_50


爲了後續使用Kibana,須要配置至少一個Index名字或者Pattern,它用於在分析時肯定ES中的Index。這裏我輸入以前配置的Index名字dubboKibana會自動加載該Indexdocfield,並自動選擇合適的field用於圖標中的時間字段:

wKiom1lI3GDBWphUAAD9U2LIkeM828.png-wh_50

 

接下來切換到Discover標籤上,就能看到ES中的數據了:

wKiom1lI3G3hgYCBAAFW-edNda4909.png-wh_50


6、Logstash收集日誌


6.1Logstash收集Nginx日誌

192.168.2.93上操做

mkdir /home/unilife/elk
cd /home/unilife/elk

解壓文件

tar -zxf logstash-5.3.0.tar.gz
cd logstash-5.3.0

 

編寫配置文件

[unilife@localhost bin]$ vi/home/unilife/elk/logstash-5.3.0/config/nginx_to_es.conf

 

添加如下內容

input {
 file {
    type => "nginx_access"
    path => ["/usr/local/nginx/logs/access.log"]
 
  }
}
filter {
 #Only matched data are send to output.
}
output {
  #For detail config for elasticsearch as output,
  #See: https://www.elastic.co/guide/en/logstash/current/plugins-outputs-elasticsearch.html
 elasticsearch {
   action => "index"               #The operation on ES
   hosts  =>"192.168.2.61:9200"    #ElasticSearch host, can be array.
   index  =>"nginx"               #Theindex to write data to, can be any string.
  }
}


啓動Logstash

[unilife@localhost bin]$ ./bin/logstash -fconfig/nginx_to_es.conf &

 

ElasticSearchHead插件查看ES狀態和內容,

wKioL1lI3Inh-rnNAACE3GBMkxc439.png-wh_50

能夠看到nginx日誌已經存儲到ES


而後經過Kibananginx建立一個index

wKiom1lI3Mbg359jAAEHVLiGUhQ216.png-wh_50


Kibana上能看到nginx數據了。

wKioL1lI3NnjqOnyAAE-n7-uxpk457.png-wh_50



6.2Logstash經過kafka收集日誌信息


編輯配置文件

[unilife@localhost bin]$ vi/home/unilife/elk/logstash-5.3.0/config/kafka_to_elasticsearch.conf

 

添加如下內容

input {
 
    kafka {
      topics => "unilife_nginx_production"
      group_id => "flume_unilife_nginx_production"
      bootstrap_servers =>"192.168.2.240:9092,192.168.2.241:9093,192.168.2.242:9094,192.168.2.243:9095,192.168.2.244:9096"
  }
 
}

output {
 
    elasticsearch {
      action => "index"
      hosts  =>["192.168.2.240:9200","192.168.2.241:9200","192.168.2.242:9200","192.168.2.243:9200","192.168.2.244:9200"]
      index  => "nginx"
  }
 
}

 

 

啓動Logstash

[unilife@localhost bin]$ ./bin/logstash -fconfig/kafka_to_elasticsearch.conf &
相關文章
相關標籤/搜索