一步到位:通过 Docker Compose 部署 EFK 进行 Docker 日志采集

news2024/11/17 15:32:48

一、EFK简介

Elasticsearch:一个开源的分布式搜索和分析引擎,用于存储和查询日志数据。它是 EFK 的核心组件,负责高效地存储和检索日志信息。

Filebeat:一个轻量级的日志采集器,主要用于将日志文件数据发送到 Logstash 或 Elasticsearch。Filebeat 设计用于高效地转发和处理日志数据,具有低内存消耗和可靠的传输能力。

Kibana:一个开源的数据可视化平台,与 Elasticsearch 配合使用,用于创建图表、仪表板和报告,以便对日志数据进行分析和展示。

二、EFK 和 ELK 的对比

2.1、日志收集器

  • EFK:使用 Filebeat 作为日志收集器。Filebeat 是一种轻量级的代理,专门用于转发日志数据到 Elasticsearch 或 Logstash。它易于配置和维护,适合处理大规模日志数据的转发。
  • ELK:使用 Logstash 作为日志收集器。Logstash 提供了丰富的数据处理功能,可以对日志进行解析、过滤和增强,然后将其发送到 Elasticsearch。虽然功能强大,但配置和维护相对复杂。

2.2、配置和性能

  • EFK:Filebeat 的设计目标是轻量化,适合在日志生成的主机上运行,性能高且资源消耗低。它能够高效地将日志数据传输到 Elasticsearch 或 Logstash,并且配置较为简单。
  • ELK:Logstash 提供了强大的数据处理能力,但通常需要更多的系统资源。其复杂的配置和处理能力适合需要进行大量数据处理的场景。

2.3、数据管道

  • EFK:Filebeat 直接将日志数据发送到 Elasticsearch 或 Logstash。它可以进行基本的日志采集和传输,但通常将更复杂的数据处理任务交给 Logstash 或直接到 Elasticsearch。
  • ELK:Logstash 处理复杂的数据处理和转换任务,能够在数据到达 Elasticsearch 之前进行各种处理。这样可以将数据以最佳格式存储到 Elasticsearch 中,但也会增加系统的复杂性和资源消耗。

2.4、优势与区别

  • EFK 的优势在于 Filebeat 的轻量和高效,使得日志收集和传输过程更加简洁和低资源消耗。适合日志生成主机直接使用,减少了 Logstash 的负担。

  • ELK 通过 Logstash 提供了更多的数据处理和转换能力,适合处理复杂的日志数据处理需求。虽然功能强大,但配置和维护相对较复杂,资源消耗也较高。

当然 Logstash 相比于 FileBeat 也有一定的优势,比如 Logstash 对于日志的格式化处理能力,FileBeat 只是将日志从日志文件中读取出来,当然如果收集的日志本身是有一定格式的,FileBeat 也可以格式化,但是相对于Logstash 来说,效果差很多。

