elk筆記2--使用docker啟一套elk執行個體
- 1 需求簡介
- 2 啟動步驟
-
- 2.1 下載下傳docker鏡像
- 2.2 啟動docker執行個體
- 2.3 多功能elk執行個體管理腳本
- 2.4 測試結果
- 3 說明
1 需求簡介
1)使用 docker 啟動一個elasticsearch 執行個體
2)使用 docker 啟動一個kibana 執行個體
3)使用 docker 啟動一個logstash 執行個體
4)使用 logstash 收集dmsg和syslog日志
2 啟動步驟
2.1 下載下傳docker鏡像
筆者此處直接從dockerhub拉取, 也可以按照官網的制定路徑拉鏡像(使用官方路徑可能下載下傳速度較慢)
- docker pull elasticsearch:7.6.1
- docker pull kibana:7.6.1
- docker pull logstash:7.6.1
2.2 啟動docker執行個體
- 啟動elasticsearch
此處将/usr/share/elasticsearch/config 拷貝到本地目錄,以便于更改配置,此處可以去掉-v參數docker run -d --name=elasticsearch_7.6.1 -p 9203:9200 -p 9303:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms512m -Xmx512m" \ -v /home/xg/soft/bigdata/elk7.6.1/docker/es_config:/usr/share/elasticsearch/config \ elasticsearch:7.6.1
- 啟動kibana
此處将/usr/share/kibana/config 拷貝到本地目錄,以便于更改配置,此處可以去掉-v參數docker run -d --name=kibana_7.6.1 --link elasticsearch_7.6.1:elasticsearch -p 5603:5601 \ -v /home/xg/soft/bigdata/elk7.6.1/docker/kibana_config:/usr/share/kibana/config \ kibana:7.6.1
- 啟動logstash
docker run -d --name=logstash_7.6.1 --link elasticsearch_7.6.1:elasticsearch \ -v /home/xg/soft/bigdata/elk7.6.1/docker/logstash_config:/usr/share/logstash/config \ -v /home/xg/soft/bigdata/elk7.6.1/docker/pipline:/usr/share/logstash/pipeline \ -v /home/xg/soft/bigdata/log/testlog:/var/log/testlog \ -v /var/log/syslog:/var/log/syslog_host \ -v /var/log/dmesg:/var/log/dmesg_host \ logstash:7.6.1
此處有多個目錄映射, 其中syslog,dmesg主要為了logstash能正常讀取宿主上的日志,pipline目錄檔案主要存放input、output 和 filter規則, logstash_config和testlog可以根據需要去掉。
注意: logstash對應的pipeline不能為空,若為空則logstsh會自動退出。
logstash的pipeline configuration 在pipeline目錄下,以下為筆者寫的一個pipeline配置, default.conf 中包含syslog,dmesg,es_error(此處沒有映射過來,可以删掉):
最簡單的方式,不需要挂載資料卷(此處以為7.2.1為例):input{ file{ path => "/var/log/syslog_host" type => "syslog" start_position => "beginning" } file{ path => "/var/log/dmesg_host" type => "dmesg" start_position => "beginning" } file{ path => "/home/xg/soft/bigdata/log/es6.8.8/es6.8.log" type => "es_error" start_position => "beginning" codec => multiline { # Grok pattern names are valid! :) pattern => "^\[" negate => true what => "previous" } } } filter{ } output{ if [type] == "syslog" { elasticsearch { hosts => ["elasticsearch:9200"] index => "syslog-%{+YYYY.MM.dd}" } } if [type] == "dmesg" { elasticsearch { hosts => ["elasticsearch:9200"] index => "dmesg-%{+YYYY.MM.dd}" } } if [type] == "es_error" { elasticsearch { hosts => ["elasticsearch:9200"] index => "es_error-%{+YYYY.MM.dd}" } } }
docker run --name=es7.2.1 -d -p 9204:9200 -p 9304:9300 --name es7.2.1 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.2.1 docker run --name=kibana7.2.1 -d --link es7.2.1:elasticsearch -p 5604:5601 docker.elastic.co/kibana/kibana:7.2.1
2.3 多功能elk執行個體管理腳本
筆者根據個人使用需要,寫了一個小腳本,以便于統一管理elk執行個體,可以根據需要修改。
#!/bin/bash
help()
{
cat <<_EOF
Help function:
bash updown_docker_elk.sh help|start|stop|restart|new|es|kibana|logstash|rm
=> start|stop|restart es|kibana|logstash|all
_EOF
}
elk_rm()
{
docker stop elasticsearch_7.6.1
docker rm elasticsearch_7.6.1
docker stop kibana_7.6.1
docker rm kibana_7.6.1
docker stop logstash_7.6.1
docker rm logstash_7.6.1
}
elk_start()
{
case "$1" in
es)
docker start elasticsearch_7.6.1
;;
kibana)
docker start kibana_7.6.1
;;
logstash)
docker start logstash_7.6.1
;;
all)
docker start elasticsearch_7.6.1
sleep 15
docker start kibana_7.6.1
sleep 10
docker start logstash_7.6.1
;;
*)
help
exit 1
;;
esac
}
elk_restart()
{
case "$1" in
es)
docker restart elasticsearch_7.6.1
;;
kibana)
docker restart kibana_7.6.1
;;
logstash)
docker restart logstash_7.6.1
;;
all)
docker restart elasticsearch_7.6.1
sleep 15
docker restart kibana_7.6.1
sleep 10
docker restart logstash_7.6.1
;;
*)
help
exit 1
;;
esac
}
elk_stop()
{
case "$1" in
es)
docker stop elasticsearch_7.6.1
;;
kibana)
docker stop kibana_7.6.1
;;
logstash)
docker stop logstash_7.6.1
;;
all)
docker stop logstash_7.6.1
docker stop kibana_7.6.1
docker stop elasticsearch_7.6.1
;;
*)
help
exit 1
;;
esac
}
elk_new(){
docker stop elasticsearch_7.6.1
docker rm elasticsearch_7.6.1
docker stop kibana_7.6.1
docker rm kibana_7.6.1
docker stop logstash_7.6.1
docker rm logstash_7.6.1
# es
elk_es
# kibana
sleep 15
elk_kibana
# logstash
elk_logstash
}
elk_es()
{
docker run -d --name=elasticsearch_7.6.1 -p 9203:9200 -p 9303:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms512m -Xmx512m" \
-v /home/xg/soft/bigdata/elk7.6.1/docker/es_config:/usr/share/elasticsearch/config \
elasticsearch:7.6.1
}
elk_kibana()
{
docker run -d --name=kibana_7.6.1 --link elasticsearch_7.6.1:elasticsearch -p 5603:5601 \
-v /home/xg/soft/bigdata/elk7.6.1/docker/kibana_config:/usr/share/kibana/config \
kibana:7.6.1
}
elk_logstash()
{
docker run -d --name=logstash_7.6.1 --link elasticsearch_7.6.1:elasticsearch \
-v /home/xg/soft/bigdata/elk7.6.1/docker/logstash_config:/usr/share/logstash/config \
-v /home/xg/soft/bigdata/elk7.6.1/docker/pipline:/usr/share/logstash/pipeline \
-v /home/xg/soft/bigdata/log/testlog:/var/log/testlog \
-v /var/log/syslog:/var/log/syslog_host \
-v /var/log/dmesg:/var/log/dmesg_host \
logstash:7.6.1
}
case "$1" in
help)
help
;;
start)
elk_start $2
;;
restart)
elk_restart $2
;;
stop)
elk_stop $2
;;
new)
elk_new
;;
es)
elk_es
;;
kibana)
elk_kibana
;;
logstash)
elk_logstash
;;
rm)
elk_rm
;;
*)
echo "Unknown command: $1"
help
exit 1
;;
esac
2.4 測試結果
- es 檢視所有index
- kibana 檢視所有logstash上傳的syslog日志
3 說明
-
軟體環境
筆者測試系統為Ubuntu 2004 Desktop
elk 版本為7.6.1
-
參考文檔
installing-elastic-stack