温馨提示×

Linux DHCP服务器性能监控方法

小樊
39
2025-11-22 10:38:31
栏目: 云计算

Linux DHCP服务器性能监控方法

一 核心监控维度与关键指标

  • 服务可用性:进程存活、监听端口、系统日志错误与告警。
  • 租约与地址池:已分配/可用地址数、租约命中率、租约过期与续租时延。
  • 请求处理性能:DHCPDISCOVER/DHCPREQUEST 吞吐、DHCPOFFER/ACK 时延、NAK 比例、包丢失与重传。
  • 网络与系统资源:CPU、内存、磁盘 I/O、网络接口利用率与丢包。
  • 告警阈值建议:租约使用率超过80%、发现/请求速率异常突增、Offer/ACK 时延明显拉长、服务进程异常退出或端口未监听。

二 命令行快速检查

  • 服务状态与日志
    • 检查服务:systemctl status isc-dhcp-server 或 systemctl status dhcpd
    • 实时日志:journalctl -u dhcpd.service -f 或 tail -f /var/log/syslog | grep dhcpd
  • 租约与地址池
    • 查看租约文件:cat /var/lib/dhcp/dhcpd.leases(分析已分配/剩余地址、租期分布)
    • 查看租约摘要:dhcp-lease-list(Debian 系列可用,直观列出租约)
  • 监听端口与网络
    • 端口监听:ss -lunpt | egrep ‘:(67|68)’
    • 抓包分析:tcpdump -i eth0 -nn port 67 or port 68;dhcpdump -i eth0(解析 DHCP 报文类型与关键字段)
  • 系统资源
    • 资源总览:glances;或 dool(整合 vmstat/netstat/iostat/ifstat/mpstat)
    • 细项统计:sar -n DEV 1(网络)、sar -u 1(CPU)、pidstat -u -p $(pidof dhcpd) 1(进程级 CPU/内存)
    • 说明:DHCP 服务器/客户端分别使用UDP 67/68端口

三 日志与租约分析要点

  • 日志定位问题
    • 服务启动/关闭、配置重载、地址冲突、租约分配与回收、NAK 等都会在系统日志出现,建议以“dhcpd”为关键字持续跟踪:journalctl -u dhcpd -f 或 tail -f /var/log/syslog | grep dhcpd
  • 租约文件解读
    • 核心字段:lease、starts/ends、binding state(active/released)、hardware ethernet(MAC)、client-hostname
    • 分析思路:统计 active 租约数量、按子网/池统计使用率、观察异常频繁续租或短租期
  • 辅助脚本与工具
    • 租约列表:dhcp-lease-list(快速查看当前租约明细)
    • 第三方统计:dhcpd-statistics、dhcpd-monitor(部分发行版仓库提供,可用于更直观的统计/监控)
    • 抓包取证:dhcpdump/tcpdump 用于核对 DISCOVER/OFFER/REQUEST/ACK 流程与异常报文

四 可视化与告警方案

  • 企业级监控
    • Zabbix:通过 UserParameter 执行脚本解析租约文件与日志,采集“租约使用率、发现/请求速率、Offer/ACK 时延”等指标;配置触发器与动作(邮件/企业微信/钉钉/短信)实现告警
    • Nagios:自定义检查脚本(服务存活、端口监听、租约阈值、日志关键字告警),设置联系人、通知方式与依赖关系
  • 轻量与快速可视化
    • Sampler:用 YAML 编排命令输出(如租约统计、日志关键字计数、抓包摘要),在终端实现可视化面板与实时刷新
  • 采集思路示例
    • 指标采集:dhcp-lease-list/解析 dhcpd.leases、journalctl 计数、tcpdump/dhcpdump 统计报文类型与时延分布
    • 数据上报:Zabbix Agent/HTTP API、Nagios 插件返回值、Sampler 本地展示与导出

五 一键巡检脚本示例

#!/usr/bin/env bash
# 简易DHCP巡检:服务状态、端口、租约使用率、日志错误、抓包样例

IFACE="${1:-eth0}"
LEASE_FILE="/var/lib/dhcp/dhcpd.leases"
LEASE_SUMMARY="dhcp-lease-list 2>/dev/null || cat $LEASE_FILE | awk '/lease /{c++;} END{print \"active leases: \" c+0}'"

echo "=== $(date) ==="
echo "[Service]"
systemctl is-active --quiet isc-dhcp-server && echo "  isc-dhcp-server: active" || echo "  isc-dhcp-server: inactive"

echo "[Ports]"
ss -lunpt | egrep ':(67|68)' || echo "  No DHCP ports listening"

echo "[Leases]"
eval "$LEASE_SUMMARY"

echo "[Logs]"
journalctl -u dhcpd.service --since "5 minutes ago" | egrep -i 'error|fail|nak' || echo "  No recent errors"

echo "[Traffic sample]"
timeout 10 tcpdump -i "$IFACE" -nn port 67 or port 68 -c 20 2>/dev/null | tail -n 20
  • 使用方式:保存为 check_dhcp.sh,chmod +x 后执行:./check_dhcp.sh eth0
  • 扩展建议:将输出改为 Key-Value 格式,供 Zabbix/Nagios 采集;增加“租约使用率阈值判断”与“异常关键字计数”逻辑以触发告警。

0