開源日誌分析系統ELK平臺搭建部署
開源日誌分析系統ELK平臺搭建部署
一、前言
日誌主要包括系統日誌、應用程序日誌和安全日誌。系統運維和開發人員可以通過日誌了解服務器軟硬件信息、檢查配置過程中的錯誤及錯誤發生的原因。經常分析日誌可以了解服務器的負荷,性能安全性,從而及時采取措施糾正錯誤。
通常,日誌被分散的儲存不同的設備上。如果你管理數十上百臺服務器,你還在使用依次登錄每臺機器的傳統方法查閱日誌。這樣是不是感覺很繁瑣和效率低下。當務之急我們使用集中化的日誌管理,例如:開源的syslog,將所有服務器上的日誌收集匯總。
集中化管理日誌後,日誌的統計和檢索又成為一件比較麻煩的事情,一般我們使用grep、awk和wc等Linux命令能實現檢索和統計,但是對於要求更高的查詢、排序和統計等要求和龐大的機器數量依然使用這樣的方法難免有點力不從心。
開源實時日誌分析ELK平臺能夠完美的解決我們上述的問題,ELK由ElasticSearch、Logstash和Kiabana三個開源工具組成。官方網站:https://www.elastic.co/products
Elasticsearch是個開源分布式搜索引擎,它的特點有:分布式,零配置,自動發現,索引自動分片,索引副本機制,restful風格接口,多數據源,自動搜索負載等。
Logstash是一個完全開源的工具,他可以對你的日誌進行收集、分析,並將其存儲供以後使用(如,搜索)。
kibana 也是一個開源和免費的工具,他Kibana可以為 Logstash 和 ElasticSearch 提供的日誌分析友好的
二、準備工作
準備3臺機器:
192.168.2.61(安裝Elasticsearch,kibana,Logstash)
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
修改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
三、ElasticSearch安裝配置
創建一個ELK目錄,把安裝包都放這個目錄下。
[[email protected] ~]$ mkdir elk [[email protected] ~]$ cd elk/
解壓ElasticSearch安裝包
[[email protected] 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/ 登錄
然後編輯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:
[[email protected] elk]$ /home/unilife/elk/elasticsearch-5.3.0/bin/elasticsearch &
可以看到,它跟其他的節點的傳輸端口為9300,接受HTTP請求的端口為9200。
然後,通過網頁打開http://192.168.2.61:9200/ ,可以看到以下內容
返回展示了配置的cluster_name和name,以及安裝的ES的版本等信息。
四、Logstash安裝
Logstash功能如下:
它就是一個收集器而已,我們需要為它指定Input和Output(當然Input和Output可以為多個)。由於我們需要把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
[[email protected] 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狀態和內容
上面使用了ES的Head插件觀察了ES集群的狀態和數據,但這只是個簡單的用於跟ES交互的頁面而已,並不能生成報表或者圖表什麽的,接下來使用Kibana來執行搜索並生成圖表。
五、Kiabana安裝
解壓安裝包
tar -zxf kibana-5.3.0.tar.gz cd kibana-5.3.0
配置kibana
[[email protected] kibana-5.3.0]$ viconfig/kibana.yml
修改以下內容
server.host: "0.0.0.0" elasticsearch.url: http://192.168.2.61:9200
啟動Kiabana
[[email protected] kibana-5.3.0]$ ./bin/kibana &
通過http://192.168.2.61:5601/ 訪問Kibana
為了後續使用Kibana,需要配置至少一個Index名字或者Pattern,它用於在分析時確定ES中的Index。這裏我輸入之前配置的Index名字dubbo,Kibana會自動加載該Index下doc的field,並自動選擇合適的field用於圖標中的時間字段:
接下來切換到Discover標簽上,就能看到ES中的數據了:
六、Logstash收集日誌
6.1、Logstash收集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
編寫配置文件
[[email protected] 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
[[email protected] bin]$ ./bin/logstash -fconfig/nginx_to_es.conf &
用ElasticSearch的Head插件查看ES狀態和內容,
可以看到nginx日誌已經存儲到ES
然後通過Kibana為nginx創建一個index
Kibana上能看到nginx數據了。
6.2、Logstash通過kafka收集日誌信息
編輯配置文件
[[email protected] 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
[[email protected] bin]$ ./bin/logstash -fconfig/kafka_to_elasticsearch.conf &
開源日誌分析系統ELK平臺搭建部署