私はサポートエンジニアになりたい

元教師・現開発エンジニアの挑戦

SadServers#1のトラブルシューティング考え方

SadServers#1のトラブルシューティングをやってみます。
https://sadservers.com/newserver/saint-john

トラブルシューティング概要

/var/log/bad.logに継続的に書き込むプログラムが動いており、このプログラムを停止させてほしい。

やること

  • /var/log/bad.logに継続的に書き込むプロセスを特定する
  • 特定したプロセスを停止する

/var/log/bad.logに継続的に書き込むプロセスを特定しよう

psコマンド

現在実行しているプロセス一覧を表示するコマンド
オプション付きで[ps auxf]あたりで実行する
a:端末操作のプロセス表示
u:CPUやメモリの使用率を表示
x:端末操作以外のプロセス表示
f:プロセスを階層で表示
※ハイフンをつけるとオプションの意味が変わる
「psコマンドで表示されたプロセスのうち、どれかが停止対象である。」ということは分かるが、どれが対象なのかまでは分からない。

topコマンド

CPUを多く使用している順にプロセスを表示するコマンド
※今回は使わない

lsof

プロセスが開いているファイルを表示するコマンド
今回、停止したいプロセスが/var/log/bad.logを開いて書き込んでいます。
なので、[lsof /var/log/bad.log]で停止したいプロセスを調べられます。
表示されたPIDを使ってプロセスを停止させます。

特定したプロセスを停止しよう

kill

プロセスを停止するコマンドです。
[kill -9 [停止したいPID]]でプロセスを停止できます。

sadserversというLinuxサーバーでトラブルシューティングできるサービスがよさそう

Linuxサーバーのトラブルシューティングができるサービスを見つけました!
sadservers.com

シナリオをもとにトラブルシューティングができるので勉強によさそう。
2022/10/30時点で13のシナリオがあります。

ネットワークのトラブルシューティング事例

「デスクトップアプリケーションを使っていたら急にアプリが落ちてしまった。」
とユーザーから電話がありました。

電話によるヒアリングとPCの遠隔操作で調査。

ヒアリングで得た情報

  • 事業所の全PCで動作が遅い
  • その事業所でアプリを起動できる人もいる
  • 別の事業者では上記のような問題は起きていない
  • 今朝は通常通りだったが、ある瞬間から事務所すべてのPCで動作が遅くなった

PCの遠隔操作で得た情報

  • アプリを起動すると「SQLServerに接続できない」とエラーが出る
  • ブラウザは見れるが遅い
  • タスクマネージャーを見る限り、PCに負荷はかかっていない

その他

  • ネットニュースを見たが国内で障害が発生した記事はない
  • 社内でSQLServerを触っている人はいない

たてた仮説とやったこと

障害が起きている事業所のネットワークに問題があるか?

pingコマンドでSQLServerに接続できるか確認

接続はできたが応答時間が遅い

tracertコマンドで調査

事務所のルーターから外に出るときの応答時間が遅い

ルーターに問題がありそう。

最終的な処置

事務所のルーターを再起動。
これにより普段通りの速度で動作するようになった。

今回得た知見

ルーターが急に不調になると、通信速度が急に遅くなるらしい。
なのでルーターを再起動したら速度が回復することもある。(たしかに自宅のルーターでも同じような現象があったような…)

dream.jp

Google Colaboratoryでエラーを出さずにpandas-profilingを使う

Google Colaboratoryでpandas-profilingを使うためのサンプルコードです。
Google Drive内のcsvファイルに対してpandas-profilingを実行したときを想定しています。

サンプルコード

Google Colaboratory上にpandas-profilingの実行結果を出力する

!pip install markupsafe==2.0.1

#実行後に[y]をクリックし、処理終了後に[RESTART RUNTIME]と出るのでクリックする
!pip uninstall pandas_profiling
!pip install git+https://github.com/pandas-profiling/pandas-profiling.git

import pandas as pd
import pandas_profiling as pdp

#GoogleDrive マウント コラボ側がこう使ってくれと用意しているもの
from google.colab import drive
drive.mount('/content/drive')

#ここではGoogleDriveのマイドライブにtrain.csvとある場合を想定しています。必要に応じてパスを変更してください
train = pd.read_csv('/content/drive/MyDrive/train.csv')
pdp.ProfileReport(train)

Google Colaboratory上でpandas-profilingを実行し、HTML形式で出力する

!pip install markupsafe==2.0.1

#実行後に[y]をクリックし、処理終了後に[RESTART RUNTIME]と出るのでクリックする
!pip uninstall pandas_profiling
!pip install git+https://github.com/pandas-profiling/pandas-profiling.git

