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

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

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

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

電話によるヒアリングと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)

シングルサインオンとは何か

シングルサインオン(SSO)とは

1つのIDとパスワードで複数のサービスにログインできる仕組み

シングルサインオンの仕組み(4種)

代行認証方式

クライアントの代わりに専用エージェントが代行して各システムのID・パスワードを入力する方式

詳細な仕組み
  1. 専用エージェントがユーザー認証を行う
  2. アカウント情報DBから各システムのID・パスワードを取得
  3. ID・パスワード等をメモリ上に保持
  4. 各システムのログイン画面を検知し、ID・パスワードを自動入力
導入に必要なもの
  • クライアントPCに専用のエージェントを導入
  • アカウント情報DBに接続できる環境
特徴
  • 導入するシステムの制限が少ない
  • クライアントサーバシステムにも導入可能

リバースプロキシ方式

リバースプロキシという中継サーバを介して認証を行う

詳細な仕組み
  1. リバースプロキシサーバに対してWeb認証を実施
  2. リバースプロキシサーバから認証済みCookieが発行される
  3. ログインしたいサービスに対してリバースプロキシサーバ経由でアクセス
導入に必要なもの
  • リバースプロキシサーバ(とここを経由する設計)
特徴
  • 既存システムへの影響なく事前検証ができる
  • 導入から開始までの工数を短縮しやすい

エージェント方式

 

詳細な仕組み
  1. エージェントを導入したWebシステムにWeb認証を実施。
  2. WebシステムはSSOサーバに対して認証チェックを実施
  3. Webシステムから認証済みCookieが発行される
  4. Cookieを保持して各Webシステムにアクセスする
  5. SSOサーバがアクセス権限をチェック
導入に必要なもの
  • SSOサーバ
  • 導入するエージェントに対応しているSSOシステム
特徴
  • リバースプロキシ方式に比べアクセス集中によるボトルネックが発生しにくい
  • 既存のネットワーク環境に変更を加えなくていい
  • エージェントに対応していないシステムには導入できない

SAML認証方式(Security Assertion Markup Language)

主にクラウドのリソースを含めたSSO実装に使う仕組み

詳細な仕組み
  1. クラウドサービス(Service Provider)へアクセスする
  2. IdP(Identity Provider)に対する認証要求(SAML)を生成し、IdPへリダイレクト
  3. IdPはSPからの認証要求を受けてクライアントに認証要求実施(ログイン画面表示)
  4. ユーザー認証実施
  5. ログイン成功後、IdPは認証応答(SAML)を生成し、SPへリダイレクト
  6. SPはIdPより送られた認証応答(SAML)を受けて検証し、クラウドサービスへの自動ログインを実施
  7. 自動ログイン後、クラウドサービス画面が表示
SAML(Security Assertion Markup Language)とは

異なるインターネットドメイン間でユーザー認証を行うための標準規格。

特徴

Google WorkspaceやMicrosoft365などのクラウドサービスがSAMLに対応

参考

【図解つき】シングルサインオン(SSO)とは?機能や仕組み、導入メリット、デメリットをわかりやすく解説! | mobiconnect(モビコネクト)

シングルサインオンの仕組みとは?5つの認証方式とメリットも解説!|ITトレンド

シングルサインオン(SSO)の選び方と仕組みの解説 | アシスト

Webサービスについて

SOAP

元々は「Simple Object Access Protocol」の略称がSOAPであり、HTTPやXMLなどのインターネット標準技術を使うことによって、Web上の分散オブジェクトをプラットフォームの壁を越えて利用することを可能にするために開発されたプロトコルである。その後、Webサービス間で交換されるメッセージについての汎用的なフレームワークとなった。

 

SOAPメッセージというXMLによってメッセージ交換をおこなう方法

ネットワーク上に存在しているオブジェクトにアクセスするためのプロトコルとして開発されたもの。

 

 

Webサービスの主役、SOAP誕生の背景:Webサービスのキホン(1) - @IT

REST

「Representational State Transfer」の略称がRESTである。

