一台docker服务器,启了两个nginx 容器(erp,crm),要求ES收集它们的access和error日志,分别存储在不同的索引里。 环境: 189.118----->elk01 安装es kibana 189.120----->elk02 安装 docker filebeat filebeat 安装参考前面文档 ++++++++++ 安装docker 189.120 上面操作: # 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 [root@elk03 ~]# docker run --name nginx -p 80:80 -d nginx 5bb848d51e64cd858cb0e8c16d8d79777022a2a6f4f051e0105edc74e468f2a1 ++++++++++++ 重新提交生成一个新的nginx镜像 docker commit nginx nginx:v2 docker images启动新的nginx 镜像: docker run --name nginxv2 -p 8080:80 -d nginx:v2 [root@elk03 ~]# docker run --name nginxv2 -p 8080:80 -d nginx:v2 92dcb399119ca58062f4cb8f8d313fab757c3bc407557bb520f6d3628d963b5a
![]()
浏览器或者在其他虚拟机上面访问,两个容器的nginx ,模拟一些正常访问和错误访问日志。 ++++++++++++ 多容器日志收集处理: 其实收集的日志本质来说还是文件,而这个日志是以容器-json.log命名存放在默认目录下的json格式的文件: 但是每个容器的ID都不一样,为了区分运行不同服务的容器,可以使用docker-compose通过给容器添加labels标签来作为区分,然后filbeat把容器日志当作普通的json格式来解析并传输到es 操作步骤: 1.安装docker-compose yum install -y python2-pip 2.这里使用pip安装,默认源为国外,可以使用国内加速,相关网站 https://mirrors.tuna.tsinghua.edu.cn/help/pypi/ pip加速操作命令 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pip -U 设置国内源 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple pip install six --user -U pip install 'more-itertools<=5.0.0' 3.继续安装docker-compose pip install -U docker-compose==1.23.2 4.检查 docker-compose version
++++++++ 编写docker-compose文件 cd /root vi docker-compose.yml version: '3' services: crm: image: nginx:v2 # 设置labels labels: service: crm # logging设置增加labels.service logging: options: labels: "service" ports: - "8080:80" erp: image: nginx:latest # 设置labels labels: service: erp # logging设置增加labels.service logging: options: labels: "service" ports: - "80:80"
删除原来启动的两个nginx 镜像,因为有端口冲突。 docker container rm -f `docker ps -aq` 运行docker-compose.yml cd /root/ && docker-compose -f docker-compose.yml up
启动完成,因为这是前台启动,所以这个界面一直会在这里,不用去管,重新开一个会话窗口,进行操作。
检查日志是否增加了lable标签
![]()
![]()
将日志复制一条出来,在线json格式化,打开https://www.sojson.com/
修改filebeat 的配置文件: vim /etc/filebeat/filebeat.yml filebeat.inputs: - type: log paths: - /var/lib/docker/containers/*/*-json.log json.keys_under_root: true json.overwrite_keys: true ########## output output.elasticsearch: hosts: ["192.168.189.118:9200"] indices: - index: "docker-erp-access-%{[beat.version]}-%{+yyyy.MM}" when.contains: attrs.service: "erp" stream: "stdout" - index: "docker-erp-error-%{[beat.version]}-%{+yyyy.MM}" when.contains: attrs.service: "erp" stream: "stderr" - index: "docker-crm-access-%{[beat.version]}-%{+yyyy.MM}" when.contains: attrs.service: "crm" stream: "stdout" - index: "docker-crm-error-%{[beat.version]}-%{+yyyy.MM}" when.contains: attrs.service: "crm" stream: "stderr" setup.template.name: "docker" setup.template.parttern: "docker-*" setup.template.enabled: false setup.template.overwrite: true
保存,退出。重启filebeat systemctl restart filebeat 浏览器或者其他虚拟机访问192.168.189.120 192.168.189.120:8080 模拟一些访问和错误日志数据。
登录kibana 创建索引数据并查看
![]()
![]()
![]()
![]()
![]()