Slide 1

Slide 1 text

SONiC トラブルシューティング June 28, 2019 Masaru OKI @masaru0714

Slide 2

Slide 2 text

スイッチ実機編 2

Slide 3

Slide 3 text

コンソールの反応がない、あるいは文字化け ● チェックポイント ○ ケーブルのピン配線は正しいか ○ スイッチのコンソールポートに接続しているか ○ PC側で正しくシリアル通信できるか ■ よく言われること : USBシリアルはFTDIのを使おう ○ 速度やビットなどのパラメータは一致しているか ■ たいていは115200bps, 8bit, parity none, CDなしフロー制御なし ■ 一度化けると合わせても化けっぱなしなので端末側を一度リセットする 3

Slide 4

Slide 4 text

SONiCが起動しない ● チェックポイント ○ BIOSは起動しているか ○ GRUB Menuは出ているか ○ GRUB MenuにSONiCの項目はあるか ○ 起動中に詰まる場合、対応機種か確認 ■ PlatformはONIEが渡してくる。ONIEを更新すると状況が改善するかもしれない 4

Slide 5

Slide 5 text

ログインできない ● コンソール・ssh共通 ○ デフォルトは admin YourPaSsWoRd ○ 自前ビルドする場合変更できるので、変更していないか確認 ● sshの場合 ○ アップデートすると host keyが置き換わるのでエラーになることがある ○ ssh-keygen -R ホスト名かIPアドレス を実行し、保存済み host keyを消すと入れるようになる 5

Slide 6

Slide 6 text

仮想マシン編 6

Slide 7

Slide 7 text

起動できない ● チェックポイント ○ libvirtが必要。 ○ KVMの動作環境が必要。動かすことができるかチェックする。 ■ 必要に応じてsonic.xmlを編集し、適切な typeに変更する方法もある。 ○ sonic.xmlの中には、sonic-vs.imgの置いてあるパスが記述されている。 ■ パスが不一致だと起動できない。テキストエディタで編集してパスを合わせる。 7

Slide 8

Slide 8 text

ログインできない? ● チェックポイント ○ telnet 127.0.0.1 7000 でコンソールがとれる。 ○ create直後は起動中なので、起動が完了するまで待つ。 8

Slide 9

Slide 9 text

共通編 9

Slide 10

Slide 10 text

showコマンドが(Pythonの)エラー ● Config DBにデータが入っている前提のコマンドがある。 ○ たとえば”PORT”がいっさいない場合 show interfaces statusはエラーになる。 ○ 現在のSONiCはサンプルコンフィグが初期インストールされるはずだが …… ● Config設定不足でなく、まるっきり空になっているケースもある。 ○ config_db.jsonにフォーマットエラーがあるまま起動すると Config DBが空になる。 ■ カッコの閉じ忘れ、カンマの書き忘れなど ○ あるいはconfig_db.json自体がからっぽの場合も Config DBは空になる。 ○ config_db.jsonを編集した場合はいきなりリブートせず、まず config reloadを実行する。 ■ エラーが見つかったら修正する。 10

Slide 11

Slide 11 text

config_db.jsonに書いた設定が無視されている ● チェックポイント ○ 重複記述のチェックは現在されていない。上か下に同じ項目がないか確認。 ○ JSON記述の中にエラーがある (たとえば閉じかっこが足りない )と反映されない。 ■ config reloadを実行するとエラーが見つかるので編集する。 ■ dry runは現在のところない。 (将来用意される予定 ) 11

Slide 12

Slide 12 text

動いていた設定がリブートすると消える ● configコマンドを使って設定した内容は DBのみに書き込まれる ● DBはredis、つまりオンメモリなので、リブートすると保存されない ● config saveを実行して、/etc/sonic/config_db.jsonをDBの内容で上書きして保存する ● リブート後はconfig_db.jsonに書かれた設定で動作する 12

Slide 13

Slide 13 text

インタフェースは見える? 見えない? ● 正しく動いていればshow interfaces statusで下記のように表示される。 ● SONiCでサポートされていないスイッチだと表示は空になる。 admin@sonic:~$ show interfaces status Interface Lanes Speed MTU Alias Vlan Oper Admin Type Asym PFC ----------- ----------- ------- ----- ------------- ------ ------ ------- --------------- ---------- Ethernet0 1,2,3,4 100G 9100 hundredGigE1 routed down up QSFP28 or later N/A Ethernet4 5,6,7,8 100G 9100 hundredGigE2 routed down up QSFP28 or later N/A Ethernet8 9,10,11,12 N/A 9100 hundredGigE3 routed down up N/A N/A Ethernet12 13,14,15,16 N/A 9100 hundredGigE4 routed down up N/A N/A Ethernet16 17,18,19,20 N/A 9100 hundredGigE5 routed down up N/A N/A admin@sonic:~$ show interfaces status Interface Lanes Speed MTU Alias Vlan Oper Admin Type Asym PFC ----------- ----------- ------- ----- ------------- ------ ------ ------- --------------- ---------- admin@sonic:~$ 13

Slide 14

Slide 14 text

