Cisco Catalyst のTDR試験コマンドでポート故障を遠隔診断する

忙しい人向けサマリ

  • リンク障害は現地での物理切り分けしかできずとてもつらい
  • test cable-diagnostics tdr コマンドの結果が Fail もしくは Not completed になったら自装置のポート故障と判断できることを発見
  • 判定率50%、誤検知率0%。範囲は狭いが信頼性が高く大変有用で障害対応時間が大幅短縮

こんにちは。とある通信会社の委託で壊れたルーターを取り替えるだけの簡単なお仕事をしている夜勤作業員です(エンジニアじゃないよ)。ふと思い出したので、私が新入社員のときに初め取り組んだ業務改善のお話をしたいと思います。

地味に面倒なリンク障害の切り分け

%LINK-3-CHANGED: Interface GigabitEthernet0/1 changed state to down %LINEPROTO-5-UPDOWN: Line protocol on Interface GigabitEthernet0/1, changed state to down

ネットワークを監視していると日常的に起きるリンク障害(リンクダウン・ポートダウン)。両装置がいまも稼働しているならば、その故障被疑箇所は主に装置Aのポート・装置Bのポート・それらをつなぐケーブルの3つが挙げられます。オプティカルなSFPであれば show interfaces transceiver などのコマンドで光を出してる・受けてるが遠隔で確認できますし、SONET/SDHとかだったら show controllers sonnet とやればアラートや統計値が確認でき、ある程度の推測が可能です。しかしUTPを使ったナイーブなEthernet (1000BASE-T等) ではこれといった有用な方法がありません。

となると現地でケーブルを差し替えてみたり筐体を交換してみたりして物理的に切り分けるしかないのですが、両装置で保守部門が異なったりしていて最初にどちらかが対応してダメだったらバトンタッチするやら、故障箇所が分かってからベンダに代替品を手配するやらで、緊急対応なのに直るまで8時間と平気でかかかったりします。しかも 1000BASE-T などの細いリンクはネットワークの末端、すなわちエンドユーザーの入り口であることが多く、それは大抵シングル構成でリンクダウンがサービス中断に直結するため速やかに復旧させなくてはなりません。余談ですがこのような場所には Catalyst 2960 や 3560 といったチープな機器が使われておりオンライン診断機能が貧弱・無い(POSTだけとか)のも痛いところです。

ケーブル試験コマンド?

f:id:miyahan:20180901141146p:plain

なんかいい方法ないかな〜といろいろ調べていた矢先、ふと test cable-diagnostics tdr というコマンドを見つけました。TDR (Time Domain Reflectometry) とは試験用のパルス信号を送り、反射して帰ってきた信号とその時間を分析することで伝送路の特性を測る手法です。ネットワークの世界ではどちらかというと光ファイバの減衰率を測定するOTDR (Optical TDR) のほうが有名だと思います。よく「パルス試験器」と呼んでいました。レイリー散乱とかフレネル反射とか懐かしい人いませんか?

さて、では実際に使ってみましょう。まず対象ですが Cisco の最も安価なスイッチである Catalyst 2960 シリーズの IOS 12.2 系でも動くので大抵のCiscoスイッチなら対応していると思います(ただし 100BASE-TX ポートを持つ一部機種(旧機種?)は非対応だったようなおぼろげな記憶があります)。次に実行方法ですが、 test cable-diagnostics tdr interface <インターフェース名> というコマンドを実行してください。コマンドは何事も無く終了するので、試験が終わるまで5秒ほど待ってから結果を show cable-diagnostics tdr interface <インターフェース名> コマンドで確認します。なお試験時はリンクダウンし通信が途切れるでご注意ください。

#test cable-diagnostics tdr interface GigabitEthernet0/24

#show cable-diagnostics tdr interface GigabitEthernet0/24
Interface Speed Local pair Pair length        Remote pair Pair status
--------- ----- ---------- ------------------ ----------- --------------------
Gi0/24    1000M Pair A     2    +/- 4  meters N/A         Normal
                Pair C     2    +/- 4  meters N/A         Normal
                Pair C     2    +/- 4  meters N/A         Normal
                Pair D     2    +/- 4  meters N/A         Normal

とこのようにUTP各ペアのケーブル長・ペアの組み合わせ(ストレート/クロス)・状態が確認できます。つまり名前の通りケーブルの状態を診断するコマンドなのですが、壊れた Catalyst 2960 でこのコマンドを実行してみたところ、おもしろい結果が出てきました。

#show cable-diagnostics tdr interface G0/24
Interface Speed Local pair Pair length        Remote pair Pair status
--------- ----- ---------- ------------------ ----------- --------------------
Gi0/24    1000M Pair A     N/A                N/A         Fail
                Pair B     N/A                N/A         Fail
                Pair C     N/A                N/A         Fail
                Pair D     N/A                N/A         Fail

Fail とでています。これはCiscoのコマンドリファレンスにも載っていない結果です。これは使えそうと直感し統計を取ってみることにしました。

続きを読む

EC2 Auto Scaling にあわせて Zabbix でホストの自動登録・削除がしたいんですよ