HTTPを使って通信をおこなう手法であり、HTTPのGETメソッドを使ってあるURLにアクセスすると、XMLが返ってくる。

WebブラウザにURLを入力すれば動作確認できる

Webブラウザで容易に動作確認ができるため、すでに存在しているサービスに対しては「まずはアクセスしてみて必要な情報が得られるか確認し、実際に使うかどうかはそれから考える」という使い方ができる。わざわざテスト用アプリを作る必要がない。

クライアント/サーバを開発する際、サーバを開発する側はWebブラウザを使って動作確認ができ、クライアントを開発する側は想定しているレスポンスをファイルに準備すればテストできる。(手間の省略)

REST vs SOAP

WSDL

WSDLはWeb サービスを記述するための XML 表記のこと

SOAPの定義方法にWSDL(Web Services Description Language)がある。

開発ツールにWSDL文書を読み込ませることによって、Webサービスを呼び出すモジュールのコードを自動生成できるようになる。

 

WSDL:Webサービスのインターフェイス情報:Webサービスのキホン(4) - @IT

XML

「eXtensible Markup Language」の略称がXMLである。

タグで囲むことで構造を表現する言語(マークアップ言語)のひとつ

(ファイルの書き方ルールのひとつ)

マークアップ言語とは、文章を構造化するための言語

 

タグを使うことで、要素名を自由に定義することが可能。

使いどころ

インターネットを経由して複数のアプリケーション間でデータをやり取りするのに適した構造を持っています。

このため、膨大なコンテンツの中から一定のルールに基づいて情報を抽出したり、複数のWebサービスを組み合わせたアプリを制作したりする際に非常に便利です。

記述例

<?xml version="1.0" encoding="Shift_JIS" ?>
<staff>
    <member>
        <name>田中</name>
        <position>サポートエンジニア</position>
        <age>29歳</age>
    </member>
    <member>
        <name>Aさん</name>
        <position>営業</position>
        <age>20歳</age>
    </member>
</staff>

 

 

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

マークアップ言語とは↓

https://mynavi-creator.jp/blog/article/what-is-mark-up-language

XMLのことを幅広く書いている↓

XMLとは?XMLの基礎と使い方をわかりやすく解説!HTMLとの違いは?タグと要素・文書の構造やフォーマット作成もご紹介| ITフリーランスエンジニア案件ならA-STAR(エースター)

 

XMLの基礎を理解しよう 〜これだけ知っていれば大丈夫!〜:新入社員のためのXML入門講座(1) - @IT

 

 

SOAPとRESTの共通点

Web アプリケーション間のデータ通信を可能にするAPIの構築方法を定義する。

RESTは、一連のアーキテクチャ原則です。

SOAPは、World Wide Web Consortium (W3C) が管理する公式プロトコルです。

主な違いは、SOAPプロトコルであるが、REST はプロトコルではないという点

SOAP

SOAP は標準プロトコルです。元々、異なる言語および異なるプラットフォームで構築されたアプリケーションが通信できるようにすることを目的に設計されました。

REST

REST は、軽量の Web サービスおよびモバイル・アプリケーションのニーズに合わせた一連のアーキテクチャ原則。

REST API へのデータのリクエストは、HTTP を介して送信されます。要求が受信されると、REST用に設計された API は、さまざまな形式(HTML、XML、プレーンテキスト、JSON)でメッセージを返すことができます。

JSONは、あらゆるプログラミング言語で読み取ることができ、人間も機械も読み取り可能で軽量であるため、メッセージ形式としてよく利用されています。このように、RESTful API はより柔軟で、セットアップが容易です。

SOAPとRESTのどちらを選ぶか

SOAP Web サービスは、多くのエンタープライズのニーズに合わせた組み込みのセキュリティとトランザクションコンプライアンスを提供しますが、それによってサービス自体は重くなります。

REST API は軽量で、IoT (モノのインターネット)、モバイル・アプリケーション開発、サーバーレス・コンピューティングなどの先進的なコンテキストに向いている。

 

SOAP と REST とは|API の種類| Red Hat