Slide 1

Slide 1 text

Mackerel.ioを使ってみたメモ @musashino_205

Slide 2

Slide 2 text

 HN: 武蔵野 / 大破 ◦ musashino_205 ◦ musashino205 @mstdn.maud.io ◦ 詳細はWebで  https://大破.net/  就活に向けて色々準備中 ◦ 生活習慣とか…

Slide 3

Slide 3 text

 法律面での注意 ◦ 市販のルータにサードパーティー製ファームウェアをインス トールして電波を出す場合、  技適表示が無効となる “改造” に該当する場合がある ◦ 原則として搭載されている無線機能は使用せず、有線機とし て使用する  法律を守って楽しいHackを!

Slide 4

Slide 4 text

BusyBox v1.31.0 () built-in shell (ash) _______ ________ __ | |.-----.-----.-----.| | | |.----.| |_ | - || _ | -__| || | | || _|| _| |_______|| __|_____|__|__||________||__| |____| |__| W I R E L E S S F R E E D O M ----------------------------------------------------- OpenWrt SNAPSHOT, r0+11395-49a1216356 ----------------------------------------------------- root@OpenWrt:~#

Slide 5

Slide 5 text

 エンドユーザー視点: ◦ (ルータを中心とした) 組込デバイス向けLinuxディストリ ビューション  お役御免になったルータを再活用  中古ルータで安価にネットワーク構築  etc...

Slide 6

Slide 6 text

 開発者視点: ◦ 組込デバイス向け開発環境  Cross-Compile用toolchain (gcc, musl, ...) のダウンロード、 コンパイル、構築  Kernelのコンパイル  Rootfs (squashfs, ext4, その他)作成  デバイス毎に適したファームウェア生成  etc...  デバイスを選択後、 “make” 一発で全部やってくれる  SoCベンダ等のSDKでOpenWrtを利用したものがチラホラ

Slide 7

Slide 7 text

 原則としてLTSを使用 ◦ 現在使用されているのは3種(2019/11/21現在)  include/kernel-version.mk  4.9.202  4.14.154  4.19.84 ◦ 4.19の次は5.4になるかも  [OpenWrt-Devel] v5.4 as next kernel http://lists.infradead.org/pipermail/openwrt-devel/2019-October/019610.html

Slide 8

Slide 8 text

 https://openwrt.org/releases/  RCリリース ◦ OpenWrt 19.07シリーズ: 19.07.0-rc1  Kernel, toolchain, 基幹パッケージなど全体的なアップデート  新target: ath79  ar71xxを置き換えるtarget (Atheros/Qualcomm Atheros SoC)  遅れに遅れたがようやくRCが出た  最新リリース ◦ OpenWrt 18.06シリーズ: 18.06.5  18.06.4までの脆弱性修正が中心(LuCI, musl, hostapdその他)

Slide 9

Slide 9 text

 最近サポートを投げ込んだ機種 (OSC 2019 Tokyo/Spring以降) ◦ I-O DATA  WN-AC733GR3  WN-AC1600DGR3 (DGR2のサポートと統合)  WNPR2600G ◦ NEC  WG1200CR  その他既存サポートの修正など

Slide 10

Slide 10 text

 サポート作業中 ◦ BUFFALO  WSR-2533DHPL  WSR-2533DHP2 ◦ ELECOM  WRC-733GHBK  WRC-1167GHBK2-I  WRC-1167FS ◦ I-O DATA  WN-AX1167GR2 (PRオープン済)  WN-DX1167R (PRオープン済)

Slide 11

Slide 11 text

 OpenWrt用ビルド機更改 ◦ Core i5 3570K => Ryzen 5 3400G

Slide 12

Slide 12 text

 ジャンク L2インテリジェントスイッチ入手 (16+1port) ◦ Abaniact AML2-17GP  ¥1,500 + 税  パスワード掛かったまま  Resetボタンはハードウェアリセット(電源的なリセット)のみ  筐体開けてシリアルコンソール (UART) から全て初期化できた  https://memo205.wordpress.com/2019/10/17/aml2-17gp/

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

 監視ソリューション  説明は省略、公式サイトを参照  https://mackerel.io

Slide 15

Slide 15 text

 公式エージェント: mackerel-agent ◦ Go言語  公式で配布されているバイナリは以下の種類のみ https://github.com/mackerelio/mackerel-agent/releases アーキテクチャ 備考 386 amd64 arm • WZR-900DHP (BCM47801) でも動作 arm64 mips • big-endian • Softfloatサポート無し (FPU非搭載環境で動作しない)

Slide 16

Slide 16 text

 公式エージェントはOpenWrtのパッケージ化済 ◦ https://github.com/taiha/taiha-pkgs  mackerel ◦ ビルドターゲット(SoC, デバイス)のに合わせ、自動的にアー キテクチャやSoftfloat対応を選択  ルータ向けMIPS SoCではFPUを搭載しない場合がほとんど  OpenWrtではデフォルトでKernelのFPUエミュレータが無効  有効化は自前でのビルドが必要で手間  GoのSoftfloatにより代替

