docker方式部署ELK

1.拉取原始鏡像: docker pull sebp/elk:660

2.啓動下鏡像方便進入,進行自定義配置修改:

docker run -dit --name elk \

-p 5601:5601 \

-p 9200:9200 \

-p 5044:5044 \

-v /data/elasticsearch:/var/lib/elasticsearch \

-v /etc/localtime:/etc/localtime \

sebp/elk:660

這裏說明下5601是kibana的端口,9200是ES的端口,5044是logstash的端口

/data/elasticsearch 要修改爲你自己的索引存放目錄

3.進入到容器中,進行自定義配置修改:

docker exec -it elk /bin/bash

我們先修改logstash的配置,進入到如下目錄:

cd /etc/logstash/conf.d

因爲我們打算使用filebeat來發送數據給logstash,我們只保存一個配置文件: 02-beats-input.conf 其餘的都刪除掉

編輯02-beats-input.conf的內容,我的內容如下:

beats {

port => 8871

}

}

filter {

grok {

patterns_dir => ["/etc/logstash/patterns"]

match => {

"message" => "\[%{LOGEVL:level}\]\s*%{DAYTIME:day}\s*%{THREAD:thread}\s*%{JAVACLASS:class}\s*-"

}

}

date {

match => [ "day", "yyyy-MM-dd HH:mm:ss,SSS", "ISO8601" ]

locale => "en"

target => [ "@timestamp" ]

timezone => "Asia/Shanghai"

}

}

output {

elasticsearch {

hosts => ["localhost:9200"]

index => "log_collection_%{+YYYY.MM.dd}"

document_type => "logs"

}

}

這裏我們使用了 filter 和 date .詳細配置可以參考 https://blog.csdn.net/hushukang/article/details/84423184

這裏我們的目的是爲了使符合要求的日誌能解析出來特殊的字段.然後我們用日誌中的時間代替了timestamp方便索引的排序

這裏我們完成了對數據接收的端口進行了修改,現在用8871進行數據接受了

patterns_dir => ["/etc/logstash/patterns"] 中定義了我們自己的正則匹配規則,文件內容如下:

DAYTIME \d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{1,2}.\d{1,4}

LOGEVL [a-zA-Z]{4,5}

THREAD \[http-nio-\d{4}-exec-\d{1,3}\]|\[pool-\d{1,2}-thread-\d{1,5}\]

如果對kibana端口有要求的話,還可以進行關修改:

vim /opt/kibana/config/kibana.yml

這裏我修改爲:8872

# Kibana is served by a back end server. This setting specifies the port to use.

server.port: 8872

 

4.將自定義完成後的鏡像發送到我們自己的鏡像倉庫中:

docker ps | grep elk # 查看正在運行的 docker 的 container id docker commit container id xxxxxxx/log_collection:v1 # 生成一個新的 image docker push xxxxxxx/log_collection:v1 # 將 image push 到 docker 倉庫

 

5.將鏡像部署到線上,這裏各個公司的平臺不同,需要根據自己的平臺來寫腳本了.不在描述

   部署的物理機需要執行如下命令:

   echo "vm.max_map_count=262144" > /etc/sysctl.conf

 sysctl -p

6.配置相關項目,使用filebeat將日誌.在打docker時加入如下內容:

 

RUN tar xzvf filebeat-6.7.1-linux-x86_64.tar.gz ##這裏自己下載filebeat加入到docker中

 

RUN echo 'filebeat.inputs:' > /nerv.app/filebeat.yml

RUN echo '- type: log' >> /nerv.app/filebeat.yml

RUN echo ' enabled: true' >> /nerv.app/filebeat.yml

RUN echo ' paths:' >> /nerv.app/filebeat.yml

RUN echo ' - /home/servlets/logs/${ONEBOX}/${ONEBOX}.log' >> /nerv.app/filebeat.yml

RUN echo ' tags: [\"${ONEBOX}\"]' >> /nerv.app/filebeat.yml

RUN echo 'output.logstash:' >> /nerv.app/filebeat.yml

RUN echo ' hosts: [\"部署elk的機器:8871\"]' >> /nerv.app/filebeat.yml

 

RUN echo '#!/bin/bash' > /nerv.app/start.sh

RUN echo '/filebeat-6.7.1-linux-x86_64/filebeat -e -c /nerv.app/filebeat.yml -d \"sendinglog\" 1> /dev/null &' >> /nerv.app/start.sh

RUN echo '\$@ |tee /home/servlets/logs/${ONEBOX}/${ONEBOX}.log' >> /nerv.app/start.sh

RUN chmod u+x /nerv.app/start.sh

這裏其實主要是加入了filebeat服務和寫了一個filebeat的啓動配置,具體配置信息可以網上找找.然後寫了一個啓動filebeat的啓動腳本

 

7.部署服務發送數據到elk中.這步和你原來部署服務沒有區別,只是在執行腳本前面加入 /nerv.app/start.sh 用來啓動filebeat服務即可

 

8.效果展示:

 

9.定期索引刪除:考慮磁盤使用.我們寫個腳本定期刪除索引,釋放磁盤空間.內容如下

 

delete_index=`date -d '10 days ago' +%Y.%m.%d`

echo $delete_index

index_data={\"indices\":[\"log_collection_$delete_index\"]}

echo $index_data

curl 'http://elk機器名:8872/api/index_management/indices/delete' -H 'Content-Type: application/json;charset=utf-8' -H 'kbn-version: 6.6.0' --data $index_data

 

我這裏是只保存10天的日誌內容.到這裏基本大的流程結束.後面都是日誌格式的微調了.

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章