パケットが通らない? ● チェックポイント ○ show interfaces statusで、oper upしているか確認する。 ■ upしていない場合、トランシーバー関連の問題。 ● show interfaces transceiver presenceで認識されてるか確認。 ○ Not presentの場合、見えていない。 ○ きちんと挿せているか物理確認。 ● 対向機器とFECの設定が合っているか確認。 ○ 合っていなければ合わせる。 ○ portconfigコマンドで設定できる。 ○ show interface countersでインタフェースごとの drop数やエラー数が確認できる 14

Slide 15

Slide 15 text

動いていない機能がある? ● SONiCで提供している機能の大部分は systemdのserviceとして起動されている。 ● systemctlコマンドを使えばそれぞれの serviceの状況を確認できる ● たとえばNTPが動いてない場合 systemctl | grep ntp などすると状況がわかる。 admin@sonic:~$ systemctl|grep ntp ntp.service loaded active exited LSB: Start NTP daemon admin@sonic:~$ 15

Slide 16

Slide 16 text

テンプレートファイル ● SONiCの機能の一部は、テンプレートファイルを元に JSON設定を反映させている。 ● テンプレートファイルは/usr/share/sonic/templatesに置かれている。 ● 反映後の設定(たとえば/etc/ntp.conf)と比較し、設定の不備がないか調べる。 admin@sonic:~$ ls /usr/share/sonic/templates/ buffers_config.j2 interfaces.j2 qos_config.j2 tacplus_nss.conf.j2 common-auth-sonic.j2 ntp.conf.j2 rsyslog.conf.j2 admin@sonic:~$ 16

Slide 17

Slide 17 text

ログ show loggingコマンドでsyslog出力を参照できる。 admin@sonic-edgecore:~$ show logging |grep ntp|tail Nov 9 18:36:02.571028 sonic-edgecore NOTICE kernel: [11944.923827] audit: type=1400 audit(1478716562.566:17): apparmor="DENIED" operation="open" info="Failed name lookup - disconnected path" error=-13 profile="/usr/sbin/ntpd" name="bin" pid=7108 comm="ntpd" requested_mask="r" denied_mask="r" fsuid=0 ouid=0 Nov 9 18:36:02.571031 sonic-edgecore NOTICE kernel: [11944.923841] audit: type=1400 audit(1478716562.566:18): apparmor="DENIED" operation="open" info="Failed name lookup - disconnected path" error=-13 profile="/usr/sbin/ntpd" name="usr/sbin" pid=7108 comm="ntpd" requested_mask="r" denied_mask="r" fsuid=0 ouid=0 Nov 9 18:36:02.571034 sonic-edgecore NOTICE kernel: [11944.923854] audit: type=1400 audit(1478716562.566:19): apparmor="DENIED" operation="open" info="Failed name lookup - disconnected path" error=-13 profile="/usr/sbin/ntpd" name="usr/bin" pid=7108 comm="ntpd" requested_mask="r" denied_mask="r" fsuid=0 ouid=0 Nov 9 18:36:02.571667 sonic-edgecore INFO ntpd[7111]: proto: precision = 0.115 usec (-23) Nov 9 18:36:02.572138 sonic-edgecore WARNING ntpd[7111]: restrict 0.0.0.0: KOD does nothing without LIMITED. Nov 9 18:36:02.572543 sonic-edgecore WARNING ntpd[7111]: restrict ::: KOD does nothing without LIMITED. Nov 9 18:36:02.573206 sonic-edgecore INFO ntpd[7111]: Listen normally on 0 lo 127.0.0.1:123 Nov 9 18:36:02.573630 sonic-edgecore INFO ntpd[7111]: Listen normally on 1 eth0 10.207.14.20:123 Nov 9 18:36:02.574039 sonic-edgecore INFO ntpd[7111]: Listen normally on 2 lo [::1]:123 Nov 9 18:36:02.574476 sonic-edgecore INFO ntpd[7111]: Listening on routing socket on fd #19 for interface updates 17

Slide 18

Slide 18 text

debugコマンド BGP関連のデバッグに利用できる。 admin@sonic:~$ debug bgp --help Usage: debug bgp [OPTIONS] COMMAND [ARGS]... debug bgp on Options: -?, -h, --help Show this message and exit. Commands: default* events debug bgp events on updates debug bgp events on admin@sonic:~$ 18

Slide 19

Slide 19 text

ひとりでできる最終手段? ● sudo -sできるので、Linuxのroot権限でできる範囲でやり放題。 ● docker execで各コンテナ内に入って中身を確認する。 ○ docker exec -it syncd bash ○ docker exec -it bgp bash ○ など ● ソースコードが公開されているので追跡する。 ○ https://github.com/Azure/sonic-buildimage/ 19

Slide 20

Slide 20 text

外部の情報の活用 ● githubのissueやpull requestに同様の問題の記載がないか調べる ● Google groupsで同じように困っている人がいないか探す ● Google groupsに投稿する ○ 返答がないこともある。めげない、怒らない ○ 内容によってはメーカーのサポートに連絡しろと言われたりもする ● SONiC公式のトラブルシューティングガイド https://github.com/Azure/SONiC/wiki/Troubleshooting-Guide 20