こんにちは、通信会社で壊れたルーターを取り替えるだけの夜勤作業員、な、のですが、とある縁で今はサーバーの監視・運用代行業務(MSP)をさせてもらっています。

具体的には Zabbix を使ってクラウドにある顧客のサーバーを監視しているのですが、オートスケーリングを使っている案件ではスケールイン、すなわちインスタンスが terminate されると当然ながら通信が途絶えるので、Zabbix agent is unreachable やら unavailable by ICMP やらのポーリング系アラートじゃんじゃん鳴ってしまいます。これでは実務上も精神衛生的にもよろしくないので何とかしたいなあと少し考えてみました。

おそらく Auto Scaling のイベントを SNS で飛ばして Lambda でよしなにやる的なのが "ベストプラクティス" ってやつなのでしょうが、いかんせんクラウドを触り始めてまだ2ヶ月で勝手が分かってないので、とりあえず思いつく古典的手法を試してみます。

忙しい方は最後にあるデモ動画だけ見ていっていただければ幸いです。

スケールアウト時の自動登録は Zabbix におまかせ

Zabbix には標準でエージェント自動登録機能がついています。さらに設定ファイルにホストメタデータを書いておけば、案件やサーバー種別ごとに柔軟な処理が行えます。

f:id:miyahan:20180722180036p:plain

今回の検証では Auto Scaling グループ用に "MySiteAS" という文字列をメタデータとしてマスターAMIに書いておき、Zabbixサーバー側でこれを検知するとホストの登録・ホストグループへの参加・各種テンプレートのリンクを自動で行う自動登録アクションを作りました。

参考:

www.slideshare.net

スケールイン時の自動削除はいろいろたいへん

一方でホストが終了した際の処理は一筋縄ではいきません。監視システムはホストが応答しないのは何らかの障害が起きているのか、意図的にシャットダウンされたのか判断できないからです。しかし仮想サーバーであればそのマネージャーがVMの状態を知ってます。EC2 では AWS CLIAWS SDK を使ってインスタンスの状態を取得できるので、Zabbix server 側でそれを利用できれば終了検知・ホスト削除ができそうです。

ちなみに現状では Zabbix のネットワークディスカバリによるポーリングを行っており、一定期間以上応答しなかったホストを「たぶん stop か terminate したんだろう」と見なして削除するアクションが動いていますが、即時性がないためアラートは鳴ってしまいます。また確信なしに設定を消してしまうのはちょっと気持ち悪い感じがします…。

いろいろ試行錯誤してたどり着いたワークフローが次の通り。

f:id:miyahan:20180722172446p:plain

  1. インスタンスIDをメタデータから取得し Zabbix API でホストマクロに登録
  2. AWS SDK を使って定期的にインスタンスのステータスを確認
  3. インスタンスが terminated になったら Zabbix API を使って Zabbix からホストを削除
続きを読む

職場でコーヒー会はじめました

こんにちは、とある通信会社の委託でネットワークの監視・保守をやっている作業員です(エンジニアじゃないよ)。 今回は職場にコーヒーメーカーを買って飲みものを共同購入する営みを始めた話をします。 夜勤を含む24時間体制で監視業務を行っている特殊な職場の事例ではありますが参考になれば幸いです。


「缶コーヒー代って結構バカにならないよね−」
それは同僚の何気ないひとことから始まりました。

職場の休憩室に設置されている自販機は缶が110円・ペットボトルが140円で売られています。110円の缶コーヒーを1日1本飲むと月平均2,200円となかなかの金額になる上に、夜勤時の冷え込む時間には暖かいジョージア紅茶花伝が飲みたくなるものですが夏場は「つめた〜い」飲みものしかないなどの不満がありました。そんなとき同僚の一言から「じゃあ自前で用意するか」と "コーヒー会" をスタートさせました。

というわけで達成すべき目的は2つ:

  1. 缶コーヒーよりもリーズナブルにコーヒーを飲めるようにすること(同僚の主目的)
  2. 監視ルームですぐ淹れられるようになること(私の主目的、詳しくは後述)

設備構築&会費検討

いきなりコーヒーメーカーを買うのは無理があるので、まずはスロースタートということでインスタントコーヒーから始めることに。とりあえず電気ポットやカップスタンド、カップホルダー、ディスペンサー、小物入れなどを自腹で買いそろえました。

f:id:miyahan:20171215112839j:plain

ストリックスデザイン カップホルダー 5P ブラック

ストリックスデザイン カップホルダー 5P ブラック

山佳化成 ワンタッチシュガーポット

山佳化成 ワンタッチシュガーポット

バスケット: バスケット ナチュラルウッド ハーフ | ニトリ公式通販 家具・インテリア・生活雑貨通販のニトリネット

さらに家でホコリを被っていた Nestle ネスカフェバリスタ も引っこ抜いてきて休憩室の自担当冷蔵庫脇に設置。ちなみにワイヤーラックも購入。

f:id:miyahan:20171215123640j:plain

昼間は休憩室にあるネスカフェバリスタを使ってもらい、夜勤時は上記のバスケットを監視ルーム(一応飲食禁止)に持ち込んで電気ポットですぐインスタントコーヒーが飲めるようにする目論見です。