Slide 17

Slide 17 text

 公式エージェントはバイナリサイズが大きい  一般的なルータのFlash容量には厳しい場合も ◦ ルータのFlash容量(現行世代周辺) ◦ 注:  もちろんmackerel-agentは元々ルータでの動作は想定外 ローエンド~ミドルレンジ ハイエンド~ 8 MB, 16 MBなど 32 MB, 128MB, それ以上 公式MIPSバイナリ 8.34 MB 不要なコード削除, デバッグ情報strip, upx圧縮 (-7) 2.22 MB (上に加えて -7の代わりに)--brute (最大圧縮) 1.54 MB

Slide 18

Slide 18 text

機種 Flash容量 • ETG3-R • WG1200CR • WRC-1167GHBK2-I 8 MB • WN-AX1167GR • WRC-1167GHBK2-S • WSR-1166DHPx 16 MB • VR500 • WG2600HP • WZR-HP-G450H 32 MB • WN-DX1167R • WZR-900DHP(2) 128 MB • WXR-2533DHP 4 MB(NOR) + 256 MB(NAND) (実使用は128MB)

Slide 19

Slide 19 text

 シェルスクリプトでminimalなエージェントを作ってみよう ◦ Mackerel API ドキュメント (v0) - Mackerelヘルプ https://mackerel.io/ja/api-docs/ ◦ メトリック仕様 - Mackerelヘルプ https://mackerel.io/ja/docs/entry/spec/metrics ◦ 一定間隔(60秒)毎にシステム情報を収集、JSON化してcurlに よってポスト ◦ システム情報の収集とJSON化はOpenWrtのシステムを利用  ubus (OpenWrt micro bus architecture)  jshn (JSON Shell Notation)

Slide 20

Slide 20 text

 作った  が  重い ◦ システム情報取得でコマンド大量に叩いたり、取得したデー タの整形、CPU使用率や転送バイト差分等の計算で負荷が かかりやすい ◦ シェルベースの関係で仕方なさそう

Slide 21

Slide 21 text

 そこで ◦ シェルスクリプトとCのプログラムで役割分担  OpenWrtのライブラリ ◦ libubus(システム情報) ◦ libubox(データ処理ツール類) ◦ libblobmsg-json(JSON生成等) シェルスクリプト C • ネットワーク周り (Mackerel.ioへの投稿) • 等間隔での投稿 • システム情報取得 • データ算出 • 投稿用JSON生成

Slide 22

Slide 22 text

 C言語の学習も兼ねて作成 ◦ https://github.com/taiha/taiha-pkgs  ma-sh  とにかく書いたので色々ごちゃごちゃ ◦ ホストのシステム情報取得からJSONの生成まで低負荷でで きるように ◦ 実際の動作検証と改善はこれから

Slide 23

Slide 23 text

 今後 ◦ プラグインのサポート ◦ そのうち全てCに押し込めるようにしたい  公式mackerel-agent (Go) の移植性は何だったのか ◦ 安定性や信頼性の向上 ◦ 他の複数ルータのシステム情報の収集/投稿を1台が行える ように?  SoCのパワーがある機種で他のルータのシステム情報も収集し JSON生成して投稿

Slide 24

Slide 24 text

 ご清聴ありがとうございました。  306教室で展示中です ◦ openwrt.jp(仮)  この後オマケ

Slide 25

Slide 25 text

 OpenWrt公式サイト  https://openwrt.org/  OpenWrtリポジトリ  https://git.openwrt.org/?p=openwrt/openwrt.git  ミラー: https://github.com/openwrt/openwrt  TechInfoDepot Wiki ◦ ルータ, SoC情報等(旧WikiDevi代替)  http://en.techinfodepot.shoutwiki.com/  srchack.org (@srchack氏)  http://www.srchack.org/  DD-WRT OpenWrt 適材適所で使いたい人向け @ ウィキ ◦ 有志による情報まとめ  https://www57.atwiki.jp/ddwrt_openwrt/

Slide 26

Slide 26 text

 OpenWrtビルド鯖 ◦ 大破.netのJenkinsにて使用  https://taiha.net/jenkins ◦ Core i5 3570Kの旧環境ではHDDで障害多発、耐えられず 更改 ◦ 個人的に初のAMD環境  予算の関係が大きい 詳細: ◦ OpenWrt用ビルドサーバ更改 - 鉄PCブログ

Slide 27

Slide 27 text

 AML2-17GPあれこれ ◦ ネット上にあまり情報が無い(評価とかも皆無) ◦ “CONSOLE” ポートはWANポート兼用  あくまで設定WebUIアクセス用の普通のethernetポート  Ciscoケーブル互換ではない(間違えた) ◦ VLAN切ったりしながら使用中