Pull Request がMergeされました

はじめに

もうほんとにそのまんまのタイトルです。2回目のPull Request がMergeされて嬉しかったので記事にしました。

きっかけ

職場で、パラメータシートをなるべくリアルタイムで更新できるようにしていきたいなぁと思っていて、でもそれがなかなか実現できずにいました。そこで、なにか良いツールはないかなぁと思って、探していたらTextFSM とntc_templatesを使うと、いろいろできそうだな、と思って試してみました。

・TextFSM
 https://github.com/google/textfsm

・ntc_templates
 https://github.com/networktocode/ntc-templates

ある程度試してみて、とりあえずCisco ASAはこれで対応できるかな、と思って実機のConfigを出力して試したところ、エラーが出力されました。

どうする?

エラーを解読して、対処方法はわかったのでそれで良いかーと思っていたのですが、仕事で使うのならバージョンアップごとになにか手を加えるというのは避けたいなーと思い、思い切ってPull Requestを投げてみることにしました。(これが人生2回目です。)

しばらく音沙汰なかったので、こりゃダメかなぁと思っていたら、先日Mergeされましたの連絡が来て、本当に嬉しかったです。以下が該当のPull Requestです。

https://github.com/networktocode/ntc-templates/pull/783#event-3835534086

おわりに

せっかくMergeしてもらえたので、仕事でもntc_templatesを取り入れていきたいなぁと思っています。

ファイルシステムが壊れたらDHCPクライアントも暴走した話

はじめに

職場で一部の人から「ネットワークにつながらない」という申告があり、調べたら自分が原因でした、というお話です。

朝のことです

一部の職員から「ネットワークにつながりません」という申告がありました。朝で担当の職員がいなかったこともあり、自分が代わって対応しました。

確認できたのは以下のような事象でした。

  • 会社の無線LANのうち、あるSSIDではつながらない
  • 別のSSIDなら大丈夫
  • ipconfigしてもらうと、つながらないというSSIDはIPを取得できていない
  • Wifiはつかめているっぽい

PCのIPアドレスはDHCPなので、DHCPサーバになにか問題が起きたかなぁというのが私の見立て。

しかし、この時点でいくつか疑問が。

  • DHCPサーバの不具合なら、別のSSID(別セグメント)では問題起きないのは不思議
  • DHCPリレーの不具合でも同様
  • 問題のあるSSIDも、大丈夫な人と大丈夫じゃない人がいる。DHCPサーバの問題なら大丈夫な人がいるのも不思議。
  • 大丈夫じゃない人も複数いる。PC再起動してもダメ。PC起因が複数台で同時発生というのもありえなくないけど、確率低い

そんなこんな考えると、IPアドレス枯渇が一番ありえそうな気がする一方で、つながらない人が全員、後から接続しようとしたわけじゃなく、大丈夫な人よりも先につなごうとしていたので、はっきりと断言できるわけでもなし。

調査結果を聞く

ネットワークの担当者が来たので、そちらに任せていると「DHCPのアドレス枯渇が原因です。特定のクライアントから10秒毎に新しいIPを払い出すよう依頼が来ている」という連絡が。しかも、私が実験用に使っているPCから。

そのPCはMinIO の実験用に職員用セグメントに立てていたDebianマシン。そういえば、昨日の午後にファイルの送受信試したな、と。
マシンを見てみると、IOエラーが大量に出ているようですが、sshも通るしネットワーク的にはおかしくはない感じ。IPアドレス確認しようとコマンド打ったらびっくり!確かに有線のinterfaceにIPアドレスが大量に割り当ててられているではないですかー。とりあえず迷惑かけ続けるのもアレなので、シャットダウンしました。

問題のマシンを調査してみる

IOエラーがDHCPの暴走になるのか?というのが疑問で、所定の用事を済ませたた後に、問題のマシンを調査してみました。

問題起こすわけにもいかないので、いったん、有線ケーブルは抜いて起動して、syslogとかを見てみようとすると、ガーン!起動しないじゃないの。手動でfsckしてね、と言われるので、言われるがまま作業してなんとか起動。

で、syslog見てみると、どうも前日の18時前くらいからログがない様子。その少し前のログを見るとIOエラーでファイルシステムをReadOnlyに、と書かれているので、syslogも書き込めなくなったのかも、という結論に。

しかし、それでなぜDHCPが?syslogを見ると前日の12時くらいにリース更新の記録があり、残りが12時間弱くらいになっていたのです。そういえば、前日の23時台から問題の挙動が起き始めている、とネットワーク担当者が言っていたな…

dhclient-enp2s0.leasesを見ると、正常に取得していたIPだけが書かれていて、それがsyslogの内容とも概ね合致している感じ。その後IPを大量に取得しているにもかかわらずそれがleasesに反映されていない。

ということは、こんな感じってことですかね。

DHCPのリース更新をした
→ちゃんと更新できているにもかかわらず、DBを更新できないためにリース期限を更新できなかったと思いこむ
→リース切れだと思い、IP取得に行く
→取得できているのにDB更新できないから取得できなかったと思い込み、また取得に行く(以下これを繰り返す)

まとめ

