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