天天看点

elk笔记2--使用docker启一套elk实例1 需求简介2 启动步骤3 说明

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拉取, 也可以按照官网的制定路径拉镜像(使用官方路径可能下载速度较慢)

  1. docker pull elasticsearch:7.6.1
  2. docker pull kibana:7.6.1
  3. docker pull logstash:7.6.1

2.2 启动docker实例

  1. 启动elasticsearch
    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
               
    此处将/usr/share/elasticsearch/config 拷贝到本地目录,以便于更改配置,此处可以去掉-v参数
  2. 启动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
               
    此处将/usr/share/kibana/config 拷贝到本地目录,以便于更改配置,此处可以去掉-v参数
  3. 启动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(此处没有映射过来,可以删掉):

    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}"
    	}
    }
    }
               
    最简单的方式,不需要挂载数据卷(此处以为7.2.1为例):
    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 测试结果

  1. es 查看所有index
    elk笔记2--使用docker启一套elk实例1 需求简介2 启动步骤3 说明
  2. kibana 查看所有logstash上传的syslog日志
    elk笔记2--使用docker启一套elk实例1 需求简介2 启动步骤3 说明

3 说明

  1. 软件环境

    笔者测试系统为Ubuntu 2004 Desktop

    elk 版本为7.6.1

  2. 参考文档

    installing-elastic-stack

继续阅读