ELKB日志流:Docker版安装部署

0、引言

学习记录 :Docker搭建 Elasticsearch + Logstash + Kibana + Filebeat
ELKB :7.7.0
服务器 : Centos 7.7.1908

本次主要介绍简单安装和收集配置,之后会整理从Redis,Mysql收集数据的思路及实测可用的配置。
每一项安装时我碰到的问题,我都会总结在最下面了。>>问题整理<<

1、流程

日志流规划
Filebeat(收集日志)    >>    Logstash(日志处理)  >>   Elasticsearch(日志存储)  >>    Kibana(查询分析)

2、安装

拉取镜像就不啰嗦了,直接docker pull xxx;
在这里插入图片描述

2.1 创建bridge网络

# 创建网络,设置子网,网关
docker network create --driver bridge --subnet=172.28.0.0/16 --gateway=172.28.0.1 elkb 
# 查看网络列表,可以看到刚刚创建的 名称为elkb的网络
docker network ls

NETWORK ID          NAME                DRIVER              SCOPE
43d968dd5106        bridge              bridge              local
ed78d4b05185        elkb                bridge              local
27d34658c92c        host                host                local
8aabc48398e4        none                null                local

2.2 创建Elasticsearch容器

  • 容器创建命令
    指定容器网络,指定网络ip,绑定主机端口9200,9300
docker run -d --name elasticsearch --net elkb --ip 172.28.0.2 \
-p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" \
docker.elastic.co/elasticsearch/elasticsearch:7.7.0
  • 结果展示,浏览器直接访问 ip:9200
    在这里插入图片描述

2.3 创建Kibana容器

  • 容器创建命令
    指定容器网络,指定网络ip,绑定主机端口5601
docker run -d --name kibana --net elkb --ip 172.28.0.3 \
-p 5601:5601  \
docker.elastic.co/kibana/kibana:7.7.0
  • 结果展示,直接浏览器访问 ip:5601
    在这里插入图片描述

2.3 创建Logstash容器

  • 容器创建命令
    指定容器网络,指定网络ip,绑定主机端口5044
    这个容器需要绑定目录,到服务器目录,因为需要修改配置文件
docker run -it -d  --name logstash \
-p 5044:5044 --net elkb --ip 172.28.0.4  \
-v /mnt-docker/logstash/logstash.yml:/usr/share/logstash/config/logstash.yml \
-v /mnt-docker/logstash/conf.d/:/usr/share/logstash/conf.d/ \
docker.elastic.co/logstash/logstash:7.7.0
  • 结果展示 : 因为logstash没有界面,而且启动很慢,所以需要等一下,查看容器的状态。

在这里插入图片描述

  • 编辑配置文件
    配置文件编辑完成,重启容器 docker restart logstash(名称/id)
