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开发中的两个不同的领域,你更倾向于哪一种? 你可以从以下几个维度谈谈你对前端开发和后端开发的看法。此为内容创作模板,在发布之前请将不必要的内容删除 一、引言 提示:可对前端开发和后端开发进行简要介绍并提出…...

wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...

Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
Java编程之桥接模式
定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...

使用SSE解决获取状态不一致问题
使用SSE解决获取状态不一致问题 1. 问题描述2. SSE介绍2.1 SSE 的工作原理2.2 SSE 的事件格式规范2.3 SSE与其他技术对比2.4 SSE 的优缺点 3. 实战代码 1. 问题描述 目前做的一个功能是上传多个文件,这个上传文件是整体功能的一部分,文件在上传的过程中…...
【FTP】ftp文件传输会丢包吗?批量几百个文件传输,有一些文件没有传输完整,如何解决?
FTP(File Transfer Protocol)本身是一个基于 TCP 的协议,理论上不会丢包。但 FTP 文件传输过程中仍可能出现文件不完整、丢失或损坏的情况,主要原因包括: ✅ 一、FTP传输可能“丢包”或文件不完整的原因 原因描述网络…...

对象回调初步研究
_OBJECT_TYPE结构分析 在介绍什么是对象回调前,首先要熟悉下结构 以我们上篇线程回调介绍过的导出的PsProcessType 结构为例,用_OBJECT_TYPE这个结构来解析它,0x80处就是今天要介绍的回调链表,但是先不着急,先把目光…...

边缘计算网关提升水产养殖尾水处理的远程运维效率
一、项目背景 随着水产养殖行业的快速发展,养殖尾水的处理成为了一个亟待解决的环保问题。传统的尾水处理方式不仅效率低下,而且难以实现精准监控和管理。为了提升尾水处理的效果和效率,同时降低人力成本,某大型水产养殖企业决定…...

react菜单,动态绑定点击事件,菜单分离出去单独的js文件,Ant框架
1、菜单文件treeTop.js // 顶部菜单 import { AppstoreOutlined, SettingOutlined } from ant-design/icons; // 定义菜单项数据 const treeTop [{label: Docker管理,key: 1,icon: <AppstoreOutlined />,url:"/docker/index"},{label: 权限管理,key: 2,icon:…...