elk-filebeat收集docker容器日志(代码片段)

devzxd devzxd     2023-01-21     441

关键词:

目录

使用docker搭建elk

1、使用docker-compose文件构建elk。文件如下:

version: ‘3‘
services:
  elk:
    image: sebp/elk:640
    ports:
      - "5601:5601"
      - "9200:9200"
      - "5044:5044"
    environment:
      - ES_JAVA_OPTS=-Xms512m -Xmx512m
    volumes:
      - ~dockerdata/elk:/var/lib/elasticsearch

2、执行docker-compose up -d 启动elk。可以使用docker logs 命令查看elk启动日志。启动成功后打开浏览器访问 http://127.0.0.1:5601

filebeat安装与配置

关于filebeat本文也不做过多介绍。只讲解安装与配置。

1、filebeat的docker-composep

version: ‘3‘
services:
  filebeat:
    image: prima/filebeat:6
    #restart: always
    volumes:
      - ./config/filebeat.yml:/filebeat.yml
      - ~/dockerdata/filebeat:/data
      - /var/lib/docker/containers:/var/lib/docker/containers

挂载说明

  • filebeat.yml配置需要在本地有对应文件,稍后会说到
  • filebeat抓取日志进度数据,挂载到本地,防止filebeat容器重启,所有日志重新抓取
  • 因为要收集docker容器的日志,所以要挂在到docker日志存储目录,使它有读取权限

2、filebeat配置文件设置

  • 在docker-compose.yml同级目录新建config文件夹
  • 在config文件下新建filebeat.yml文件,文件内容如下:
filebeat.prospectors:
- type: log
  enabled: true
  paths:
    - /var/lib/docker/containers/*/*.log #需要读取日志的目录#
  json.keys_under_root: true # 因为docker使用的log driver是json-file,因此采集到的日志格式是json格式,设置为true之后,filebeat会将日志进行json_decode处理
  json.add_error_key: true #如果启用此设置,则在出现JSON解组错误或配置中定义了message_key但无法使用的情况下,Filebeat将添加“error.message”和“error.type:json”键。
  json.message_key: log #一个可选的配置设置,用于指定应用行筛选和多行设置的JSON密钥。 如果指定,键必须位于JSON对象的顶层,且与键关联的值必须是字符串,否则不会发生过滤或多行聚合。
  tail_files: true
  # 将error日志合并到一行
  multiline.pattern: ‘^([0-9]4|[0-9]2)-[0-9]2‘ 
  multiline.negate: true
  multiline.match: after
  multiline.timeout: 10s
#  registry_file: /opt/filebeat/registry
#-------------------------- Elasticsearch output ------------------------------
# 直接输出到elasticsearch,这里的hosts是elk地址,端口号是elasticsearch端口#
output.elasticsearch:
  hosts: ["10.9.70.62:9200"]

#==================== Elasticsearch template setting ==========================

setup.template.name: "filebeat.template.json"
setup.template.fields: "filebeat.template.json"
setup.template.overwrite: true
setup.template.enabled: false

# 过滤掉一些不必要字段#
processors:
- drop_fields:
    fields: ["input_type", "offset", "stream", "beat"]
  • 在config文件下新建filebeat.template.json文件,文件内容如下:

  "mappings": 
    "_default_": 
      "_all": 
        "norms": false
      ,
      "_meta": 
        "version": "5.1.2"
      ,
      "dynamic_templates": [
        
          "strings_as_keyword": 
            "mapping": 
              "ignore_above": 1024,
              "type": "keyword"
            ,
            "match_mapping_type": "string"
          
        
      ],
      "properties": 
        "@timestamp": 
          "type": "date"
        ,
        "beat": 
          "properties": 
            "hostname": 
              "ignore_above": 1024,
              "type": "keyword"
            ,
            "name": 
              "ignore_above": 1024,
              "type": "keyword"
            ,
            "version": 
              "ignore_above": 1024,
              "type": "keyword"
            
          
        ,
        "input_type": 
          "ignore_above": 1024,
          "type": "keyword"
        ,
        "message": 
          "norms": false,
          "type": "text"
        ,
        "meta": 
          "properties": 
            "cloud": 
              "properties": 
                "availability_zone": 
                  "ignore_above": 1024,
                  "type": "keyword"
                ,
                "instance_id": 
                  "ignore_above": 1024,
                  "type": "keyword"
                ,
                "machine_type": 
                  "ignore_above": 1024,
                  "type": "keyword"
                ,
                "project_id": 
                  "ignore_above": 1024,
                  "type": "keyword"
                ,
                "provider": 
                  "ignore_above": 1024,
                  "type": "keyword"
                ,
                "region": 
                  "ignore_above": 1024,
                  "type": "keyword"
                
              
            
          
        ,
        "offset": 
          "type": "long"
        ,
        "source": 
          "ignore_above": 1024,
          "type": "keyword"
        ,
        "tags": 
          "ignore_above": 1024,
          "type": "keyword"
        ,
        "type": 
          "ignore_above": 1024,
          "type": "keyword"
        
      
    
  ,
  "order": 0,
  "settings": 
    "index.refresh_interval": "5s"
  ,
  "template": "filebeat-*"

  • 执行docker-compose up -d 启动filebeat。

在需要抓取docker日志的所有主机上按照以上步骤安装运行filebeat即可。到这一步其实就已经可以在elk里面建立索引查抓取到的日志。但是如果docker容器很多的话,没有办法区分日志具体是来自哪个容器,所以为了能够在elk里区分日志来源,需要在具体的docker容器上做一些配置,接着看下面的内容

docker容器设置

可以给具体的docker容器增加labels,并且设置logging。参考以下docker-compose.yml

version: ‘3‘
services:
  db:
    image: mysql:5.7
    # 设置labels
    labels:
      service: db
    # logging设置增加labels.service
    logging:
      options:
        labels: "service"
    ports:
      - "3306:3306"

重新启动应用,然后访问http://127.0.0.1:5601 重新添加索引。查看日志,可以增加过滤条件 attrs.service:db,此时查看到的日志就全部来自db容器。结果如下图所示:
技术分享图片

参考文章

采集docker-container日志

Beats详解(四)

首发地址

http://www.devzxd.top/2018/10/25/elk-filebeat-dockerlogs.html


如何从 docker 容器中收集主机系统日志

】如何从docker容器中收集主机系统日志【英文标题】:Howtocollecthostsyslogfromwithinadockercontainer【发布时间】:2019-07-2004:55:52【问题描述】:如何在同一主机上运行的docker容器中收集主机的syslog?【问题讨论】:【参考方案1】:执... 查看详情

docker容器使用loki收集日志(代码片段)

...rafana)loki进行日志聚合处理 类似elk中的espromtail是日志收集,类似elk中的logstashfilebeat等,如果是只收集docker容器的日志则可以用loki的dockerplugin替代grafana是日志显示,类似elk中的kibana,可以通过各种标签和表达式过滤显示日志... 查看详情

日志系统之基于flume收集docker容器日志(代码片段)

最近我在日志收集的功能中加入了对docker容器日志的支持。这篇文章简单谈谈策略选择和处理方式。关于docker的容器日志docker我就不多说了,这两年火得发烫。最近我也正在把日志系统的一些组件往docker里部署。很显然,... 查看详情

docker容器日志收集方案(方案一filebeat+本地日志收集)(代码片段)

filebeat不用多说就是扫描本地磁盘日志文件,读取文件内容然后远程传输。docker容器日志默认记录方式为json-file就是将日志以json格式记录在磁盘上格式如下: "log":"2018-11-1601:24:30.372 INFO[demo1,786a42d3b893168f,786a42d3b893168f,false]1... 查看详情

万能日志数据收集器fluentd-每天5分钟玩转docker容器技术(91)

前面的ELK中我们是用Filebeat收集Docker容器的日志,利用的是Docker默认的loggingdriver json-file,本节我们将使用 fluentd 来收集容器的日志。Fluentd是一个开源的数据收集器,它目前有超过500种的plugin,可以连接各种数据源和... 查看详情

docker日志收集

...来便利的同时,日志集中化问题就越来越有必要性了。在收集之前,我们先来简单了解下docker日志处理的机制。当启动一个容器的时候,它其实是dockerdaemon的一个子进程,dockerdaemon可以拿到你容器里面进程的标准输出,拿到标准... 查看详情

graylog2实现docker容器日志收集

Graylog2是一个开源的日志存储系统,是由java语言编写的server,能够接收TCP,UDP,AMQP的协议发送的日志信息,并且基于mongodb数据库服务器快速存储,能够通过一个基于ruby编写的web管理界面,让轻松管理你的日志。1、组件准备名称组件名称... 查看详情

使用fluentd收集docker容器日志

参考技术A本文介绍使用Fluentd收集standalone容器日志的方法。Docker提供了很多loggingdriver,默认情况下使用的json-file,它会把容器打到stdout/stderr的日志收集起来存到json文件中,dockerlogs所看到的日志就是来自于这些json文件。当有多... 查看详情

简述kubernetes容器日志收集原理!(代码片段)

概述关于容器日志Docker的日志分为两类,一类是Docker引擎日志;另一类是容器日志。引擎日志一般都交给了系统日志,不同的操作系统会放在不同的位置。本文主要介绍容器日志,容器日志可以理解是运行在容器内部的应用输出... 查看详情

用elk工具收集rancher1.6上容器日志(代码片段)

...上使用dockerlogs查看日志,不太方便,因此搭建一个elk来收集rancher上部署的docker容器日志。rancher上部署的docker容器,日志位置在/var/lib/docker/containers/co 查看详情

运用elasticstack收集docker容器日志(代码片段)

ElasticStack在收集日志方面有很多的方面的应用。在今天的文章中,我将使用docker来安装ElasticStack。我将演示如何使用docker安装Filebeat并收集容器的日志。在我之前的文章“Beats:为Filebeat配置inputs”,我展示了如何使用... 查看详情

rancher体系下容器日志采集

...状况下,程序的访问监控健康状态很多都依赖日志信息的收集,由于Docker的存在,让容器平台中的日志收集和传统方式很多不一样,日志的输出和采集点收集和以前大有不同。本文就探讨一下,Rancher平台内如何做容器日志收集... 查看详情

容器内应用日志收集方案

容器化应用日志收集挑战应用日志的收集、分析和监控是日常运维工作重要的部分,妥善地处理应用日志收集往往是应用容器化重要的一个课题。 Docker处理日志的方法是通过dockerengine捕捉每一个容器进程的STDOUT和STDERR,通过... 查看详情

利用elk搭建docker容器化应用日志中心(代码片段)

...志供运维分析。典型的比如 SpringBoot应用的日志 收集。本文即将阐述如何利用ELK日志中心来收集容器化应用程序所产生的日志,并且可以用可视化的方式对日志进行查询与分析,其架构如下图所示:镜像准备ElasticSearch镜... 查看详情

利用elk搭建docker容器化应用日志中心(代码片段)

...的打印日志供运维分析。典型的比如SpringBoot应用的日志收集。本文即将阐述如何利用ELK日志中心来收集容器化应用程序所产生的日志,并且可以用可视化的方式对日志进行查询与分析,其架构如下图所示: 架构图镜像准备El... 查看详情

centos7下安装docker(18.3docker日志---loggingdriver---fluentd)

前面我们学的ELK中用filebeat收集docker容器日志,利用的是dcoker默认的loggingdriverjson-file,下面我们用fluentd来收集容器日志  Fluentd是一个开源的数据收集器,他目前又超过500种的plugin,可以连接各种数据源和数据输出组件。&... 查看详情

docker容器内部日志本地怎么查看

参考技术A打到标准输出,然后docker的logdriver可以配成syslog,这样就能用syslog统一收集host上的所有容器的日志。同时,支持logrotate。 查看详情

docker日志都在哪里?怎么收集?(代码片段)

日志分两类,一类是 Docker引擎日志;另一类是 容器日志。Docker引擎日志 Docker引擎日志 一般是交给了 Upstart(Ubuntu14.04)或者 systemd (CentOS7,Ubuntu16.04)。前者一般位于 /var/log/upstart/docker.log 下,后者一... 查看详情