Docker下搭建ELK

整理了一下使用Docker来快速搭建一套ELK日志分析系统的方法。

1. 部署elk

github上有人整理了一套使用docker compose来部署elk的配置,可直接下载使用。

git clone https://github.com/deviantony/docker-elk.git

 

当前是基于7.7.1版(docker-elk目录下.env文件中定义,可修改)。

可以调整一下相应的配置,不设置可以直接也可以跳过这一步。

修改docker-compose,设置es密码等,

vim docker-compose.yml

  # 在elasticsearch部分设置环境变量,将jvm堆内存增大到了1g,设置es elastic用户的密码
  environment:
        ES_JAVA_OPTS: "-Xmx1g -Xms1g"
        ELASTIC_PASSWORD: Passw0rd

  # 新增监听端口号8010 udp,不使用udp搜集数据可以不开启
  ports:
        - "8010:8010/udp"
  # 将jvm内存也增大一点
  environment:
        LS_JAVA_OPTS: "-Xmx512m -Xms512m"

  # 在volumes部分增加es数据目录的挂载,对es数据持久化,避免容器销毁数据丢失
  volumes:
      - /mnt/elk/esdata:/usr/share/elasticsearch/data

注意:因为es容器内部是以elasticsearch用户启动进程的,所以在做持久化数据目录挂载的时候,需要将目录权限进行设置,否则会因为没有访问权限而启动失败。elasticsearch的uid是1000,可以建一个uid为1000的用户,然后将目录所有者赋予该用户。

 

修改es配置文件,将xpack从trial改为basic,禁用付费功能(测试环境可以不用修改)

vim elasticsearch/config/elasticsearch.yml

  #xpack.license.self_generated.type: trial
  xpack.license.self_generated.type: basic

 

修改logstash的pipeline配置

## vim logstash/pipeline/logstash.conf
input {
	## 使用redis搜集数据
	redis {
		id => "RedisLog"
		batch_count => 1
		data_type => "list"
		key => "kg:basic:log"
		host => "127.0.0.1"
		port => 6379
		password => "1q2w3e4r"
		db => 6
		threads => "5"
		type => "kglog"
    }
	## 使用UDP收集数据
	udp {
		id => "UdpLog"
        port => 8010
        type => "udplog"
		codec => json
    }
}

## 添加到elasticsearch或者在磁盘中打印,磁盘打印可以方便测试数据是否收集成功,上线后删除即可

output {
	if[type] == "kglog"{
		elasticsearch {
			hosts => "elasticsearch:9200"
			user => "elastic"
			password => "changeme"
			index => "kg-log"
		}
	}
	if[type] == "udplog"{
		elasticsearch {
			hosts => "elasticsearch:9200"
			user => "elastic"
			password => "changeme"
			index => "udp-log"
		}
	}
	file {
		path => "/var/tmp/udp.log"
	}
}

 

配置调整后,使用 docker-compose up -d 即可启动es,logstash,kibana三个容器。第一次启动需要下载所有镜像,会比较慢,启动完后,访问 elk所在服务器IP:5601即可进入kibana页面。

2. 调测

使用nc(netcat)测试udp协议与端口连通性,来判断数据是否搜集成功

$ echo "nc-test" | nc -u 106.14.145.99 8010 
# ip换成自己的服务器地址即可,请注意务必在服务器安全组访问规则中开启8010 UDP

# 查看logstash中的数据收集情况
$ docker-compose exec logstash bash
$ tail -f /var/tmp/udp.log
# 没有此文件或没有日志则没有收集成功,排查端口和安全规则

3. 使用Kibana

检查索引是否启用

 

添加Kibana索引

然后就可以愉快地玩耍了

3. 总结


本文整理了基于Docker来搭建ELK框架的整个过程,供参考。

 


版权声明:本文为Thinking771470736原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。