次に会費の検討です。試算したところ1杯15円ランニングコストがかかることがわかりました。

項目 単価 購入品
インスタントコーヒー 6.4円 AGF マキシム 135g 429円 ヨーカドーセール
ノンカロリー甘味料 2.6円 シュガーカット顆粒ゼロ 1kg 2619円
クリーミーパウダー 2.1円 ネスレ ブライト 400g×2袋 549円
紙コップ 7oz 3.0円 日本デキシー 紙コップ205ml 50個入 149円
マドラー 0.9円 木製コーヒーマドラー 200本入 184円
合計 15.0円 -

日勤時には1杯/日・夜勤時には2杯/泊で月15杯飲むのをモデルケースとし225円/人・月。この試算から会費を500円/月とし、出た利益から立て替えた初期投資分(1.5万円)をペイしていくことにしました。

ピッチャー型電気ポット is 神

今年の6月、監視業務に従事している夜勤メンバーに声をかけたところ10人の希望者が集まりコーヒー会が運用がスタートしました。

実際に運用してみると電気ポットが予想以上に便利で捗りました。休憩室は監視ルームからやや遠いうえに静脈認証ドアを通らないといけないため移動コストが高かったのですが、電気ポットを置いたことで思い立ったらすぐ熱々のコーヒーが飲めると大好評でした。

象印 沸とう電気ポット 1.0L CH-DT10-XJ ステンレスブラウン

象印 沸とう電気ポット 1.0L CH-DT10-XJ ステンレスブラウン

ちなみに一般的な電気ポットでもなく電気ケトルでもなく、なぜピッチャーの形をした電気ポットを買ったというと、

  • 電気ポットを置くと他担当から「なにそんなの持ち込んでるの?」とクレームが入る恐れがあるが、ピッチャー形なら「お冷や入れです!!」とごまかせそう
  • 電気ポット・電気ケトルは消費電力が1.5kWと高くブレーカーが飛ぶ恐れがあったが、この製品は沸くのは遅いが430Wと低いので安心
  • 一般的な電気ケトルは沸かすだけだが、この製品は保温機能があるのでいつでもお湯が出る

などの理由がありました。要するに電気ポットと電気ケトルをいいとこどりな製品だったんです。実際その狙いは大いに当たりました。

なお、もしもの時の設備影響・感電を防止するために漏電保護タップを取り付けてあります。

一方で想定が外れたのがネスカフェバリスタが全く使われなかったこと。最初は物珍しさにしばしば使われていたのですが、1ヶ月もしないうちに全く稼働しなくなりいつのまにかインスタントコーヒーが湿気って固まっていました。まあ身も蓋もない言い方をすればただのインスタントコーヒー溶かし機なので、ふつうにポットでお湯を注いでかき混ぜたほうが早くて楽なんです。

インスタントコーヒーディスペンサーを導入したことで瓶をあけてスプーンで規定量を測る手間が無くなり、傾ければ1杯分の粉が出てくる便利さもバリスタ離れに一役買ったような気がします。

というわけで、なんとかアンバサダーを検討しているみなさん。あれただのプリンタインク商法でどんどん損してくので止めた方がいいですよ。

ライバル、本格ミル挽きコーヒー出現

お財布の負荷は減り、いつでも暖かいコーヒーが飲めると喜んでいた矢先、突如ライバルが出現します。休憩室に本格ミル挽きコーヒーのカップ自販機(トーヨーペンディング アドマイヤ)が導入されたのです。

f:id:miyahan:20171215124525j:plainf:id:miyahan:20171215124530j:plain

1杯180〜280円と強気の価格設定でしたが、実際飲んでみるととても美味い。くやしい…でも買っちゃう…!! この刺客により再び我々の財布は厳しくなっていきました。アンケートを取ったところ「会費を上げてもいいので、もっとおいしいのコーヒーを飲みたい」という意見が多かったため、初期の「コーヒー代をとにかく安く」というポリシーを「美味しいコーヒーを安く」に改め、我々も対抗して本格ミル挽きコーヒーに参入することにしました。

コーヒーメーカーは デロンギ マグニフィカ S ECAM23120BN を迷わず選定。というのもコーヒー殻を捨てる行程を含めたフルオートで現実的な価格という条件だとデロンギくらいしか見つかりませんでした。またこのモデルはエントリーモデルに無い「カフェ・ジャポーネ」という蒸らし行程を入れドリップコーヒー風のテイストが味わえるモードが用意されているのがポイントでした。一方でさらに上位のモデルなら全自動でカフェラテやカプチーノが作れるのですが、牛乳の管理など衛生上の課題が拭えないことから見送りました。スチームノズルが付いてるので、やる気があれば自分でミルクフォームが作れますしね。

またアンケートで「コーヒーが飲めないので、緑茶や紅茶があるとうれしい」という意見を何人かからもらったのでティーバッグをラインナップに加えることにしました。

f:id:miyahan:20171215132711j:plain

