ELK_08_根据服务类型收集多个容器日志

一台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 创建索引数据并查看