問題のマシンは、以前もファイルシステムエラーを起こしていたので、ディスクが壊れているのか、MinIOとext4の組み合わせが良くないのか、ちゃんと調べてから使うべきでした。

きちんと調査せずに、安易にOS再インストールして、かつサーバのように起動させっぱなしにしていたのが良くなかったです。

psコマンドとかで見た限り怪しいプロセスもなかったし、おそらくセキュリティインシデント(マルウェア感染とか)ではなかったと思われるので、それは良かったです。

参考にしたサイトなど

あと、dhclientのソースコードもちょっとだけ目を通しました。

Pull Requestしてみた

はじめに

4連休を使って、ntc-templatesというOSSへPull Requestしてみたメモです。

きっかけ

職場でFWポリシーを常に最新に保ちたいというニーズがあります。でも、手作業でエクセルのポリシー表をぽちぽち修正するのってツライし、ミスる原因にもなります。そのため、FWにACLを投入した内容が自動で反映できるようになるといいな、と思ったのがきっかけです。

いろいろ試行錯誤してみました。最初に試したのはこれでした。

自由度が高くて使いやすいのですが、投入したConfigの中身を自分で解釈していく必要があってやめました。

なにか良いツールないかなと思って見つけたのがTextFSMでした。このあたりの記事などを参考にしました。

使ってみたところ

TextFSMだけだとテンプレートを自分で書かないといけないようですが、そこはやっぱり先人がいて、ntc-templatesというOSSがありました。

そこで使ってみると、これは便利だ!ということで早速、職場のASAから出力したACLでもやってみることにしました。

ところが、”Did not match any rules” エラーが出てしまいます。微妙にテンプレートの構文とコマンドの出力が合っていないようでした。

じゃあ自分で修正してみよう

自分で修正したら良いね、ということでCiscoのコマンドリファレンスなどとにらめっこして、修正しました。修正したのは主に3点。

  • ENTRY_PORTが”ftp-data”のようなハイフン付きにも対応できるようにした
  • inactive (hitcnt=0) (inactive) のような出力に対応できるようにした
  • log disableやlog default に対応できるようにした

Pull Requestの内容がこれです。
https://github.com/networktocode/ntc-templates/pull/783

英語でのやりとりになるので、そこにも注意しました。英語苦手なので。

おわりに

マージしてもらえたら嬉しいですし、されなくても指摘とか貰えればそれはそれでありがたいです。結構手間暇かかって大変でしたけど、おもしろかったです。

入門 監視を読みました

はじめに

オライリーの入門 監視を読みましたので感想文です。

入門 監視
https://www.oreilly.co.jp/books/9784873118642/

監視の考え方

一番、印象的だったのがシステムの監視をする際にCPU使用率だったりメモリ使用率だったりを取得するわけですが、それ自体はそれほど役に立たないという趣旨の記載の部分でした。

実際、CPU使用率高騰でアラートメールを受信することは多いのですが、理由がバッチ処理で一時的に負荷がかかっているだけで、システムとしては正常というケースが多いので、疑問を感じていました。ユーザから観て、正常に動作しているのかどうかという視点でアラートを考えるべき、というのが腹にストンと落ちる感じがしました。

メトリクスの重要性

また、ちょうど業務で不審な通信の有無を探すということをやって、ログからそうした傾向を調査しようとしていろいろ試行錯誤をしていたところ、メトリクスの重要性を感じるきっかけにもなりました。

ログそのものではなくて、メトリクス(ゲージやカウンタ)という形で普段から取得しておくことで、いざそういう調査をする際に速やかな調査が可能になるな、というのを感じました。

これまでGrafanaやKibanaをうまく活用しきれていないと感じていたので、それらをどう活用するかの方向性が見えたような気がしました。

まとめ

ちょうど読んだタイミングが良かったのだと思いますが、この本に書かれている内容を実感するような実例を業務で携わることもできて、まさに自分が求めていることが書かれている!という感想を持ちました。

オススメです!

Exponential Backoff And Jitterの勉強

はじめに

AWSの勉強をしていて、リトライについて書かれている記事を読みました。
https://codezine.jp/article/detail/10739

この中で説明されていたExponential Backoff And Jitterのコードを読んで、
試してみたので記録しておこうと思います。

シミュレータの実行

python backoff_simulator.py

でcsvを作成しました。
なお、PCのスペックが貧弱(Thinkpad x61s)なのもありますが、結構な時間がかかりました。それから、csvのデータ尾を、gnuplotでグラフにしてみました。Call数をグラフにしたのがこれです。 もとのサイトのグラフとほぼ一致していますね。

全リクエストの処理が完了するまでの総所要時間のグラフがこちらです。

傾向としてだいたい同じになりました。

バックオフのロジックを工夫することで、処理時間を節約することができるのですね。
TCPの輻輳制御も面白そうだなと思ったので、TCP技術入門も読んでみたくなりました。
https://gihyo.jp/book/2019/978-4-297-10623-2

参考URL

https://codezine.jp/article/detail/10739

あと、gnuplotを使うのは初めてだったので、参考になりました。
http://nalab.mind.meiji.ac.jp/~mk/labo/howto/intro-gnuplot/intro-gnuplot.html