(实战)docker-compose部署分布式日志方案EFK(Elasticsearch+Fluentd+Kibana)

这篇具有很好参考价值的文章主要介绍了(实战)docker-compose部署分布式日志方案EFK(Elasticsearch+Fluentd+Kibana)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

背景

技术架构

部署安装

环境准备

配置Logback并模拟产生日志

制作fluentd镜像

运行docker-compose

效果展示


背景

        在现代的软件开发和运维领域,监控和日志管理是至关重要的任务。随着应用程序规模的扩大和分布式系统的普及,有效地跟踪和分析日志数据成为了挑战。Elasticsearch、Fluentd和Kibana(EFK)框架是一组流行的工具,可帮助您实现高效的日志收集、存储和分析。

        本文将介绍采集SpringCloud Logback日志为例,使用Docker容器化技术快速部署EFK架构来满足您的监控和日志管理需求。
项目代码:GitHub - huangyang1230/springboot_efk: EFK采集Springboot日志并展示

技术架构

docker-compose安装efk,docker,分布式,elasticsearch

如图所示:

  1. 应用程序实时产生日志文件;
  2. Fluentd的tail组件采集并使用multiline解析;
  3. 采集到的日志数据经过Fluentd的处理后,会被发送到Elasticsearch。Elasticsearch是一个高性能的搜索和分析引擎,用于存储和索引日志数据。Fluentd与Elasticsearch之间通常使用名为fluent-plugin-elasticsearch的插件来建立连接和传输数据。一旦数据到达Elasticsearch,它将自动建立索引,以便稍后的查询和分析;
  4. 使用Kibana查看、搜索、分析日志。

部署安装

环境准备

  • docker和docker-compose 可以参考官方文档

配置Logback并模拟产生日志

logback-spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="false" scanPeriod="60 seconds" debug="false">

    <springProperty scope="context" name="APP_NAME" source="spring.application.name" defaultValue="springBoot"/>
    <property name="LOG_HOME" value="/usr/local/logs"/>

    <property name="CONSOLE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %highlight(%-5level) %cyan(%logger{50}:%line) - %highlight(%msg) %n"/>
    <property name="FILE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level [%logger{50}:%line] - %msg%n"/>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!-- Log file debug output -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/${APP_NAME}.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/%d{yyyy-MM}/${APP_NAME}-%d{yyyy-MM-dd}-%i.log.gz</fileNamePattern>
            <maxFileSize>50MB</maxFileSize>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${FILE_LOG_PATTERN}</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <logger name="java.sql.Connection" level="debug"/>
    <logger name="java.sql.Statement" level="debug"/>
    <logger name="java.sql.PreparedStatement" level="debug"/>

    <!-- Level: FATAL 0  ERROR 3  WARN 4  INFO 6  DEBUG 7 -->
    <root level="DEBUG">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="FILE"/>
    </root>
</configuration>

Java代码模拟产生日志

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.stereotype.Component;

import java.util.UUID;

/**
 * @author Yang Huang
 * @create 2023-10-21-11:21
 * @description TODO
 */
@Component
@Slf4j
public class LogFactory  implements InitializingBean{

