【Azure Container App】Debug Console的调式工具指南

在云原生时代,容器化应用的故障排查是每个开发者和运维工程师必须掌握的技能。Azure Container Apps 在调试控制台中预装了一系列强大的诊断工具,帮助你快速定位和解决问题。本文将详细介绍这些工具的用途和实际使用场景。


🔧 预装工具概览

Azure Container Apps 的调试控制台预装了以下工具包:

工具包 主要用途
ip-utils IP 地址和网络配置诊断
net-tools 传统网络工具集
procps 进程监控和系统状态
lsof 文件和端口占用分析
util-linux 系统管理实用工具
nc (netcat) 网络连接测试
wget HTTP/HTTPS 下载和测试
openssl SSL/TLS 证书诊断
traceroute 网络路由追踪
ca-certificates CA 证书管理
bind-utils DNS 查询诊断
tcpping TCP 端口连通性测试

1. ip-utils - IP 地址诊断利器

ip-utils 是现代 Linux 系统中用于网络配置和诊断的核心工具包,它提供了 ip 命令来替代传统的 ifconfigroute 等命令。在 Container Apps 环境中,它是排查网络问题的首选工具。

核心功能

  • 查看网络接口: 显示容器内所有网络接口的详细信息,包括 IP 地址、MAC 地址、MTU 等
  • 路由表管理: 查看和分析容器的路由配置,理解流量如何被转发
  • 邻居表查询: 查看 ARP 缓存,了解 Layer 2 的网络连接状态

实用命令示例

# 查看所有网络接口及其 IP 地址
ip addr show

# 查看路由表 - 理解流量出口
ip route show

# 查看特定接口的详细信息
ip -s link show eth0

# 查看 ARP 邻居表
ip neigh show

典型排查场景

当你的容器无法访问外部服务时,首先使用 ip addr 确认容器是否获得了正确的 IP 地址,然后用 ip route 检查默认网关是否配置正确。这两个命令能帮助你快速判断问题是出在容器网络配置还是外部网络。


2. net-tools - 经典网络工具集

net-tools 是 Linux 系统中历史悠久的网络工具包,虽然逐渐被 ip-utils 取代,但其中的 netstatifconfig 等命令因其简洁的输出格式,仍然被广泛使用。对于熟悉传统 Linux 运维的工程师来说,这些工具更加直观。

核心功能

  • 端口监听状态: 使用 netstat 查看容器内哪些端口正在监听,哪些连接处于活跃状态
  • 网络接口配置: 通过 ifconfig 快速查看网络接口的基本信息
  • 路由信息: 使用 route 命令查看路由表

实用命令示例

# 查看所有监听的端口
netstat -tlnp

# 查看所有 TCP 连接状态
netstat -ant

# 查看网络接口信息
ifconfig

# 统计各状态的连接数
netstat -ant | awk '{print $6}' | sort | uniq -c

# 查看路由表
route -n

典型排查场景

当应用启动后无法接收请求时,使用 netstat -tlnp 可以快速确认应用是否在预期端口上监听。如果发现大量 TIME_WAITCLOSE_WAIT 状态的连接,可能表示连接池配置问题或对端服务异常。这些信息对于诊断连接泄漏和性能问题至关重要。


3. procps - 进程监控专家

procps 是一组用于监控系统进程和资源使用情况的工具包,包含了 pstopfreevmstat 等经典命令。在容器环境中,它帮助你了解应用的运行状态、资源消耗情况,是性能调优和故障排查的必备工具。

核心功能

  • 进程查看: 列出容器内所有运行的进程及其资源使用情况
  • 内存分析: 查看内存使用详情,识别内存泄漏
  • CPU 监控: 实时监控 CPU 使用率,定位高 CPU 消耗的进程
  • 系统负载: 了解系统整体负载状态

实用命令示例

# 查看所有进程(树状显示)
ps auxf

# 实时监控进程(按 CPU 排序)
top -o %CPU

# 查看内存使用情况
free -h

# 查看虚拟内存统计
vmstat 1 5

# 查看特定进程的详细信息
ps -p <PID> -o pid,ppid,%cpu,%mem,cmd

# 按内存使用排序的进程列表
ps aux --sort=-%mem | head -20

典型排查场景

当容器响应变慢时,先用 top 观察是否有进程占用过高 CPU。如果发现 Java 应用内存持续增长,使用 free -h 监控内存趋势,结合 ps aux --sort=-%mem 确认是哪个进程在消耗内存。这套组合拳能快速定位资源瓶颈。


4. lsof - 文件与端口侦探

lsof (List Open Files) 是一个功能强大的诊断工具,它可以列出系统中所有打开的文件。在 Linux 中,"一切皆文件",因此 lsof 不仅能查看普通文件,还能查看网络连接、管道、设备等。它是排查"端口被占用"、"文件句柄泄漏"等问题的神器。

