Upgrade to Pro — share decks privately, control downloads, hide ads and more …

コード化されていない稼働中のサーバを移設_再構築する技術

ryuichi1208
January 26, 2025
4.5k

 コード化されていない稼働中のサーバを移設_再構築する技術

ryuichi1208

January 26, 2025
Tweet

Transcript

  1. • 名前: 渡部⿓⼀ • 所属: 株式会社IVRy SRE • SRE NEXT

    Co-Chair • 仙台在住 • 障害対応、EOL対応 ⾃⼰紹介
  2. SRE NEXT • SRE NEXT 2025 ◦ 7⽉11-12⽇ TOC有明 ◦

    テーマ「Talk NEXT」 ▪ カンファレンス内における会話(Talk)を通して各々次のアクション (NEXT)のためのヒントをより多く得られるような場の提供 ▪ サブイベントのRoad to SRE NEXTは再来週からやります!@京都 • コミュニティスポンサーとして枠をいただきました🙏
  3. 株式会社 IVRy • 対話型⾳声AI SaaS ◦ 最⾼の技術をすべての企業に届ける • Architectureプロジェクト SREチーム

    ◦ 全⼈類が電話をかけてきても耐えられるサービスを⽬指す ◦ IaCしたりcoredumpみたりAIの指⽰で⼿を動かしています
  4. • EC2を⽴ててそこにアプリを置いてサービスを起動 • とりあえずは動くし問題はなさそう • サーバがなんらかの原因で壊れると再構築が必要 • シンプルな構成ならすぐに直せそうだが複雑な構成だと復旧させるまで に時間がかかる ◦

    どうやって構築したんだっけ? ◦ 構築してもデプロイする⽅法が不明だ... ◦ 再度サービスを提供可能にするまでめちゃめちゃ時間がかかる 全てが⼿動で構築されたインフラ
  5. • ⼀貫性と再現性の向上 ◦ ⼿作業で設定すると、ミスや設定のばらつきが発⽣しやすい • 変更管理と可視性の向上 ◦ ⼿動変更では誰がいつ何を変更したか分かりにくい • ⾃動化による効率化とコスト削減

    ◦ ⼿動でのインフラ構築や設定は時間がかかり、⼈的リソースを消費 • リスク軽減と迅速な復旧 ◦ ⼿動での設定ミスや障害発⽣時の対応が遅れる IaC(Infrastructure as Code)
  6. • インフラエンジニアとしてとある部署に配属 • サービスは動いているしトラフィックもすごい量捌いている • サーバ台数も300台近い • 脆弱性の観点からOSの移⾏が必須となった • 移⾏するに当たって構成把握をしようとコードを探した

    • が、コード探すとどこにもなかった • 昔いた別部署の⼈に聞いてみると?コード?ないよと⾔われた • アプリケーションもGit管理されていなくてサーバにあるだけ 配属初⽇
  7. • ホスト名 ◦ 00xみたいな番号がついていれば冗⻑化されていそう ◦ 前段で振り分けている機構があると予想 • NIC ◦ IPアドレスからサブネットがわかる

    ◦ 複数NICある場合はそこからネットワーク構成が⾒れるケースも • OS ◦ /etc/os-releaseとかに書いてある 何はともあれsshして⾒れる情報を⾒ていく
  8. • 動いているプロセスをみる ◦ プロセス名から⼤体の予想がつく ◦ 空いてるポート番号なども調べておく • CPU、メモリ、ストレージをみる ◦ ⼤量にCPUが積まれている場合はCPUバウンドな処理がある

    ◦ メモリがあればDBが動いている可能性 ◦ ストレージの使⽤量をみるのも⽤途の予想が⽴てれる 何はともあれsshして⾒れる情報を⾒ていく
  9. • ここまでで以下の情報がわかる ◦ スペック ◦ ホスト名、OS名 ◦ ネットワーク情報 ◦ 動いているプロセス

    ◦ ディレクトリ構成 ◦ パッケージ情報 まとめる(ここまでを10分くらいでやる)
  10. • 使うコマンド例 ◦ CPU: lscpu ◦ Memory: free -h ◦

    Disk: df -h、lsblk ◦ PCI: lspci ◦ Network: ip addr show、ip route show、netstat -tuln ◦ Package: RPM、APT、apk まとめる(ここまでを10分くらいでやる)
  11. • コンパイル⾔語の場合 ◦ ソースがない場合はOSの移設は厳しい ◦ 同じOSでライブラリ類を⼊れれば動くかもしれないのでそれに期待 ◦ ビルドオプションをバイナリに含んでいるケースがあるので-hとかして 調べてみる ◦

    ソースがある場合でも新しいOSでビルドできるとは限らない ◦ glibc のバージョンアップに伴い getaddrinfo(3) の動作仕様が変わった ▪ ソースの⽅を書き換えていく必要がある アプリケーションを読んでいく
  12. • procfs は擬似ファイルシステム • 通常 /proc にマウントされ、実⾏中のシステムに関する情報を含んでいる ◦ CPU、物理メモリ、仮想メモリ、カーネルコマンドライン •

    加えてプロセスごとの情報も確認することができる ◦ /proc/[PID] ディレクトリで取得できる ◦ プロセス名、状態、スレッド数、コマンドライン、pwd、環境変数、fd • psコマンドや、topコマンドのこのファイルシステムを使って情報を表⽰し ている procfs
  13. • ここまでで以下の情報がわかる ◦ 設定ファイルの中⾝ ◦ アプリケーションの実装 ◦ どのようなコマンドで実⾏しているか ◦ なんのライブラリに依存している

    ◦ アプリケーションがどのプロセスと通信しているか ◦ 使っているプロトコルやそのバージョン まとめる
  14. • Linuxシステムプログラミング / オライリージャパン • Linuxプログラミングインタフェース / オライリージャパン • Infrastructure

    as Code / オライリージャパン • ふつうのLinuxプログラミング / SBクリエイティブ • [試して理解]Linuxのしくみ / 技術評論社 参考書籍