ファミレスのドリンクバーを再現したく、無印商品でアクリル製引き出し を買ってきて、ティーバッグの化粧箱を切り抜いてペタペタ。かなりそれっぽくなったんでしょうか?

また紙コップが小さい・すぐ冷めてしまうという意見があったことから、大容量で断熱性に優れるフタつき紙コップに変更。

これらの変更によりコストが63円/杯に跳ね上がり 948円/月・人に。このことから会費を1,000円/月に値上げ。会員数10名で毎月の利益が520円。今回追加投資した10万円の回収に約16年かかる計算です。その前に確実に異動すると思います。(多分に個人的趣味と野望が入っているので端から回収しようとは思っていません。黒字であればいいです)

項目 単価 購入品
コーヒー豆(15g) 38.0円 KALDI スペシャブレンド 200g 507円
ノンカロリー甘味料 2.6円 シュガーカット顆粒ゼロ 1kg 2619円
クリーミーパウダー 2.1円 ネスレ ブライト 400g×2袋 549円
紙コップ 14oz 12.6円 サンナップ 厚紙カップ 400ml 50個入 486円
紙コップ フタ 7.0円 サンナップ 厚紙カップ用フタ 100個入 224円
マドラー 0.9円 木製コーヒーマドラー 200本入 184円
合計 63.2円 -

コーヒー会ここに完成

f:id:miyahan:20171215134745j:plain

コーヒー会発足から半年。ついに思い描いていた完成形に達することができました。挽き立てのコーヒー豆から淹れたエスプレッソは本当に美味しく、さらに追加投資してキャラメルソースやチョコレートソースと買って職場内カフェを作りたい欲望まで出てきました。

緑茶や紅茶も少しグレードの高いものを選定したためかこれまた美味い。真夜中のひもじい時に飲む香ばしい玄米茶は身体に染みます。紅茶の華やかな香りもリラックスにとても最適。

飲みもののクオリティがあがったことで、休憩のクオリティが上がり、ひいては業務のパフォーマンスや職場生活品質の向上が図れればと思います。

コーヒー会ポータルサイト

f:id:miyahan:20171215141311j:plain

最後に技術っぽい話を。

会員からお金をもらって運営するという性質上、金や物の流れを透明化したいモチベーションからポータルサイトを作りました。ベタに Excel で管理しても良かったのですが、会社外で閲覧・編集ができない(かといって社内では Dropbox などのストレージや、Office 365 や Google スプレッドシート などのオンラインアプリは遮断されており利用できず)のでフレームワークの勉強も兼ねてWebサイトにしました。

私が借りているレンタルサーバーでは RubyPython がまともに動かないので実質 PHP 一択。CakePHP あたりが有名ですが、Google トレンドを見ると Laravel が近年圧倒的人気なようだったので選定。

f:id:miyahan:20171215142018j:plain f:id:miyahan:20171215142022j:plain f:id:miyahan:20171215142026j:plain f:id:miyahan:20171215142029j:plain

会員の管理や会費の納付状況、全体の財政状況、消耗品のストック状況などを管理・閲覧できるようにしています。

図らずもユーザーの登録・認証、データベースから在庫情報を取ってきたり更新したりとWebアプリケーションの基本的エッセンスが多く含まれており学習課題としてかなり優秀なんじゃないでしょうかこれ。

なおラインナップの紹介やコーヒー会の概要など部外者に見られてもよい情報は認証無し、内部情報を伴うページはユーザー認証有りとしました。ユーザー登録は部外者にされては困るので会社のメールアドレスのみを許容し、そのメールアドレスに書かれた認証ページを踏まないと登録が完了しないようにしました。まあ普通ですね。

ちなみに今回使った Laravel ですが、バージョンが 0.1 違うだけでクラスの構成やメソッド名、CLIコマンド等が大きく異なりリファレンスが役に立たないし、互換性も低い。さらにフルスタックWAFにしては機能が足りておらず、上記のメール認証も自前で書く必要がありました。フレームワークとは何だったのか…。たしかに作りは今風ですが、発展途上でプロダクションで使うには時期尚早だなと感じました。そしてなにより動作がもっさり。おとなしく CakePHP で作れば良かった…。


勉強会などでイケてるIT企業におじゃまするたび、休憩室にドリンクバーがあったり、社内カフェがあったり、バランスボールや畳があったりと憧れの的でしたが、それが自分の会社でも少しではありますが達成できたのです。

プール金マイナス11万に少し青ざめたりもしたけれど、野望が叶って私は満足です。コーヒーおいしいです。^q^


余談:お紅茶

これまで紅茶の種類なんて意識したことが無かったのですが、今回を機にちょっとダージリンとアッサムを飲み比べてみました。

f:id:miyahan:20171215212313j:plain

左がダージリン、右がアッサム。抽出のスピードから色まで全然違います。アッサムは全体的に味が濃く穀物茶のようなテイスト。ダージリンは華やかな香りと透き通ってまっすぐな渋み・えぐみがあります。個人的にはダージリンの方が紅茶のイメージ通りな香りと味で好きです。

f:id:miyahan:20171215212314j:plain