核心功能

  • 端口占用查询: 查看哪个进程占用了特定端口
  • 文件句柄分析: 统计进程打开的文件数量,识别句柄泄漏
  • 网络连接追踪: 查看进程的所有网络连接
  • 文件锁检测: 查看文件被哪个进程锁定

实用命令示例

# 查看占用特定端口的进程
lsof -i :8080

# 查看某进程打开的所有文件
lsof -p <PID>

# 查看所有网络连接
lsof -i

# 统计进程打开的文件数
lsof -p <PID> | wc -l

# 查看 TCP 连接
lsof -i TCP

# 查看连接到特定 IP 的进程
lsof -i @10.0.0.1

典型排查场景

当应用报错 "Too many open files" 时,使用 lsof -p <PID> | wc -l 统计进程打开的文件数,再用 lsof -p <PID> 分析具体是什么类型的文件描述符(socket? 普通文件?)被大量打开。这能帮助你判断是连接池泄漏还是日志文件未正确关闭。


5. util-linux - 系统管理瑞士军刀

util-linux 是一个庞大的系统管理工具集,包含了数十个实用命令。在容器调试场景中,最常用的是 dmesg(查看内核日志)、mount(查看挂载点)、kill(进程信号)、logger(写系统日志)等命令。它是系统级问题排查的重要工具箱。

核心功能

  • 内核日志查看: 使用 dmesg 查看内核级别的错误信息
  • 磁盘和挂载管理: 查看文件系统挂载情况和磁盘使用
  • 进程控制: 发送信号给进程,如优雅终止或强制杀死
  • 系统信息: 查看主机名、系统架构等基本信息

实用命令示例

# 查看内核日志(最后 50 行)
dmesg | tail -50

# 查看内核日志中的错误
dmesg --level=err,warn

# 查看所有挂载点
mount | column -t

# 查看磁盘使用情况
df -h

# 优雅终止进程
kill -15 <PID>

# 查看系统架构
uname -a

# 持续查看内核日志
dmesg -w

典型排查场景

当容器突然崩溃或出现奇怪的行为时,dmesg 是第一个要查看的地方。内核级别的 OOM Killer、segfault、磁盘 I/O 错误等信息都会记录在这里。如果看到 "Out of memory: Kill process" 相关日志,说明容器内存配置需要调整。


6. nc (netcat) - 网络连接瑞士军刀

nc (netcat) 被誉为网络工具中的"瑞士军刀",它可以建立几乎任何类型的网络连接。无论是测试端口连通性、创建简单的客户端/服务端、传输文件,还是进行端口扫描,netcat 都能胜任。它是网络调试中最灵活的工具之一。

核心功能

  • 端口连通性测试: 测试目标主机的端口是否可达
  • 简单服务器: 快速启动一个监听端口,接收数据
  • 数据传输: 在两台主机间传输数据
  • 端口扫描: 探测目标主机开放的端口

实用命令示例

# 测试 TCP 端口连通性
nc -zv target-host 443

# 测试多个端口
nc -zv target-host 80-85

# 启动一个简单的 TCP 服务器
nc -l -p 8080

# 发送 HTTP 请求
echo -e "GET / HTTP/1.1\r\nHost: example.com\r\n\r\n" | nc example.com 80

# 测试 UDP 端口
nc -u -zv target-host 53

# 设置超时时间
nc -w 5 -zv target-host 3306

典型排查场景

当应用无法连接数据库或外部 API 时,使用 nc -zv db-host 3306 可以快速验证网络层面是否可达。如果 nc 连接成功但应用仍然失败,问题可能在应用层(如认证、TLS)。这种由底层向上的排查方法能快速缩小问题范围。


7. wget - HTTP/HTTPS 测试专家

wget 是一个功能完善的命令行下载工具,支持 HTTP、HTTPS、FTP 协议。在容器调试中,它常用于测试 HTTP 端点可达性、下载配置文件、验证 SSL 证书等场景。相比 curl,wget 的语法更简单,特别适合快速测试。

核心功能

  • HTTP 端点测试: 验证 API 或 Web 服务是否正常响应
  • 文件下载: 从网络下载配置文件、脚本等
  • SSL/TLS 验证: 测试 HTTPS 连接和证书有效性
  • 递归下载: 下载整个网站或目录

实用命令示例

# 测试 HTTP 端点(只看响应头)
wget --spider -S http://api-server/health

# 下载文件
wget https://example.com/config.json

# 忽略 SSL 证书错误(仅调试用)
wget --no-check-certificate https://internal-api/

# 设置超时
wget --timeout=10 http://slow-api/

# 显示详细信息
wget -v http://target-url/

