当前位置: 首页 > 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

http://www.lryc.cn/news/184723.html

相关文章:

  • windows系统下利用python对指定文件夹下面的所有文件的创建时间进行修改
  • 线性表的链式表示——单链表;头插,尾插,按值查找,按序号查找,插入,删除;
  • 【Spring Cloud系统】- Zookeer特性与使用场景
  • 最新AI智能创作系统源码SparkAi系统V2.6.3/AI绘画系统/支持GPT联网提问/支持Prompt应用/支持国内AI模型
  • R | R包默认安装路径的查看及修改
  • 将conda虚拟环境打包并集成到singularity镜像中
  • Android Studio 是如何和我们的手机共享剪贴板的
  • 大数据面试题:Spark和MapReduce之间的区别?各自优缺点?
  • 【开发篇】十八、SpringBoot整合ActiveMQ
  • QTcpSocket 接收数据实时性问题
  • 前端el-select 单选和多选
  • 【MySQL】Linux 中 MySQL 环境的安装与卸载
  • 机器学习算法分类
  • Mysql bin-log日志恢复数据与物理备份-xtrabackup
  • JAVA 学习笔记 2年经验
  • 网络安全--安全认证、IPSEC技术
  • Mysql——创建数据库,对表的创建及字段定义、数据录入、字段增加及删除、重命名表。
  • 第1篇 目标检测概述 —(4)目标检测评价指标
  • 前端和后端是Web开发中的两个不同的领域,你更倾向于哪一种?
  • SpringBoot集成MyBatis-Plus实现增删改查
  • 基于STM32设计的智能水产养殖系统(华为云IOT)
  • 运行软件找不到mfc140u.dll怎么解决,mfc140u.dll是什么文件
  • 数据结构(2-5~2-8)
  • 浅谈智能安全配电装置在老年人建筑中的应用
  • 【ES】笔记-ES6模块化
  • 阿里云/腾讯云国际站代理:腾讯云国际站开户购买EdgeOne发布,安全加速一体化方案获业内认可
  • AIGC AI绘画 Midjourney 的详细使用手册
  • Lua系列文章(1)---Lua5.4参考手册学习总结
  • Leetcode.121 买卖股票的最佳时机
  • IDE相关设置和插件