簡單安裝ELK分析日誌及使用心得
阿新 • • 發佈:2018-06-10
ELKELK是由Elasticsearch、Logstash、Kibana三個組件組成的。
Elasticsearch:是ELK的核心插件,是一個基於Lucene的搜索服務器,它提供一個分布式多用戶能力的全文搜索引擎,能夠達到實時搜索,穩定,可靠,快速,安裝方便。Elasticsearch服務會開啟兩個端口,9200和9300,其中9200是對外服務的,9300是對集群內交互使用的。
Logstash:日誌收集工具,可以從本地磁盤,網絡服務(自己監聽端口,接受用戶日誌),消息隊列中收集各種各樣的日誌。然後對日誌進行分析整理,輸出到指定的輸出,(如elasticsearch、redis、終端等。)監聽9600端口。
Kibana:是一個可視化日誌web展示工具,對Elasticsearch中存儲的日誌進行展示。監聽5601端口。
Elasticsearch:是ELK的核心插件,是一個基於Lucene的搜索服務器,它提供一個分布式多用戶能力的全文搜索引擎,能夠達到實時搜索,穩定,可靠,快速,安裝方便。Elasticsearch服務會開啟兩個端口,9200和9300,其中9200是對外服務的,9300是對集群內交互使用的。
Logstash:日誌收集工具,可以從本地磁盤,網絡服務(自己監聽端口,接受用戶日誌),消息隊列中收集各種各樣的日誌。然後對日誌進行分析整理,輸出到指定的輸出,(如elasticsearch、redis、終端等。)監聽9600端口。
Kibana:是一個可視化日誌web展示工具,對Elasticsearch中存儲的日誌進行展示。監聽5601端口。
在這裏我直接三個組件裝在同一臺機器上面,也可以把他們分開。
192.168.40.15 elasticsearch logstash kibana
由於ES與logstash都需要JDK環境,所以要先安裝JDK環境,最好是安裝1.8或者以上的。
[root@elkserver ~]# java -version java version "1.8.0_144" Java(TM) SE Runtime Environment (build 1.8.0_144-b01) Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)
安裝ES:
[root@elkserver src]# tar -xf elasticsearch-5.6.3.tar.gz [root@elkserver src]# mv elasticsearch-5.6.3/ /usr/local/elasticsearch [root@elkserver src]# cd /usr/local/elasticsearch/ ##修改配置文件: [root@elkserver elasticsearch]# vim config/elasticsearch.yml node.name: elkserver network.host: 192.168.40.15 discovery.zen.minimum_master_nodes: 1 ##在配置文件末尾添加: http.cors.enabled: true http.cors.allow-origin: "*" ##這兩句是為了後面安裝head插件使用的。
安裝head插件
head插件能夠生成集群的統計數據,並提供瀏覽器查詢,同時還能對elasticsearch索引進行結構化查詢。
cd /usr/local/elasticsearch
mkdir head
cd head
git clone https://github.com/mobz/elasticsearch-head.git
cd elasticsearch-head/
yum install -y npm* ##安裝npm命令
npm install ##運行緩慢
npm install -g grunt-cli
##修改配置文件
[root@elkserver elasticsearch-head]# vim Gruntfile.js
connect: {
server: {
options: {
port: 9100,
hostname: ‘0.0.0.0‘, ##添加這行,冒號後面有空格
base: ‘.‘,
keepalive: true
}
}
}
##修改elasticsearch的JVM運行內存,這個可以根據需要更改,但是-Xms和-Xmx的值必須一樣,不然啟動報錯
[root@elkserver elasticsearch-head]# vim /usr/local/elasticsearch/config/jvm.options
-Xms1g
-Xmx1g
##修改Linux最大打開文件數
vim /etc/security/limits.conf
* soft nofile 655350 ##在末尾添加
* hard nofile 655350
##這一步需要重啟linux使配置生效
reboot
[root@elkserver ~]# ulimit -n
655350
##修改sysctl.conf文件
[root@elkserver ~]# vim /etc/sysctl.conf
vm.max_map_count=655350
[root@elkserver ~]# sysctl -p
將ES的head插件啟動,然後創建普通用戶,啟動ES,ES只能使用普通用戶啟動
useradd elastic
passwd elastic
##啟動head插件
[root@elkserver elasticsearch-head]# pwd
/usr/local/elasticsearch/head/elasticsearch-head
[root@elkserver elasticsearch-head]# grunt server &
##會開啟9100端口。
##切換到普通用戶啟動elasticsearch
[root@elkserver elasticsearch-head]# chown -R elastic:elastic /usr/local/elasticsearch/
[root@elkserver elasticsearch-head]# su - elastic
Last login: Sun Jun 10 13:15:09 CST 2018 on pts/0
[elastic@elkserver ~]$ nohup /usr/local/elasticsearch/bin/elasticsearch &
[1] 2339
[elastic@elkserver ~]$ nohup: ignoring input and appending output to ‘nohup.out’
##啟動成功是會開啟9200,9300兩個端口的。
##在瀏覽器打開可以利用head插件查看elasticsearch的集群及索引情況
![](http://i2.51cto.com/images/blog/201806/10/2ea5998c2fd589e6a539a5afe1b6f598.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
安裝Logstash
Logstash也是需要jdk環境,所以如果是在不同機器上部署的,需要安裝jdk環境,版本可以選擇和ES一樣的。
[root@elkserver src]# tar -xf logstash-5.6.3.tar.gz
[root@elkserver src]# mv logstash-5.6.3 /usr/local/logstash
##創建日誌處理文件的存放目錄
mkdir /logstash
cd /logstash
##接下來是重點,也是ELK的難點吧,就是將日誌進行分析,使用正則匹配過濾日誌中想要的內容。
120.79.189.51 - - [10/Jun/2018:12:58:12 +0800] "POST /wp-cron.php?doing_wp_cron=1528606692.3628709316253662109375 HTTP/1.1" 499 0 "-" "WordPress/4.8; http://120.79.189.51"
這是日誌中的一行,logstash的正則匹配默認是匹配一行,以回車符作為分隔符。
當然如果日誌是json格式的那麽就沒有需要處理直接輸出即可。
[root@elkserver logstash]# cat input_flter_output.conf
input {
file {
path => "/logstash/test.log"
type => "test.log"
start_position => "beginning"
}
}
filter {
grok {
match => {
"message" => "(?<ip_addr>\d+?\.\d+?\.\d+?\.\d+?)\s-\s-\s\[(?<log_date>\d+?/\w+?/\d+?):(?<log_time>\d+?:\d+?:\d+?)\s+"
}
}
}
output {
stdout {codec => rubydebug}
}
這是logstash的日誌分析文件,總共分為三個大部分,input、flter、output,其中input是輸入日誌,這裏選擇的是file文件,path是文件的路徑,type是文件的類型,這個可以自定義,主要用來區分每個日誌,start_position是設定為beginning是指從文件的開頭開始讀取。
flter是處理日誌的部分,使用grok這個強大的組件進行信息過濾,對於日誌的正則匹配最總會以json的格式輸出,所以正則匹配的格式是(?<字段名>正則表達式過濾將要匹配的內容)在每個括號內創建過濾的內容,將不需要的內容放在括號外,可以一直做匹配知道日誌結束,這裏我只是簡單匹配日誌前面的ip地址和日期時間。
針對正則匹配字段詳細說明:
正則匹配字段通過“(?<字段名>正則表達式)”來定義,我們看到“(?<ip_addr>\d+?\.\d+?\.\d+?\.\d+?”匹配了日誌中的IP地址,然後將不需要的內容放在括號外面匹配,接著是日期和時間,使用同樣的方式,然後不需要的內容放在外面因為這裏我只匹配了前面的一點內容,如果有需要提取,可以一直匹配,知道這一行結束,logstash默認只會匹配日誌以行作為分割,下一行又是新的一次匹配了。
output是處理輸出部分,這裏我只是簡單輸出到終端,先實驗正則匹配沒問題後,將輸出指向elasticsearch。
##這裏先看看終端的輸出內容,也就是經過logstash過濾後的日誌
![](http://i2.51cto.com/images/blog/201806/10/d911c12532dffb112e5090eaafa08aa9.jpg?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
接下來將日誌輸出到elasticsearch,修改output裏面的內容即可。
output {
elasticsearch { ##指定輸出到ES
action => "index" ##建立索引
hosts => "192.168.40.15:9200" ##ES地址端口
index => "test_log-%{+yyyy.MM.dd}" ##索引的名稱
}
stdout {codec => rubydebug}
}
然後再執行一次
/usr/local/logstash/bin/logstash -f input_flter_output.conf
安裝kibana
[root@elkserver src]# rpm -ivh kibana-5.6.3-x86_64.rpm
vim /etc/kibana/kibana.yml
server.host: "192.168.40.15" ##指定本地server地址
elasticsearch.url: "http://192.168.40.15:9200" ##指定elasticsearch對外服務的url
接下來就是直接在瀏覽器打開kibana的web界面,然後建立索引庫,索引是只想elastic的,在logstash日誌分析文件裏面有建立了一個索引,索引的名稱是test_log-${日期}這樣的形式。
訪問kibana:http://192.168.40.15:5601
輸入相應的索引,然後建立索引庫,然後就可以制作各種各樣的圖形分析日誌,kibana提供了很多中圖形,根據需要選擇分析。
記得ELK是實時的日誌分析,所以kibana的web界面右上角的時間如果設置不好就看不到導入的日誌了。
簡單安裝ELK分析日誌及使用心得