• ELK学习实验018:filebeat收集docker日志


    Filebeat收集Docker日志

    1 安装docker

    [root@node4 ~]# yum install -y yum-utils device-mapper-persistent-data lvm2

    [root@node4 ~]# yum update

    [root@node4 ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

    [root@node4 ~]# yum makecache fast

    [root@node4 ~]# yum -y install docker-ce

    [root@node4 ~]# systemctl restart docker

    [root@node4 ~]# systemctl enable docker

    2 运行一个nginx容器

    [root@node4 ~]# docker run --name nginx -p 8081:80 -d nginx

    Unable to find image 'nginx:latest' locally
    latest: Pulling from library/nginx
    8ec398bc0356: Pull complete 
    dfb2a46f8c2c: Pull complete 
    b65031b6a2a5: Pull complete 
    Digest: sha256:8aa7f6a9585d908a63e5e418dc5d14ae7467d2e36e1ab4f0d8f9d059a3d071ce
    Status: Downloaded newer image for nginx:latest
    9c29964182697e55e7ca0fd793f1e243a9e404c84868bee814afdb700760ba5a

    [root@node4 ~]# docker ps -a

    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
    9c2996418269        nginx               "nginx -g 'daemon of…"   52 seconds ago      Up 51 seconds       0.0.0.0:8081->80/tcp   nginx

    访问http://192.168.132.134:8081/

    [root@node4 ~]# docker exec -it 9c2996418269 /bin/bash

    3 查看docker日志

    [root@node4 ~]# docker logs -f nginx

    192.168.132.1 - - [19/Jan/2020:11:11:55 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36" "-"
    2020/01/19 11:11:55 [error] 6#6: *1 open() "/usr/share/nginx/html/favicon.ico" failed (2: No such file or directory), client: 192.168.132.1, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "192.168.132.134:8081", referrer: "http://192.168.132.134:8081/"
    192.168.132.1 - - [19/Jan/2020:11:11:55 +0000] "GET /favicon.ico HTTP/1.1" 404 555 "http://192.168.132.134:8081/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36" "-"

    本地查看

    [root@node4 ~]# tail -f /var/lib/docker/containers/9c29964182697e55e7ca0fd793f1e243a9e404c84868bee814afdb700760ba5a/9c29964182697e55e7ca0fd793f1e243a9e404c84868bee814afdb700760ba5a-json.log 

    是json格式日志

    4 filebeat收集

    docker的正确日志

    错误日志

    错误日志再stream显示的stdeer,正确的是stdout,根据这个规则配置filebeat

    5 配置filebeat

    filebeat.inputs:
    #####################################################
    ## Nginx log
    #####################################################
    - type: log
      enabled: true
      paths:
        - /usr/local/nginx/logs/access.log
      json.key_under_root: true
      json.overwrite_keys: true
      tags: ["access"]
    
    - type: log
      enabled: true
      paths:
        - /usr/local/nginx/logs/error.log
      tags: ["error"]
    
    
    #####################################################
    ## tomcat  log
    #####################################################
    - type: log
      enabled: true
      paths:
        - /var/log/tomcat/localhost_access_log.*.txt
      json.key_under_root: true
      json.overwrite_keys: true
      tags: ["tomcat"]
    
    
    #####################################################
    ## java  log
    #####################################################
    - type: log
      enabled: true
      paths:
        - /usr/local/elasticsearch/logs/my-elktest-cluster.log 
      tags: ["es-java"]
      multiline.pattern: '^['
      multiline.negate: true
      multiline.match: "after"
    
    
    #####################################################
    ## docker  log
    #####################################################
    - type: docker
      containers.ids:
        - '9c29964182697e55e7ca0fd793f1e243a9e404c84868bee814afdb700760ba5a'
      json.key_under_root: true
      json.overwrite_keys: true
      tags: ["docker"]
    
    
    #####################################################
    ## Output
    #####################################################
    setup.kibana:
      host: "192.168.132.131:5601"
    output.elasticsearch:
      hosts: ["192.168.132.131:9200","192.168.132.132:9200","192.168.132.133:9200"]
      #index: "nginx-%{[agent.version]}-%{+yyyy.MM.dd}"
      indices:
        - index: "access-%{[agent.version]}-%{+yyyy.MM.dd}"
          when.contains:
            tags: "access"
        - index: "error-%{[agent.version]}-%{+yyyy.MM.dd}"
          when.contains:
            tags: "error"
        - index: "tomcat-access-%{[agent.version]}-%{+yyyy.MM.dd}"
          when.contains:
            tags: "tomcat"
        - index: "javaes-access-%{[agent.version]}-%{+yyyy.MM.dd}"
          when.contains:
            tags: "es-java"
        - index: "docker-access-%{[agent.version]}-%{+yyyy.MM.dd}"
          when.contains:
             tags: "docker"
             stream: "stdout"
        - index: "docker-error-%{[agent.version]}-%{+yyyy.MM.dd}"
          when.contains:
             tags: "docker"
             stream: "stderr"
    
    setup.template.name: "nginx"
    setup.template.pattern: "nginx-*"
    setup.template.overwrite: true
    setup.template.enabled: true
    setup.ilm.enabled: false

    查看索引

    kibana查看

    错误日志

    源日志数据

    @timestamp    Jan 19, 2020 @ 19:39:11.016
        t_id    wXuZvW8BYiPduFlChbrm
        t_index    docker-error-7.4.2-2020.01.19
        #_score     - 
        t_type    _doc
        tagent.ephemeral_id    66a6dffb-9e49-4914-a6a0-ff1a073eea6a
        tagent.hostname    node4
        tagent.id    bb3818f9-66e2-4eb2-8f0c-3f35b543e025
        tagent.type    filebeat
        tagent.version    7.4.2
        tecs.version    1.1.0
        thost.name    node4
        tinput.type    docker
        tlog.file.path    /var/lib/docker/containers/9c29964182697e55e7ca0fd793f1e243a9e404c84868bee814afdb700760ba5a/9c29964182697e55e7ca0fd793f1e243a9e404c84868bee814afdb700760ba5a-json.log
        #log.offset    7,381
        tmessage    2020/01/19 11:39:11 [error] 6#6: *9 open() "/usr/share/nginx/html/tcp" failed (2: No such file or directory), client: 192.168.132.1, server: localhost, request: "GET /tcp HTTP/1.1", host: "192.168.132.134:8081"
        tstream    stderr
        ttags    docker

    正确日志

    原日志数据

    @timestamp    Jan 19, 2020 @ 19:41:15.401
        t_id    hlGbvW8BOF7DoSFdbG5D
        t_index    docker-access-7.4.2-2020.01.19
        #_score     - 
        t_type    _doc
        tagent.ephemeral_id    66a6dffb-9e49-4914-a6a0-ff1a073eea6a
        tagent.hostname    node4
        tagent.id    bb3818f9-66e2-4eb2-8f0c-3f35b543e025
        tagent.type    filebeat
        tagent.version    7.4.2
        tecs.version    1.1.0
        thost.name    node4
        tinput.type    docker
        tlog.file.path    /var/lib/docker/containers/9c29964182697e55e7ca0fd793f1e243a9e404c84868bee814afdb700760ba5a/9c29964182697e55e7ca0fd793f1e243a9e404c84868bee814afdb700760ba5a-json.log
        #log.offset    8,495
        tmessage    192.168.132.1 - - [19/Jan/2020:11:41:15 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36" "-"
        tstream    stdout
        ttags    docker

    6 运行多个容器

    [root@node4 ~]# docker run --name nginx-v2 -p 8082:80 -v /data:/usr/share/nginx/html -d nginx

    [root@node4 ~]# cd /data/

    [root@node4 data]# echo "this is second container" > index.html

    [root@node4 data]# docker ps -a

    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
    7778b091aa01        nginx               "nginx -g 'daemon of…"   30 seconds ago      Up 29 seconds       0.0.0.0:8082->80/tcp   nginx-v2
    9c2996418269        nginx               "nginx -g 'daemon of…"   38 minutes ago      Up 38 minutes       0.0.0.0:8081->80/tcp   nginx

    访问http://192.168.132.134:8082/

    7 配置filebeat收集所有容器

    想要收集所有的dokcer日志修改filebeat

    filebeat.inputs:
    #####################################################
    ## Nginx log
    #####################################################
    - type: log
      enabled: true
      paths:
        - /usr/local/nginx/logs/access.log
      json.key_under_root: true
      json.overwrite_keys: true
      tags: ["access"]
    
    - type: log
      enabled: true
      paths:
        - /usr/local/nginx/logs/error.log
      tags: ["error"]
    
    
    #####################################################
    ## tomcat  log
    #####################################################
    - type: log
      enabled: true
      paths:
        - /var/log/tomcat/localhost_access_log.*.txt
      json.key_under_root: true
      json.overwrite_keys: true
      tags: ["tomcat"]
    
    
    #####################################################
    ## java  log
    #####################################################
    - type: log
      enabled: true
      paths:
        - /usr/local/elasticsearch/logs/my-elktest-cluster.log 
      tags: ["es-java"]
      multiline.pattern: '^['
      multiline.negate: true
      multiline.match: "after"
    
    
    #####################################################
    ## docker  log
    #####################################################
    - type: docker
      containers.ids:
        - '*'
      json.key_under_root: true
      json.overwrite_keys: true
      tags: ["docker"]
    
    
    #####################################################
    ## Output
    #####################################################
    setup.kibana:
      host: "192.168.132.131:5601"
    output.elasticsearch:
      hosts: ["192.168.132.131:9200","192.168.132.132:9200","192.168.132.133:9200"]
      #index: "nginx-%{[agent.version]}-%{+yyyy.MM.dd}"
      indices:
        - index: "access-%{[agent.version]}-%{+yyyy.MM.dd}"
          when.contains:
            tags: "access"
        - index: "error-%{[agent.version]}-%{+yyyy.MM.dd}"
          when.contains:
            tags: "error"
        - index: "tomcat-access-%{[agent.version]}-%{+yyyy.MM.dd}"
          when.contains:
            tags: "tomcat"
        - index: "javaes-access-%{[agent.version]}-%{+yyyy.MM.dd}"
          when.contains:
            tags: "es-java"
        - index: "docker-access-%{[agent.version]}-%{+yyyy.MM.dd}"
          when.contains:
             tags: "docker"
             stream: "stdout"
        - index: "docker-error-%{[agent.version]}-%{+yyyy.MM.dd}"
          when.contains:
             tags: "docker"
             stream: "stderr"
    
    setup.template.name: "nginx"
    setup.template.pattern: "nginx-*"
    setup.template.overwrite: true
    setup.template.enabled: true
    setup.ilm.enabled: false

    随意访问nginx,查看索引

    但是收集到日志以后,所有的容器日志集中在一起,无法分辨,则为每一个容器添加一个标签

    使用docker-compose为容器添加新的标签

    8 安装docker-compose

    参考https://www.cnblogs.com/zyxnhr/p/12158816.html

    [root@node4 src]# curl -L https://github.com/docker/compose/releases/download/1.25.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

     % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
    100   617    0   617    0     0    810      0 --:--:-- --:--:-- --:--:--   809
    100 16.2M  100 16.2M    0     0   529k      0  0:00:31  0:00:31 --:--:--  551k

    [root@node4 src]# chmod +x /usr/local/bin/docker-compose

    [root@node4 src]# docker-compose --version

    docker-compose version 1.25.0, build 0a186604

    [root@node4 ~]# vim docker-compose.yaml

    version: '3'
    services:
      nginx:
        image: nginx
        #设置labels
        labels:
          service: nginx
        #logging设置增加labels.service
        logging:
          options:
            labels: "service"
        ports:
          - "8083:80"
      httpd:
        image: httpd:2.4
        #设置labels
        labels:
          service: httpd
        #logging设置增加labels.service
        logging:
          options:
            labels: "service"
        ports:
          - "8084:80"
        

    10 使用docker-compose发布容器

    [root@node4 ~]# docker-compose up

    Creating network "root_default" with the default driver
    Pulling httpd (httpd:2.4)...
    2.4: Pulling from library/httpd
    8ec398bc0356: Already exists
    354e6904d655: Pull complete
    27298e4c749a: Pull complete
    10e27104ba69: Pull complete
    36412f6b2f6e: Pull complete
    Digest: sha256:769018135ba22d3a7a2b91cb89b8de711562cdf51ad6621b2b9b13e95f3798de
    Status: Downloaded newer image for httpd:2.4
    Creating root_httpd_1 ... done
    Creating root_nginx_1 ... done

    [root@node4 ~]# docker ps -a

    CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                  NAMES
    0c68d79a9a73        nginx               "nginx -g 'daemon of…"   About a minute ago   Up About a minute   0.0.0.0:8083->80/tcp   root_nginx_1
    302d59b77fd9        httpd:2.4           "httpd-foreground"       About a minute ago   Up About a minute   0.0.0.0:8084->80/tcp   root_httpd_1
    7778b091aa01        nginx               "nginx -g 'daemon of…"   29 minutes ago       Up 29 minutes       0.0.0.0:8082->80/tcp   nginx-v2
    9c2996418269        nginx               "nginx -g 'daemon of…"   About an hour ago    Up About an hour    0.0.0.0:8081->80/tcp   nginx

    查看索引日志

    另一个也有标记

     kinban查看

    @timestamp    Jan 19, 2020 @ 20:20:49.919
        t_id    nFG_vW8BOF7DoSFdtm7C
        t_index    docker-access-7.4.2-2020.01.19
        #_score     - 
        t_type    _doc
        tagent.ephemeral_id    22c670e2-26fe-459f-8369-36cf36e6aa2f
        tagent.hostname    node4
        tagent.id    bb3818f9-66e2-4eb2-8f0c-3f35b543e025
        tagent.type    filebeat
        tagent.version    7.4.2
        ?docker.attrs.service    httpd     #docker标记
        tecs.version    1.1.0
        thost.name    node4
        tinput.type    docker
        tlog.file.path    /var/lib/docker/containers/302d59b77fd90a5fa664e5e44ff4c774fa66b0850d82a12f8d156463eba3a5dd/302d59b77fd90a5fa664e5e44ff4c774fa66b0850d82a12f8d156463eba3a5dd-json.log
        #log.offset    2,718
        tmessage    192.168.132.1 - - [19/Jan/2020:12:20:49 +0000] "GET /tcp HTTP/1.1" 404 196
        tstream    stdout
        ttags    docker

    11 根据容器类别自定义

    filebeat.inputs:
    #####################################################
    ## Nginx log
    #####################################################
    - type: log
      enabled: true
      paths:
        - /usr/local/nginx/logs/access.log
      json.key_under_root: true
      json.overwrite_keys: true
      tags: ["access"]
    
    - type: log
      enabled: true
      paths:
        - /usr/local/nginx/logs/error.log
      tags: ["error"]
    
    
    #####################################################
    ## tomcat  log
    #####################################################
    - type: log
      enabled: true
      paths:
        - /var/log/tomcat/localhost_access_log.*.txt
      json.key_under_root: true
      json.overwrite_keys: true
      tags: ["tomcat"]
    
    
    #####################################################
    ## java  log
    #####################################################
    - type: log
      enabled: true
      paths:
        - /usr/local/elasticsearch/logs/my-elktest-cluster.log 
      tags: ["es-java"]
      multiline.pattern: '^['
      multiline.negate: true
      multiline.match: "after"
    
    
    #####################################################
    ## docker  log
    #####################################################
    - type: docker
      containers.ids:
        - '*'
      json.key_under_root: true
      json.overwrite_keys: true
      tags: ["docker"]
    
    
    #####################################################
    ## Output
    #####################################################
    setup.kibana:
      host: "192.168.132.131:5601"
    output.elasticsearch:
      hosts: ["192.168.132.131:9200","192.168.132.132:9200","192.168.132.133:9200"]
      #index: "nginx-%{[agent.version]}-%{+yyyy.MM.dd}"
      indices:
        - index: "access-%{[agent.version]}-%{+yyyy.MM.dd}"
          when.contains:
            tags: "access"
        - index: "error-%{[agent.version]}-%{+yyyy.MM.dd}"
          when.contains:
            tags: "error"
        - index: "tomcat-access-%{[agent.version]}-%{+yyyy.MM.dd}"
          when.contains:
            tags: "tomcat"
        - index: "javaes-access-%{[agent.version]}-%{+yyyy.MM.dd}"
          when.contains:
            tags: "es-java"
        - index: "docker-nginx-%{[agent.version]}-%{+yyyy.MM.dd}"
          when.contains:
             tags: "docker"
             docker.attrs.service: "nginx"
        - index: "docker-httpd-%{[agent.version]}-%{+yyyy.MM.dd}"
          when.contains:
             tags: "docker"
             docker.attrs.service: "httpd"
    
    setup.template.name: "nginx"
    setup.template.pattern: "nginx-*"
    setup.template.overwrite: true
    setup.template.enabled: true
    setup.ilm.enabled: false

    访问后查看索引

    12 修改filebeat再细致划分

    filebeat.inputs:
    #####################################################
    ## Nginx log
    #####################################################
    - type: log
      enabled: true
      paths:
        - /usr/local/nginx/logs/access.log
      json.key_under_root: true
      json.overwrite_keys: true
      tags: ["access"]
    
    - type: log
      enabled: true
      paths:
        - /usr/local/nginx/logs/error.log
      tags: ["error"]
    
    
    #####################################################
    ## tomcat  log
    #####################################################
    - type: log
      enabled: true
      paths:
        - /var/log/tomcat/localhost_access_log.*.txt
      json.key_under_root: true
      json.overwrite_keys: true
      tags: ["tomcat"]
    
    
    #####################################################
    ## java  log
    #####################################################
    - type: log
      enabled: true
      paths:
        - /usr/local/elasticsearch/logs/my-elktest-cluster.log 
      tags: ["es-java"]
      multiline.pattern: '^['
      multiline.negate: true
      multiline.match: "after"
    
    
    #####################################################
    ## docker  log
    #####################################################
    - type: docker
      containers.ids:
        - '*'
      json.key_under_root: true
      json.overwrite_keys: true
      tags: ["docker"]
    
    
    #####################################################
    ## Output
    #####################################################
    setup.kibana:
      host: "192.168.132.131:5601"
    output.elasticsearch:
      hosts: ["192.168.132.131:9200","192.168.132.132:9200","192.168.132.133:9200"]
      #index: "nginx-%{[agent.version]}-%{+yyyy.MM.dd}"
      indices:
        - index: "access-%{[agent.version]}-%{+yyyy.MM.dd}"
          when.contains:
            tags: "access"
        - index: "error-%{[agent.version]}-%{+yyyy.MM.dd}"
          when.contains:
            tags: "error"
        - index: "tomcat-access-%{[agent.version]}-%{+yyyy.MM.dd}"
          when.contains:
            tags: "tomcat"
        - index: "javaes-access-%{[agent.version]}-%{+yyyy.MM.dd}"
          when.contains:
            tags: "es-java"
        - index: "docker-access-%{[docker.attrs.service]}-%{[agent.version]}-%{+yyyy.MM.dd}"
          when.contains:
             tags: "docker"
             stream: "stdout"
        - index: "docker-error-%{[docker.attrs.service]}-%{[agent.version]}-%{+yyyy.MM.dd}"
          when.contains:
             tags: "docker"
             stream: "stderr"
    
    setup.template.name: "nginx"
    setup.template.pattern: "nginx-*"
    setup.template.overwrite: true
    setup.template.enabled: true
    setup.ilm.enabled: false

    访问后

    但是没有docker-error-httpd*

    经过日志访问后,发现没有stderr的这个标记

    关于Docker的日志收集介绍到这里

  • 相关阅读:
    Ubuntu 12.04 gedit编辑器 中文乱码
    ubuntu设置vim语法高亮显示和自动缩进
    Linux学习小结(转)
    指向常量的指针和常量指针
    Android之EditText
    android之TextView
    Android存储机制之Preference
    android实现可拖动按钮
    用turtle画图
    torchvision里densenet代码分析
  • 原文地址:https://www.cnblogs.com/zyxnhr/p/12215569.html
Copyright © 2020-2023  润新知