docker容器监控与日志管理

Docker监控

Docker监控涉及对容器的资源使用情况和性能指标进行实时监控和分析,以确保应用程序的正常运行并优化资源使用。

监控容器最简单是使用Docker自带的监控命令,如docker ps、docker top和docker stats等命令,但其输出的数据有限。

Docker监控工具

cAdvisor

cAdvisor是Google的一个开源工具,专门用于容器资源使用和性能分析。它可以收集、聚合、处理和导出关于运行容器的各种信息。是具有图形界面、最易于入门的Docker容器监控工具。

 

部署cAdvisor

1.使用wget获取二进制文件;

[root@workstation ~]# wget  https://github.com/google/cadvisor/releases/download/v0.46.0/cadvisor-v0.46.0-linux-amd64

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

2.编写Dockerfile;

FROM ubuntu:latest
COPY ./cadvisor-v0.46.0-linux-amd64 /usr/bin/cadvisor
RUN chmod +x /usr/bin/cadvisor
ENTRYPOINT ["/usr/bin/cadvisor"]
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

3.使用docker build命令构建镜像;

[root@workstation ~]# docker build -t cadvisor:0.46.0 .
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

4.运行容器;

[root@workstation ~]# docker run --privileged --volume=/:/rootfs:ro --volume=/var/run:/var/run:rw \
> --volume=/sys:/sys:ro --volume=/var/lib/docker/:/var/lib/docker:ro --volume=/dev/disk/:/dev/disk:ro \
> --publish=8080:8080 --detach=true  --name=cadvisor --device=/dev/kmsg cadvisor:0.46.0
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

5.添加防火墙端口规则;

[root@workstation ~]# firewall-cmd --add-port=8080/tcp --permanent 
[root@workstation ~]# firewall-cmd --reload 
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

访问cAdvisor

点击Docker Containers查看容器状态;

 

查看主机详细信息状态;

 

 

Weave Scope

Weave Scope是一款开源的故障诊断与监控工具,除了用于Docker外,还可以用于Kubernetes(k8s)集群。Weave Scope会自动生成容器之间的关系图,便于管理员直观地以可视化的方式监控容器化和微服务化应用。Weave Scope能够进行跨主机监控,并且消耗的资源非常少。

部署Weave Scope

本地部署

1.登录到workstation虚拟机,在该虚拟机内的hosts文件内添加以下两行内容(相当于代理);

185.199.109.133   raw.githubusercontent.com
20.205.243.166     github.com
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

 2.执行以下命令下载Weave Scope的二进制安装脚本文件;

[root@workstation ~]# curl -L https://github.com/weaveworks/scope/releases/download/latest_release/scope -o /usr/local/bin/scope 
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

3.执行以下命令赋予该安装脚本可执行权限;

[root@workstation ~]# chmod a+x /usr/local/bin/scope
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

4.执行以下命令从docker hub中下载Weave Scope镜像并启动容器;

[root@workstation ~]# scope launch
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

5.防火墙加入4040端口规则;

[root@workstation ~]# firewall-cmd --add-port=4040/tcp --permanent 
[root@workstation ~]# firewall-cmd --reload 
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

 6.访问http://192.168.72.150:4040/

可以看到此时没有一个被监控的容器;

7.在本地运行一个容器;

[root@workstation ~]# docker run -d -p 9090:9090 --name mysiteweb nginx:latest
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

 此时再查看Weave Scope的监控状态;

 同样的,Weave Scope也可以监控主机的状态;

跨主机监控

确保所有主机(即已经部署Weave Scope的主机和其他主机)可以通过网络相互通信。这包括网络连接和防火墙设置。

在所有需要监控的主机上安装Weave Scope。可以使用与单主机部署相同的步骤来安装:

 

 curl -L https://github.com/weaveworks/scope/releases/download/latest_release/scope -o /usr/local/bin/scope 
 chmod a+x /usr/local/bin/scope
  scope launch
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

或者将workstation中/usr/local/bin/scope文件分别复制到测试机,然后执行后面的命令。

启动Weave Scope并配置跨主机监控:启动Weave Scope时,您需要指定其他主机的IP地址,使得所有Weave Scope实例能够相互发现并通信。

如果自动发现不能满足需求,你可以通过scope launch命令手动指定其他Scope实例的IP地址。

例如,在第一台主机上运行:

scope launch
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

在第二台主机上运行,并指定第一台主机的IP地址:

scope launch <IP_OF_FIRST_HOST>
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

3. 配置多主机连接

如果你有更多的主机,需要将每台主机的IP地址添加到scope launch命令中。例如,在第三台主机上,你可以指定第一台和第二台主机的IP地址:

scope launch <IP_OF_FIRST_HOST> <IP_OF_SECOND_HOST>
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

这样,每台主机的Weave Scope实例将能够相互通信并共享监控数据。

示例:

以workstation、servera虚拟机为实验平台;

1.在两台服务器上执行以下命令:

 curl -L https://github.com/weaveworks/scope/releases/download/latest_release/scope -o /usr/local/bin/scope 
 chmod a+x /usr/local/bin/scope
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

2.在workstation上执行以下命令;

scope launch  192.168.72.151(servera的IP)
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

在servera上执行以下命令;

scope launch  192.168.72.150(workstation的IP)
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

注意:如果开启了防火墙,注意添加端口规则。

3.访问weave scope;

 

 

 

Docker日志

在 Docker 环境中进行日志管理可以帮助你有效地监控和排查容器的运行情况。

Docker自带的docker logs命令输出正在运行的容器的日志信息,而docker service logs命令显示服务中心的所有容器的日志信息,这个命令用于集群环境。

查看容器日志

查看指定容器的日志;

docker logs <container_id>

 实时查看日志;

docker logs -f <container_id>

日志选项

你可以使用以下选项来控制日志输出:

--tail:显示日志的最后几行。

--since:显示某个时间点后的日志。

配置日志驱动

Docker 支持多种日志驱动程序,用于将日志记录到不同的地方。常见的日志驱动程序包括:

  1. json-file(默认)
  2. syslog
  3. journald
  4. gelf
  5. fluentd
  6. awslogs
  7. splunk

可以在启动容器时指定日志驱动程序,例如:

docker run --log-driver=syslog <image>

配置日志选项

在 Docker 的 daemon.json 文件中,可以配置全局日志选项。通常这个文件位于 /etc/docker/daemon.json。例如,配置 JSON 文件日志驱动程序的选项:

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}

配置完后,重启 Docker 服务以使更改生效:

sudo systemctl restart docker

docker日志管理工具(Logspout+syslog)

Logspout本身是基于AIpine Linux构建的Docker容器。Docker主机启动一个容器运行Logspout服务,Logspout负责将同一主机上其他容器的日志根据路由设置转发给不同的日子接收端。这里以syslog为例。

这里以两台RHEL虚拟机为实验环境。启用rsyslog接收外部信息功能,修改rsyslog日志服务器的配置文件/etc/rsyslog.conf,从中找到以下两行,将注释去掉;

[root@serverc ~]# vim /etc/rsyslog.conf  

module(load="imudp") # needs to be done just once
input(type="imudp" port="514")                  启用UDP 

module(load="imtcp") # needs to be done just once
input(type="imtcp" port="514")                  启用TCP

保存该配置文件,重启rsyslog,然后检查514端口是否开启;

[root@serverc ~]# systemctl restart rsyslog.service 
[root@serverc ~]# netstat -antup | grep 514

添加对514的防火墙端口规则;

[root@serverc ~]# firewall-cmd --add-port=514/tcp --permanent
[root@serverc ~]# firewall-cmd --add-port=514/udp --permanent 
[root@serverc ~]# firewall-cmd --reload

拉取 Logspout 镜像;

[root@serverc ~]# docker pull gliderlabs/logspout

运行 Logspout 容器,将日志发送到 Syslog 服务器;

[root@workstation ~]# docker run -d --name="logspout" \
    --volume=/var/run/docker.sock:/var/run/docker.sock \
    gliderlabs/logspout \
    syslog://192.168.72.153:514

在容器测试机上启用rsyslog的接收外部信息功能;配置/etc/rsyslog.conf将以下行的注释去掉,然后重启服务;

module(load="imudp") # needs to be done just once
input(type="imudp" port="514")                  启用UDP 

module(load="imtcp") # needs to be done just once
input(type="imtcp" port="514")                  启用TCP

 systemctl restart rsyslog.service 

添加针对514的防火墙端口规则;

firewall-cmd --add-port=514/tcp --permanent
firewall-cmd --add-port=514/udp --permanent 
firewall-cmd --reload

在容器测试机上运行一个容器,在日志收集服务器上查看效果;

docker run -d --name testweb nginx:latest

  

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

网工陈同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值