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

【Docker】进阶之路:(十)Docker日志管理

【Docker】进阶之路:(十)Docker日志管理

  • 查看引擎日志
  • 查看容器日志
  • 清理容器日志
  • 日志驱动程序
    • 日志驱动程序概述
    • local日志驱动
    • json-file 日志驱动
    • syslog 日志驱动
    • 日志驱动的选择

Docker 容器日志分为两类:引擎日志和容器日志。Docker引擎日志是 Docker本身运行的日志, 「容器日志是各个容器内产生的日志。

查看引擎日志

CentOS 系统下的 docker 引擎日志一般由 systemd 管理,可通过 journalctl -u docker.service 命令

[root@docker ~]# journalctl -u docker.service
-- Logs begin at 五 2023-12-08 14:31:42 CST, end at 五 2023-12-08 18:01:01 CST. --
12月 08 14:32:30 docker systemd[1]: Starting Docker Application Container Engine...
12月 08 14:32:32 docker dockerd[1613]: time="2023-12-08T14:32:32.488867039+08:00" level=info msg="Starting up"
12月 08 14:32:36 docker dockerd[1613]: time="2023-12-08T14:32:36.469622664+08:00" level=info msg="[graphdriver] using prior storage driver: overlay2"
12月 08 14:32:37 docker dockerd[1613]: time="2023-12-08T14:32:37.832745699+08:00" level=info msg="Loading containers: start."
12月 08 14:32:38 docker dockerd[1613]: time="2023-12-08T14:32:38.505509615+08:00" level=info msg="Firewalld: docker zone already exists, returning"
12月 08 14:32:39 docker dockerd[1613]: time="2023-12-08T14:32:39.378392400+08:00" level=info msg="Firewalld: interface docker0 already part of docker zone, returning"
12月 08 14:32:39 docker dockerd[1613]: time="2023-12-08T14:32:39.834554819+08:00" level=info msg="Removing stale sandbox c556776518828de2c76a5dfa6ad9b4c85d05cf1a4db4fef4693d46218a5e609f (94bdab7fccd4c6138825d128143e144b0932f02d6d73046026156cdb651afd93)"
12月 08 14:32:39 docker dockerd[1613]: time="2023-12-08T14:32:39.930431986+08:00" level=warning msg="Error (Unable to complete atomic operation, key modified) deleting object [endpoint b70b5e0d8b0ef67ea219f8125de513cfc17566e721ac192e76b049bf5a957fb6 a3e35b9e5ed87b8dd6ae96a18ffee459a26107f6c532a4b11d7146f95987f972], retrying...."
12月 08 14:32:40 docker dockerd[1613]: time="2023-12-08T14:32:40.095854667+08:00" level=info msg="Default bridge (docker0) is assigned with an IP address 172.17.0.0/16. Daemon option --bip can be used to set a preferred IP address"
12月 08 14:32:40 docker dockerd[1613]: time="2023-12-08T14:32:40.208657317+08:00" level=info msg="Firewalld: interface docker0 already part of docker zone, returning"
12月 08 14:32:42 docker dockerd[1613]: time="2023-12-08T14:32:42.783924317+08:00" level=info msg="Loading containers: done."
12月 08 14:32:43 docker dockerd[1613]: time="2023-12-08T14:32:43.146322478+08:00" level=info msg="Docker daemon" commit=311b9ff graphdriver=overlay2 version=24.0.7
12月 08 14:32:43 docker dockerd[1613]: time="2023-12-08T14:32:43.146485575+08:00" level=info msg="Daemon has completed initialization"
12月 08 14:32:49 docker dockerd[1613]: time="2023-12-08T14:32:49.217343665+08:00" level=info msg="API listen on /run/docker.sock"
12月 08 14:32:49 docker systemd[1]: Started Docker Application Container Engine.
12月 08 15:23:46 docker dockerd[1613]: time="2023-12-08T15:23:46.513482123+08:00" level=info msg="Container failed to exit within 10s of signal 15 - using the force" container=94bdab7fccd4c6138825d128143e144b0932f02d6d73046026156cdb651afd93
12月 08 15:23:46 docker dockerd[1613]: time="2023-12-08T15:23:46.615199323+08:00" level=info msg="ignoring event" container=94bdab7fccd4c6138825d128143e144b0932f02d6d73046026156cdb651afd93 module=libcontainerd namespace=moby topic=/tasks/delete type="*events.TaskDelete"
12月 08 15:23:46 docker dockerd[1613]: time="2023-12-08T15:23:46.651098851+08:00" level=warning msg="ShouldRestart failed, container will not be restarted" container=94bdab7fccd4c6138825d128143e144b0932f02d6d73046026156cdb651afd93 daemonShuttingDown=false error="restart canceled" execDuration=51m3.868806588s exitStatus="{137 2023-
12月 08 15:23:46 docker dockerd[1613]: time="2023-12-08T15:23:46.652223124+08:00" level=warning msg="failed to close stdin: task 94bdab7fccd4c6138825d128143e144b0932f02d6d73046026156cdb651afd93 not found: not found"
12月 08 15:37:04 docker dockerd[1613]: time="2023-12-08T15:37:04.223369618+08:00" level=info msg="Container failed to exit within 10s of signal 15 - using the force" container=aacb5bb995f445c8af7fdb2080bb07e8adc6631cce6e912b01147bb35cee36bf
12月 08 15:37:04 docker dockerd[1613]: time="2023-12-08T15:37:04.268250290+08:00" level=info msg="ignoring event" container=aacb5bb995f445c8af7fdb2080bb07e8adc6631cce6e912b01147bb35cee36bf module=libcontainerd namespace=moby topic=/tasks/delete type="*events.TaskDelete"
12月 08 15:37:04 docker dockerd[1613]: time="2023-12-08T15:37:04.286252145+08:00" level=warning msg="failed to close stdin: task aacb5bb995f445c8af7fdb2080bb07e8adc6631cce6e912b01147bb35cee36bf not found: not found"
12月 08 15:50:06 docker dockerd[1613]: time="2023-12-08T15:50:06.948356892+08:00" level=info msg="ignoring event" container=04a2094843d3dc1c8b2593ebb037958eb7b503de9dcab81d4c445457d7b8c3aa module=libcontainerd namespace=moby topic=/tasks/delete type="*events.TaskDelete"
12月 08 15:50:06 docker dockerd[1613]: time="2023-12-08T15:50:06.961873949+08:00" level=warning msg="failed to close stdin: task 04a2094843d3dc1c8b2593ebb037958eb7b503de9dcab81d4c445457d7b8c3aa not found: not found"
12月 08 16:00:33 docker dockerd[1613]: time="2023-12-08T16:00:33.790717267+08:00" level=info msg="ignoring event" container=48965c452ca1e94d7dfa8466b762b2cb914b77301ed6a66dd78b63f17bb6c3d4 module=libcontainerd namespace=moby topic=/tasks/delete type="*events.TaskDelete"
12月 08 16:00:33 docker dockerd[1613]: time="2023-12-08T16:00:33.803760333+08:00" level=warning msg="failed to close stdin: task 48965c452ca1e94d7dfa8466b762b2cb914b77301ed6a66dd78b63f17bb6c3d4 not found: not found"
12月 08 16:01:04 docker dockerd[1613]: time="2023-12-08T16:01:04.307850681+08:00" level=info msg="Firewalld: interface br-fadc61adc807 already part of docker zone, returning"
12月 08 16:04:59 docker dockerd[1613]: time="2023-12-08T16:04:59.048337328+08:00" level=info msg="Firewalld: interface br-77a453e66636 already part of docker zone, returning"
12月 08 16:13:51 docker dockerd[1613]: time="2023-12-08T16:13:51.065772600+08:00" level=info msg="ignoring event" container=6b62a768d0371d2c80c884b8140db3f001915b1ed215d394993cabe1e7c01836 module=libcontainerd namespace=moby topic=/tasks/delete type="*events.TaskDelete"
12月 08 16:13:51 docker dockerd[1613]: time="2023-12-08T16:13:51.080526973+08:00" level=warning msg="failed to close stdin: task 6b62a768d0371d2c80c884b8140db3f001915b1ed215d394993cabe1e7c01836 not found: not found"
12月 08 16:25:59 docker dockerd[1613]: time="2023-12-08T16:25:59.307416662+08:00" level=info msg="ignoring event" container=03895d7695377f480ef2df607f91d91554ce25c10b889b9a672cba356b2504f4 module=libcontainerd namespace=moby topic=/tasks/delete type="*events.TaskDelete"
12月 08 16:25:59 docker dockerd[1613]: time="2023-12-08T16:25:59.323151718+08:00" level=warning msg="failed to close stdin: task 03895d7695377f480ef2df607f91d91554ce25c10b889b9a672cba356b2504f4 not found: not found"
12月 08 16:36:18 docker dockerd[1613]: time="2023-12-08T16:36:18.232611440+08:00" level=info msg="ignoring event" container=fadd2aa8e0794040e9f8e513b225978cb41e241587e866af34c4cd859796a91d module=libcontainerd namespace=moby topic=/tasks/delete type="*events.TaskDelete"
12月 08 16:36:18 docker dockerd[1613]: time="2023-12-08T16:36:18.261760448+08:00" level=warning msg="failed to close stdin: task fadd2aa8e0794040e9f8e513b225978cb41e241587e866af34c4cd859796a91d not found: not found"
12月 08 16:38:22 docker dockerd[1613]: time="2023-12-08T16:38:22.763764859+08:00" level=info msg="Firewalld: interface br-438b3f575ef1 already part of docker zone, returning"
12月 08 16:45:11 docker dockerd[1613]: time="2023-12-08T16:45:11.875388247+08:00" level=error msg="Not continuing with pull after error: context canceled"
12月 08 16:55:56 docker dockerd[1613]: time="2023-12-08T16:55:56.899939948+08:00" level=info msg="Container failed to exit within 10s of signal 15 - using the force" container=7b0d2c995abb7d77603cbd85f10b5e0cb661c2f10f3020f9c8e01d1e22cd72c7
12月 08 16:55:56 docker dockerd[1613]: time="2023-12-08T16:55:56.959024527+08:00" level=info msg="ignoring event" container=7b0d2c995abb7d77603cbd85f10b5e0cb661c2f10f3020f9c8e01d1e22cd72c7 module=libcontainerd namespace=moby topic=/tasks/delete type="*events.TaskDelete"
12月 08 16:55:56 docker dockerd[1613]: time="2023-12-08T16:55:56.986586495+08:00" level=warning msg="failed to close stdin: task 7b0d2c995abb7d77603cbd85f10b5e0cb661c2f10f3020f9c8e01d1e22cd72c7 not found: not found"
12月 08 17:01:58 docker dockerd[1613]: time="2023-12-08T17:01:58.248339774+08:00" level=info msg="Firewalld: interface br-8de5141d76ac already part of docker zone, returning"
12月 08 17:05:30 docker dockerd[1613]: time="2023-12-08T17:05:30.148720212+08:00" level=info msg="Firewalld: interface br-2b29b0dd322b already part of docker zone, returning"
12月 08 17:05:48 docker dockerd[1613]: time="2023-12-08T17:05:48.136838304+08:00" level=error msg="Handler for POST /v1.43/containers/3d9de04e05f2bb555289fa17e787e822634b6152e8d25b88d0f49916bd3ba690/start returned error: Invalid address 172.18.0.6: It does not belong to any of this network's subnets"
12月 08 17:20:07 docker dockerd[1613]: time="2023-12-08T17:20:07.864689212+08:00" level=info msg="ignoring event" container=76346a72fe318ac14d921188281203b05659b365792fb2f1be7419b3cf19d63a module=libcontainerd namespace=moby topic=/tasks/delete type="*events.TaskDelete"
12月 08 17:20:07 docker dockerd[1613]: time="2023-12-08T17:20:07.878362951+08:00" level=warning msg="failed to close stdin: task 76346a72fe318ac14d921188281203b05659b365792fb2f1be7419b3cf19d63a not found: not found"
[root@docker ~]# 