# ===============logstash.yml logstash配置主文件=====
vim /mnt-docker/logstash/logstash.yml
# 写入下面的内容
# 加载目录下的所有以.conf结尾的规则文件
path.config: /usr/share/logstash/conf.d/*.conf  
path.logs: /var/log/logstash

# ===============test.conf  第一个规则文件============
vim /mnt-docker/logstash/conf.d/test.conf
# 写入下面的内容
# 从beats接收数据,并输出到elasticsearch
input {
    beats {
    	port => 5044
    	codec => "json"
	}
}
output {
  elasticsearch { 
  	  hosts => ["elasticsearch:9200"]
  	  index => "test-%{+YYYY.MM.dd}"
  }
  stdout { codec => rubydebug }
}

2.4 创建Filebeat容器

  • 容器创建命令
    指定容器网络,指定网络ip,
    这个容器需要绑定目录,到服务器目录,因为需要修改配置文件
    还多绑定了一个nginx目录方便收集日志测试
docker run --name filebeat --user=root -d --net elkb --ip 172.28.0.5  \
-v /var/log/nginx/:/var/log/nginx \
-v /mnt-docker/filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml \
-v /var/lib/docker/containers:/var/lib/docker/containers \
-v /var/run/docker.sock:/var/run/docker.sock \
docker.elastic.co/beats/filebeat:7.7.0
  • 编辑配置文件
    配置文件编辑完成,重启容器 docker restart filebeat(名称/id)

# ===============filebeat.yml filebeat收集日志============
vim /mnt-docker/filebeat/filebeat.yml 
# 写入下面的内容 收集nginx运行日志,并写入logstash 172.18.0.4对应容器的ip
filebeat.inputs:
- type: log
  enabled: true
  paths:
  - /var/log/nginx/access.log

output.logstash:
  hosts: ['172.18.0.4:5044']

好了,基础安装已经结束。

3、流程测试

软件已经安装好了,正常到这里,有访问日志,我们的Elasticsearch就已经收到数据了,可以通过Kibana创建Index patterns去分析检索了。

3.1 问题排查:docker logs

通过docker logs 命令查看容器启动和运行的输出日志。
使用logstash将收集的日志输出到控制台,通过logs 我们也可以查看数据格式。

# 查看某个容器的log输出  xxx替换成对应的 容器名称/容器id
docker logs -f -t xxx --tail 100
# 查看elasticsearch输出
docker logs -f -t elasticsearch --tail 100

通过logs,大多数运行中的问题都可以发现,我遇到的问题回忆整理下:

  • 端口开放问题(我用的是阿里云的服务器,需要在防火墙和ECS控制台都操作下)
  • 对应docker服务,ip写入错误(filebeat output配置,写错了logstash的ip)

4、问题整理

4.1 内存问题

因为我使用的阿里云2G内存的服务器,对。。。嗯。。。。

Exception in thread "main" java.lang.RuntimeException: starting java failed with [1]
output:
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 1073741824 bytes for committing reserved memory.
# An error report file with more information is saved as:
# logs/hs_err_pid132.log
error:
OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000c0000000, 1073741824, 0) failed; error='Not enough space' (errno=12)
	at org.elasticsearch.tools.launchers.JvmErgonomics.flagsFinal(JvmErgonomics.java:126)
	at org.elasticsearch.tools.launchers.JvmErgonomics.finalJvmOptions(JvmErgonomics.java:88)
	at org.elasticsearch.tools.launchers.JvmErgonomics.choose(JvmErgonomics.java:59)
	at org.elasticsearch.tools.launchers.JvmOptionsParser.jvmOptions(JvmOptionsParser.java:139)
	at org.elasticsearch.tools.launchers.JvmOptionsParser.main(JvmOptionsParser.java:95)

解决方法

# 搜索找到下面的文件,修改配置信息
find /var/lib/docker/overlay2/ -name jvm.options
# 结果
/var/lib/docker/overlay2/ee28c4597cf0691e769deb1b1e3d2a6e8192ec2127ee352eae9e838b875bbc02/diff/usr/share/logstash/config/jvm.options
/var/lib/docker/overlay2/91c5c75d5317968f899078644cf47bb98a8f2ff6428c4a57be4d40b8b9917abe/diff/usr/share/logstash/config/jvm.options
/var/lib/docker/overlay2/85e6a8ce14bbb386c13b82963c2fdb5527fa1227fbbe8e9854f09be9b4f848a0/diff/usr/share/elasticsearch/config/jvm.options

# 怎么操作,改什么
# vim 对应的路径
vim /var/lib/docker/overlay2/ee28c4597cf0691e769deb1b1e3d2a6e8192ec2127ee352eae9e838b875bbc02/diff/usr/share/logstash/config/jvm.options
# 找到到配置
-Xms2g  
-Xmx2g
# 修改为 512m 或者更小的 256m
-Xms512m  
-Xmx512m

4.2 容器冲突问题

报错如下


/usr/bin/docker-current: Error response from daemon: driver failed programming external connectivity on endpoint

问题原因
实际上并没有冲突的容器存在。
Docker服务启动时定义的自定义链Docker由于某种原因被清掉。
重启Docker服务即可重新生成自定义链Docker。

解决方法

# 相关命令
systemctl restart  docker			重启docker服务            
systemctl stop docker				关闭docker  
systemctl start docker				启动docker     
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值