しかしミルクを入れると方向性が全く変わります。ダージリンはミルクに負けてなんだかパっとしない味になりますが、一方でアッサムは香りや渋みが引き立ってミルクとよく馴染んでいます。ミルクティーにするなら圧倒的にアッサムですね。

こんな違うもんなんですねー。


追記: まさかの完済

はじめてから1年半、ついに完全黒字化を達成!

当初は回収できないと思っていましたが、エスプレッソメーカー導入によりメンバーが一気に30人増え(コンビニでドリップコーヒー買ってた勢が大幅に流入)、さらにコーヒー通から安くて美味いコーヒー豆を教えてもらいコストダウンが図れたことが黒字幅増大につながりました。それにしても、見返すと図らずも スロースタート → 多額投資で品質アップ → 顧客満足度向上 → 会員数・収益アップ というスタートアップのサクセスストーリーになってますね。興味深い。

さてこれからは溜まったお金でかき氷器でも買いましょうかね。

Material for MkDocs を日本語対応した話&初めてのOSSコントリビュート

結論: MkDocs (0.17以上) + Material (2.0.3以上) テーマにおいて、次の設定を行うことで日本語UI表示+日本語検索(マルチバイト検索)が可能になります!

theme:
  name: 'material'
  language: 'ja'
extra:
  search:
    language: 'jp'

MkDocs いいよ、MkDocs

www.mkdocs.org

最近仕事で MkDocs というドキュメントジェネレーターを導入し始めています。マニュアルやドキュメントを作る際、オフライン(スタンドアロン環境)で参照したり他部門に成果物を共有したりする場合があるため WikiCMS はポータビリティの関係からできれば使いたくないし、かといってHTML手書きはさすがに辛い。また PowerPoint や Word で消耗したくもない。そんなとき思いついたのが静的ファイルを生成してくれるドキュメントジェネレーターでした。

Sphinx や Re:VIEW などが有名ですがそこまでの表現力・柔軟性は要りませんし、何より他のシステムとの互換性から Markdown を使いたかったので一番よく耳にする MkDocs を採用しました。(Python製ってのも惹かれた)

f:id:miyahan:20171115000825p:plain

一般的な Markdown ファイルにサイト構成(ページ一覧)を書いたYAMLファイルを1つ作るだけで動き、吐き出されるHTMLもおシャレでわかりやすくかなり気に入ったのですが、唯一、日本語検索ができないという制約が引っかかりました。

Material for MkDocs 日本語対応

MkDocsによるドキュメント作成 - Qiita のように独自に改良されている事例もありましたが、ドキュメントをビルドするたびにファイルを差し替える必要があり面倒そうでした。そんなときサードパーティー製のテーマである Material for MkDocs で言語を指定するとマルチ言語対応の全文検索ライブラリ lunr-languages を自動でロードすることに気づきました。どうやら独自で多言語化対応を進めているようです。

まだ日本語には対応しておらず日本語を指定するとエラーになって使えない状態でしたが、見よう見まねで言語定義ファイルを作ってみたところ日本語表示&日本語検索が動くようになりました!

f:id:miyahan:20171107004355p:plain f:id:miyahan:20171107004404p:plain

やればできるもんですね。

日本語検索ができない事に困っている記事をよく見かけましたし、なによりも自分が解決されてほしいと思っていたので勇気を出して日本語対応のプルリクを送ろうと決意しました。

はじめてのOSSコントリビュート

とはいえプルリクなんて送ったこともないですし、そもそも git もろくに使えず、手に負えなくなったらプロジェクトごと作り直すなんてことをやってるくらいです。でも幸いコントリビュートの方法がドキュメントに詳しく書いてあったのでその通り行動しました。

プロジェクトを fork して separate git branch でいじれとな。セパレート??ブランチを切れってことかな? で、プルリクを送る前に yarn でビルドしろとな。ビルドしたファイルが必要? ビルドが通ることをチェックする目的?? 他の人のプルリクみるとビルドファイルは push してないのでたぶん後者だ。

ひーひー言いながらなんとかプルリクを送信。

f:id:miyahan:20171107001251p:plain

おお、なんか自動でコードの品質チェックとビルドが走ってる〜。これが噂に聞く異世界の超科学、継続的インテグレーション!!そして数分後、

f:id:miyahan:20171107001952p:plain

通ったーー!! ヽ(゚∀゚)ノ
手の平にこんなに汗をかいたのは久しぶりです。

そしてさらに翌日…

f:id:miyahan:20171107002302p:plain

キタ━━━( ´∀`)・ω・) ゚Д゚)・∀・) ̄ー ̄)´_ゝ`)━━━!!!!

f:id:miyahan:20171107002547p:plain

泣きそう。

そして同日、僕のコミットを取り込んだバージョンが晴れてリリースされました。お仕事が早い。英単語をいくつか和訳しただけではありますが、こうして人生初めてのOSSコントリビュートは無事成功したのでした。

オチ

プルリクのコメント欄で作者とやりとりしたところ、実は実装は済んでおり以前から設定ひとつで日本語検索を有効化できることが判明。しかし公式ドキュメントの表記が間違っており、自分も含めて誰も使えていない状況だったというオチでした。まあこのやりとりのおかげでドキュメントのミスに気づいて修正できたし、UIが日本語で表示されるというのは紛れもなく機能追加だからよしとしましょう。

