Docker 部署 ELK 收集 Nginx 日誌

1、簡介

一、核心組成

ELK由Elasticsearch、Logstash和Kibana三部分組件組成;nginx

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

 

Logstash是一個徹底開源的工具,它能夠對你的日誌進行收集、分析,並將其存儲供之後使用docker

 

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

二、四大組件

Logstash: logstash server端用來蒐集日誌;vim

 

Elasticsearch: 存儲各種日誌;瀏覽器

 

Kibana: web化接口用做查尋和可視化日誌;ruby

 

Logstash Forwarder: logstash client端用來經過lumberjack 網絡協議發送日誌到logstash server;bash

 

三、ELK工做流程

在須要收集日誌的全部服務上部署logstash,做爲logstash agent(logstash shipper)用於監控並過濾收集日誌,將過濾後的內容發送到Redis,而後logstash indexer將日誌收集在一塊兒交給全文搜索服務ElasticSearch,能夠用ElasticSearch進行自定義搜索經過Kibana 來結合自定義搜索進行頁面展現。restful

 

第一步:上docker安裝包網絡

第二步:解壓安裝包,進行安裝

[root@nginx ~]# tar zxf docker.tar.gz

[root@nginx ~]# cd docker

[root@nginx docker]# ls

ca.crt docker-app.tar.gz docker.sh remove.sh

[root@nginx docker]# sh docker.sh

docker

docker-compose

docker-containerd

docker-containerd-ctr

docker-containerd-shim

dockerd

docker-init

docker-proxy

docker-runc

Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /etc/systemd/system/docker.service.

第三步:查看是否安裝成功

[root@nginx docker]# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

第四步:vm.max_map_count至少須要262144,永久修改vm.max_map_count方法以下圖:

 直接執行以下命令:sysctl -w vm.max_map_count=262144

第五步:關閉防火牆

[root@docker ~]# systemctl stop firewalld

[root@docker ~]# setenforce 0

第六步:拉取ELK鏡像

[root@nginx ~]# docker pull sebp/elk

第七步:下載鏡像以後可使用docker的命令來驗證是否成功,參考命令以下:

[root@nginx ~]# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

sebp/elk latest 0c1a88826f47 7 days ago 1.93GB

第八步:容器運行:運行此容器的時候,須要將宿主機的端口轉發到該容器,其中ES端口爲9200,kibana端口爲5601,logbate端口爲5044;建議將配置文件和數據存放在宿主機,便於後期維護,所以還須要將宿主機目錄掛載到容器/data當中;最後構造的命令以下:

docker run -p  5601:5601 -p 9200:9200 -p 5044:5044  -v /Users/song/dockerFile:/data -it -d --name elk sebp/elk

第九步:檢查端口是否開啓

[root@nginx ~]# ss -tnl

第十步:數據導入與校驗

容器運行以後,須要驗證是否啓動成功,經過瀏覽器訪問kibana和ES的頁面是否成功來判斷。

http://localhost:5601/

當瀏覽器訪問成功以後,參考以下圖所示:

 

 

ES服務檢查:驗證kibana啓動成功以後,接着繼續驗證ES服務是否啓動成功,URL地址以下

http://localhost:9200/_search?pretty

訪問以後,此時ES裏面應該是沒有數據的,出現的界面以下

 

 

第十一步:配置與驗證

logstash配置:

logstash配置主要有三個地方要處理,首先是輸入源在什麼位置,而後是對數據進行過濾或者格式化,最後是須要將數據輸出到什麼地方;我在下方的配置只作了其中兩項,由於在nginx日誌當中已經將日誌格式化了,編輯配置文件命令參考以下:

在/Users/song/dockerFile/目錄下建立config目錄,在config目錄下建立logstash.yml文件

[root@nginx ~]# vim /Users/song/dockerFile/config/logstash.yml

input {

file {

path => "/data/logs/access.log"

codec => "json"

}

}

output {

elasticsearch { hosts => ["主機ip:9200"] }

stdout { codec => rubydebug }

}

在配置文件當中,能夠看到日誌文件存放的位置在 "/data/logs/access.log"當中,輸出的地址是主機ip:9200,這是本機的ES服務

 

nginx日誌格式

下載nginx

[root@nginx ~]# yum install nginx -y

更改nginx中的日誌格式,將nginx的日誌文件設置爲json格式,在更改nginx配置文件以前,須要獲取nginx配置文件路徑,參考以下命令

[root@nginx ~]# sudo nginx -t

返回結果

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok

nginx: configuration file /etc/nginx/nginx.conf test is successful

在返回的結果當中已經能夠看到配置文件所在的位置,使用vim編輯配置文件,參考命令

[root@nginx ~]# vim /etc/nginx/nginx.conf

http { log_format json '{"@timestamp":"$time_iso8601", "@version":"1","host":"$server_addr", "client":"$remote_addr", "size":"$body_bytes_sent", "responsetime":"$request_time", "domain":"$host","url":"$uri","status":"$status"}'; access_log /var/log/nginx/access.log json;

 

 

 

啓動logstash

須要啓動logstash開始收集日誌,啓動logstash以前須要先進入容器裏面,進入容器參考命令以下:

[root@nginx ~]# docker exec -it elk bash

進入容器以後,須要啓動logstash來收集數據,啓動的時候須要帶兩個參數進去,第一個是logstash的數據暫存位置,第二個是使用的配置文件,所以構造的命令以下所示:

一、/opt/logstash/bin/logstash --path.data /tmp/logstash/data -f /data/config/logstash.yml

 

二、/opt/logstash/bin/logstash -e 'input { stdin { } } output { elasticsearch { hosts => ["localhost"] } }'

注意:若是看到報錯信息:

Logstash could not be started because there is already another instance using the configured data directory.  If you wish to run multiple instances, you must change the "path.data" setting. 請執行命令:service logstash stop 而後在執行就能夠了。

當命令成功被執行後,看到:Successfully started Logstash API endpoint {:port=>9600} 信息後,輸入:this is a dummy entry 而後回車,模擬一條日誌進行測試。

 

第十一步:添加數據

只要nginx產生日誌,logstash就會實時將日誌發送到ES服務當中,在發送數據時,終端窗口也會發生變化,以下圖所示

kibana索引配置:

經過瀏覽器訪問kibana,URL地址以下

http://127.0.0.1:5601/app/kibana#/management/kibana/index?_g=()

image

點擊左側導航欄的Discover連接,即可進入建立索引模式界面,以下圖所示

image

點擊頁面右下方的next按鈕,會跳轉到下一個頁面,在此頁面還須要選擇一個時間維度,以下圖所示

image

在此點擊下一步,便建立kibana的索引完成,此時再次點擊左側導航欄的Discover連接,即可以看到剛纔建立索引的一些視圖,以下圖所示

image

在圖中有一個input輸入框,筆者能夠在裏面填寫篩選所須要的關鍵詞;若是沒有篩選出結果,也可檢查左側的時間篩選項是否設置正確,如筆者的時間篩選項設置的是Today,也就表明篩選當天的數據。

ELK的總體操做流程比較簡單,首先是logstash收集各類日誌並進行過濾,而後將過濾後的內容發送到ES服務中,最後用戶經過Kibana的頁面查看ES中的日誌數據;

相關文章
相關標籤/搜索