ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

华为交换机开关机时间查询:从uptime到重启记录的运维手册

华为交换机开关机时间查询:从uptime到重启记录的运维手册 前阵子接了个工单客户说核心交换机昨晚无故断网怀疑设备半夜自动重启了。我远程登录后第一件事就是看这台华为交换机的开机时间。其实这类需求在运维里太常见了——领导要台账、审计要记录、排障要定位都绕不开同一个问题交换机到底什么时候开过机、什么时候重启过。很多网工习惯直接翻日志但日志里往往只有登录记录真正能定位开关机时间的命令反而没人整理。今天就把华为交换机这块儿的查询思路和命令写清楚从最基础的看 uptime到查历史重启记录再到批量巡检脚本一次说透。1. 先搞明白你要查的“开关机时间”到底是哪一种在敲命令之前我建议先想清楚一个事你口中的“开机时间”究竟指的哪种时间华为交换机上有三个概念特别容易被混在一起但它们在命令体系里是三个完全不同的东西。1.1 三个容易混淆的时间概念第一个是“当前系统时间”也就是交换机内部时钟现在显示的时间。这个直接用display clock就能看到类似你电脑右下角的时间。它本身不代表开关机信息但它是计算开机时刻的基础。第二个是“系统已运行时长”华为 VRP 里最典型的表现就是display version输出里的uptime is ...字段。比如uptime is 45 days, 2 hours, 30 minutes意思是从本次系统启动到当前时刻已经运行了 45 天零 2 小时 30 分钟。这个字段直接告诉你“这台设备已经连续工作了多久”。第三个是“历史重启/复位记录”也就是过去某一次启动发生在什么时间、因为什么原因启动的。这个信息不在display version里而在display reset-reason、display reboot-info这类命令里。它们回答的是“这台设备之前什么时候重启过”“是人为重启还是异常掉电”。搞清楚这三个概念后你才会知道不同场景分别该查哪个命令。比如客户说“昨天半夜断网”你要查的是第三个——历史重启记录如果是补台账需要知道设备当前已经稳定运行多久那你查第二个就够了。1.2 一张表理清命令分工我把常用命令和对应信息整理成了下面这张表日常登录设备后可以按图索骥。想查的信息推荐命令关键输出字段当前系统时间display clock年月日时分秒、时区系统已运行时长display versionuptime is xxx weeks, xxx days单板复位历史display reset-reason复位时间、复位原因设备重启信息display reboot-info最近重启时间、重启次数启动过程日志display logbufferBOOT、restart、reboot 等关键字NTP 同步状态display ntp-service status时钟同步状态、来源这套组合基本覆盖了百分之九十几的运维场景。下面我逐个展开尤其会把 uptime 反推开机时刻的算法写出来这个细节很多人会忽略。2. 最基础也是最好用的方法用 display version 的运行时长反推开机时刻如果你只是想快速知道“这台交换机是什么时候启动的”最直接的办法不是翻日志而是组合使用display clock和display version。先说结论用当前系统时间减去 uptime就能得到本次启动的大致时刻。2.1 登录后先记录当前系统时间远程登录到华为交换机后先执行display clock。我习惯把它放在第一步因为 uptime 的计算依赖当前时间当前时间一旦不准后面全部白算。HUAWEI display clock 2025-06-21 10:30:00 Monday Time Zone : China Standard Time注意看时区。如果设备配置的是 UTC输出时间会和你本地时间差 8 小时。后面反推开机时间时必须和客户报障的时间统一时区口径否则你会得出一个看起来很离谱的结果。接着执行display version。这个命令每条华为交换机都支持而且不需要额外权限。输出内容里前面一大段是 VRP 版本、固件编译信息重点看中间靠后的位置HUAWEI display version Huawei Versatile Routing Platform Software VRP (R) software, Version 8.180 (CE6850 V200R005C00SPC607B607) Copyright (c) 2012-2021 Huawei Technologies Co., Ltd. ... CE6850 uptime is 45 days, 2 hours, 30 minutesCE6850 uptime is 45 days, 2 hours, 30 minutes就是最关键的一行。不同款型可能显示成S5720 uptime is ...或者S12708 uptime is ...格式基本一致。2.2 手工反推开机时间的完整算法拿到当前时间和 uptime 后开机时间 当前时间 - uptime。举一个实际例子。假设display clock显示当前时间是2025-06-21 10:30:00display version显示uptime is 45 days, 2 hours, 30 minutes。第一步把当前时间的日期部分先减去 45 天2025-06-21 往前 45 天得到 2025-05-07。第二步再减去 2 小时 30 分钟2025-05-07 10:30:00 减去 02:30:00得到 2025-05-07 08:00:00。所以这台交换机的本次启动时间就是2025-05-07 08:00:00左右。这个时间点如果再往前提几个小时往往能对上值班日志里的变更窗口或断电记录。如果你手边有 Linux 环境还有一个偷懒法直接在 shell 里算date -d 2025-06-21 10:30:00 - 45 days - 2 hours - 30 minutes输出结果就是启动时刻。这个技巧在批量处理脚本里尤其管用后面第五节我会给出更完整的实现。2.3 uptime 字段的几个细节不要忽略华为交换机 uptime 的输出单位并不总是天有时会出现周。比如uptime is 12 weeks, 3 days, 5 hours, 10 minutes如果你只盯着days字段会把 12 周这一个大项漏掉算出的开机时间直接偏了三个月。正确换算方式是先看有没有weeks再看days最后hours和minutes。周和天之间的关系是 1 week 7 days千万别在脑子里只按“分钟/小时”去凑。另外display version里显示的 uptime 是设备整个系统的主控板 uptime不是某个业务板的。框式交换机如果只看这块你可能以为整台设备很健康但某一块板卡可能刚重启过。要精细到单板得配合display reset-reason查看单板复位记录这就是下一节要说的内容。还有一个常见误读有人以为 uptime 清零就代表“设备关机又重新开机了”。其实设备升级、重启主控进程、ACL 下发引起协议进程重启都可能影响统计口径。你要把 uptime 当成一个“系统连续运行时间”的参考而不是物理通电时间。3. 查询历史重启记录reset-reason 和 reboot-info 才是关键有时候你不需要“当前运行了多久”而是想知道“这台设备到底什么时候重启过”。这种情况用display version不够因为 uptime 只有一个当前值看不到历史。华为交换机的历史重启记录主要通过display reset-reason和display reboot-info来查。3.1 先试 reboot-info直接看最近一次重启时间在部分华为交换机版本上display reboot-info会直接把最近的重启时间和重启原因列出来输出比较友好。不同款型输出字段略有差异但大致会包含重启次数、最近一次重启时间、重启原因。HUAWEI display reboot-info ReBoot Count: 3 Last ReBoot Time : 2024-12-21 09:15:32 Last ReBoot Reason: Power on看到Power on基本就能判断这台设备是断电后重新上电而不是单纯重启进程。如果原因是Watchdog说明设备可能之前出现了异常被看门狗兜底拉起如果原因是Reset by command多半是有人远程重启了设备。这里要特别提醒一下display reboot-info并非每个华为交换机的每个 VRP 版本都支持。我在 CE 系列和部分框式 S 系列上见过但某些老款盒式交换机上敲这个命令会提示不支持。遇到这种情况不要纠结直接切换成display reset-reason。3.2 reset-reason 是定位异常重启的核心命令display reset-reason在华为 S 系列框式交换机上比较常见用来查询单板复位的历史原因和复位时间。我实际排障时的用法是先不带参数执行看设备支持哪些维度HUAWEI display reset-reason Slot 0: Reset times : 3 Reset time : 2024-12-21 09:15:32 Reset reason : Power on如果设备支持指定槽位查询可以用类似display reset-reason slot 0的方式细化。这在你怀疑某块业务板单独异常重启时特别有用。主控板显示一切正常不代表所有板卡都没重启过接口板如果频繁复位会引起大量接口 down/up 告警这时候就必须查单板级复位记录。3.3 框式和盒式交换机的查询差异框式交换机一般有主控板、业务板、交换网板等多个槽位display reset-reason可以分槽位看定位粒度更细。盒式交换机结构简单通常只有一个系统查询维度少一些历史上是否有该命令也要看具体款型。如果命令行里敲命令后/没有反应用问号?看提示是最快的。华为 VRP 的在线帮助很友好display reset-reason ?会列出支持的参数。不要凭记忆硬敲不同版本差异真的存在。还有一点这类命令往往需要较高的用户权限。如果当前账号只是只读权限可能看不到输出或提示权限不足。后面我会专门说权限问题的处理思路。4. 日志里其实有一整条“开关机时间轴”logbuffer 和日志服务器用过命令行查完 uptime 和重启记录后很多场景还需要确认“设备在这个过程中到底经历了什么”。这时就得看日志了。华为交换机的日志不仅记录登录、配置变更也会把启动、重启的关键节点写进去。4.1 重启前后的日志长什么样华为 VRP 的日志通过信息中心info-center记录默认在 console 和 logbuffer 里都能看到。一次正常的设备重启日志里通常会有类似下面的痕迹Dec 20 21:03:03 2024 HUAWEI %%01SHELL/4/LOGINOUT: User admin logged in Dec 21 09:15:28 2024 HUAWEI %%01DEV/4/BOOT: system is restarting. Dec 21 09:16:01 2024 HUAWEI %%01DEV/4/BOOT: system boot successfully.第一条说明有人在重启前登录过第二条说明系统开始重启第三条说明系统启动完成。如果你看到重启前十分钟内恰好有账号登录那很可能是人工操作如果没有任何前置日志直接出现断电痕迹那就要往供电和物理环境方向排查。注意断电场景下设备突然没有时间记录很正常。比如机房里有人拉闸设备在断电瞬间根本来不及写日志下一轮启动时你看到的第一条日志就是开机记录。这种情况下日志服务器里上一轮设备的 last alive 时间反而是很有价值的关机时间参考。4.2 从一堆日志里快速过滤时间点直接看display logbuffer输出会非常长尤其设备运行了很久、日志量大时翻屏能翻到怀疑人生。我一般会先过滤关键字再定位时间点。HUAWEI display logbuffer | include BOOT这条命令会把日志里包含 BOOT 的内容全部滤出来。如果想看所有重启相关可以同时匹配多个关键字比如 reboot、restart、resetHUAWEI display logbuffer | include reboot HUAWEI display logbuffer | include restart提醒一下logbuffer 本质是内存缓冲区容量有限。设备持续运行时间长了老日志会被新日志覆盖掉。如果你要追溯的设备已经运行了三个月而想查的重启发生在两个月前大概率在 logbuffer 里已经找不到了。所以生产环境提前配置日志服务器非常有必要。4.3 想让时间轴完整提前把日志送出去在华为交换机上配置日志输出到远程 syslog 服务器核心是 info-center 的 loghost 配置。生产环境下我一般会加一条这样的配置info-center enable info-center loghost 192.168.10.100 facility local5远程日志服务器会把交换机产生的日志实时收走即使设备断电重启之前的记录也完好保存在服务器上。这样再查“开关机时间”就不用在设备上一页页翻 logbuffer直接在日志平台里按 hostname 和时间范围检索效率高一个量级。另外如果交换机支持网管协议也可以接入华为 eSight 或第三方网管系统由网管侧记录设备的在线状态和掉线时间。这个思路在“查关机时间”时非常实用设备从网管上消失的时间往往就是关机时间重新恢复纳管的时间就是开机时间。5. 多台设备批量查开机时间巡检脚本思路与 Python 实现前面讲的都是登录单台设备手工查。实际工作中你可能要维护几十上百台接入交换机领导要一份“全网设备最近一次开机时间台账”如果一台台登进去抄一个小时都不一定搞完。这时候用脚本批量采集才是正路。5.1 为什么要用 Netmiko 这类库华为交换机的 SSH 命令行交互比较标准用 Paramiko 也能写但 Netmiko 这个库已经把很多网络设备的登录、命令发送、回显处理都封装好了对华为 VRP 支持得也不错。用它写巡检脚本代码量可以少很多。我这里说的脚本思路是读一个设备清单逐个 SSH 登录执行display clock拿到当前时间再执行display version拿到 uptime然后用 Python 的datetime做减法最后输出启动时间。5.2 可直接参考的批量采集脚本下面这段脚本只依赖 netmiko安装好依赖后填入设备信息就能跑#!/usr/bin/env python3 import re from datetime import datetime, timedelta from netmiko import ConnectHandler def parse_uptime(text): # 支持 45 days, 2 hours, 30 minutes # 也支持 12 weeks, 3 days, 5 hours, 10 minutes pat re.compile( ruptime is\s r(?:(?Pweeks\d)\sweeks?,\s*)? r(?:(?Pdays\d)\sdays?,\s*)? r(?:(?Phours\d)\shours?,\s*)? r(?Pminutes\d)\sminutes?, re.I, ) m pat.search(text) if not m: return None weeks int(m.groupdict().get(weeks) or 0) days int(m.groupdict().get(days) or 0) hours int(m.groupdict().get(hours) or 0) minutes int(m.groupdict().get(minutes) or 0) return timedelta(daysweeks * 7 days, hourshours, minutesminutes) def collect_device(device): conn ConnectHandler(**device) clock_output conn.send_command(display clock) version_output conn.send_command(display version) # 第一行一般是 2025-06-21 10:30:00 current_line clock_output.splitlines()[0].strip() now datetime.strptime(current_line, %Y-%m-%d %H:%M:%S) delta parse_uptime(version_output) conn.disconnect() if delta is None: return device[host], now, None, None boot_time now - delta return device[host], now, delta, boot_time if __name__ __main__: devices [ { host: 192.168.10.11, username: admin, password: your-password, device_type: huawei, port: 22, }, { host: 192.168.10.12, username: admin, password: your-password, device_type: huawei, port: 22, }, ] for dev in devices: host, now, delta, boot collect_device(dev) if boot is None: print(f{host}: 未解析到 uptime需人工确认) else: print(f{host}: 当前时间 {now}, 已运行 {delta}, 启动时间 {boot})这段脚本是我日常巡检的简化版核心逻辑集中在parse_uptime和collect_device两个函数里。如果你管理的设备比较多建议把设备清单放到 CSV 文件里用csv模块读取避免每次改 Python 源码。5.3 运行结果与实际使用建议脚本输出类似这样192.168.10.11: 当前时间 2025-06-21 10:30:00, 已运行 45 days, 2:30:00, 启动时间 2025-05-07 08:00:00 192.168.10.12: 当前时间 2025-06-21 10:30:00, 已运行 90 days, 4:10:00, 启动时间 2025-03-23 06:20:00把这些结果整理成表格就是一份很清晰的设备开机时间台账。我实际操作时发现有两个坑一是有的交换机开启的中文语言包时间输出里可能夹杂中文strptime会报错二是设备如果没配时钟时间可能停在很久以前脚本算出来的启动时间会非常离谱。所以脚本只能帮你省时间最后一步人工核验仍然跑不掉。6. 这些坑我基本都踩过时间不准、命令缺失、口径不清最后把我在实际使用中踩过的坑和总结的经验写出来希望大家少走点弯路。6.1 没配 NTP 时“当前时间”本身就不可信华为交换机的内部时钟如果长期不校时会随着硬件晶振漂移时间越走越偏。我遇到过一台接入交换机显示当前时间是 2024 年 8 月实际已经是 2025 年 6 月。这种情况下你用display clock减去 uptime得出的启动时间完全是错的。所以查开机时间前一定要先看设备有没有配置 NTP。可以用display ntp-service status看同步状态如果显示未同步先手工校时或者等 NTP 同步成功后再计算。没有可靠时钟一切时间相关的排查都无从谈起。6.2 uptime 和“物理开机时间”不是一回事很多刚接触华为交换机的朋友会直接把 uptime 当成物理上电时间这个理解有偏差。uptime 是从系统主控进程启动开始累计的设备升级、热补丁加载、主控主备倒换等操作都会导致 uptime 清零但设备本身并没有断电。比如你给交换机打了一个特性补丁系统提示需要重启生效重启后 uptime 从零开始。过了几天别人问这台设备什么时候开机的你如果只看 uptime 说“前几天刚开机”实际上设备已经连续通电几个月了。这时候要把“系统启动时间”和“物理上电时间”分开表述避免把运维台账写成一份错误文档。6.3 命令不存在或权限不足时的替代方案不同款型、不同 VRP 版本对display reboot-info、display reset-reason的支持情况不一样。如果命令不存在先别慌我的备选思路有三条第一条用display logbuffer | include BOOT过滤日志从启动成功的时间反推第二条如果有远程日志服务器直接搜设备 IP 或 hostname看最后一条日志和恢复日志的时间第三条看网管系统里设备的历史在线状态掉线到重新上线之间的间隔就是一次关机周期。权限不足的情况也很常见。只读账号可能执行不了某些诊断类命令这时候要么找有权限的同事帮忙要么在对端交换机的接口状态、供电记录、机房动环系统里找辅助证据。动环系统里往往有 UPS 供电记录哪个时间点机柜跳闸、哪个时间点恢复供电都能查得一清二楚比设备侧记录更硬。如果只让我给一条建议那就是平常把 NTP、日志服务器、网管监控三件事都配好。一旦它们就位了查华为交换机的开关机时间就不再是靠运气碰命令而是变成一个标准查询流程什么时候想查都能查到。
返回列表