LAN スイッチ:Cisco のservice timestamps

Cisco のルーターやLAN スイッチで発生したトラブルを調査する時、皆さんはどのshow コマンドを一番に確認しますか?
状況により答えは様々だと思いますが、私はshow logging を実行して、障害発生中の状況がユーザーの証言と食い違いがないかを確認します。

a




















show logging
を実行すると、そのルーターで過去に発生したイベントが時系列で表示されます。

00:01:47: %LINK-3-UPDOWN: Interface GigabitEthernet0/1, changed state to up
00:01:47: %LINK-3-UPDOWN: Interface GigabitEthernet0/2, changed state to up
00:01:48: %LINEPROTO-5-UPDOWN: Line protocol on Interface GigabitEthernet0/1, changed state to up
00:01:48: %LINEPROTO-5-UPDOWN: Line protocol on Interface GigabitEthernet0/2, changed state to up

2 行目の「GigabitEthernet0/1 のリンクアップ」は0 時1 分47 秒に発生したかのように見えますが、そうではありません。
数日が経過するとタイムスタンプの表示は次のように変わります。

6d06h: %LINEPROTO-5-UPDOWN: Line protocol on Interface GigabitEthernet0/2, changed state to down
6d06h: %LINK-3-UPDOWN: Interface GigabitEthernet0/2, changed state to down

show logging で表示されるタイムスタンプは、イベントの発生時刻ではなくルーターが起動してからそのイベントが発生するまでに経過した時間なのです(この例では、Ge0/2 のリンクダウンは6日と6時間経過時に発生している)。
これでは、正確なイベント発生時刻が分からず、複数台のルータ間でログを見比べることなどできません。

show running-config を実行してみます。

Router#show running-config
Building configuration...

Current configuration : 1404 bytes
!
version 12.2
no service pad
service timestamps debug uptime
service timestamps log uptime


最後の行に注目してください。
service timestamp は、ルーターが出力するメッセージにつけられるタイムスタンプの表記法を設定するコマンドです。
log uptime を指定すると、以後のログのタイムスタンプはルーター起動からの経過時間(Uptime)になります。
IOS では、このUptime がデフォルトになっているのです。

ここで設定をuptime からdatetime へ変更します。

Router#conf t
Enter configuration commands, one per line. End with CNTL/Z.
Router(config)#
Router(config)#service timestamps log datetime
Router(config)#^Z
Router#

datetime に変更すると、タイムスタンプの表記がイベントの発生した時刻に変わります。

*Mar  1 00:01:28: %LINK-3-UPDOWN: Interface GigabitEthernet0/1, changed state to up
*Mar 1 00:01:28: %LINK-3-UPDOWN: Interface GigabitEthernet0/2, changed state to up
*Mar 1 00:01:29: %LINEPROTO-5-UPDOWN: Line protocol on Interface GigabitEthernet0/1, changed state to up
*Mar 1 00:01:29: %LINEPROTO-5-UPDOWN: Line protocol on Interface GigabitEthernet0/2, changed state to up

datetime msec とすると、ミリ秒単位のタイムスタンプを表示させることができます。

*Mar  1 00:01:28.675: %LINK-3-UPDOWN: Interface GigabitEthernet0/1, changed state to up
*Mar 1 00:01:28.701: %LINK-3-UPDOWN: Interface GigabitEthernet0/2, changed state to up
*Mar 1 00:01:29.682: %LINEPROTO-5-UPDOWN: Line protocol on Interface GigabitEthernet0/1, changed state to up
*Mar 1 00:01:29.707: %LINEPROTO-5-UPDOWN: Line protocol on Interface GigabitEthernet0/2, changed state to up

service timestamps debug datetime msec を設定すると、Debug コマンドの出力にも同様のタイムスタンプを表示させることができます。