前言
近來比較閑,加之boss指派任務要研究日志收集系統,所以選擇了ELK整套工具進行研究。
數據庫日志收集這塊,本人屬于小白,一點都不懂,大多是查閱網上各大大神的文章和官網的教程一步一步摸索搭建起來,從環境搭建到集群配置,再到動態獲取數據庫日志,一路跌跌撞撞實屬不易,因此打算把踩過的坑記錄下來,給所有想了解或者接觸ELK的小白做參考。
本文參考了大量的教程,會在文章底部標明出處。
ELK簡介
Elasticsearch
Elasticsearch是一個實時的分布式搜索分析引擎, 它能讓你以一個之前從未有過的速度和規模,去探索你的數據。它被用作全文檢索、結構化搜索、分析以及這三個功能的組合:
* Wikipedia使用Elasticsearch提供帶有高亮片段的全文搜索,還有search-as-you-type和did-you-mean的建議。
*衛報 使用Elasticsearch將網絡社交數據結合到訪客日志中,實時的給它的編輯們提供公眾對于新文章的反饋。
* Stack Overflow將地理位置查詢融入全文檢索中去,并且使用more-like-this接口去查找相關的問題與答案。
* GitHub使用Elasticsearch對1300億行代碼進行查詢。
然而Elasticsearch不僅僅為巨頭公司服務。它也幫助了很多初創公司,像Datadog和Klout, 幫助他們將想法用原型實現,并轉化為可擴展的解決方案。Elasticsearch能運行在你的筆記本電腦上,或者擴展到上百臺服務器上去處理PB級數據。
Elasticsearch中沒有一個單獨的組件是全新的或者是革命性的。全文搜索很久之前就已經可以做到了, 就像早就出現了的分析系統和分布式數據庫。革命性的成果在于將這些單獨的,有用的組件融合到一個單一的、一致的、實時的應用中。它對于初學者而言有一個較低的門檻, 而當你的技能提升或需求增加時,它也始終能滿足你的需求。
Logstash
Logstash是一款強大的數據處理工具,它可以實現數據傳輸,格式處理,格式化輸出,還有強大的插件功能,常用于日志處理。
工作流程
Logstash工作的三個階段:
input數據輸入端,可以接收來自任何地方的源數據。
* file:從文件中讀取
* syslog:監聽在514端口的系統日志信息,并解析成RFC3164格式。
* redis:從redis-server list中獲取
* beat:接收來自Filebeat的事件
Filter數據中轉層,主要進行格式處理,數據類型轉換、數據過濾、字段添加,修改等,常用的過濾器如下。
* grok:通過正則解析和結構化任何文本。Grok目前是logstash最好的方式對非結構化日志數據解析成結構化和可查詢化。logstash內置了120個匹配模式,滿足大部分需求。
* mutate:在事件字段執行一般的轉換。可以重命名、刪除、替換和修改事件字段。
* drop:完全丟棄事件,如debug事件。
* clone:復制事件,可能添加或者刪除字段。
* geoip:添加有關IP地址地理位置信息。
output是logstash工作的最后一個階段,負責將數據輸出到指定位置,兼容大多數應用,常用的有:
* elasticsearch:發送事件數據到Elasticsearch,便于查詢,分析,繪圖。
* file:將事件數據寫入到磁盤文件上。
* mongodb:將事件數據發送至高性能NoSQL mongodb,便于永久存儲,查詢,分析,大數據分片。
* redis:將數據發送至redis-server,常用于中間層暫時緩存。
* graphite:發送事件數據到graphite。http://graphite.wikidot.com/
* statsd:發送事件數據到statsd。
kibana
kibana是一個開源和免費的工具,它可以為Logstash和ElasticSearch提供的日志分析友好的Web界面,可以幫助您匯總、分析和搜索重要數據日志。
ELK安裝
MacOS安裝ELK5.x以上版本(初略介紹)
安裝前需準備:
brew
brew又叫Homebrew,是Mac OSX上的軟件包管理工具,能在Mac中方便的安裝軟件或者卸載軟件,只需要一個命令, 非常方便。
Java
elasticsearch需要1.7以上版本,所以還需要安裝Java 1.7,用簡單的brew又不行,還需要先安裝cask。
brewinstall brew-cask
brewupdate
brewcask install caskroom/versions/java7
查看Java版本
java–version
安裝Elasticsearch:
brew install elasticsearch //安裝Elasticsearch
elasticsearch – version //查看Elasticsearch版本信息
通過
brewservices start elasticsearch
brewservices stop elasticsearch
啟停elasticsearch服務
瀏覽器訪問http://localhost:9200可以看到Elasticsearch的信息
{
name:"bWXgrRX",
cluster_name:"elasticsearch_ywheel",
cluster_uuid:"m99a1gFWQzKECuwnBfnTug",
version:{
number:"5.2.2",
build_hash:"f9d9b74",
build_date:"2017-02-24T17:26:45.835Z",
build_snapshot:false,
lucene_version:"6.4.1"
},
tagline:"You Know, for Search"
}
安裝logstash:
brew install logstash
安裝好后查看版本:
logstash – version
安裝Kibana:
Kibana不需要通過brew安裝,直接下載壓縮包后,解壓后執行./kibana即可。
Kibana安裝完成后,需要在config/kibana.yml文件中,確認elasticsearch.url:http://localhost:9200
配置logstash
使用logstash能夠很方便的寫入elasticsearch。 首先得生成一個logstash的conf文件,必須要在用戶目錄下創建一個*.conf文件
conf:
input {
file {
path=>"/Users/haigui/Desktop/LogInfo/*.log"
start_position=> beginning
ignore_older=> 0
sincedb_path=>"/dev/null"
}
filter {
grok {
match=> {"message"=>"%{IPORHOST:clientip}- %{USER:auth} \[%{HTTPDATE:timestamp}\] \"(?:%{WORD:verb} %{NOTSPACE:request}(?:HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest})\" %{NUMBER:response} (?:%{NUMBER:bytes}|-)"}}
date {match=> ["timestamp","dd/MMM/YYYY:HH:mm:ss+0800"]}
}
output {
elasticsearch{}
stdout {}
}
其中path => "/Users/haigui/Desktop/LogInfo/*.log"為日志路徑
使用
logstash-f ~/Desktop/*.conf
來讀取logstash配置文件
通過kibana窗口觀察你的結果:
http://localhost:5601
一開始是在setting頁面,要你指定訪問的index,這里就用缺省的logstash-*就行了。
CentOS7.0安裝ELK
用CentOS7.0是公司要求,其他系統都是可以參考的,在配置過程中會涉及系統參數修改,權限修改就不在文中說明了
安裝前需準備:
為了安裝時不出錯,建議選擇這兩者選擇一樣的版本,全部選擇5.3版本。
System:Centos release 7.3
Java:Oracle-jdk version "1.8.0_131"
ElasticSearch:5.3.1
Elasticsearch官方建議使用Oracle的JDK8,在安裝之前首先要確定下機器有沒有安裝JDK.
rpm-qa | grep java
如果有,有可能是系統自帶的openjdk,而非oracle的jdk。可以使用
rpm–e --nodeps java-1.8.0-openjdk-headless-1.8.0.101-3.b13.el7_2.x86_64
卸載所有帶有Java的文件,然后進行重新安裝。
檢查是否刪除
java–version
將jdk-8u131-linux-x64.tar放入/usr/local目錄下并解壓縮
將以下內容添加至/etc/profile
#set java environment
exportJAVA_HOME=/usr/local/jdk1.8.0_131
exportJRE_HOME=${JAVA_HOME}/jre
exportCLASSPATH=.:${JAVA_HOME}/lib/dt.JAVA_HOME/lib/tools.jar:${JRE_HOME}/lib
exportPATH=${JAVA_HOME}/bin:${PATH}
保存后運行source /etc/profile使環境變量生效
輸入java -version確認是否安裝成功。
[root@localhostlocal]# java -version
javaversion "1.8.0_131"
Java(TM)SE Runtime Environment (build 1.8.0_131-b13)
JavaHotSpot(TM) 64-Bit Server VM (build 25.101-b13, mixed mode)
安裝elasticsearch
elasticsearch安裝地址
https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.3.1.tar.gz
將elasticsearch-5.3.1.tar解壓到/home/parallels/Desktop/elasticsearch中,修改elasticsearch-5.3.1/config/elasticsearch.yml中:
#這里指定的是集群名稱,需要修改為對應的,開啟了自發現功能后,ES會按照此集群名稱進行集群發現
cluster.name:thh_dev1
#數據目錄
path.data:/home/parallels/Desktop/data/elk/data
# log目錄
path.logs:/home/parallels/Desktop/data/elk/logs
#修改一下ES的監聽地址,這樣別的機器也可以訪問
network.host:0.0.0.0
#默認的端口號
http.port:9200
修改系統參數,確保系統有足夠資源啟動ES
設置內核參數
/etc/sysctl.conf
#增加以下參數
vm.max_map_count=655360
執行以下命令,確保生效配置生效:
sysctl–p
設置資源參數
/etc/security/limits.conf
#修改
*soft nofile 65536
*hard nofile 131072
*soft nproc 65536
*hard nproc 131072
vi/etc/security/limits.d/20-nproc.conf
#設置elk用戶參數
elksoftnproc65536
啟動ElasticSearch5版本要非root用戶,使用一個普通用戶來啟動ElasticSearch
進入elasticsearch的bin目錄,使用./elasticsearch -d命令啟動elasticsearch。
使用
ps-ef|grep elasticsearch
查看進程
使用
curl-X GEThttp://localhost:9200
查看信息
{
"name" : "FIinCQT",
"cluster_name" :"thh_dev1",
"cluster_uuid" :"Xm1PGPNuT6e5gBv3aF9aew",
"version" : {
"number" : "5.3.1",
"build_hash" :"5f9cf58",
"build_date" :"2017-04-17T15:52:53.846Z",
"build_snapshot" : false,
"lucene_version" :"6.4.2"
},
"tagline" : "You Know, forSearch"
}
客戶端網頁訪問可能需要關掉防火墻:
systemctlstop firewalld.service
安裝logstash:
下載logstash
https://artifacts.elastic.co/downloads/logstash/logstash-5.3.1.tar.gz
首先將logstash-5.3.1.tar.gz解壓到/home/parallels/Desktop/logstash中
創建配置文件
創建logstash-simple.conf文件并且保存到
/home/parallels/Desktop/logstash/config
文件內容為
input{
file {
path => "/home/parallels/Desktop/data/elk/logs/*.log"
start_position => beginning
ignore_older => 0
sincedb_path =>"/dev/null"
}}
filter{
grok {
match => { "message" =>"%{IPORHOST:clientip} - %{USER:auth} \[%{HTTPDATE:timestamp}\] \"(?:%{WORD:verb}%{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest})\"%{NUMBER:response} (?:%{NUMBER:bytes}|-)"}
}date {
match => [ "timestamp" ,"dd/MMM/YYYY:HH:mm:ss +0800" ]
}
}
output{
elasticsearch {}
stdout {}
}
其中path => "/home/parallels/Desktop/data/elk/logs/*.log"為日志路徑
Grok后面是正則表達式,篩選logstash要讀取的關鍵信息。
進入logstash的bin目錄,使用./logstash -f ../config/logstash-simple.conf命令讀取配置信息并啟動logstash。
安裝kibana:
下載kibana
https://artifacts.elastic.co/downloads/kibana/kibana-5.3.1-linux-x86_64.tar.gz
解壓kibana-5.3.1-linux-x86_64源碼包到/home/parallels/Desktop/kibana
配置kibana
編輯kibana.yml配置文件
/home/parallels/Desktop/kibana/config/kibana.yml
修改以下參數:
#開啟默認端口5601如果5601被占用可用5602或其他
server.port:5601
server.host:“localhost”#站點地址
elasticsearch.url:http://localhost:9200#指向elasticsearch服務的ip地址
kibana.index:“.kibana”
運行cd /home/parallels/Desktop/kibana/bin運行./kibana
通過kibana窗口觀察你的結果:
http://localhost:5601
一開始是在setting頁面,要你指定訪問的index,這里就用缺省的logstash-*就行了。
這樣ELK搭建就完成了
參考文獻