Docker 日志管理 - ELK

Author:rab
目录
- 前言
- 一、Docker 日志驱动
- 二、ELK 套件部署
- 三、Docker 容器日志采集
- 3.1 部署 Filebeat
- 3.2 配置 Filebeat
- 3.3 验证采集数据
- 3.4 Kibana 数据展示
- 3.4.1 创建索引模式
- 3.4.2 Kibana 查看日志
- 总结
前言
如何查看/管理 Docker 运行容器的日志?我们会想到 docker logs、docker attach 来查看日志,这两个命令是 docker 原生命令,用于查看 docker 运行的容器日志,Docker 会将日志发送到容器的标准输出设备(STDOUT)和标准错误输出设备(STDERR)。而这些都要归功于 docker 的日志驱动(如json-file、journald、syslog、fluentd、gelf、splunk)等。每个驱动程序都有自己的配置选项和目标,允许你将日志发送到特定的日志聚合工具或目标。
关于 Docker 的日志驱动基本配置可看我之前的文章《你真的了解 Docker 日志吗?》。
一、Docker 日志驱动
Docker 默认的日志驱动为 json-file,如下图所示:
docker info |grep -i "logging driver"

json-file 会将容器的日志保存在 json 文件中,Docker 负责格式化其内容并输出到标准输出,我们可以在 Host 的容器目录中找到此 json 文件,默认路径为:/var/lib/docker/containers/<容器ID>/<容器ID>-json.log,当然,如果你 Docker 数据存储路径为不是默认的 /var/lib/docker/,则为你指定的具体路径。
让我们看看这些 json 文件日志格式:
tail -f /var/lib/docker/containers/05213f4e11f4bb335462ad3b143b09a981809351fbba780344531454570a0d44/05213f4e11f4bb335462ad3b143b09a981809351fbba780344531454570a0d44-json.log

更多日志驱动请看官方文档:https://docs.docker.com/config/containers/logging/configure/
二、ELK 套件部署
ELK 原理这里就不详细介绍了,大家可以看看我前面的博客《基于 Docker 的 ELK 高可用集群架构》,博客中案例是每个博客是分布部署的,这里为了实验、节约时间,就进行集中部署了。
1、Host 系统初始化
echo "vm.max_map_count=262144" > /etc/sysctl.conf
sysctl -p
2、运行 ELK 容器
mkdir -p /data/elk-data
docker run -itd --name elk --restart always \-p 5601:5601 \-p 9200:9200 \-p 5044:5044 \-v /data/elk-data:/var/lib/elasticsearch \-v /etc/localtime:/etc/localtime \sebp/elk:6.8.22# 说明
# 5601:kibana端口
# 9200:es端口
# 5044:Logstash
# sebp/elk:latest 镜像包含了整个ELK Stack

3、ELK 验证
http://192.168.56.120:5601/

三、Docker 容器日志采集
3.1 部署 Filebeat
目前是没有任何日志数据的,如下图 kibana 也是没有发现任何监控数据:

再来调用 es 的 JSON 接口 http://192.168.56.120:9200/_search?pretty,如下图:

可见,es 并没有日志相关的 index(如上图采样数据 hits 为空的),接下来我们将通过 filebeat 进行数据采集,并将日志导入 ELK。至于为什么要使用 filebeat,我之前的博客已经有提到过,一句话“主打一个轻量”。
这里的部署就不再重复造轮子了,具体部署就看我前面《你真的了解 Docker 日志吗?》中的文章中的2.7.2 部署及应用部分。
3.2 配置 Filebeat
配置也很简单,无非就是两个问题:日志从哪里来,去往哪里?,只需解决这两个问题即可,配置文件为 filebeat.yml 输入输出配置均在该配置文件完成配置。
1、配置输入

2、配置输出

3、启动 filebeat
创建一个测试容器(nginx)
docker run -itd --name nginx --restart always nginx:latest
然后启动 filebeat 对 nginx 容器日志进行采集并将采集的日志内容输出到 es 进行存储。
./filebeat -e -c filebeat.yml

3.3 验证采集数据
再次请求接口 http://192.168.56.120:9200/_search?pretty,如下图,此时就已经采集到数据了(看 hits 中已经获取到了 JSON 格式数据了),其中索引名为 filebeat-6.8.23-2023.10.01 及监控的日志目录。