查看容器日志

通常,容器日志指容器的标准输出,在容器启动失败或者其他场景,可以通过控制台查看 日志,用于定位容器相关问题。
通过 docker logs 命令可以查看容器的日志。命令格式如下:

docker 1ogs OPTIONS]CONTAINER

选项说明:
● --details 显示更多的信息
● -f,–follow 跟踪事实日志
● --since 显示某个timestamp之后的日志,或相对时间,如36m(即36分钟)
● --tail string 从日志末尾显示多少行日志,默认是all
● -t,–timestam 显示时间戳
● --until string 显示自摸个timestamp之前的日志,或者相对时间,如36m(即36分钟)

查看实时日志示例如下:

docker logs -f -t --since="2017-05-31" --tail=10 vm2

● --since 此参数指定了输出日志开始日期,即只输出指定日期之后的日志。
● -f 查看实时日志。
● -t 查看日志产生的日期。
● -tail=10 查看最后的10条日志。
●vm2 容器名称。

查看指定时间后的日志,只显示最后100行:

docker logs -f -t --since="2018-02-08" --tail=100 CONTAINER_ID

查看最近30分钟的日志:

docker logs --since=30m CONTAINER_ID

查看某时间之后的日志:

docker logs -t --since="2018-02-08T13:23:37" CONTAINER_ID