Previous になっただけで何がうれしいんだ?と思う方も多いと思いますが、義務教育で習う英単語1つにすら拒絶反応を起こす英語アレルギー持ちの人(というかただの思考停止してる人)がいるため、日本語化はけっこう重要なんです。

Material for MkDocs 日本語対応方法

というわけで最後に日本語表示&日本語検索するための設定方法を紹介します。mkdocs.yml を次のように設定するだけです。

theme:
  name: 'material'
  language: 'ja'
extra:
  search:
    language: 'jp'

じつはここに罠がありまして、日本語の言語コードは ISO 639-1 で ja と決められていますが、lunr-languages はそれを誤って jp で実装してしまっているためいろいろ不都合が生じていました。その対処として上記の通り2種類の言語設定を書く必要があります。

なおこの問題は master ブランチではすでに修正が入っており、次のリリース(lunr-languages 2.0.0?)で ja にリネームされ、jpja へのエイリアスになる予定です。そうなれば、extra/search/language の設定は不要になります。

というわけで、MkDocs + Material は日本語フルサポートとなりました。みなさんぜひ活用なさってください!!

長時間快適に作業できる監視環境をつくる

イケてる監視ツールとかではなく、パソコン本体のおはなしをします。

こんにちは。とある通信会社の委託でネットワークの監視・保守をやっている作業員です(エンジニアじゃないよ)。24時間365日休むこと無く業務を行っていますが、16時間にもなる夜勤をこなすには、快適な作業環境が必要不可欠です。このエントリでは、2015年に行った監視業務用PC・ディスプレイの更改の実体験を通して得られた知見をご紹介したいと思います。

〜忙しい人向けサマリ〜

  • PCは遅くとも5年で買い替えた方がいい
  • でも同時期に買った機械は同時期に壊れるので分散して買い替えたほうがいい
  • 最近のミニPCは普通に使えるのでおすすめ
  • 高効率電源ユニット(80 PLUS)にすると消費電力・発熱が大幅ダウン
  • 液体電解コンデンサは低寿命なので、固体コンデンサを使ったPCを選ぼう
  • システムドライブは絶対にSSDにしよう。マジ別世界
  • 液晶は VA か IPS のものにしよう。TNでピボットするとマジ悲惨
  • ディスプレイは画面サイズだけではなく、ドットピッチも考えて
  • 安い液晶はフリッカー(チラつき)に注意。健康第一
  • 眼の高さより高くなる大きなディスプレイはドライアイの原因になる
  • ディスプレイは角度だけではなく、高さも調整できるものを選ぼう
  • ブルーライトは設定で軽減できる

Update

  • 2017/1/7 : 選定端末のベンチマーク結果を追加、ミニコラム「写真を撮ってディスプレイを調整しよう」を追加、その他誤字修正

おしながき

  • おしながき
  • 監視環境の故障傾向
  • 端末に求められる要件
  • 端末の機種選定:HP EliteDesk 800 G1 DM
    • 特徴1:小さい
    • 特徴2:低消費電力・低発熱
    • [Coffee Break] Tera Term はGPUで早くなる!?
    • [Coffee Break] Energy Star 対応品を選定しよう
      • 80PLUS
      • ENERGY STAR
      • メリットしかないのでぜひ選択を
    • 特徴3:高い堅牢性
    • 特徴4:十分な性能
  • ディスプレイに求められる要件
    • VDT症候群対策
      • ディスプレイの明るさ
      • 文字の大きさ
      • 画面の高さ
      • その他
    • ブルーライト対策
    • [Coffee Break] 写真を撮ってディスプレイを調整しよう
    • ディスプレイの選定条件
    • ディスプレイ配置要件
  • ディスプレイの選定:DELL U2414H / U2415
  • さいごに
続きを読む

Mac mini のディスク不調、SMCリセットで直る

狂うストレージ

先日、自宅サーバーにしている Mac mini (Mid 2011) からアラートメールが届きました。

Computer name     : MacMini
Host name         : MacMini
Computer model    : Macmini5,1
Drives in report  : 1

### DRIVE 1 OF 1 ###

