1. 程式人生 > >簡單安裝ELK分析日誌及使用心得

簡單安裝ELK分析日誌及使用心得

ELK

ELK是由Elasticsearch、Logstash、Kibana三個組件組成的。
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分析日誌及使用心得