3.4 Kibana 数据展示
3.4.1 创建索引模式
有了数据,为了能将日志数据更直观地显示出来,我们可以配置 Kibana 来查询和分析 es 中存储的日志数据。
首先看看 kibana 上的索引管理:
数据已经被采集上来了。

接下来就是创建索引模式(index patterns):
注意:你创建的索引模式必须要与上图已经存在的 index 匹配得上(如下图 Success 字样)。

继续点击Next step 按钮,选择 @timestamp

点击创建即可!

3.4.2 Kibana 查看日志
点击菜单栏的Discover即可看到我们刚刚创建的索引模式,如下图所示:

以上就是如何将 docker 容器日志输出到 elk 栈的基本流程,更多关于 kibana 的相关查询、图表制作,大家可以看我前面的文章《kibana 基础操作》。
总结
其实这个流程还是很简单的,本次作文的目的就是让你知道 Docker 日志是如何管理的,且是如何结合 ELK 技术栈应用的。但要注意的是,在实际生产中架构并没这么简单,服务基本上是分布式进行部署的,但是以上案例的基本流程还是要搞懂的。好了,希望本文能够帮你更好地理解 Docker 日志的管理方式。
—END
相关文章:
Docker 日志管理 - ELK
Author:rab 目录 前言一、Docker 日志驱动二、ELK 套件部署三、Docker 容器日志采集3.1 部署 Filebeat3.2 配置 Filebeat3.3 验证采集数据3.4 Kibana 数据展示3.4.1 创建索引模式3.4.2 Kibana 查看日志 总结 前言 如何查看/管理 Docker 运行容器的日志?…...
windows系统下利用python对指定文件夹下面的所有文件的创建时间进行修改
windows系统下利用python对指定文件夹下面的所有文件的创建时间进行修改 不知道其他的朋友们有没有这个需求哈,反正咱家是有这个需求 需求1、当前有大量的文件需要更改文件生成的时间,因为不可告知的原因,当前的文件创建时间是不能满足使用的…...
线性表的链式表示——单链表;头插,尾插,按值查找,按序号查找,插入,删除;
#include <iostream> #include <algorithm>//fill() #define InitSize 5using namespace std;/*线性表:链式表示——单链表;头插,尾插,按值查找,按序号查找,插入,删除*/ typedef st…...
【Spring Cloud系统】- Zookeer特性与使用场景
【Spring Cloud系统】- Zookeer特性与使用场景 一、概述 Zookeeper是一个分布式服务框架,是Apache Hadoop的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题。如:统一命名服务、状态同步服务、集群管理、分布式应用配置…...
最新AI智能创作系统源码SparkAi系统V2.6.3/AI绘画系统/支持GPT联网提问/支持Prompt应用/支持国内AI模型
一、智能AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统,已支持OpenAIGPT全模型国内AI全模型,已支持国内AI模型 百度文心一言、微软Azure、阿里云通义千问模型、清华智谱AIChatGLM、科大讯飞星火大模型等。本期针对源码…...
R | R包默认安装路径的查看及修改
R | R包默认安装路径的查看及修改 一、R包安装位置查看二、已安装R包查询三、R包安装位置修改四、R包安装位置永久修改 在【R: R package安装的几种方式】【R: R版本更新及R包迁移(详细步骤)】两篇文章中介绍过R包的常见安装方式,以及在不同R…...
将conda虚拟环境打包并集成到singularity镜像中
1. 使用yml文件打包 conda activate your_env conda env export > environment.yml编写cond.def文件 Bootstrap: dockerFrom: continuumio/miniconda3%filesenvironment.yml%post/opt/conda/bin/conda env create -f environment.yml%runscriptexec /opt/conda/envs/$(hea…...
Android Studio 是如何和我们的手机共享剪贴板的
背景 近期完成了target33的项目适配升级,随着AGP和gradle的版本升级,万年老版本Android Studio(后文简称AS)也顺便升级到了最新版Android Studio Giraffe | 2022.3.1,除了新UI外,最让我好奇的是这次的Running Devices功能(官方也称为Device mirroring)可以控制真机了. 按照操…...
大数据面试题:Spark和MapReduce之间的区别?各自优缺点?
面试题来源: 《大数据面试题 V4.0》 大数据面试题V3.0,523道题,679页,46w字 可回答: 1)spark和maprecude的对比;2)mapreduce与spark优劣好处 问过的一些公司:阿里云…...
【开发篇】十八、SpringBoot整合ActiveMQ
文章目录 1、安装ActiveMQ2、整合3、发送消息到队列4、使用消息监听器对消息队列监听5、流程性业务消息消费完转入下一个消息队列6、发布订阅模型 1、安装ActiveMQ docker安装 docker pull webcenter/activemqdocker run -d --name activemq -p 61616:61616 -p 8161:8161 webce…...
QTcpSocket 接收数据实时性问题
一、开发背景 使用 Qt 的 QTcpSocket 接收数据的时候发现数据接收出现粘包的现象,并且实时性很差,通过日志的时间戳发现数据接收的误差在 100ms 以内。 二、开发环境 Qt5.12.2 QtCreator4.8.2 三、实现步骤 在 socket 连接的槽函数设置接收延时时间&…...
前端el-select 单选和多选
el-select单选 <el-form-item label"部门名称" prop"departId"><el-select v-model"dataForm.departId" placeholder"请选择" clearable:style{ "width": "100%" } :multiple"false" filtera…...
【MySQL】Linux 中 MySQL 环境的安装与卸载
文章目录 Linux 中 MySQL 环境的卸载Linux 中 MySQL 环境的安装 Linux 中 MySQL 环境的卸载 在安装 MySQL 前,我们需要先将系统中以前的环境给卸载掉。 1、查看以前系统中安装的 MySQL rpm -qa | grep mysql2、卸载这些 MySQL rpm -qa | grep mysql | args yum …...
机器学习算法分类
学习视频黑马程序员 监督学习 无监督学习 半监督学习 强化学习...
Mysql bin-log日志恢复数据与物理备份-xtrabackup
主打一个数据备份与恢复 binlog与xtarbackup bin-log日志恢复开启bin-log配置bin-log日志恢复 物理备份-xtrabackup三种备份方式安装xtrabackup备份全量备份增量备份差异备份 bin-log日志恢复 bin-log 日志,就记录对数据库进行的操作,什么增删改的操作全…...
JAVA 学习笔记 2年经验
文章目录 基础String、StringBuffer、StringBuilder的区别jvm堆和栈的区别垃圾回收标记阶段清除阶段 异常类型双亲委派机制hashmap和hashtable concurrentHashMap 1.7和1.8的区别java的数据结构排序算法,查找算法堆排序 ThreadLocal单例模式常量池synchronizedsynch…...
网络安全--安全认证、IPSEC技术
目录 1. 什么是数据认证,有什么作用,有哪些实现的技术手段? 2. 什么是身份认证,有什么作用,有哪些实现的技术手段? 3. 什么是VPN技术? 4. VPN技术有哪些分类? 5. IPSEC技术能够…...
Mysql——创建数据库,对表的创建及字段定义、数据录入、字段增加及删除、重命名表。
一.创建数据库 create database db_classics default charsetutf8mb4;//创建数据库 use db_classics;//使用该数据库二.对表的创建及字段定义 create table if not exists t_hero ( id int primary key auto_increment, Name varchar(100) not null unique, Nickname varchar(1…...
第1篇 目标检测概述 —(4)目标检测评价指标
前言:Hello大家好,我是小哥谈。目标检测评价指标是用来衡量目标检测算法性能的指标,可以分为两类,包括框级别评价指标和像素级别评价指标。本节课就给大家重点介绍下目标检测中的相关评价指标及其含义,希望大家学习之后…...
前端和后端是Web开发中的两个不同的领域,你更倾向于哪一种?
前端和后端是Web开发中的两个不同的领域,你更倾向于哪一种? 你可以从以下几个维度谈谈你对前端开发和后端开发的看法。此为内容创作模板,在发布之前请将不必要的内容删除 一、引言 提示:可对前端开发和后端开发进行简要介绍并提出…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...
[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...
Module Federation 和 Native Federation 的比较
前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...
网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...
什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...
基于TurtleBot3在Gazebo地图实现机器人远程控制
1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...