查看某时间段日志:

docker logs -t --since="2018-02-08T13:23:37" --until="2018-02-09T12:23:37" CONTAINER_ID

跟踪查看容器vm2的日志输出

[root@docker ~]# docker logs -f vm2
[root@280a32d6a877 /]# ip addr
bash: ip: command not found
[root@280a32d6a877 /]# docker run -it --name vm3 --network=my_net2 --ip=172.22.18.10 centos:7 
bash: docker: command not found
[root@280a32d6a877 /]# docker run -it --name vm3 --network=my_net2 --ip=172.22.18.10 centos:7 
bash: docker: command not found

查看容器 vm2在2016年7月1日之后的最新10条日志:

[root@docker ~]# docker logs --since="2016-07-01" --tail=10 vm2
[root@280a32d6a877 /]# ip addr
bash: ip: command not found
[root@280a32d6a877 /]# docker run -it --name vm3 --network=my_net2 --ip=172.22.18.10 centos:7 
bash: docker: command not found
[root@280a32d6a877 /]# docker run -it --name vm3 --network=my_net2 --ip=172.22.18.10 centos:7 
bash: docker: command not found
[root@docker ~]# 

Docker 日志是跟随容器而产生的,如果删除了某个容器,那么相应的日志文件也会随着被删除。
当输入 docker logs 命令的时候会转换为 Docker Client 向 Docker Daemon 发起请求,Docker
Daemon 在运行容器时会去创建一个协程(goroutine), 绑定了整个容器内所有进程的标准输出文 件描述符。因此,容器内所有的应用只要是标准输出日志,都会被 goroutine 接收,Docker Daemon
会根据容器 ID 和日志类型读取日志内容,最终会输出到用户终端上并且通过 JSON 格式存放在 var/lib/docker/containers目录下。