import pandas as pd
import pandas_profiling as pdp

#GoogleDrive マウント コラボ側がこう使ってくれと用意しているもの
from google.colab import drive
drive.mount('/content/drive')

#ここではGoogleDriveのマイドライブにtrain.csvとある場合を想定しています。必要に応じてパスを変更してください
train = pd.read_csv('/content/drive/MyDrive/train.csv')
profile = pdp.ProfileReport(train)

#Google Driveのマイドライブに「profile.html」という名前で出力します。Google Driveからダウンロードした「profile.html」をダブルクリックすると、pandas-profilingを使った結果がブラウザで確認できます。
profile.to_file("profile.html")

参考

clione.online
import pandas_profiling as pdpで以下のエラーが出たときの対処法

ImportError: cannot import name ‘soft_unicode’ from ‘markupsafe’


yurukaiha.hatenablog.com
pdp.ProfileReport(train)に以下のエラーが出たときの対処法

TypeError: concat() got an unexpected keyword argument 'join_axes'

Google colabにインストールされているpandas-profilingのバージョンが古いことが原因で起こるエラーです。
なので、pandas-profilingのアップグレードやGithubから最新バージョンをインストールが必要。

ポケモンGOにログインできずお父さんがお冠!そこでトラブルシューティングしてみた

2022/8/27にポケモンGOのイベントがあったのですが、ログインできない問題がありました。

これに関して、ポケモンGOをやりこんでいるお父さんが大変プンスカ怒っていたのでした。

お父さんとポケモンGOの関係

そもそもお父さんはどの程度やりこんでいるかというと、ざっくり以下の通りです。

  • 課金は一切しない
  • ポケモンGOは歩いてやる
  • 自宅プレイも含めて半日くらいは毎日遊んでる
  • 雨の日も雪の日も台風の日もポケモンGOをしちゃう
  • 夏でも長時間ポケモンGOができるようにファン付のベストを購入した

お金は一銭も払わないけど、それ以外の部分で全力で遊ぶタイプ

なのでイベント当日を何日も前から楽しみにしてたのに、ログインできない。

ポケモンGOどうなっとんねん!Nianticどうなっとんねん!ウガー、ウガー(以下、日ごろたまっていた鬱憤が爆発)

トラブルシューティングをしてみた

イベント終了後もログインできていないらしく、ずっとウガウガ言い続けてて誰も得しないのでトラブルシューティングしてみました。

まず現状の把握

私が把握しているのは3つ。

  • お父さんは昨日の昼からログインできない
  • イベント翌日の朝もログインできない
  • 公式からは「ログインのトラブルを解消した」と報告してある

これに対して、次のことを知りたくなりました。

  • お父さん以外に今もログインできない方はいるか?
  • ログインするために何をしてきたか?
  • ログインする過程の中でどこで失敗しているか?

やった情報収集

お父さん以外に今もログインできない方はいるか?

Twitterのキーワード検索で「ポケモンgo ログイン」で検索し、最新にして内容を見て見ました。

私が見た限りでは「ポケモンgoでログインできない症状が続いてひどかった!」みたいなイベントを振り返るものばかりで、「今もログインできない!なぜ?」みたいなものはありませんでした。

なので、たぶんNiantic側のシステムトラブルは解消済みで今ログインできないのはお父さんのスマホ側の問題かもな?と思いました。

ログインするために何をしてきたか?

お父さんにヒアリングしてみました。

ポケモンGO ログインできない」あたりで検索して出てきたものはある程度ためしたようです。スマホの再起動やポケモンGOのアプリ再インストールしてもだめだと言っていました。

再起動・再インストール以外で試していないことを探してやってみる必要がありそう。それともうっかり不正ログインでもしちゃったか?とか思いました。

ログインする過程の中でどこで失敗しているか

お父さんのスマホを借りてログインできないか試してみました。

いつもGoogleアカウントでログインしていたようなので、使っていたグーグルアカウントを選択して待機。

画面にロード中のぐるぐるが回っており、しばらくすると「ログインできません」の文字が表示されました。

再起動・再インストールしたのに、グーグルアカウントのところでログインできないとなると、ポケモンGOとグーグルアカウントの紐づけがうまくいっていないのか?と思いました。

お父さんに試してもらったこと

  1. スマホと同期しているグーグルアカウントを1回削除する
  2. 再度スマホとグーグルアカウントを同期する
  3. 再起動する(たぶん不要)
  4. ポケモンGOでログインを試す

これをやってみたところ、無事にログインできました。

こうして1日ぶりにニコニコした表情を取り戻したお父さん。