# 测试并显示响应内容
wget -qO- http://api/health

# 带 Header 的请求
wget --header="Authorization: Bearer token" http://api/

典型排查场景

当需要验证容器能否访问外部服务时,wget --spider -S https://api.example.com 可以显示完整的 HTTP 响应头,包括状态码、重定向、服务器信息等。如果遇到 SSL 错误,可以先用 --no-check-certificate 绕过验证,确认是证书问题还是网络问题。


8. openssl - SSL/TLS 证书诊断大师

openssl 是加密和 SSL/TLS 领域的标准工具,在容器环境中主要用于诊断 HTTPS 连接问题、查看证书信息、测试 TLS 握手等。当应用报告 SSL 相关错误时,openssl 是定位问题的不二之选。

核心功能

  • 证书查看: 查看服务器证书的详细信息,包括有效期、颁发者、域名等
  • TLS 握手测试: 测试 TLS 连接,查看支持的协议版本和加密套件
  • 证书链验证: 验证证书链是否完整
  • 本地证书管理: 查看和验证本地证书文件

实用命令示例

# 查看服务器证书信息
openssl s_client -connect api.example.com:443 -servername api.example.com </dev/null 2>/dev/null | openssl x509 -noout -text

# 查看证书有效期
openssl s_client -connect api.example.com:443 </dev/null 2>/dev/null | openssl x509 -noout -dates

# 测试特定 TLS 版本
openssl s_client -connect api.example.com:443 -tls1_2

# 查看支持的加密套件
openssl s_client -connect api.example.com:443 -cipher 'ALL' </dev/null

# 验证本地证书文件
openssl x509 -in certificate.crt -text -noout

# 检查证书链
openssl s_client -connect api.example.com:443 -showcerts

典型排查场景

当应用报告 "certificate verify failed" 时,使用 openssl s_client 连接目标服务器,查看返回的证书链是否完整、证书是否过期、域名是否匹配。如果看到 "verify error" 但浏览器访问正常,可能是容器缺少必要的 CA 证书。


9. traceroute - 网络路径追踪器

traceroute 通过发送不同 TTL 值的数据包,追踪数据包从源到目的地经过的每一跳路由器。它是排查网络延迟、路由问题、网络不可达等问题的重要工具。在复杂的云网络环境中,traceroute 帮助你理解流量的实际路径。

核心功能

  • 路由追踪: 显示数据包到达目标所经过的所有路由节点
  • 延迟分析: 显示每一跳的响应时间,定位延迟瓶颈
  • 网络拓扑: 了解网络的实际拓扑结构
  • 故障定位: 确定网络中断发生在哪个节点

实用命令示例

# 基本路由追踪
traceroute api.example.com

# 使用 TCP 而非 ICMP(绕过某些防火墙)
traceroute -T -p 443 api.example.com

# 使用 UDP
traceroute -U api.example.com

# 设置最大跳数
traceroute -m 20 api.example.com

# 不解析域名(更快)
traceroute -n api.example.com

# 设置等待超时
traceroute -w 2 api.example.com

典型排查场景

当容器访问外部服务时延很高时,使用 traceroute 可以看到延迟在哪一跳突然增加。如果某一跳显示 * * *(超时),可能是该节点阻止了 ICMP,可以尝试 -T 参数使用 TCP。如果在某一跳完全中断,说明问题在该节点或之后的网络。


10. ca-certificates - CA 证书管理

ca-certificates 不是一个命令行工具,而是一个包含受信任 CA(证书颁发机构)根证书的软件包。它为容器提供了验证 HTTPS 连接所需的根证书信任链。当应用无法验证 SSL 证书时,往往需要检查或更新这个包。

核心功能

  • 证书存储: 提供系统级别的受信任 CA 证书存储
  • 证书更新: 更新到最新的 CA 证书列表
  • 自定义 CA: 支持添加企业内部或私有 CA 证书

实用命令示例

# 查看证书存储位置
ls -la /etc/ssl/certs/