清理容器日志

如果 Docker容器正在运行,那么使用rm-rf方式删除日志文件后,通过 df -h 会发现磁盘空 间并没有释放。原因是在 Linux 或者 UNIX系统中,通过 rm -rf命令或者文件管理器删除文件,只 会从文件系统的目录结构上解除链接(unlink)。如果文件是被打开的(至少有一个进程正在使用), 那么进程将仍然可以读取该文件,磁盘空间也一直被占用。因此,正确的方式是使用命令:

cat /dev/null > *-json.log

当然也可以通过 rm -rf 删除后再重启 Docker。
日志清理脚本 clean_docker_log.sh 示例如下:

!/bin/sh
[echo  "=========  docker containers logs file size  ========="                                      
logs=$(find /var/lib/docker/containers/ -name *-ison.log)
for log in slogsdo1s -1h slogdone
chmod +x docker_log_size.sh
./docker_log_size.sh

但是,这样清理之后,随着时间的推移,容器日志会不断堆积。
为了解决日志清理的问题,需要限制容器服务的日志大小。这个通过配置容器 docker-compos
的 max-size 选项来实现:

centos:image:centos:7restart:always1ogging:driver:"json-file"options:max-size:"5g"

重启 vm2 容器之后,其日志文件的大小就被限制在5GB。
接下来看看全局设置日志大小的方法。新建/etc/docker/daemon json 文件,若已经存在该文件。
则无须新建。添加log-dirver 和log-opts 参数,示例如下:

vim /etc/docker/daemon.json"registry-mirrors":["http://f613ce8f.m.daocloud.io"],
"log-driver";"json-file",
"log-opts":("max-size":"500m","max-file":"3")

设 置 了max-size=500m, 意味着一个容器日志大小的上限是500MB 。设 置 max-file=3, 意味着
一个容器有三个日志,分别是id+,json、id+1,json、id+2,json。

systemct1 daemon-reload
systemctl  restart  docker

需要注意的是,设置的日志大小只对新建的容器有效。

日志驱动程序

日志驱动程序概述

Docker日志驱动程序有:
none:运行的容器没有日志,dockerlogs 命令也不返回任何输出。

  • local:日志以自定义格式存储,旨在实现最小开销。
  • json-file:日志格式为JSON。Docker 的默认日志记录驱动程序。
  • syslog:将日志消息写入syslog。该 syslog守护程序必须在主机上运行。
  • joumald:将日志消息写入journald。该jounald 守护程序必须在主机上运行。
  • gelf:将日志消息写入Graylog扩展日志格式(GELF) 端点,例如 Graylog或 Logstash。
  • fuentd:将日志消息写入fluentd(转发输入)。该fluentd 守护程序必须在主机上运行。
  • awslogs: 将日志消息写入Amazon CloudWatch Logs.
  • splunk: 使 用HTTP 事件收集器将日志消息写入splunk。
  • etwlogs: 将日志消息写为Windows 事件跟踪(ETW) 事件。仅适用于Windows 平台。
  • gcplogs:将日志消息写入Google Cloud Platform(GCP)Logging。
  • logentries: 将日志消息写入Rapid7 Logentries。 Docker 常用日志驱动程序:
  • json-file:日志格式换为JSON, 这是 Docker 默认的日志驱动程序。
  • jourmald: 将日志消息写入journald,journald 守护程序必须在主机上运行。
  • syslog: 将日志消息写入syslog,syslog 守护程序必须在主机上运行。
  • gelf:将日志消息写入Graylog扩展日志格式(GELF)端点,例如Graylog或 Logstash。

Docker CE版本,docker logs 命令仅适用于如下图 所示的驱动程序。

查看 Docker 当前日志驱动程序:

docker info | grep "Logging Driver" docker info --format '{{.LoggingDriver}}' json-file   

查看单个容器设置的日志驱动命令格式为:docker inspect -f '{{.HostConfig.LogConfig.Typely 容器ID:

docker inspect -f  '{{HostConfig.LogConfig.Type}}' 容器ID

Docker日志驱动全局配置文件在/etc/docker/daemon.json 中,为 JSON 格式:

{"log-driver":"syslog" //修改日志驱动类型
}

除了对所有容器更改配置之外,还可以针对单一容器设置日志驱动,使用参数–log-driver 修改
指定容器的日志驱动:

docker run -itd --log-driver syslog 镜像ID

local日志驱动

local 日志驱动记录从容器的 STDOUT/STDERR 输出,并写到主机硬盘。在默认情况下,local
日志驱动为每个容器保留100MB 的日志信息,并启用压缩来保存。
local 日志驱动存储位置为/var/ib/docker/containers/容器 ID/local-logs/,以 container.log命名。支持的驱动选项有:

{"log-driver":"local","log-opts":{"max-size":"10m"}
}

重启Docker服务后生效
单个容器日志驱动这只为-local,加–log-driver local

运行一个容器,设定日志驱动为local并运行命令 ping www.baidu.com

docker run -idt --log-driver local alpine ping www.baidu,com

查看运行的容器日志驱动是不是local

docker inspect -f  '{{HostConfig.LogConfig.Type}}' 容器ID 

json-file 日志驱动

json-file日志驱动记录从容器的STDOUT/STDERR输出,并用JSON格式写到文件中。
json-file日志路径为/var/lib/docker/containers/容器ID/容器ID-json.log

json-file日志驱动支持的驱动选项有:

  • max-size: 切割之前日志的最大大小。可取值单位为 k、m、g, 默认值为-1,表示无 限制。示例: --log-opt max-size=10m。
  • max-file:可以存在的最大日志文件数。如果切割日志会创建超过阈值的文件数,则会 删除最旧的文件。仅在max-size设置时有效。设置值为正整数,默认为1。示例: -log-opt
    max-file=5。
  • labels:适用于启动 Docker守护程序时。此守护程序接收以英文逗号分隔的与日志记 录相关的标签列表。示例:-log-opt labels-production status,geo。
  • env: 适用于启动 Docker 守护程序时。此守护程序接收以英文逗号分隔的与日志记录相关的环境变量列表。示例:–log-opt env=os,customer。
  • env-regex:类似兼容env. 用于匹配与日志记录相关的环境变量的正则表达式。示例:–log-opt env-regex=(os|customer)。
  • compress:切割的日志是否进行压缩。默认是 disabled。示例: --log-opt compress=true。

syslog 日志驱动

syslog日志驱动将日志路由到 syslog 服务器,syslog以原始的字符串作为日志消息元数据,接收方可以提取以下消息:

  • level日志等级,比如 debug 、warning 、error、info。
  • timestamp 时间戳。
  • hostname 事件发生的主机。
  • facility 系统模块。
  • 进程名称和进程 ID。

修改全局日志驱动为 syslog:

cat /etc/docker/daemon.json
{"log-driver":"syslog","1og-opts":("syslog-address":"udp:// 1.2.3.4:1111"}
}

日志驱动的选择

Docker 官方提供的日志驱动都是针对容器的 STDOUT/STDERR输出的日志驱动。 容器中的日志可分为两大类:

(1) 标准输出 STDOUT/STDERR 日志。也就是 STDOUT/STDERR, 这类日志可通过 Dockel 官方的日志驱动进行收集。比如,Nginx 日志有 access.log 和 error.log,在 Docker Hub 上可看到 Nginx 的 Dockerfile 对于这两个日志的处理:

RUN  1n  -sf /dev/stdout  /var/log/nginx/access.log
&& ln -sf /dev/stderr /var/log/nginx/error.log

都是软链接到/dev/stdout 和/dev/stderr,所以这类容器可以使用 Docker官方的日志驱动。

(2) 文本日志,都存储于容器内部,没有重定向到容器的 STDOUT/STDERR。比 如 :Tomcat 日志有 catalina 、localhost 、manager 、host-manager,我们可在 Docker Hub上看到:Tomcat的Dockerfile
中只有catalina 做了处理,其他日志都存储于容器内部,只有进入容器才可看到。

CMD ["catalina.sh","run"]

针对这类容器可以采用其他方法处理:

  • 完全是 STDOUT/STDERR输出类型的容器,可选择json-file、syslog、local 等 Docker
    支持的日志驱动。
  • 当有文本文件日志类型容器时,有如下处理方案:
    • 1.挂载目录
      创建一个目录,将目录挂载到容器中产生日志的目录:
      docker run -d --name tomcat-bind -P --mount type=bind,src=/opt/logs/,dst=/usr/local/tomcat/logs/ tomcat

    • 2.使用数据卷
      创建数据卷,创建容器时绑定数据卷:
      ~docker run -d --name tomcat-bind -P --mount type=volume,src=volume_name,dst=/usr/local/tomcat/logs/ tomcat~

    • 3.计算容器rootfs挂载点
      使用挂载宿主机目录方式采集日志对应用会有一定的侵入性,因为它要求容器启动时包含挂载 命令。如果采集过程中能对用户透明那就太棒了,事实上,可以通过计算容器 rootfs 挂载点来达到 这个目的。
      与容器 rootfs 挂载点密不可分的一个概念是 storage driver。在实际使用过程中,用户往往会根 据Linux 版本、文件系统类型、容器读写情况等因素选择合适的storage driver。不同 storage driver 下,容器 rootfs 挂载遵循一定的规律,因此我们可以根据 storage driver 的类型推断出容器的 rootfs 挂载点,进而采集容器内部log, 表11-1展示了部分storage driver 的 rootfs 挂载点及其计算方法。

storage driverrootfs挂载点计算方法
aufs/var/lib/docker/aufs/mnt/[id]id可以从如下文件读到:
/var/lib/docker/image/aufs/layerdb/mounts/>cont iner-id>mount-id
overlay/var/lib/docker/overlay/[id]/merged完整路径可以通过如下命令得到
docker inspect -f {{.GraphDriver.Data.MergedDir}} [container-id]
overlay2/var/liv/docker/overlay2/[id]/merged完整路径可以通过如下命令得到:
docker inspect -f {{.GraphDriver.Data.MergedDir}}[container-id]
devicemapper/var/lib/docker/devicemapper/mnt/[id]/rootfsid可以通过如下命令得到:
docker inspect -f {{.GraphDriver.Data.DeviceName}} [container-id]

查看 sms 微服务容器挂载点位置:

docker ps | grep sms
b0c936ecaBce  9ela0eOee678 "/.r/r/bin/sh -c ..." 18 months ago r-ms-test-sms-1-561a64f3
docker inspect -f '{{.GraphDriver.Data.MergedDir}}' b0c936eca8ce //查看SMS容器的挂载点位置
/mnt/docker/overlay/ee687989905069e3450318a0750a0d88909190191441cccbd47d83c c042f23ab/mergedll /mnt/docker/overlay/ee687989905069e3450318a0750a0d88909190191441cccbd47d83cc042f23ab/merged #查看挂载点的目录结构
ll /mnt/docker/overlay/ee687989905069e3450318a0750a0d88909190191441cccbd47d83cc042 f23ab/merged/usr/local/
    • 4.在代码中实现直接将日志写到Redis
Docker=>Redis=>Logstash=>Elasticsearch

相关文章:

【Docker】进阶之路:(十)Docker日志管理

【Docker】进阶之路:(十)Docker日志管理 查看引擎日志查看容器日志清理容器日志日志驱动程序日志驱动程序概述local日志驱动json-file 日志驱动syslog 日志驱动日志驱动的选择 Docker 容器日志分为两类:引擎日志和容器日志。Docke…...

Lcss算法介绍与应用演示

Lcss算法介绍 LCSS(最长公共子序列,Longest Common Subsequence)算法是一种用于比较两个序列相似度的方法。它寻找两个序列中的最长子序列,这个子序列不需要在原始序列中连续,但必须保持原有序列中元素的相对顺序。LC…...

【SpringBoot】从入门到精通的快速开发指南

🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的专栏《SpringBoot》。🎯🎯 &…...

每日一练【长度最小的子数组】

一、题目描述 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。 二、题目解析 经…...

HTML 块级元素与行内元素有哪些以及注意、总结

行内元素和块级元素是HTML中的两种元素类型,它们在页面中的显示方式和行为有所不同。 块级元素(Block-level Elements): 常见的块级元素有div、p、h1-h6、ul、ol、li、table、form等。 块级元素会独占一行,即使没有…...

SpringBoot热部署

SpringBoot热部署 借鉴链接&#x1f517;&#xff1a;SpringBoot中的热部署 添加devtools依赖和pom插件 <!-- devtools 依赖 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId&…...

Jmeter入门

一、下载jmeter 官网下载 下载之后解压&#xff0c;在目录/bin下面找到jmeter.bat双击之后即可启动Jmeter。 二、使用 如下左图&#xff0c;选择语言为中文&#xff0c;可以修改测试计划的名称。如下右图&#xff0c;添加线程组 添加线程组 添加http请求 路径传参方式 …...

go集成nacos

1,go集成nacos 注册实例与注销实例 package mainimport ("fmt""github.com/nacos-group/nacos-sdk-go/clients""github.com/nacos-group/nacos-sdk-go/clients/naming_client""github.com/nacos-group/nacos-sdk-go/common/constant"…...

NLP项目实战01--电影评论分类

介绍&#xff1a; 欢迎来到本篇文章&#xff01;在这里&#xff0c;我们将探讨一个常见而重要的自然语言处理任务——文本分类。具体而言&#xff0c;我们将关注情感分析任务&#xff0c;即通过分析电影评论的情感来判断评论是正面的、负面的。 展示&#xff1a; 训练展示如下…...

Linux vmstat命令:监控系统资源

vmstat命令&#xff0c;是 Virtual Meomory Statistics&#xff08;虚拟内存统计&#xff09;的缩写&#xff0c;可用来监控 CPU 使用、进程状态、内存使用、虚拟内存使用、硬盘输入/输出状态等信息。此命令的基本格式有如下 2 种&#xff1a; [rootlocalhost ~]# vmstat [-a…...

php爬虫规则与robots.txt讲解

在进行网页爬虫时&#xff0c;有一些规则需要遵守&#xff0c;以避免违反法律&#xff0c;侵犯网站隐私和版权&#xff0c;以及造成不必要的麻烦。以下是一些常见的PHP爬虫规则&#xff1a; 1. 尊重网站的使用条款&#xff1a;在开始爬取之前&#xff0c;请确保你阅读并理解了…...

Ray使用备注

Ray使用备注 框架介绍 Ray是一种python分布式任务调度框架其支持 无状态的任务并发执行,也支持 有状态的任务按照一定顺序执行其支持 分布式调度器,在一个节点上创建的任务先给本节点的局部调度器,并让本节点自己处理,当资源不够时,再将任务发给全局调度器供其他节点处理其支…...

个人介绍以及毕业去向

CSDN陪伴我从大一到大四&#xff0c;后面也会接着用 写一点大学四年的总结 #总结#理工科#留学 211大学 弃保出国 智能科学与技术 均分88.9 EI论文一篇 数学竞赛和数学建模均为省二 大创评为国家级 全国大学生计算机设计大赛国家三等奖 百度Paddle、大疆RoboMaster、Phytium Te…...

原创度检测,在线文章原创度检测

原创度检测&#xff0c;作为数字时代中内容创作者和学术界广泛关注的话题&#xff0c;正逐渐成为保障知识产权、促进创新发展的不可或缺的工具。今天&#xff0c;我们将深入介绍原创度检测的定义、意义、技术原理、应用领域以及未来趋势。 一、什么是原创度检测&#xff1f; 原…...

windows下安装git中文版客户端

下载git Windows客户端 git客户端下载地址&#xff1a;Git - Downloads 我这里下载的是Git-2.14.0-64-bit.exe版本 下载TortoiseGit TortoiseGit客户端下载地址&#xff1a;Download – TortoiseGit – Windows Shell Interface to Git TortoiseGit客户端要下载两个&#…...

短视频怎么批量添加水印logo

在现代数字化时代&#xff0c;视频内容已经成为我们日常生活中不可或缺的一部分。然而&#xff0c;当我们辛辛苦苦制作的视频在网络上分享时&#xff0c;常常会遇到被他人盗用或未经授权使用的情况。为了保护我们的创作成果&#xff0c;给视频添加水印logo成为了一种常见的手段…...

一文入门 UUID

UUID简介 UUID代表Universally Unique Identifier&#xff0c;译为全局一标识符。它是一种由软件构建的标准化身份验证方案&#xff0c;用于确保跨多个上下文中的对象都具有唯一性。UUID在各种系统之间确保了严格的唯一性&#xff0c;因此即使在大型分布式环境中&#xff0c;也…...

kafka学习笔记--broker工作流程、重要参数

本文内容来自尚硅谷B站公开教学视频&#xff0c;仅做个人总结、学习、复习使用&#xff0c;任何对此文章的引用&#xff0c;应当说明源出处为尚硅谷&#xff0c;不得用于商业用途。 如有侵权、联系速删 视频教程链接&#xff1a;【尚硅谷】Kafka3.x教程&#xff08;从入门到调优…...

多合一iPhone 解锁工具:iMyFone LockWiper iOS

多合一iPhone 解锁工具 无需密码解锁 iPhone/iPad/iPod touch 上所有类型的屏幕锁定 在几分钟内解锁 iPhone Apple ID、Touch ID 和 Face ID 立即绕过 MDM 并删除 iPhone/iPad/iPod touch 上的 MDM 配置文件 支持所有 iOS 版本和设备&#xff0c;包括最新的 iOS 17 和 iPhone 1…...

在设计和考虑建造室外雨水收集池时需要注意的因素

在设计和建造室外雨水收集池时&#xff0c;需要考虑以下因素&#xff1a; 地质条件&#xff1a;建造雨水收集池需要考虑到地质条件&#xff0c;例如土壤类型、地基承载能力等。这些因素可能对水池的建造和结构产生影响。 气候条件&#xff1a;不同地区的降雨量、湿度、气温等…...

C_5练习题答案

一、单项选择题(本大题共20小题,每小题2分,共40分。在每小题给出的四个备选项中,选出一个正确的答案,并将所选项前的字母填写在答题纸的相应位置上。) 下列叙述中错误的是(D)。A.计算机不能直接执行用C语言编写的源程序 B.C程序经C编译程序编译后,生成扩展名为obj的文件是一个二…...

使用 Axios 进行网络请求的全面指南

使用 Axios 进行网络请求的全面指南 本文将向您介绍如何使用 Axios 进行网络请求。通过分步指南和示例代码&#xff0c;您将学习如何使用 Axios 库在前端应用程序中发送 GET、POST、PUT 和 DELETE 请求&#xff0c;并处理响应数据和错误。 准备工作 在开始之前&#xff0c;请…...

已解决java.lang.exceptionininitializererror异常的正确解决方法,亲测有效!!!

已解决java.lang.exceptionininitializererror异常的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 文章目录 报错问题解决思路解决方法交流 报错问题 java.lang.exceptionininitializererror 解决思路 java.lang.ExceptionInInitializerError 是一…...

深度学习 Day10——T10数据增强

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 文章目录 前言一、我的环境二、代码实现与执行结果1.引入库2.设置GPU&#xff08;如果使用的是CPU可以忽略这步&#xff09;3.导入数据4.查…...

ky10 x86 一键安装wvp gb28181 pro平台

下载代码 git clone https://gitcode.net/zengliguang/ky10_x86_wvp_record_offline_install.gitfinalshell mobaxterm 修改服务器ip 查看服务器ip ip a 在脚本文件中修改服务器ip 执行安装脚本 切换到root用户 sudo su cd ky10_x86_wvp_record_of...

FPGA时序分析与约束(0)——目录与传送门

一、简介 关于时序分析和约束的学习似乎是学习FPGA的一道分水岭&#xff0c;似乎只有理解了时序约束才能算是真正入门了FPGA&#xff0c;对于FPGA从业者或者未来想要从事FPGA开发的工程师来说&#xff0c;时序约束可以说是一道躲不过去的坎&#xff0c;所以这个系列我们会详细介…...

Linux 驱动开发需要掌握哪些编程语言和技术?

Linux 驱动开发需要掌握哪些编程语言和技术&#xff1f; 在开始前我有一些资料&#xff0c;是我根据自己从业十年经验&#xff0c;熬夜搞了几个通宵&#xff0c;精心整理了一份「Linux的资料从专业入门到高级教程工具包」&#xff0c;点个关注&#xff0c;全部无偿共享给大家&a…...

Android studio生成二维码

1.遇到的问题 需要生成一个二维码&#xff0c;可以使用zxing第三方组件&#xff0c;增加依赖。 //生成二维码 implementation com.google.zxing:core:3.4.1 2.代码 展示页面 <ImageViewandroid:id"id/qrCodeImageView"android:layout_width"150dp"an…...

python——第十六天

面向对象——继承 class RichMan(object): def __init__(self): self.money 1000000000 self.company "阿里巴巴" self.__secretary "小蜜" def speak(self): print(f"我对钱不感兴趣&#xff0c;我最后悔的事&#xff0c;就是创建了{self.company…...

JWT介绍及演示

JWT 介绍 cookie(放在浏览器) cookie 是一个非常具体的东西&#xff0c;指的就是浏览器里面能永久存储的一种数据&#xff0c;仅仅是浏览器实现的一种数据存储功能。 cookie由服务器生成&#xff0c;发送给浏览器&#xff0c;浏览器把cookie以kv形式保存到某个目录下的文本…...