Drive Volume(s)   : MacMiniTimeMachine
Serial No         : 
Model Family      : 
Model             : 7K8:/\6?w`$(It6&D  0 B
Drive Type        : HDD
Device Path       : /dev/disk1

Advanced S.M.A.R.T. status : FAILED
Overall Health Rating      : BAD 10.3%
Overall Performance Rating : LOW 31.7%
Issues found               : 5

=== Problems Summary ===
Failed Indicators (life-span / pre-fail)  : 5 (1 / 4)
Failing Indicators (life-span / pre-fail) : 0 (0 / 0)
Warnings (life-span / pre-fail)           : 0 (0 / 0)
S.M.A.R.T. Errors count                   : 0
I/O Errors Count                          : 0 (0 / 0)

バックアップ用に使っている外付けUSB HDDのアラートのようです。SMARTの中身を見てみると・・・

Total Capacity                       : unknown
Model                                : 7K8:/\6Θw`$(It6&D
Firmware Version                     : -¥
Drive Type                           : HDD

Power Cycles Count                   : 118,784
Current Power Cycle Time             : 48.9 hours

=== DRIVE HEALTH INDICATORS ===
ID   | NAME                                        | TYPE      | UPDATE | RAW VALUE                  | VALUE | THRESHOLD | WORST | STATUS          | LAST MODIFIED      
  12   Power Cycle Count                             Pre-fail    online          0xC24F0001D000            0         223      2     100%  OK          2016/12/23 13:20     
  31   Unknown Attribute                             Pre-fail    online          0x3E34CD6AE649          243         223    219     100%  OK          2016/12/23 13:20     
  34   Unknown Attribute                             Pre-fail    offline         0x7CC9D46933EE           74         221    194     100%  Failed      2016/12/23 13:20     
  41   Unknown Attribute                             Pre-fail    offline         0xC11403A8EDDE          122         113     35    10.3%  OK          2016/12/23 13:20     
  42   Unknown Attribute                             Pre-fail    online          0x33DFA095459E            3         251     97     100%  Failed      2016/12/23 13:20     
  46   Unknown Attribute                             Pre-fail    online          0xAE6F3EB70DE8          187         167    151    60.6%  OK          2016/12/23 13:20     
  62   Unknown Attribute                             Life-span   online          0x2C8DC26D2C05          228         154    186     100%  OK          2016/12/23 13:20     
  65   Unknown Attribute                             Life-span   online          0x24049C09390A          104          46    229    37.7%  OK          2016/12/23 13:20     
  66   Unknown Attribute                             Pre-fail    online          0x800000020000          182          67     76    86.5%  OK          2016/12/23 13:20     
  98   Unknown Attribute                             Pre-fail    offline         0x13901948309           252         145     53     100%  OK          2016/12/23 13:20     
 104   Unknown Attribute                             Life-span   offline         0xD9D594030F1A          159         120    179    48.8%  OK          2016/12/23 13:20     
 111   Unknown Attribute                             Life-span   online          0xFD248789F941          189          50    250    92.7%  OK          2016/12/23 13:20     
 132   Unknown Attribute                             Pre-fail    offline         0x66610DB2A160          213         253    248     100%  Failed      2016/12/23 13:20     
 138   Unknown Attribute                             Life-span   online          0x27559167466B          182         138     23    71.0%  OK          2016/12/23 13:20     
 139   Unknown Attribute                             Life-span   offline         0x623761F989EC          167         132    200    51.5%  OK          2016/12/23 13:20     
 170   Unknown Attribute                             Pre-fail    online          0xE9CE8CC4C0D6          163          23     32    79.1%  OK          2016/12/23 13:20     
 172   Unknown Attribute                             Pre-fail    offline         0x4D6030F412F2          189         149    140    78.4%  OK          2016/12/23 13:20     
 176   Unknown HDD Attribute                         Life-span   offline         0x436EBAFFCFDE            0           0      0     100%  OK          2016/12/23 13:20     
 185   Unknown Attribute                             Life-span   online          0x45896BA6A3C5          222         130    213     100%  OK          2016/12/23 13:20     
 187   Reported Uncorrectable Errors                 Pre-fail    offline         0xF158EC29A791          240         157    250     100%  OK          2016/12/23 13:20     
 190   Airflow Temperature Celsius                   Pre-fail    offline              143                181          53     84    87.1%  OK          2016/12/23 13:20     
 201   Soft Read Error Rate                          Life-span   offline         0x7116CBBB6E5A           88          44     90    78.6%  OK          2016/12/23 13:20     
 220   Disk Shift                                    Pre-fail    online          0x7A20219FCD7F          127          43     27    53.5%  OK          2016/12/23 13:20     
 230   Head Amplitude                                Life-span   offline         0xB757BDEBC509          113         228    117     100%  Failed      2016/12/23 13:20     
 234   Unknown Attribute                             Pre-fail    online          0xC4F694E85DB2          172         159    214    31.7%  OK          2016/12/23 13:20     
 236   Unknown Attribute                             Pre-fail    online          0x79712CDEBBA2          240         155     99     100%  OK          2016/12/23 13:20     
 250   Read Error Retry Rate                         Pre-fail    online          0x66FAA5AD308A          204         215    129     100%  Failed      2016/12/23 13:20     
 254   Free Fall Sensor                              Pre-fail    offline         0x306CDA79A73F          229         113     66     100%  OK          2016/12/23 13:20 

機種名やファームウェアバージョン情報は文字化けしているし、統計情報の attribute id も value もハチャメチャです。完全に逝っちゃってますね。しかし、このHDDを別のMacに接続したところ、正常にSMARTを読み込めたのでHDDが壊れているわけではなさそうです。

とりあえずマシンを再起動してみたのですが、なんとOSのシャットダウンに10分もかかりました。状況を確認していたところ、普段は10分程度で終わるはずのバックアップがある日を境に10時間以上かかるようになっていたことも判明。ディスクのパフォーマンスが低下している・・・?

f:id:miyahan:20161223163409p:plain

システムディスク(Crucial MX200 SSD) に対しベンチマークを取ってみたところ、ななんとスループットが数百KB/s に低下しています!

内蔵SSDと外付HDDが同時におかしくなるということは、OS か Mac mini 本体のハードウェア障害が疑われます。ローレイヤーな話なので SMC (System Management Controller) も怪しいところ。

SMCリセット

support.apple.com

というわけでまずはSMCリセットから。Mac mini 本体の電源ケーブルを抜き、数十秒放置すればリセットされます。

f:id:miyahan:20161223163952p:plain

おお、システムディスクのパフォーマンス低下直ったー!

Total Capacity                       : 1.0 TB (1,000,204,886,016 Bytes)
Model Family                         : Toshiba 2.5" HDD MQ01ABD...
Model                                : TOSHIBA MQ01ABD100
Form Factor                          : 2.5 inches
Firmware Version                     : AX001U
Drive Type                           : HDD 5400 rpm

Power On Time                        : 26,509 hours (36 months 24 days 13 hours)
Power Cycles Count                   : 44
Current Power Cycle Time             : 115.4 hours

=== DRIVE HEALTH INDICATORS ===
ID   | NAME                                        | TYPE      | UPDATE | RAW VALUE                  | VALUE | THRESHOLD | WORST | STATUS          | LAST MODIFIED      
   1   Raw Read Error Rate                           Pre-fail    online               0x0                100          50    100     100%  OK          -                    
   2   Throughput Performance                        Pre-fail    offline               0                 100          50    100     100%  OK          -                    
   3   Spin Up Time                                  Pre-fail    online              2,607               100           1    100     100%  OK          2016/12/23 16:41     
   4   Start Stop Count                              Life-span   online              75,920              100           0    100     100%  OK          2016/12/23 16:41     
   5   Reallocated Sector Count                      Pre-fail    online                0                 100          50    100     100%  OK          -                    
   7   Seek Error Rate                               Pre-fail    online               0x0                100          50    100     100%  OK          -                    
   8   Seek Time Performance                         Pre-fail    offline               0                 100          50    100     100%  OK          -                    
   9   Power On Hours                                Life-span   online              26,509               34           0     34    34.0%  OK          2016/12/23 16:41     
  10   Spin Retry Count                              Pre-fail    online                0                 253          30    100     100%  OK          -                    
  12   Power Cycle Count                             Life-span   online                44                100           0    100     100%  OK          2016/12/23 16:41     
 191   G-Sense Error Rate                            Life-span   online                0                 100           0    100     100%  OK          -                    
 192   Power-Off Retract Count                       Life-span   online                5                 100           0    100     100%  OK          2016/12/23 16:41     
 193   Load Cycle Count                              Life-span   online             277,353               73           0     73    73.0%  OK          2016/12/23 16:41     
 194   Temperature (Celsius)                         Life-span   online                30                100           0    100     100%  OK          2016/12/23 16:41     
 196   Reallocated Event Count                       Life-span   online                0                 100           0    100     100%  OK          -                    
 197   Current Pending Sectors Count                 Life-span   online                0                 100           0    100     100%  OK          -                    
 198   Offline Uncorrectable Sector Count            Life-span   offline               0                 100           0    100     100%  OK          -                    
 199   UDMA CRC Error Count                          Life-span   online                0                 200           0    200     100%  OK          -                    
 220   Disk Shift                                    Life-span   online                0                 100           0    100     100%  OK          -                    
 222   Loaded Hours                                  Life-span   online              3,375                92           0     92    92.0%  OK          2016/12/23 16:41     
 223   Load Retry Count                              Life-span   online                0                 100           0    100     100%  OK          -                    
 224   Load Friction                                 Life-span   online                0                 100           0    100     100%  OK          -                    
 226   Load-in Time                                  Life-span   online               176                100           0    100     100%  OK          2016/12/23 16:41     
 240   Head Flying Hours                             Pre-fail    offline               0                 100           1    100     100%  OK          -                    

外付けHDDの SMART も直ったー!

そんなわけで SMC て結構多種多様なトラブルに関わってくるんだなーと思い知った案件でした。めでたしめでたし。

Grafana & Graphite でRADIUSのログを可視化してみた 開発編

このエントリは「Grafana & Graphite でRADIUSのログを可視化してみた 概要編」の続きとなります。最初のエントリをご覧になってからお読みください。

miyalog.hatenablog.jp

さてこちらが本編。RADIUS認証ログ可視化ツール Radtail の開発にあたり、苦労した点、工夫した点を語らせて頂きます。

  • tail -f でログあつめ
  • マルチプロセス導入への道のり
    • Graphite データ上書き問題
    • そしてマルチプロセスへ
  • defaultdict で簡単集計
  • パフォーマンスチューニング
    • ベンチマークで現状把握
    • プロファイリングで原因特定
    • datetime.strptime 対策
    • multiprocessing.Queue 対策
    • チューニングの効果
  • Graphite 書き込み間に合わない問題
  • おわりに
続きを読む