# 查看证书数量
ls /etc/ssl/certs/*.pem | wc -l

# 更新证书(如果有新证书添加)
update-ca-certificates

# 添加自定义 CA 证书
cp custom-ca.crt /usr/local/share/ca-certificates/
update-ca-certificates

# 查看特定证书
openssl x509 -in /etc/ssl/certs/DigiCert_Global_Root_CA.pem -text -noout

典型排查场景

当应用报告 "unable to get local issuer certificate" 或 "certificate verify failed" 时,通常是因为服务器证书的根 CA 不在容器的信任列表中。这在访问企业内部服务(使用私有 CA 签发的证书)时很常见。解决方案是将企业的根 CA 证书添加到 /usr/local/share/ca-certificates/ 并运行 update-ca-certificates


11. bind-utils - DNS 诊断专家

bind-utils 提供了一组强大的 DNS 查询和诊断工具,包括 dignslookuphost 等。在容器环境中,DNS 解析问题是最常见的故障之一。这些工具帮助你验证 DNS 配置、排查解析失败、分析 DNS 响应。

核心功能

  • DNS 查询: 查询域名的各种 DNS 记录(A、AAAA、CNAME、MX 等)
  • DNS 服务器测试: 测试特定 DNS 服务器的响应
  • 解析追踪: 追踪 DNS 解析的完整过程
  • 反向解析: 通过 IP 地址查询域名

实用命令示例

# 查询 A 记录
dig api.example.com A

# 查询所有记录
dig api.example.com ANY

# 指定 DNS 服务器查询
dig @8.8.8.8 api.example.com

# 简洁输出
dig +short api.example.com

# 追踪完整解析过程
dig +trace api.example.com

# 反向 DNS 查询
dig -x 10.0.0.1

# 使用 nslookup
nslookup api.example.com

# 使用 host(简洁)
host api.example.com

典型排查场景

当应用报告 "Name or service not known" 或 "DNS resolution failed" 时,使用 dig api.example.com 查看是否能正常解析。如果解析失败,用 dig @8.8.8.8 api.example.com 测试公共 DNS 服务器,判断是本地 DNS 配置问题还是域名本身的问题。dig +trace 可以追踪完整的 DNS 解析链,定位是哪一级 DNS 服务器出了问题。


12. tcpping - TCP 端口连通性测试

tcpping 是一个专门用于测试 TCP 端口连通性和延迟的工具。与传统 ping 使用 ICMP 协议不同,tcpping 使用 TCP 连接,能够更准确地反映应用层的网络连通性。当 ICMP 被防火墙阻止时,tcpping 是最佳替代方案。

核心功能

  • TCP 端口测试: 测试 TCP 端口是否可达
  • 延迟测量: 测量 TCP 连接建立的延迟
  • 持续监控: 持续测试并显示延迟变化
  • 穿透防火墙: 使用 TCP 协议,不受 ICMP 限制

实用命令示例

# 测试 TCP 端口连通性
tcpping api.example.com 443

# 指定测试次数
tcpping -c 10 api.example.com 443

# 持续测试
tcpping api.example.com 443

# 测试数据库端口
tcpping database-server 3306

# 测试 Redis 端口
tcpping redis-server 6379

典型排查场景

ping 显示目标不可达,但你确信服务是运行的,使用 tcpping target 80 可能会发现 TCP 端口其实是通的——只是 ICMP 被阻止了。tcpping 显示的延迟也更能反映真实的应用体验,因为它测量的是 TCP 三次握手的时间,与应用建立连接的过程一致。


🔌 安装额外工具

如果预装工具不能满足需求,可以使用 tdnf 包管理器安装其他工具:

# 安装 JDK(用于 Java 应用调试)
tdnf install -y msopenjdk-17

# 安装 vim 编辑器
tdnf install -y vim

# 安装 curl(如果需要更高级的 HTTP 测试)
tdnf install -y curl

# 安装 strace(系统调用追踪)
tdnf install -y strace

📋 常见故障排查流程

网络连接问题

# 1. 检查网络配置
ip addr show
ip route show

# 2. 测试 DNS 解析
dig target-host

# 3. 测试端口连通性
nc -zv target-host 443
tcpping target-host 443

# 4. 追踪网络路径
traceroute target-host

SSL/TLS 证书问题

# 1. 查看服务器证书
openssl s_client -connect target:443 -showcerts

# 2. 检查证书有效期
openssl s_client -connect target:443 </dev/null | openssl x509 -noout -dates

# 3. 验证证书链
openssl s_client -connect target:443 -verify_return_error

性能问题

# 1. 检查进程资源使用
top -o %CPU
ps aux --sort=-%mem | head -20

# 2. 检查内存使用
free -h

# 3. 检查文件句柄
lsof -p <PID> | wc -l

# 4. 检查内核日志
dmesg | tail -50

总结

Azure Container Apps 提供的这套调试工具覆盖了网络诊断、进程监控、文件分析、SSL/TLS 调试等各个方面。熟练掌握这些工具,能够帮助你快速定位和解决容器化应用中遇到的各种问题。记住,排查问题时要从底层向上,先确认网络可达,再检查服务状态,最后分析应用日志,这样能最高效地找到问题根因。

💡 提示: 如果你经常需要某个工具但它没有预装,可以考虑在 Dockerfile 中预先安装,或者创建一个包含常用工具的调试用 sidecar 容器。

posted @ 2026-03-02 20:06  编码者卢布  阅读(0)  评论(0)    收藏  举报