加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

记录在同一主机上运行的多个容器的解决方案

发布时间:2020-12-16 03:36:30 所属栏目:安全 来源:网络整理
导读:目前,我们将所有应用程序日志从多个容器重定向到stdout,并通过主机中的rsyslog将/ var / log / message收集到ELK堆栈. 所有docker容器日志显示为docker / xxxxxxxx,我们无法分辨这个日志的应用程序,无论如何我们可以轻松地将应用程序与docker stdout中的多个

目前,我们将所有应用程序日志从多个容器重定向到stdout,并通过主机中的rsyslog将/ var / log / message收集到ELK堆栈.

所有docker容器日志显示为docker / xxxxxxxx,我们无法分辨这个日志的应用程序,无论如何我们可以轻松地将应用程序与docker stdout中的多个容器日志区分开来?

最佳答案
(OS X的说明,但应该在Linux中工作)

似乎没有办法使用docker命令执行此操作,但是在bash中,您可以同时运行多个命令,而使用sed,您可以使用容器名称作为前缀.

docker logs -f --tail=30 container1 | sed -e 's/^/[-- containerA1 --]/' &
docker logs -f --tail=30 container2 | sed -e 's/^/[-- containerM2 --]/' &

并且您将同时看到两个容器的输出.

[-- containerA1 --] :: logging line
[-- containerA1 --] :: logging line
[-- containerM2 --] :: logging line
[-- containerM2 --] :: logging line
[-- containerA1 --] :: logging line
[-- containerA1 --] :: logging line
[-- containerM2 --] :: logging line
[-- containerM2 --] :: logging line

要立即拖尾所有容器:

#!/bin/bash

names=$(docker ps --format "{{.Names}}")
echo "tailing $names"

while read -r name
do
  # eval to show container name in jobs list
  eval "docker logs -f --tail=5 "$name" | sed -e "s/^/[-- $name --] /" &"
  # For Ubuntu 16.04
  #eval "docker logs -f --tail=5 "$name" |& sed -e "s/^/[-- $name --] /" &"
done <<< "$names"

function _exit {
  echo
  echo "Stopping tails $(jobs -p | tr 'n' ' ')"
  echo "..."

  # Using `sh -c` so that if some have exited,that error will
  # not prevent further tails from being killed.
  jobs -p | tr 'n' ' ' | xargs -I % sh -c "kill % || true"

  echo "Done"
}

# On ctrl+c,kill all tails started by this script.
trap _exit EXIT

# For Ubuntu 16.04
#trap _exit INT

# Don't exit this script until ctrl+c or all tails exit.
wait

并阻止他们运行fg,然后按ctrl c为每个容器.

更新:感谢@ Flo-Woo支持Ubuntu 16.04

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读