环境: 189.118----->elk01 安装es kibana 189.119----->elk02 安装 docker filebeat filebeat 安装参考前面文档 ++++++++++ # Docker的安装 ## yum源准备 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo yum makecache fast ## 安装依赖包 yum install -y yum-utils device-mapper-persistent-data lvm2 yum list docker-ce.x86_64 --showduplicates |sort -r ## 安装docker-ce yum -y install docker-ce ## 启动Docker服务 systemctl daemon-reload systemctl restart docker docker version docker info 配置镜像加速器 mkdir -p /etc/docker cat > /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://uoggbpok.mirror.aliyuncs.com"] } EOF systemctl daemon-reload systemctl restart docker +++++++++ docker pull nginx 运行nginx 镜像: docker run --name nginx -p 80:80 -d nginx查看容器docker ps
浏览器访问,模拟生成nginx 日志
查看容器日志: docker logs -f nginx
怎么读取到这个日志啦?必须要知道这个日志在什么地方 cd /var/lib/docker/containers
![]()
![]()
这里看到的内容和 docker logs -f nginx 看到的内容是一样的。 查看docker 容器的完整ID docker ps --no-trunc
++++++++++ 修改filebeat的配置文件: vim /etc/filebeat/filebeat.yml 添加如下内容: ### filebeat.inputs: 下面 - type: docker containers.ids: - 'a4ab7a9370d04641de5eac385ca7b37a0b27c2f62f7d6c2d88e9e2ca72985473'
### output.elasticsearch: 下面添加如下内容 - index: "docker-%{[beat.version]}-%{+yyyy.MM}"
保存,退出,重启filebeat systemctl restart filebeat ES 中查看数据:
登录Kibana ,创建索引数据
![]()
![]()
![]()
![]()
![]()
![]()
++++++++++ 根据上面,你会发现,错误的日志和正确的日志都在一起。
stream: "stdout" ##正常 stream: "stdout" ##错误 +++++++ 将错误日志和正确日志分离,写入到不同的索引 重新修改filebeat 配置文件 vim /etcf/filebeat/filebeat.yml 只需要修改 output.elasticsearch: 下面的内容 - index: "docker-access-%{[beat.version]}-%{+yyyy.MM}" when.contains: stream: "stdout" - index: "docker-error-%{[beat.version]}-%{+yyyy.MM}" when.contains: stream: "stderr"
保存,退出。 删除ES里面,刚才创建的索引,和清空 Kibana 里面的索引数据 重启filebeat systemctl restart filebeat 重启的时候,这里要稍等一下,才会在ES生成两个索引 或者直接 systemctl stop filebeat 再systemctl start filebeat
在浏览中访问http://192.168.189.119,正常访问,再加上一些错误访问,模拟nginx 日志。 也可在其他虚拟机里面,crul http://192.168.189.119 登录Kibana ,创建新的索引数据。
![]()
++++++++++++ 如果有多个容器,怎么收集日志? 假如我们有多个docker镜像或者重新提交了新镜像,那么直接指定ID的就不是太方便了。 我们从当前的容器提交一个新的镜像并且运行起来 docker commit nginx nginx:v2 docker images
docker run --name nginxv2 -p 8080:80 -d nginx:v2
这时,修改filebeat的配置文件: vim /etc/filebeat/filebeat.yml
这里可以不用加 paths: 这一项,因为我们这里直接写的是 containers.ids: filbeat 可以自动找到docker 容器日志位置,也可以加上。 如果加上的话: ############### docker ######## - type: docker containers: path: "/var/lib/docker/containers" ids: - '*' 这时就不需要清除ES里面的索引了,因为是新收集容器的日志,也是写在原来的两个索引里面。 重启filebeat 在浏览中访问http://192.168.189.119:8080,正常访问,再加上一些错误访问,模拟nginx 日志。 也可在其他虚拟机里面,crul http://192.168.189.119:8080 刷新kibana,查看数据。
![]()
以上还有两个问题: 1、两个容器的日志都存储在一个索引里面,access日志,不能正常区分,需要借助容器ID,不方便。 2、如何区分不同服务的不同容器的日志