    public void log() {
        log.debug("开始记录日志");
        while (true) {
            log.debug("我是debug日志,{}", UUID.randomUUID().toString());
            log.info("我是info日志,{}", UUID.randomUUID().toString());

            try {
                int i = 1 / 0;
            } catch (Exception e) {
                log.error("产生了错误", e);
            }
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        log();
    }
}

启动Springboot项目,让日志文件生成到/usr/local/logs目录下,下一步让fluentd实时采集。

制作fluentd镜像

由于官方fluentd镜像不包含fluent-plugin-elasticsearch插件,需要自定义镜像。Dockerfile文件内容:

FROM fluent/fluentd:v1.16-debian-1

# Use root account to use apt
USER root

# below RUN includes plugin as examples elasticsearch is not required
# you may customize including plugins as you wish
RUN buildDeps="sudo make gcc g++ libc-dev" \
 && apt-get update \
 && apt-get install -y --no-install-recommends $buildDeps \
 && sudo gem install fluent-plugin-elasticsearch \
 && sudo gem sources --clear-all \
 && SUDO_FORCE_REMOVE=yes \
    apt-get purge -y --auto-remove \
                  -o APT::AutoRemove::RecommendsImportant=false \
                  $buildDeps \
 && rm -rf /var/lib/apt/lists/* \
 && rm -rf /tmp/* /var/tmp/* /usr/lib/ruby/gems/*/cache/*.gem

#COPY fluent.conf /fluentd/etc/
#COPY entrypoint.sh /bin/

USER fluent

在Dockerfile目录运行以下命令:

docker build -t fluentd_es:v1 . 

运行docker-compose

一、文件目录准备

        fluentd

                fluent.conf

        docker-compose.yml        

二、 fluent.conf内容


<source>
  @type tail                      # 内置的输入方式,从源文件中获取新的日志。
  path /usr/local/logs/*.log         # 挂载的服务器 Docker 容器日志地址
  pos_file /usr/local/logs/*.log.pos
  tag test.*                     # 设置日志标签
  read_from_head true
  <parse>
    @type multiline
    format_firstline /\d{4}-\d{1,2}-\d{1,2}/  #匹配日期开头
    format1 /^(?<time>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}) \[(?<thread>[^\]]+)\] (?<level>[^\s]+) (?<message>.*)/
  </parse>
</source>


<match **>
  @id elasticsearch           # 唯一标识符
  @type elasticsearch         # elasticsearch 插件
#   @log_level info
  host "192.168.0.110"         #需要配置你IP
  port "9200"
  user "elastic"
  password "B6P0hW7x"
  logstash_format true
  logstash_prefix test
  logstash_dateformat %Y-%m-%d
  include_tag_key true
  tag_key @log_name
  <buffer>
    @type file                # 使用文件将缓冲区块存储在磁盘上
    path /usr/local/logs/fluentd.buffer
    flush_mode interval
    retry_type exponential_backoff
    flush_thread_count 2
    flush_interval 5s
    retry_forever
    retry_max_interval 30
    overflow_action block
  </buffer>
</match>

三、 docker-compose.yml  内容

version: "3.8"

#网络配置
networks:
  network:
    ipam:
      config:
        - subnet: "10.10.10.0/24"

#服务配置
services:
  #es服务
  elasticsearch:
    image: elasticsearch:7.14.0
    container_name: es
    privileged: true
    environment:
      ES_JAVA_OPTS: -Xms1g -Xmx1g
      node.name: es-single
      cluster.name: es-cluster
      discovery.type: single-node
      # 开启es跨域
      http.cors.enabled: "true"
      http.cors.allow-origin: "*"
      http.cors.allow-headers: Authorization
      # 安全控制(根据个人需要选择打开或关闭)
      xpack.security.enabled: "true"
      xpack.security.transport.ssl.enabled: "true"
      ELASTIC_PASSWORD: "B6P0hW7x"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - ./es/data:/usr/share/elasticsearch/data
      - ./es/plugins:/usr/share/elasticsearch/plugins
      - ./es/logs:/usr/share/elasticsearch/logs
    ports:
      - "9200:9200"
      - "9300:9300"
    ## 指定ip
    networks:
      network:
        ipv4_address: 10.10.10.100
  #kibana
  kibana:
    image: kibana:7.14.0
    restart: always
    container_name: kibana
    ports:
      - "5601:5601"
    depends_on:
      - elasticsearch
    environment:
      ELASTICSEARCH_HOSTS: '["http://192.168.0.110:9200"]'
      ELASTICSEARCH_USERNAME: 'elastic'
      ELASTICSEARCH_PASSWORD: 'B6P0hW7x'
    ## 指定ip
    networks:
      network:
        ipv4_address: 10.10.10.120
  #fluentd
  fluentd:
    image: fluentd_es:v1
    container_name: fluentd
    restart: always
    environment:
      TZ: "Asia/Shanghai"
    volumes:
      - ./fluentd:/fluentd/etc
       #左边/usr/local/logs是你应用生成日志的路径,根据实际情况调整
      - /usr/local/logs:/usr/local/logs
    depends_on:
      - elasticsearch
    ## 指定ip
    networks:
      network:
        ipv4_address: 10.10.10.130


注意:以上脚本中 "192.168.0.110"需要改成本地IP

最后运行命令启动容器:

docker-compose up -d

效果展示

一、打开http://localhost:5601/login?next=%2F登录,账号密码在脚本中。

二、创建索引

docker-compose安装efk,docker,分布式,elasticsearch

docker-compose安装efk,docker,分布式,elasticsearch

docker-compose安装efk,docker,分布式,elasticsearchdocker-compose安装efk,docker,分布式,elasticsearch

docker-compose安装efk,docker,分布式,elasticsearch

三、查看索引数据

docker-compose安装efk,docker,分布式,elasticsearch

docker-compose安装efk,docker,分布式,elasticsearch

至此,你可以在Kibana中查看应用日志。

完结!!!文章来源地址https://www.toymoban.com/news/detail-777761.html

到了这里,关于(实战)docker-compose部署分布式日志方案EFK(Elasticsearch+Fluentd+Kibana)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 在Ubuntu系统上部署Docker和Docker-Compose服务(实战篇)

    在这篇文章中,我们将从查看防火墙状态开始,逐步引导大家完成Docker和Docker-Compose的安装、配置以及使用过程。通过学习这些关键步骤,你将更加熟练地运用容器技术,为未来的项目提供更便捷的开发和部署方案。 无论你是刚刚接触Docker的新手,还是希望进一步优化Docker在

    2024年01月17日
    浏览(42)
  • minio分布式集群安装部署实战详细手册

    Minio是GlusterFS创始人之一Anand Babu Periasamy发布新的开源项目。基于Apache License v2.0开源协议的对象存储项目,采用Golang实现,客户端支Java,Python,Javacript, Golang语言。 其设计的主要目标是作为私有云对象存储的标准方案。主要用于存储海量的图片,视频,文档等。非常适合于存储

    2024年02月12日
    浏览(40)
  • accelerate 分布式技巧实战--部署ChatGLM-6B(三)

    下载相关文件: 正常情况下,我们使用Chat-GLM需要的显存大于13G,内存没有评估过,但上述的肯定是不够的,16G应该可以。 GPU使用4.9G,内存使用5.5G。 GPU使用9.7G,内存使用5.9G。第一轮输入你好后GPU使用11.2G。 注意,这里我们设置设备映射为balanced,并只使用前两块GPU。显卡

    2024年02月09日
    浏览(33)
  • Docker部署ZooKeeper分布式协调服务

    1、准备工作 2、创建TEST容器,将conf目录COPY出来,在映射进去,方便后续维护管理! 3、运行容器 4、测试链接zookeeper 正常输出内容:

    2024年02月07日
    浏览(47)
  • 使用 Docker 部署分布式存储系统——Ceph

    最近工作中接触了一个 Python + Flask 的新项目,项目中使用了 Ceph 对象存储服务。遂在开发环境使用 Docker 搭建了一套 Ceph 集群。 Ceph 官方文档 Ceph 是一个开源的分布式存储系统,提供了对象存储、块存储和文件系统三种存储接口。Ceph 将数据存储在逻辑存储池中,使用 CRUSH 分

    2024年04月15日
    浏览(51)
  • springBoot分布式 + jdk17 部署到docker

    本地springBoot打包成jar包,上传到服务器上,再当前目录新建Dockerfile FROM openjdk:17-jdk-alpine COPY *.jar /app.jar CMD echo \\\"======dockertest======\\\" EXPOSE 8081 ENTRYPOINT [\\\"java\\\",\\\"-jar\\\",\\\"/app.jar\\\"] 进入当前目录执行: docker build -t set-day-backend-1.0.0.nsapshot . 生成新的镜像,再执行 docker run -d -p 8888:8888 --na

    2024年01月17日
    浏览(52)
  • 使用Docker部署开源分布式任务调度系统DolphinScheduler

    🔥 博客主页 : 小羊失眠啦. 🎥 系列专栏 : 《C语言》 《数据结构》 《Linux》 《Cpolar》 ❤️ 感谢大家点赞👍收藏⭐评论✍️ 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 本篇教程和大家分享一下DolphinSc

    2024年02月05日
    浏览(61)
  • 【Docker】Docker+Zipkin+Elasticsearch+Kibana部署分布式链路追踪

    点击跳转:Docker安装MySQL、Redis、RabbitMQ、Elasticsearch、Nacos等常见服务全套(质量有保证,内容详情) 本文主要讨论在Elasticsearch和Kibana安装好合适版本的前提下,继续整合Zipkin。 一般的,它们的工作过程是这样的:Spring Cloud微服务把调用链路的日志发送给Zipkin,Zipkin把数据发

    2024年02月14日
    浏览(47)
  • 可视化分布式调度框架PowerJob部署docker版

    PowerJob(原OhMyScheduler)是全新一代分布式任务调度与计算框架,其主要功能特性如下: ● 使用简单:提供前端Web界面,允许开发者可视化地完成调度任务的管理(增、删、改、查)、任务运行状态监控和运行日志查看等功能。 ● 定时策略完善:支持 CRON 表达式、固定频率、

    2024年02月04日
    浏览(46)
  • 云原生之深入解析分布式存储系统Ceph的环境部署和实战操作

    ① 什么是 Ceph ? Ceph 是当前非常流行的开源分布式存储系统,具有高扩展性、高性能、高可靠性等优点,同时提供块存储服务(rbd)、对象存储服务(rgw)以及文件系统存储服务(cephfs),Ceph 在存储的时候充分利用存储节点的计算能力,在存储每一个数据时都会通过计算得出该数据

    2024年02月09日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包