私に向かって「いいサポーターになれるなあ!」と言って、スマホを持って出動してしまいました。

 

 

その言葉が励みになります!

クラウドとは何か

クラウドとは

ユーザーがネットワークを使い、サーバが提供するサービスを利用する形態のこと

ユーザーはサーバやソフトを用意しなくていい。

クラウドサービスを選ぶメリット

クラウドサービスを使うことで、ハードウェア導入に伴う初期投資やリソースの調達、メンテナンスをしなくてよい。

クラウドサービスの種類

SaaS(サース)

インターネット経由することでPCにインストールしなくても利用できるソフトウェアを提供する。

例:Gmail, Google Drive

PaaS(パース)

インターネット経由することでソフトウェアとハードウェアの間で機能するプラットフォームを提供する。

例:アプリケーションサーバ, データベース, 開発ツール

IaaS(イァース)

インターネット経由でインフラ機能を提供する。

例:サーバ, ネットワーク, セキュリティシステム, ストレージ

クラウドのデプロイモデル

クラウド

アプリケーションがクラウド上にデプロイされており、アプリケーション全体がクラウド上で実行される。

ハイブリッド

クラウド上のリソースとオンプレミスのリソースとの間でインフラとアプリケーションを接続する方法。

クラウドのリソースを社内システムに接続することで組織のインフラをクラウドに拡張して大きくする。

オンプレミス

リソースをオンプレミスでデプロイすることや、仮想化・リソース管理ツールを使用すること。

参考

クラウドとは?意味やクラウドサービスのメリットを初心者にもわかりやすく解説! – ルートテック|ビジネスライフとキャリアを応援する情報メディア

クラウド (クラウドサービス) とは?|AWS

データ保存の仕組み

ファイル管理はOSの機能。

以下の手続きを行ってファイルを扱うOSが多い。

  1. ファイルをオープンする
  2. 読み書きをする
  3. ファイルをクローズする

ファイルをオープンをもっと詳しく

  1. プログラムがOSに対してファイルのオープンを依頼
  2. OSは指定されたファイルをプログラムが操作できるように設定
  3. そのファイルに関する情報をプログラムに渡す
  4. プログラムはその情報をもとにファイルの状態を把握

C言語でファイルを開く

C言語ではこれらがFILE型の構造体にまとめられている。

Cでは、オープンしたファイルをFILE型の構造体(FILE構造体)へのポインタを介してアクセスする。

  1. fopen関数でファイルのオープンに成功する
  2. オープンしたファイルに関する情報を記録したFILE構造体が準備され、fopen関数からそれへのポインタが返される
  3. オープン後はファイルポインタを介してファイルに対する読み書きをなどの操作を行う

ファイルを開くプログラム

#include <stdio.h>

int main(void) {

    // ファイルを開く
    FILE *fpointer = fopen("data.txt","r");

    return 0;
}

fopen関数でファイルをオープンするとメモリ上にFILE型の構造体が生成され、fopen関数はそれへのポインタを返す(ファイルポインタ)。

FILE型構造体のポインタ

「FILE *fp;」はFILE型のポインタであり、FILE構造体の実態はfopen関数が生成する。

オープンに成功した後は、このファイルポインタを引数としてファイル操作関数を呼び出し、ファイルを操作します。

構造体

変数の型の種類のひとつで、中に入れられる物の種類や数を自分で決められるやつ

https://wa3.i-3-i.info/word13243.html

ポインタ変数
  • 変数である
  • 値として(他の変数の)メモリ上のアドレスを取る
  • ポインタ変数を経由して、他の変数の中身を見たり変更したりできる

https://wa3.i-3-i.info/word12814.html

ファイルを閉じてメモリを開放する

ファイルをクローズする処理をしないと使われないメモリ領域が残ったままになるので注意。

参考

「C言語」の「ファイル操作の仕組み」とプログラムの書き方を学ぼう! | ~プログラミングライフスタイル~

もう一度基礎からC言語 第37回 ファイルの扱い(2)~ファイル操作の実例 FILE構造体の中身

もう一度基礎からC言語 第36回 ファイルの扱い(1)~オープン/クローズと読み書き オープンとクローズ

 

データ保存の仕組み|データ復旧

コンピュータで、「ファイルを開く」という概念がよく理解できま… - 人力検索はてな

第八回-02 メインメモリとは何か

ハードディスクが物理的にデータを記録している仕組みがわかるムービー「How do hard drives work?」 - GIGAZINE

どのデータをどこに載せるか、OSのメモリー管理機能の仕組み | 日経クロステック(xTECH)