美文网首页
docker 网络监控故障排查---网络数据包流程监控二

docker 网络监控故障排查---网络数据包流程监控二

作者: 白馨_1114 | 来源:发表于2020-04-21 18:21 被阅读0次

    以线上运行的中间件为例,我们一般监控container_network_receive_bytes_total、container_network_transmit_bytes_total、container_network_receive_errors_total、container_network_transmit_errors_total、container_network_receive_packets_dropped_total、container_network_transmit_packets_dropped_total以上几项。
    其中container_network_receive_bytes_total、container_network_transmit_bytes_total、container_network_receive_errors_total就是网络进出流量,这很好理解。

    container_network_transmit_errors_total、container_network_receive_packets_dropped_total、container_network_transmit_packets_dropped_total这几项到底是怎么取的,如果遇到问题,该怎么排查这个错误。
    首先是如何取得这几项:
    /proc/<pid>/net/dev(物理借获取方式也是/proc/net/dev)这个pid通过docker top dockerid可以获得。
    那么检测到drop,err该如何排查。为了解决这个问题,我们先了解一下网络接口。

    一般我们都用config来整体看一下网络接口,这里的信息是很复杂的。它包含网络接口很复杂。
    来看一台测试机器:

    image.png

    以上网络接口包含:物理网卡,逻辑网卡,网桥。为了厘清关系,我们先来查看物理网卡:
    lspci | egrep -i --color 'network|ethernet’

    image.png

    存在四个物理网卡,分别是em1、em2、em3、em4。由于em3、em4关闭,所以只能通过ifconfig -a 来查看。

    image.png

    是否关闭网卡,可以在/etc/sysconfig/network-scripts中配置。但我们无法从ifconfig -a中去察觉。
    网卡me3配置,vim ifcfg-em3
    ONBOOT=NO代表启动时,关闭网卡;
    TYPE=Ethernet标识网卡。

    image.png

    网卡em1配置,vim ifcfg-em1
    ONBOOT=YES代表启动时,开启网卡;
    TYPE=Ethernet标识网卡;
    Master=bond0bond0是一个虚拟网卡;
    Slave=yes, 表示角色为从;
    em2配置与em1相同。

    image.png

    综上em1~em4都是物理网卡。em1,em2都是打开的网卡。em3,em4关闭。我们从em1,em2的配置中了发现em1,em2都是bond0slave
    这其实是双网卡设置主备模式:实现当一块网卡宕掉时,另外一块网卡可以自动顶替宕掉的网卡工作,保障网络正常访问。
    虚拟网卡bond0配置:

    image.png

    IPADDR:网卡是工作在链路层的,提供ip我们就可以在ip层连接这个逻辑网卡。有的程序比如pika就支持配置网络接口,绑定合适的网卡。
    ONBOOT=YES代表启动时,开启逻辑网卡;
    miimon是用来进行链路监测的。比如:miimon=1000,单位是ms(毫秒)是1000ms,即是1秒那么系统每100ms监测一次链路连接状态,如果不通就转入其他网卡线路;
    mode共有七种(0~6),这里解释两个常用的选项。
    mode=0:表示load balancing (round-robin)为负载均衡方式,两块网卡都在工作。
    mode=1:表示fault-tolerance (active-backup)提供冗余功能,工作方式是主备的工作方式,其中一块网卡在工作(若em1断掉),则自动切换到另一个块网卡(em2)。
    我们的测试机上采用的是第二种模式,也就是主备模式。通过ip从外部访问,访问的是这个逻辑网卡bond0,实际对应的是em1。如果发现drop,err错误。最终可以定位到em1,通过ethtool -S em1 来分析。

    image.png

    采用docker虚拟化的网络环境,这个同以上的物理环境还是有所不同。bond0进行物理层面的冗余
    brige主要用在KVM虚拟化环境下的冗余。比如ifconfig中显示的docker0其实就是bridge
    可以通过命令brctl show查看已经存在的网桥:

    image.png

    Docker有四种网络模式,默认的就是Bridge模式。在初始化时,就会创建bridge docker0
    其中docker0中的interface就是docker ps -a下这三个容器的对应接口。

    image.png

    进入docker b61e56cc73a1内部查看网络配置:
    docker exec -it b61e56cc73a1 /bin/sh

    image.png

    结合本机,bridge模式如图所示:


    image.png

    所以虚拟化网络环境与逻辑网卡一样,一旦发生drop,err。最终还是要定位到物理网卡。经过分析,对于这台机器,最终将定位到物理网卡em1。通过ethtool -S em1 来分析即可。帮我们进一步定位是在网卡,还是驱动,还是内核缓冲的问题(具体见上篇)。

    相关文章

      网友评论

          本文标题:docker 网络监控故障排查---网络数据包流程监控二

          本文链接:https://www.haomeiwen.com/subject/wnupihtx.html