Giter Site home page Giter Site logo

log-audit-system-exam's Introduction

プログラミング試験問題の解答

本リポジトリが、プログラミング試験問題の解答となります。 実装コード、テストコード、テストデータ、テスト結果などが含まれます。

プログラムの使用方法

プログラム仕様

以下のようにmain.pyファイルをpythonインタプリンタで実行することにより、FILE_PATHで与えられたログの解析結果が得られます。

python main.py ${FILE_PATH}

オプション

解析の際のパラメータや解析内容に関するオプションは以下の通りです。

  • -o: 解析方式を指定。デフォルトはF(それぞれのパターンでの出力フォーマットは後述)
    • F: 各サーバーの故障期間を解析する
    • L: 各サーバーの過負荷状態を解析する
    • S: 各ネットワークの故障期間を解析する
  • -n: 故障判定をする際に使用。n回以上連続してタイムアウトした場合にのみ故障とみなす。-oFまたはSの場合のみ効力を持つ。デフォルトは1(設問1,2,4に関連)
  • -m: 過負荷状態を判定する際に使用。直近m回の平均応答時間がtミリ秒を超えた場合は、サーバが過負荷状態になっているとみなす。-oLの場合のみ効力を持つ。デフォルトは10。(設問3に関連)
  • -t: 過負荷状態を判定する際に使用。直近m回の平均応答時間がtミリ秒を超えた場合は、サーバが過負荷状態になっているとみなす。-oLの場合のみ効力を持つ。デフォルトは1000。(設問3に関連)

出力フォーマット

  • -o F: 各サーバーの故障期間を解析する場合

    故障状態のサーバアドレスとそのサーバの故障期間を出力する。

    「故障期間」は、最初にタイムアウトした時刻から、次にping応答が返るまでの期間である。故に、タイムアウト後に一度もping応答がない場合、出力対象とならない。

     # <サーバーのIPアドレス>,<故障期間(秒)>
     10.20.30.1,4
    
  • -o L: 各サーバーの過負荷状態を解析する場合

    サーバの過負荷状態となっている期間を出力する。 「期間」は、平均応答時間を評価した直近m回の、最初=開始時刻と、最後=終了時刻である。

     #  <サーバーのIPアドレス>,<過負荷状態の開始時刻>,<過負荷状態の終了時刻>
     10.20.30.1,2020-10-19 13:31:26,2020-10-19 13:31:30
    
  • -o S: 各ネットワークの故障期間を解析する場合

    サブネット毎にネットワークの故障期間を出力する

    「故障期間」は、"タイムアウトがネットワーク全体に及んだ時刻”から、同ネットワーク上のいづれかのサーバーから次にping応答が返るまでの期間である。"タイムアウトがネットワーク全体に及んだ時刻”とは、そのネットワーク内の全てのサーバーが初めて故障状態となった時刻のことで、例えばサーバーA → サーバーB → サーバーCという順番で無応答状態が始まった場合、「サーバーC」の無応答状態が始まった時刻である。

    また、-o Fの場合同様、タイムアウト後に一度もping応答がない場合、出力対象とならない。

     # <ネットワークアドレス>,<故障期間(秒)>
     10.20.0.0/16,4
    

プログラム実行方法、実行例

以降の実行例は、mac OSまたはLinuxのターミナルでの実行を想定して記述します。 Windows環境の場合、パスの指定方法など適宜読み替えてください。

前提条件

  • python3 がインストールされていること(推奨 3.9以上)

事前準備

git clone https://github.com/st-user/log-audit-system-exam.git
python -m venv venv
source ./venv/bin/activate

リポジトリのクローン、venvの作成は初回の一回のみで構いません。

設問1

実行例

FILE_PATH=./sample_files/question_1.txt
python main.py ${FILE_PATH}

テストデータと結果について

テストデータと結果

設問2

実行例

FILE_PATH=./sample_files/question_2.txt
python main.py -n 2 ${FILE_PATH}

テストデータと結果について

テストデータと結果

設問3

実行例

FILE_PATH=./sample_files/question_3.txt
python main.py -o L -m 3 -t 10 ${FILE_PATH}

テストデータと結果について

テストデータと結果

設問4

実行例

FILE_PATH=./sample_files/question_4.txt
python main.py -o S -n 2 ${FILE_PATH}

テストデータと結果について

テストデータと結果

プログラムの設計、実装について

log.pyは、解析対象(ファイルなど)に依存しない解析ロジックを提供するモジュールです。 1行ずつ集約して、逐一解析結果を出力することが可能なため、上記テストのように一気にファイルを読み込む方式だけではなく、ログストリーム(tail -fのイメージ)の場合にも対処可能です。

ログストリームから解析するパターンは、今回は割愛しています。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.