当前位置: 首页 > news >正文

Docker 日志管理 - ELK

image-20220909094036787

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 logsdocker 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"

image-20230930194711908

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

image-20230930200508531

更多日志驱动请看官方文档: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

image-20230930202658514

3、ELK 验证

http://192.168.56.120:5601/

image-20231001115314127

三、Docker 容器日志采集

3.1 部署 Filebeat

目前是没有任何日志数据的,如下图 kibana 也是没有发现任何监控数据:

image-20231001115400889

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

image-20230930233135999

可见,es 并没有日志相关的 index(如上图采样数据 hits 为空的),接下来我们将通过 filebeat 进行数据采集,并将日志导入 ELK。至于为什么要使用 filebeat,我之前的博客已经有提到过,一句话“主打一个轻量”

这里的部署就不再重复造轮子了,具体部署就看我前面《你真的了解 Docker 日志吗?》中的文章中的2.7.2 部署及应用部分。

3.2 配置 Filebeat

配置也很简单,无非就是两个问题:日志从哪里来,去往哪里?,只需解决这两个问题即可,配置文件为 filebeat.yml 输入输出配置均在该配置文件完成配置。

1、配置输入

image-20231001001348593

2、配置输出

image-20231001001300279

3、启动 filebeat

创建一个测试容器(nginx)

docker run -itd --name nginx --restart always nginx:latest

然后启动 filebeat 对 nginx 容器日志进行采集并将采集的日志内容输出到 es 进行存储。

./filebeat -e -c filebeat.yml

image-20231001004304567

3.3 验证采集数据

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

image-20231001004156245

3.4 Kibana 数据展示

3.4.1 创建索引模式

有了数据,为了能将日志数据更直观地显示出来,我们可以配置 Kibana 来查询和分析 es 中存储的日志数据。

首先看看 kibana 上的索引管理:

数据已经被采集上来了。

image-20231001115558812

接下来就是创建索引模式(index patterns):

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

image-20231001120301253

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

image-20231001120637597

点击创建即可!

image-20231001120903408

3.4.2 Kibana 查看日志

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

image-20231001124935321

以上就是如何将 docker 容器日志输出到 elk 栈的基本流程,更多关于 kibana 的相关查询、图表制作,大家可以看我前面的文章《kibana 基础操作》。

总结

其实这个流程还是很简单的,本次作文的目的就是让你知道 Docker 日志是如何管理的,且是如何结合 ELK 技术栈应用的。但要注意的是,在实际生产中架构并没这么简单,服务基本上是分布式进行部署的,但是以上案例的基本流程还是要搞懂的。好了,希望本文能够帮你更好地理解 Docker 日志的管理方式。

—END

相关文章:

Docker 日志管理 - ELK

Author&#xff1a;rab 目录 前言一、Docker 日志驱动二、ELK 套件部署三、Docker 容器日志采集3.1 部署 Filebeat3.2 配置 Filebeat3.3 验证采集数据3.4 Kibana 数据展示3.4.1 创建索引模式3.4.2 Kibana 查看日志 总结 前言 如何查看/管理 Docker 运行容器的日志&#xff1f;…...

windows系统下利用python对指定文件夹下面的所有文件的创建时间进行修改

windows系统下利用python对指定文件夹下面的所有文件的创建时间进行修改 不知道其他的朋友们有没有这个需求哈&#xff0c;反正咱家是有这个需求 需求1、当前有大量的文件需要更改文件生成的时间&#xff0c;因为不可告知的原因&#xff0c;当前的文件创建时间是不能满足使用的…...

线性表的链式表示——单链表;头插,尾插,按值查找,按序号查找,插入,删除;

#include <iostream> #include <algorithm>//fill() #define InitSize 5using namespace std;/*线性表&#xff1a;链式表示——单链表&#xff1b;头插&#xff0c;尾插&#xff0c;按值查找&#xff0c;按序号查找&#xff0c;插入&#xff0c;删除*/ typedef st…...

【Spring Cloud系统】- Zookeer特性与使用场景

【Spring Cloud系统】- Zookeer特性与使用场景 一、概述 Zookeeper是一个分布式服务框架&#xff0c;是Apache Hadoop的一个子项目&#xff0c;它主要是用来解决分布式应用中经常遇到的一些数据管理问题。如&#xff1a;统一命名服务、状态同步服务、集群管理、分布式应用配置…...

最新AI智能创作系统源码SparkAi系统V2.6.3/AI绘画系统/支持GPT联网提问/支持Prompt应用/支持国内AI模型

一、智能AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统&#xff0c;已支持OpenAIGPT全模型国内AI全模型&#xff0c;已支持国内AI模型 百度文心一言、微软Azure、阿里云通义千问模型、清华智谱AIChatGLM、科大讯飞星火大模型等。本期针对源码…...

R | R包默认安装路径的查看及修改