三、实验目的

  • 使用EFK 的架构,去收集机器上docker 容器的日志
  • 容器日志,主要包括 业务微服务本身暴漏出来 的 标准输出日志,直接输出在控制台上
  • 使用 filebeat 去采集容器机器的标准输出日志,/var/lib/docker/containers/*/*.log
  • filebeat.docker.yml 官方示例配置文件,可参考https://raw.githubusercontent.com/elastic/beats/8.15/deploy/docker/filebeat.docker.yml

image-20240912182231392

四、部署

4.1 环境信息

efk 的镜像没有托管至dockerhub,请自行下载镜像

IP系统版本软件名称+版本镜像地址
172.24.0.229openeuler 22.03 LTS SP4docker-20.10.24,filebeat:7.6.2docker.elastic.co/beats/filebeat:7.6.2
172.22.33.204openeuler 22.03 LTS SP4docker-20.10.24,docker-compose-2.10.2,elasticsearch-8.15.1,kibana:8.15.1,filebeat:7.6.2docker.elastic.co/elasticsearch/elasticsearch:8.15.1,docker.elastic.co/kibana/kibana:8.15.1,docker.elastic.co/beats/filebeat:7.6.2

4.2 安装docker,docker-compose

安装过程省略,可参考:

  • CentOS 7安装docker并配置镜像加速 https://srebro.cn/archives/1709614927551
  • Cenotos7 安装docker-compose https://srebro.cn/archives/Cenotos7%20%E5%AE%89%E8%A3%85docker-compose

4.3 使用docker-compose 编排EFK

以下操作在172.22.33.204 机器上完成

4.3.1 创建EFK 工作目录/数据目录/配置文件

4.3.1.1 创建elasticsearch 数据目录,并授权777
#创建efk工作目录
$ mkdir -p /home/application/efk

$ mkdir -p /home/application/efk/elasticsearch/data
$ chmod 777 /home/application/efk/elasticsearch/data
4.3.1.2 创建kibana数据目录,并授权777
$ mkdir -p /home/application/efk/kibana/data
$ chmod 777 /home/application/efk/kibana/data
4.3.1.3 创建filebeat配置文件

⚠️需要指定setup.kibana.host 根据自己的实际情况填写kibana地址

#创建 filebeat 工作目录
$ mkdir -p /home/application/efk/filebeat

$ vim /home/application/efk/filebeat/filebeat.docker.yml
filebeat.config:
  modules:
    path: ${path.config}/modules.d/*.yml
    reload.enabled: false

filebeat.autodiscover:
  providers:
    - type: docker
      hints.enabled: true

processors:
  - add_host_metadata: ~  #用于将主机的元数据添加到每条日志记录中。这些元数据包括主机的名称、IP 地址、操作系统等信息。
  - drop_fields:
      ignore_missing: true # 字段不存在时不报错
      fields: #过滤掉下面的字段
        - "input_type"
        - "log.offset"
        - "host.name"
        - "input.type"
        - "agent.hostname"
        - "agent.type"
        - "ecs.version"
        - "agent.ephemeral_id"
        - "agent.id"
        - "agent.version"
        - "fields.ics"
        - "log.file.path"
        - "log.flags"
        - "host.os.version"
        - "host.os.platform"
        - "host.os.family"
        - "host.os.name"
        - "host.os.kernel"
        - "host.os.codename"
        - "host.id"
        - "host.containerized"
        - "host.hostname"
        - "host.architecture"
        - "docker.container.labels.license"
        - "docker.container.labels.com_docker_compose_image"
        - "docker.container.labels.maintainer"
        - "docker.container.labels.com_docker_compose_config-hash"
        - "docker.container.labels.org_label-schema_schema-version"
        - "docker.container.labels.org_label-schema_url"
        - "docker.container.labels.org_label-schema_usage"
        - "docker.container.labels.org_label-schema_vcs-url"
        - "docker.container.labels.org_label-schema_vendor"
        - "docker.container.labels.org_label-schema_license"
        - "docker.container.labels.org_label-schema_vcs-ref"
        - "docker.container.labels.org_opencontainers_image_documentation"
        - "docker.container.labels.com_docker_compose_version"
        - "docker.container.labels.com_docker_compose_service"
        - "docker.container.labels.org_opencontainers_image_created"
        - "docker.container.labels.org_label-schema_build-date"
        - "docker.container.labels.org_label-schema_name"
        - "docker.container.labels.org_label-schema_version"
        - "docker.container.labels.org_opencontainers_image_licenses"
        - "docker.container.labels.org_opencontainers_image_revision"
        - "docker.container.labels.org_opencontainers_image_source"
        - "docker.container.labels.org_opencontainers_image_title"
        - "docker.container.labels.org_opencontainers_image_url"
        - "docker.container.labels.org_opencontainers_image_vendor"
        - "docker.container.labels.org_opencontainers_image_version"
  - drop_event:
      when:
        or:
          - contains:
              container.name: "filebeat"

setup.kibana.host: "172.22.33.204:5601"

# 自定义模板和索引模式
setup.template.name: "srebro-log"  # 定义索引模板的名称为 "srebro-log"。这个名称用于标识和应用模板。
setup.template.pattern: "srebro-*"  # 定义索引名称的模式为 "srebro-*"。匹配所有以 "srebro-" 开头的索引名称。
setup.template.overwrite: true  # 设置为 true 时,如果模板已经存在,将会覆盖现有模板。确保模板更新被应用。
setup.template.enabled: true  # 启用模板设置,允许 filebeat 创建或更新索引模板。


# Elasticsearch 输出配置
output.elasticsearch:
  hosts: '${ELASTICSEARCH_HOSTS:elasticsearch:9200}'
  # 自定义索引前缀
  index: "srebro-log-docker-%{+yyyy.MM.dd}"
  indices:
    - index: "srebro-log-docker-%{+yyyy.MM.dd}"

4.3.2 编写docker-compose 文件

⚠️ output.elasticsearch.hosts 根据自己的实际情况填写elasticsearch地址

$ cat >> /home/application/efk/docker-compose.yaml << EOF
version: '3'

services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.15.1
    container_name: elasticsearch
    environment:
      - node.name=elasticsearch
      - discovery.type=single-node
      - cluster.name=docker-cluster
      - bootstrap.memory_lock=true
      - xpack.security.enabled=false
        # - ES_JAVA_OPTS=-Xms512m -Xmx512m
    volumes:
      - ./elasticsearch/data:/usr/share/elasticsearch/data
    ports:
      - "9200:9200"
    networks:
      - elk-network
    restart: always

  kibana:
    image: docker.elastic.co/kibana/kibana:8.15.1
    container_name: kibana
    environment:
      - ELASTICSEARCH_HOSTS=http://elasticsearch:9200
      - I18N_LOCALE=zh-CN
    volumes:
      - ./kibana/data:/usr/share/kibana/data/
    ports:
      - "5601:5601"
    networks:
      - elk-network
    restart: always

  filebeat:
    image: docker.elastic.co/beats/filebeat:7.6.2
    container_name: filebeat
    user: root
    command: filebeat -e -strict.perms=false -E output.elasticsearch.hosts=["172.22.33.204:9200"]
    volumes:
      - ./filebeat/filebeat.docker.yml:/usr/share/filebeat/filebeat.yml:ro
      - /var/lib/docker/containers:/var/lib/docker/containers:ro
      - /var/run/docker.sock:/var/run/docker.sock:ro
    networks:
      - elk-network
    restart: always

networks:
  elk-network:
    driver: bridge

EOF

4.3.2 运行EFK

#切换到efk工作目录下
$ cd /home/application/efk/

#下载镜像
$ docker-compose pull

#运行docker-compose
$ docker-compose up -d

[+] Running 4/4
 ⠿ Network elk_elk-network  Created                                                                                                              0.1s
 ⠿ Container elasticsearch  Started                                                                                                              0.6s
 ⠿ Container kibana         Started                                                                                                              0.6s
 ⠿ Container filebeat       Started                                                                                                              0.4s
 
$ docker-compose ps
NAME                COMMAND                  SERVICE             STATUS              PORTS
elasticsearch       "/bin/tini -- /usr/l…"   elasticsearch       running             0.0.0.0:9200->9200/tcp, :::9200->9200/tcp, 9300/tcp
filebeat            "/usr/bin/tini -- /u…"   filebeat            running             
kibana              "/bin/tini -- /usr/l…"   kibana              running             0.0.0.0:5601->5601/tcp, :::5601->5601/tcp

4.4 使用docker 运行filebeat 采集器

以下操作在172.24.0.229 机器上完成

  • 准备filebeat配置文件

    ⚠️ 需要指定kibana的地址

#创建 filebeat 工作目录
$ mkdir -p /home/application/efk/filebeat

$ vim /home/application/efk/filebeat/filebeat.docker.yml
filebeat.config:
  modules:
    path: ${path.config}/modules.d/*.yml
    reload.enabled: false

filebeat.autodiscover:
  providers:
    - type: docker
      hints.enabled: true

processors:
  - add_host_metadata: ~  #用于将主机的元数据添加到每条日志记录中。这些元数据包括主机的名称、IP 地址、操作系统等信息。
  - drop_fields:
      ignore_missing: true # 字段不存在时不报错
      fields: #过滤掉下面的字段
        - "input_type"
        - "log.offset"
        - "host.name"
        - "input.type"
        - "agent.hostname"
        - "agent.type"
        - "ecs.version"
        - "agent.ephemeral_id"
        - "agent.id"
        - "agent.version"
        - "fields.ics"
        - "log.file.path"
        - "log.flags"
        - "host.os.version"
        - "host.os.platform"
        - "host.os.family"
        - "host.os.name"
        - "host.os.kernel"
        - "host.os.codename"
        - "host.id"
        - "host.containerized"
        - "host.hostname"
        - "host.architecture"
        - "docker.container.labels.license"
        - "docker.container.labels.com_docker_compose_image"
        - "docker.container.labels.maintainer"
        - "docker.container.labels.com_docker_compose_config-hash"
        - "docker.container.labels.org_label-schema_schema-version"
        - "docker.container.labels.org_label-schema_url"
        - "docker.container.labels.org_label-schema_usage"
        - "docker.container.labels.org_label-schema_vcs-url"
        - "docker.container.labels.org_label-schema_vendor"
        - "docker.container.labels.org_label-schema_license"
        - "docker.container.labels.org_label-schema_vcs-ref"
        - "docker.container.labels.org_opencontainers_image_documentation"
        - "docker.container.labels.com_docker_compose_version"
        - "docker.container.labels.com_docker_compose_service"
        - "docker.container.labels.org_opencontainers_image_created"
        - "docker.container.labels.org_label-schema_build-date"
        - "docker.container.labels.org_label-schema_name"
        - "docker.container.labels.org_label-schema_version"
        - "docker.container.labels.org_opencontainers_image_licenses"
        - "docker.container.labels.org_opencontainers_image_revision"
        - "docker.container.labels.org_opencontainers_image_source"
        - "docker.container.labels.org_opencontainers_image_title"
        - "docker.container.labels.org_opencontainers_image_url"
        - "docker.container.labels.org_opencontainers_image_vendor"
        - "docker.container.labels.org_opencontainers_image_version"
  - drop_event:
      when:
        or:
          - contains:
              container.name: "filebeat"

setup.kibana.host: "172.22.33.204:5601"

# 自定义模板和索引模式
setup.template.name: "srebro-log"  # 定义索引模板的名称为 "srebro-log"。这个名称用于标识和应用模板。
setup.template.pattern: "srebro-*"  # 定义索引名称的模式为 "srebro-*"。匹配所有以 "srebro-" 开头的索引名称。
setup.template.overwrite: true  # 设置为 true 时,如果模板已经存在,将会覆盖现有模板。确保模板更新被应用。
setup.template.enabled: true  # 启用模板设置,允许 filebeat 创建或更新索引模板。


# Elasticsearch 输出配置
output.elasticsearch:
  hosts: '${ELASTICSEARCH_HOSTS:elasticsearch:9200}'
  # 自定义索引前缀
  index: "srebro-log-docker-%{+yyyy.MM.dd}"
  indices:
    - index: "srebro-log-docker-%{+yyyy.MM.dd}"
  • docker run 运行

⚠️ 需要指定elasticsearch的地址

$ docker run -d --name=filebeat --user=root --restart=always --volume="/home/application/efk/filebeat/filebeat.docker.yml:/usr/share/filebeat/filebeat.yml:ro"   --volume="/var/lib/docker/containers:/var/lib/docker/containers:ro"   --volume="/var/run/docker.sock:/var/run/docker.sock:ro" docker.elastic.co/beats/filebeat:7.6.2 filebeat -e -strict.perms=false   -E output.elasticsearch.hosts=["172.22.33.204:9200"]
  • 查看filebeat 的日志
$ docker logs -f filebeat

image-20240913191451112

五、登录 kibana控制台,检索日志

  • kibana web 控制台: http://172.22.33.204:5601/

image-20240912213801915

  • 创建索引

image-20240912213944463

可以看到所有索引 srebro-log-docker*

image-20240913191704488

  • 创建数据视图

image-20240913191737522

image-20240913191820949

  • 检索日志

image-20240913191916799

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2136876.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ubuntu20+Noetic+cartographer_ros编译部署

1 准备工作 &#xff08;1&#xff09;准备Ubuntu20系统。 &#xff08;2&#xff09;安装ROS系统,参考 https://blog.csdn.net/weixin_46123033/article/details/139527141&#xff08;3&#xff09;Cartographer相关软件包和源码下载&#xff1a; https://gitee.com/mrwan…

go语言后端开发学习(七)——如何在gin框架中集成限流中间件

一.什么是限流 限流又称为流量控制&#xff08;流控&#xff09;&#xff0c;通常是指限制到达系统的并发请求数。 我们生活中也会经常遇到限流的场景&#xff0c;比如&#xff1a;某景区限制每日进入景区的游客数量为8万人&#xff1b;沙河地铁站早高峰通过站外排队逐一放行的…

ElementUI 快速入门:使用 Vue 脚手架搭建项目

文章目录 一 . ElementUI 的基本安装1.1 通过 Vue 脚手架创建项目1.2 在 vue 脚手架中安装 ElementUI1.3 编写页面 ElementUI 是 Vue.js 的强大 UI 框架&#xff0c;让前端界面开发变得简单高效。本教程将带你从安装到实战&#xff0c;快速掌握 ElementUI 的核心技巧。 核心内容…

解决antd-design-vue给选择组件a-select下拉菜单ant-select-dropdown设置样式不生效

实现效果&#xff1a;正常a-select会根据分辨率、缩放比例动态计算位置等&#xff0c;现在web端已经实现自适应分辨率&#xff0c;需要给下拉菜单设置固定的定位和宽度等样式&#xff0c;不让组件自动瞎设置定位、大小 1、a-select组件加上:getPopupContainer"(triggerNo…

IP地址、地址分类、子网掩码、子网划分、使用Python计算子网划分

IP 地址&#xff08;Internet Protocol Address&#xff09;乃是用于明确标识网络中各类设备的独一无二的地址。IP 地址主要存在两种重要类型&#xff0c;即 IPv4 和 IPv6 。 IPv4地址 IPv4 地址实则是一个由 32 位二进制数字所构成的标识&#xff0c;通常会以四个十进制数字…

如何精细优化网站关键词排名:实战经验分享

在数字营销日益激烈的今天&#xff0c;我深知每一个关键词的排名都关乎着网站的流量与转化。凭借多年的实战经验&#xff0c;我深刻体会到&#xff0c;要想在浩如烟海的网络世界中脱颖而出&#xff0c;精细化的关键词优化策略至关重要。今天&#xff0c;我将从实战角度出发&…

WPF利用Path自定义画头部导航条(TOP)样式

1;新建两个多值转换器&#xff0c;都有用处&#xff0c;用来动态确定PATH的X,Y州坐标的。 EndPointConverter 该转换器主要用来动态确定X轴&#xff0c;和Y轴。用于画线条的。 internal class EndPointConverter : IMultiValueConverter {public object Convert(object[] val…

PD虚拟机占用多少内存?使用电脑的虚拟内存会损害电脑吗

当我们讨论虚拟机及其对电脑性能的影响时&#xff0c;常常会出现两个关键问题&#xff1a;“PD虚拟机需要占用多少内存&#xff1f;”以及“启用电脑的虚拟内存是否会损害硬件&#xff1f;”对于依赖虚拟机进行日常工作的用户而言&#xff0c;这些问题尤为重要。 在本文中&…

Docker上安装mysql

获取 MySQL 镜像 获取镜像。使用以下命令来拉取镜像&#xff1a; 1docker pull mysql:latest 这里拉取的是最新版本的 MySQL 镜像。你也可以指定特定版本&#xff0c;例如&#xff1a; 1docker pull mysql:8.0 运行 MySQL 容器 运行 MySQL 容器时&#xff0c;你需要指定一些…

Linux与Ubuntu:内核与发行版的关系

在计算机科学的领域内&#xff0c;Linux和Ubuntu这两个术语频繁出现&#xff0c;但它们之间的确切联系往往不为大众所熟知。本文旨在深入探讨Linux内核与Ubuntu操作系统发行版之间的技术关系&#xff0c;并阐明它们各自的独特性质。 Linux内核&#xff1a;操作系统的基石 Lin…

R语言统计分析——功效分析(选择效应值)

参考资料&#xff1a;R语言实战【第2版】 功效分析中&#xff0c;预期效应值时最难决定的参数。它通常要求我们对研究主题有一定的了解&#xff0c;并由相应的测量经验。例如&#xff0c;过去研究中的数据可以用来计算效应值&#xff0c;这能为后来深层次的研究提供一些参考。 …

虚拟机Linux+Ubuntu操作系统 如何在虚拟机上安装docker VMPro 2024在线激活资源

一般情况下 不建议在windows系统上安装docker Windows本身就自带一个虚拟机叫WSL 但是不推荐在日常使用的电脑上安装 我们要下一个虚拟机 我们在window上安装docker会被告知WSL内核太老 我们要一个专业的 隔离的虚拟机软件 推荐使用虚拟机 这是我们的虚拟机软件 我们这边…

爬虫代理API的全面解析:让数据抓取更高效

在大数据时代&#xff0c;网络爬虫已经成为收集和分析数据的重要工具。然而&#xff0c;频繁的请求会导致IP被封禁&#xff0c;这时候爬虫代理API就显得尤为重要。本文将详细介绍爬虫代理API的作用、优势及如何使用&#xff0c;帮助你更高效地进行数据抓取。 什么是爬虫代理AP…

Python | Leetcode Python题解之第403题青蛙过河

题目&#xff1a; 题解&#xff1a; def canCross(stones: List[int]) -> bool:lru_cache(None)def dfs(pos,step):if posstones[-1]: return Truefor d in [-1,0,1]:if stepd>0 and posstepd in set(stones):if dfs(posstepd, stepd):return Truereturn Falsepos, step…

移动UI:看看筛选页面的作用和示例啦。

在移动UI中&#xff0c;筛选页面通常用于允许用户根据特定条件或标准来过滤和查找数据。筛选页面在移动UI中起到了提供数据过滤、排序和个性化展示的功能&#xff0c;帮助用户快速找到所需信息&#xff0c;并提供更好的用户体验。 1. 数据过滤&#xff1a; 允许用户根据各种条…

服务器数据增量迁移方案-—SAAS本地化及未来之窗行业应用跨平台架构

一、数据迁移增量同步具有以下几个优点&#xff1a; 1. 减少数据传输量&#xff1a;只传输自上次同步以来更改的数据&#xff0c;而不是整个数据集&#xff0c;这显著降低了网络带宽的使用和传输时间。 2. 提高同步效率&#xff1a;由于处理的数据量较小&#xff0c;同步过程…

Java应用压测工具JMeter

目录 1、下载JMeter 2、配置环境变量 3、配置语音 4、使用 1、下载JMeter Apache JMeter - Apache JMeter™ 千万别下载这个&#xff0c;会报错、 千万别下载这个&#xff0c;会报错、 千万别下载这个&#xff0c;会报错 下载这个&#xff0c;失败多下载几次 2、配置环…

京东广告投放平台整洁架构演进之路

前言 从去年开始京东广告投放系统做了一次以领域驱动设计为思想内核的架构升级&#xff0c;在深入理解DDD思想的同时&#xff0c;我们基于广告投放业务的本质特征大胆地融入了自己的理解和改造。新架构是从设计思想到落地框架都进行了彻底的革新&#xff0c;涉及内容比较多&am…

lvs-dr模式实验详解

华子目录 lvs-dr&#xff08;企业当中最常用&#xff09;dr模式数据逻辑dr模式数据传输过程dr模式的特点实验拓扑实验主机准备实验步骤1.client的ip设定2.router上的ip设定3.router开启路由转发功能4.lvs主机中的ip设定5.webserver1主机中的ip设定6.webserver2主机中的ip设定7.…

6.6高斯噪声

在OpenCV联合C中给一张图片添加高斯噪声&#xff08;Gaussian Noise&#xff09;&#xff0c;可以通过生成随机数并在图像的每个像素上加上这些随机数来实现。高斯噪声是一种统计分布服从正态分布的噪声&#xff0c;通常用于模拟自然界的许多物理现象。 示例代码 以下是一个使…