R | R包默认安装路径的查看及修改 一、R包安装位置查看二、已安装R包查询三、R包安装位置修改四、R包安装位置永久修改 在【R: R package安装的几种方式】【R: R版本更新及R包迁移&#xff08;详细步骤&#xff09;】两篇文章中介绍过R包的常见安装方式&#xff0c;以及在不同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之间的区别?各自优缺点?

面试题来源&#xff1a; 《大数据面试题 V4.0》 大数据面试题V3.0&#xff0c;523道题&#xff0c;679页&#xff0c;46w字 可回答&#xff1a; 1&#xff09;spark和maprecude的对比&#xff1b;2&#xff09;mapreduce与spark优劣好处 问过的一些公司&#xff1a;阿里云…...

【开发篇】十八、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 接收数据的时候发现数据接收出现粘包的现象&#xff0c;并且实时性很差&#xff0c;通过日志的时间戳发现数据接收的误差在 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 前&#xff0c;我们需要先将系统中以前的环境给卸载掉。 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 日志&#xff0c;就记录对数据库进行的操作&#xff0c;什么增删改的操作全…...

JAVA 学习笔记 2年经验

文章目录 基础String、StringBuffer、StringBuilder的区别jvm堆和栈的区别垃圾回收标记阶段清除阶段 异常类型双亲委派机制hashmap和hashtable concurrentHashMap 1.7和1.8的区别java的数据结构排序算法&#xff0c;查找算法堆排序 ThreadLocal单例模式常量池synchronizedsynch…...

网络安全--安全认证、IPSEC技术

目录 1. 什么是数据认证&#xff0c;有什么作用&#xff0c;有哪些实现的技术手段&#xff1f; 2. 什么是身份认证&#xff0c;有什么作用&#xff0c;有哪些实现的技术手段&#xff1f; 3. 什么是VPN技术&#xff1f; 4. VPN技术有哪些分类&#xff1f; 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)目标检测评价指标

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。目标检测评价指标是用来衡量目标检测算法性能的指标&#xff0c;可以分为两类&#xff0c;包括框级别评价指标和像素级别评价指标。本节课就给大家重点介绍下目标检测中的相关评价指标及其含义&#xff0c;希望大家学习之后…...

前端和后端是Web开发中的两个不同的领域,你更倾向于哪一种?

前端和后端是Web开发中的两个不同的领域&#xff0c;你更倾向于哪一种&#xff1f; 你可以从以下几个维度谈谈你对前端开发和后端开发的看法。此为内容创作模板&#xff0c;在发布之前请将不必要的内容删除 一、引言 提示&#xff1a;可对前端开发和后端开发进行简要介绍并提出…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中&#xff0c;时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志&#xff0c;到供应链系统的物流节点时间戳&#xff0c;时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库&#xff0c;其日期时间类型的…...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式&#xff1a;数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新&#xff1a;构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议&#xff1a;基于LayerZero协议实现以太坊、Solana等公链资产互通&#xff0c;通过零知…...

C++使用 new 来创建动态数组

问题&#xff1a; 不能使用变量定义数组大小 原因&#xff1a; 这是因为数组在内存中是连续存储的&#xff0c;编译器需要在编译阶段就确定数组的大小&#xff0c;以便正确地分配内存空间。如果允许使用变量来定义数组的大小&#xff0c;那么编译器就无法在编译时确定数组的大…...

云原生安全实战:API网关Kong的鉴权与限流详解

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关&#xff08;API Gateway&#xff09; API网关是微服务架构中的核心组件&#xff0c;负责统一管理所有API的流量入口。它像一座…...

安卓基础(Java 和 Gradle 版本)

1. 设置项目的 JDK 版本 方法1&#xff1a;通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分&#xff0c;设置 Gradle JDK 方法2&#xff1a;通过 Settings File → Settings... (或 CtrlAltS)…...

用递归算法解锁「子集」问题 —— LeetCode 78题解析

文章目录 一、题目介绍二、递归思路详解&#xff1a;从决策树开始理解三、解法一&#xff1a;二叉决策树 DFS四、解法二&#xff1a;组合式回溯写法&#xff08;推荐&#xff09;五、解法对比 递归算法是编程中一种非常强大且常见的思想&#xff0c;它能够优雅地解决很多复杂的…...

HTML中各种标签的作用

一、HTML文件主要标签结构及说明 1. <&#xff01;DOCTYPE html> 作用&#xff1a;声明文档类型&#xff0c;告知浏览器这是 HTML5 文档。 必须&#xff1a;是。 2. <html lang“zh”>. </html> 作用&#xff1a;包裹整个网页内容&#xff0c;lang"z…...

day51 python CBAM注意力

目录 一、CBAM 模块简介 二、CBAM 模块的实现 &#xff08;一&#xff09;通道注意力模块 &#xff08;二&#xff09;空间注意力模块 &#xff08;三&#xff09;CBAM 模块的组合 三、CBAM 模块的特性 四、CBAM 模块在 CNN 中的应用 一、CBAM 模块简介 在之前的探索中…...