JP2022142456A - 異常対処プログラム、異常対処システム、及び異常対処方法 - Google Patents

異常対処プログラム、異常対処システム、及び異常対処方法 Download PDF

Info

Publication number
JP2022142456A
JP2022142456A JP2021042634A JP2021042634A JP2022142456A JP 2022142456 A JP2022142456 A JP 2022142456A JP 2021042634 A JP2021042634 A JP 2021042634A JP 2021042634 A JP2021042634 A JP 2021042634A JP 2022142456 A JP2022142456 A JP 2022142456A
Authority
JP
Japan
Prior art keywords
abnormality
container
anomaly
logic
service
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2021042634A
Other languages
English (en)
Inventor
正人 伊藤
Masato Ito
大希 山越
Daiki Yamakoshi
敦 桑林
Atsushi Kuwabayashi
要 高落
Kaname Takaochi
勉 金子
Tsutomu Kaneko
恭兵 杉野
Kyohei Sugino
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2021042634A priority Critical patent/JP2022142456A/ja
Publication of JP2022142456A publication Critical patent/JP2022142456A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

【課題】コンテナの異常への対処が遅れるのを抑制すること。【解決手段】複数のコンテナの各々に発生した異常の優先度を設定し、前記異常の種類ごとに、当該異常を解消させるロジックを生成し、前記優先度の順に、前記異常に対して前記ロジックを実行する処理をコンピュータに実行させるための異常対処プログラムによる。【選択図】図7

Description

本発明は、異常対処プログラム、異常対処システム、及び異常対処方法に関する。
コンピュータを仮想化する技術の一つにコンテナ仮想化技術がある。コンテナ仮想化技術は、OS(Operating System)のカーネルの一部を利用して仮想化を行うため、VM(Virtual Machine)仮想化技術と比較して仮想化のオーバヘッドが小さく軽量であるという利点がある。そのコンテナ仮想化技術においては、互いに独立した複数のユーザ空間が生成される。これらのユーザ空間はコンテナと呼ばれ、そのコンテナの各々においてアプリケーションプログラムが実行される。
コンテナを利用して業務システムを構築する場合、各々のコンテナで一つのアプリケーションプログラムを実行するMSA(Micro Service Architecture)と呼ばれるアーキテクチャを採用することがある。MSAは、業務システムを複数の機能に分割し、各機能を実現するアプリケーションプログラムをコンテナで実行するアーキテクチャである。前述のようにコンテナは軽量であるため、コンテナを利用したMSAでは業務システムを簡単にスケールアウトすることができるというメリットがある。
但し、MSAでは、例えば一つのコンテナの負荷が増大したときの負荷軽減を図る等の目的でコンテナの個数が急増したり、更にコンテナ同士の依存関係が複雑になったりする。そのため、コンテナに異常が発生した場合、業務システムの運用者がその異常に対処するのが極めて難しくなり、ひいては異常への対処が遅れてしまう。
特開2013-161305号公報 国際公開第2013/035243号
一側面によれば、コンテナの異常への対処が遅れるのを抑制することを目的とする。
一側面によれば、複数のコンテナの各々に発生した異常の優先度を設定し、前記異常の種類ごとに、当該異常を解消させるロジックを生成し、前記優先度の順に、前記異常に対して前記ロジックを実行する処理をコンピュータに実行させるための異常対処プログラムが提供される。
一側面によれば、コンテナの異常への対処が遅れるのを抑制できる。
図1は、業務システムの監視方法について示す模式図である。 図2は、問題を示す模式図(その1)である。 図3は、問題を示す模式図(その2)である。 図4は、業務システムの別の監視方法について示す模式図である。 図5は、問題について示す模式図(その3)である。 図6は、問題について示す模式図(その4)である。 図7は、本実施形態に係る異常対処システムの機能構成図である。 図8は、サービス情報の模式図である。 図9(a)、(b)は、サービス情報の取得方法の例について示す模式図である。 図10は、サービス情報に含まれる「Using_service」の項目を取得する方法の模式図である。 図11は、異常情報リソースの模式図である。 図12は、ロジックデータベースの模式図である。 図13は、運用ポリシの模式図である。 図14は、業務システムの運用を開始するときの処理の流れを示すフローチャートである。 図15は、本実施形態に係る異常対処方法のフローチャートである。 図16は、異常対処処理のフローチャートである。 図17は、本実施形態の第1例に係る異常対処について説明するための模式図である。 図18(a)は本実施形態の第1例に係るサービス情報の模式図であり、図18(b)は本実施形態の第1例において制御部が生成した異常情報リソースの模式図である。 図19は、本実施形態の第1例においてロジック生成部が生成したロジックの模式図である。 図20は、本実施形態の第2例に係る異常対処について説明するための模式図である。 図21は、本実施形態の第2例に係るサービス情報を示す模式図である。 図22は、図21のサービス情報を利用して制御部が生成したサービストポロジの模式図である。 図23は、本実施形態の第2例において制御部が生成した異常情報リソースの模式図である。 図24は、本実施形態に係る異常対処装置のハードウェア構成図である。
本実施形態の説明に先立ち、本願発明者が検討した事項について説明する。
図1は、業務システムの監視方法について示す模式図である。
図1においては、複数のサービス4によって実現される業務システム1について例示している。業務システム1はMSAを採用したシステムであり、MSAの個々の機能がサービス4によって実現される。
各々のサービス4は、コンテナ基盤2の上で起動した複数のコンテナの各々のアプリケーションプログラムで実現される。コンテナ基盤2は、複数のコンテナを自動的に配備するプログラムであって、Kubernetes(登録商標)やOpenShift(登録商標)等がその一例である。
サービス4を実現するコンテナに異常が発生しているかを判断するために、この例では各々のコンテナをコンテナ監視ソフトウェア5で監視する。コンテナ監視ソフトウェア5は、コンテナの異常を検知した場合には、業務システム1の運用者の操作端末6にアラートを表示する。そして、業務システム1の運用者は、アラートが通知された順に異常に対処することになる。
しかし、コンテナ監視ソフトウェア5は軽微な異常や重篤な異常を問わずにアラートを表示するため、この方法では業務システム1の運用者が重篤な異常に対処するのが遅れる可能性がある。
図2は、この問題を示す模式図である。図2の例では、軽微な異常である「軽微A」~「軽微D」という異常と、重大な重篤な異常である「重大A」という異常が各コンテナに発生した場合を想定している。
この場合、運用者は、異常が発生した順に対処するため、「重大A」という重篤な異常に対処するのが遅れてしまい、業務システム1自体の運用に問題が生じてしまう。更に、業務システム1の運用者が異常の緊急性を考慮して異常への対応順を決めても、対応順を決める判断そのものに時間がかかり、異常への対処が遅れるおそれがある。
また、運用者が手動で異常に対処するのではなく、異常への対処をスクリプトで自動化することも考えられる。しかし、単純にスクリプトを組んだのでは、上記と同様にアラートが通知された異常から順にスクリプトが対処するため、やはり重篤な異常への対処が遅れる。
しかも、この方法では、異常への対処後に当該異常が解消されたかを運用者が確認する必要があり、解消されていない場合には再び同じ異常に対して対処する必要がある。
図3は、この問題を示す模式図である。図3では、運用者が同じ異常に対して何度も対処した場合を想定している。これでは運用者の負担が大きくなり煩わしさに堪えない。
図4は、業務システムの別の監視方法について示す模式図である。なお、図4において図1で説明したのと同じ要素には図1におけるのと同じ符号を付し、以下ではその説明を省略する。
図4の例では、コンテナ基盤2に備わっているヘルスチェック機構2aがサービス4を実行しているコンテナの異常を検出し、異常が検出された場合にはヘルスチェック機構2aが異常を解消させる。
しかし、ヘルスチェック機構2aが監視可能な異常の種類は、コンテナ自身が停止した等の異常に限定されており、コンテナの内部の異常をヘルスチェック機構2aが検出することはできない。
更に、ヘルスチェック機構2aは、複数のコンテナに跨って発生した高度な異常を検出することもできない。
図5は、その問題について示す模式図である。図5に示すように、ヘルスチェック機構2aは、コンテナの内部でのみ有効なコマンドを実行することで当該コンテナのログを取得し、ログに基づいて異常の有無の判断を行う。そのため、一つのコンテナでコマンドを実行しても、そのコンテナとは別のコンテナのログを取得することができず、複数のサービス4に跨る異常を検出することができない。
しかも、ヘルスチェック機構2aは、ある異常を解消させることができない場合、その異常に対する対処を繰り返して行うため、重篤な異常への対処が遅れる可能性がある。
図6は、その問題について示す模式図である。図6に示すように、ヘルスチェック機構2aがあるコンテナのサービス4の異常に対して繰り返し対処をしている間は、他のコンテナで実行しているサービス4の異常が放置されてその対処が遅れてしまう。以下、本実施形態について説明する。
(本実施形態)
図7は、本実施形態に係る異常対処システムの機能構成図である。
図7に示すように、異常対処システム20は、業務システム21と異常対処装置22とを有する。このうち、業務システム21は、複数のサービス23で実現されるMSAを採用したシステムである。各々のサービス23は、コンテナ24とサイドカープロキシ25とを有する。各々のコンテナ24は、業務システム21の複数の機能のうちの一つを実現するためのアプリケーションプログラムを一つ実行しており、これらのアプリケーションプログラムによって業務システム21の機能が実現される。
各々のコンテナ24とサイドカープロキシ25はコンテナ基盤26の上で実行される。コンテナ基盤26は、コンテナ24を起動するためのDocker(登録商標)等のコンテナエンジンと、各コンテナ24を管理するKubernetes等のコンテナ管理プログラムとをコンピュータの上で実行することで実現されるコンテナ実行環境である。コンテナエンジンとコンテナ管理プログラムを実行するコンピュータは特に限定されず、物理マシンや仮想マシンの上でこれらのプログラムを実行し得る。
サイドカープロキシ25は、自身と同一のサービス23に配備されたコンテナ24に係るサービス情報27の各項目のパラメータを取得し、それを異常対処装置22に通知するためのプログラムである。
図8は、サービス情報27の模式図である。図8に示すように、サービス情報27は、「Name」、「Id」、「Status」、「Priority」、「Stdout_path」、「Logfile_path」、「Internalcmd_path」、「Using_db」、「Using_service」、「Operation_type」、及び「SLA」の各項目を有する。
このうち、「Name」はサービス23の名前であり、「Id」はサービス23を一意に識別する識別子である。
「Status」は、サービス23の状態を示す情報である。その情報には、サービス23に含まれるコンテナ24が稼働中であることを示す「Running」、当該コンテナ24に異常が発生していることを示す「Error」、当該異常に対処中であることを示す「ResolvingError」がある。また、サービス23に含まれるコンテナ24が停止中であることを示す「Stopped」も「Status」に含まれる。
「Priority」は、コンテナ24に異常が発生したときに異常の対処順序を決めるためのパラメータである。「Stdout_path」はサービス23における標準出力先を示し、「Logfile_path」はログファイルの出力先を示す。
また、「Internalcmd_path」は、サービス23に含まれるコンテナ24の内部の情報を取得するためのコマンドパスを示す。
「Using_db」は、サービス23に含まれるコンテナ24が使用するデータベースの名前である。「Using_service」は、サービス23に含まれるコンテナ24と依存関係にある他のコンテナ24を含むサービス23の名前である。
「Operation_type」は、業務システム21を実現するのに当該サービス23が必須かどうかを示す情報である。
「SLA」は、業務システム21のSLA(Service Level Agreement)である。一例として、業務システム21の可用性をSLAとして採用し得る。
サービス情報27の取得方法は特に限定されない。
図9(a)、(b)は、サービス情報27の取得方法の例について示す模式図である。
このうち、図9(a)は、サービス23に割り当てられた記憶領域23aを利用した方法の模式図である。記憶領域23aは、同一のサービス23に属するコンテナ24とサイドカープロキシ25の両方からアクセス可能な記憶領域である。例えば、コンテナ24は、動作ログや異常ログを記憶領域23aに格納する。そして、サイドカープロキシ25は、これらのログのうちでサービス情報27に含まれる項目を記憶領域23aから取得し、当該項目をサービス情報取得部41に通知する。
一方、図9(b)は、記憶領域23aを介さずに、サイドカープロキシ25がコンテナ24からサービス情報27に含まれる各項目を直接取得し、それをサービス情報取得部41に通知する場合の模式図である。
この場合、サイドカープロキシ25は、サービス情報27に含まれる各項目を収集するための内部コマンド「/bin/internal_cmd」をコンテナ24の内部で実行し、これらの項目を収集する。
図10は、サービス情報27に含まれる「Using_service」の項目を取得する方法の模式図である。
ここでは、「ServiceA」のサービス23が、「ServiceB」と「ServiceC」のサービス23の各々に依存しているとする。なお、「SeviceA」のコンテナ24は第1のコンテナの一例であり、「ServiceB」のコンテナ24は第2のコンテナの一例である。この場合、「ServiceA」のサービス23におけるサイドカープロキシ25は、自サービス23のコンテナ24から送信される通信パケット等のデータを監視する。そして、当該サイドカープロキシ25は、通信パケットのヘッダを分析することにより送信元のコンテナ24が属するサービス23と、送信先のコンテナ24が属するサービス23とを特定する。その後、サイドカープロキシ25は、送信元と送信先とを対応つけた通信テーブル23bを生成し、それをサービス情報取得部41に通知する。そして、サービス情報取得部41が制御部42に通信テーブル23bを通知する。
制御部42は、通信テーブル23bに基づいて、送信元の「ServiceA」に含まれるコンテナ24と、送信先の「ServiceB」に含まれるコンテナ24とを特定する。そして、制御部42は、「ServiceA」に含まれるコンテナ24が「ServiceB」に含まれるコンテナ24に依存していると判断し、サービス情報27の「Using_service」の項目として「ServiceB」を設定する。
同様に、制御部42は、は、この通信テーブル23bから「ServiceA」に含まれるコンテナ24が「ServiceC」に含まれるコンテナ24に依存しているとも判断する。そのため、制御部42は、サービス情報27の「Using_service」の項目として更に「ServiceC」を設定する。
再び図7を参照する。異常対処装置22は、業務システム21の各コンテナ24に異常が発生した場合に、その異常を解消させるための対処を行う装置である。一例として、異常対処装置22は、解析部31、異常対処部32、記憶部33、運用ポリシ生成部34、運用ポリシ適用部35、及び受付部36を備える。
このうち、解析部31は、前述のサービス情報27を解析する処理部であって、サービス情報取得部41と制御部42とを有する。
サービス情報取得部41は、各々のサイドカープロキシ25からサービス情報27を取得する処理部である。
制御部42は、サービス情報取得部41が収集したサービス情報27を解析することによりコンテナ24の異常の有無を判定する。
例えば、制御部42は、サービス情報27の「Status」が「Error」となっている場合に、そのサービス情報27に係るサービス23に含まれるコンテナ24に異常が発生したと判定する。
また、制御部42は、サービス情報27の「Using_db」や「Using_service」を利用して、複数のサービス23同士の依存関係を示すサービストポロジを生成する。更に、制御部42は、サービス情報27の「Using_db」や「Using_service」が前回取得時と異なっている場合に、複数のサービス23同士の依存関係を示すサービストポロジが変更されたと判定する。
制御部42は、前述のようにコンテナ24に異常が発生したと判定した場合には、サービス情報27に基づいて異常情報リソース44を生成し、それを記憶部33に格納する。異常情報リソース44は、サービス23に発生した異常についての情報を示すファイルであり、発生した異常ごとに制御部42が生成する。
図11は、異常情報リソース44の模式図である。図11に示すように、異常情報リソース44は、「Kind」、「Id」、「Status」、「Priority」、「Service」、及び「Retry_count」の各項目を有する。
このうち、「Kind」は、異常の種類を示す情報である。「Kind」の設定方法は特に限定されない。例えば、制御部42は、サービス情報27の「Status」が「Error」となっている場合に、サービス情報27の「Stdout_path」で示されるパスから標準エラー出力を取得し、サービス情報27の「Logfile_path」からログファイルを取得する。そして、制御部42は、取得した標準エラー出力とログファイルに基づいて異常の種類を示す「Kind」の値を設定する。
また、「Id」は異常情報リソース44を一意に識別する識別子である。「Status」は、異常への対処結果を示す情報である。その情報には、対処により異常が解消されたことを示す「Sucess」、対処しても異常が解消されなかったことを示す「Failed」、及び異常への対処中であることを示す「ResolvingError」がある。
「Priority」は、複数の異常のうち、どの異常から先に対処すべきかを示す優先度を示す数値であり、その値が小さいほど優先度が高いことになる。「Priority」の値の設定方法は特に限定されず、異常の種類を示す「Kind」と、サービス情報27に含まれる「Priority」等に基づいて、制御部42が異常情報リソース44の「Priority」の値を設定し得る。
「Service」は、異常が発生したサービス23の名前である。「Retry_count」は、異常に対処した回数を示す。「Retry_count」の初期値は「0」であり、異常を解消させるためのロジックをロジック実行部49が実行するたびに制御部42が「Retry_count」を1だけインクリメントする。
再び図7を参照する。制御部42は、異常情報リソース44を生成した後に、異常対処部32に対して異常の対処を依頼する。
異常対処部32は、制御部42からの依頼を受けたときに、サービス23に発生した異常を解消させるための対処を行う処理部である。一例として、異常対処部32は、異常特定部46、スケジューリング部47、ロジック生成部48、及びロジック実行部49を有する。
このうち、異常特定部46は、制御部42から依頼を受けたときに記憶部33にある複数の異常情報リソース44を読み込み、これらの異常情報リソース44に対応した異常の種類を特定する処理部である。例えば、異常特定部46は、異常情報リソース44の「Kind」から異常の種類を特定する。また、異常特定部46は、異常の種類を特定した後に、異常への対処のスケジューリングを行うようにスケジューリング部47に依頼する。
スケジューリング部47は、異常特定部46からの依頼を受けたときに、異常への対処のスケジューリングを行う処理部である。一例として、スケジューリング部47は、異常情報リソース44の「Priority」から異常の優先度を特定し、優先度が高い異常から順に処理をするようにスケジューリングを行う。
ロジック生成部48は、異常特定部46が特定した異常の種類ごとに、当該異常を解消させるロジックを生成する処理部である。例えば、ロジック生成部48は、記憶部33に格納されているロジックデータベース51を参照することによりロジックを生成する。
図12は、ロジックデータベース51の模式図である。図12に示すように、ロジックデータベース51は、「異常の種類」、「異常名」、及び「ロジック」の各々を対応付けた情報である。
「異常の種類」は、異常情報リソース44の「Kind」と同一の情報であって、異常の種類を示す情報である。「異常名」は、異常の名前を示す情報である。そして、「ロジック」は、異常を解消させるための処理内容を示す情報である。
例えば、「異常の種類」が「サービス間のネットワークタイムアウト」である場合について考える。この場合の「異常の名前」は「NW_timeout」である。「ロジック」は、「[COMMAND: “<実行するコマンド>”]」であって、この“<実行するコマンド>”を実行することにより「サービス間のネットワークタイムアウト」という異常が解消される。
そして、ロジック生成部48は、「[COMMAND: “<実行するコマンド>”]」というロジックを生成する。
なお、「DBへの接続エラー」のように、ロジックとして異常を解消させるためのスクリプトを用いてもよい。
再び図7を参照する。ロジック実行部49は、ロジック生成部48が生成したロジックを実行することにより、異常の解消を試みる処理部である。なお、ロジック生成部48は、ある異常の異常情報リソース44の「Retry_count」が予め定めておいた閾値を超えている場合には、当該異常に対するロジックの実行を停止する。この場合、ロジック生成部48は、残りの異常のうちで優先度が最も高い異常に対してロジックを実行することになる。
運用ポリシ生成部34は、制御部42がサービス情報27から取得したSLAに基づいて業務システム21の運用ポリシを生成する処理部である。
図13は、運用ポリシの模式図である。運用ポリシは、コンテナ24のリソース使用率の制御のためのパラメータとサービス23間の通信を制御するためのサイドカープロキシ25の設定パラメータである。そのような設定パラメータとしては、サービス情報27における「Name」、「Id」、「Priority」、「Stdout_path」、「Logfile_path」、「Internalcmd_path」、及び「Operation_type」の各パラメータがある。これらの値の初期値は運用者によって設定されるが、業務システム21の運用の開始と共に運用ポリシ生成部34が自動で調節する。例えば、運用ポリシ生成部34は、業務システム21がSLAを満たすようにこれらの設定パラメータを更新する。また、運用ポリシ生成部34は、更新した運用ポリシを運用ポリシデータベース52に格納する。
再び図7を参照する。運用ポリシ適用部35は、運用ポリシデータベース52を参照することにより、各コンテナ24に運用ポリシを適用する処理部である。
受付部36は、運用者からロジックデータベース51に含まれる個々のパラメータの入力を受け付け、それを記憶部33に格納する処理部である。また、受付部36は、運用者から運用ポリシの初期値の入力を受け付け、それを記憶部33の運用ポリシデータベース52に格納する。
次に、業務システム12の運用を開始するときの処理の流れについて説明する。
図14は、業務システム12の運用を開始するときの処理の流れを示すフローチャートである。
まず、受付部36が、運用者から運用ポリシ(図13参照)の個々のパラメータの初期値の入力を受け付け、それらを運用ポリシデータベース52に格納する(ステップS11)。
次に、運用ポリシ生成部34が運用ポリシデータベース52を参照して運用ポリシを生成する(ステップS12)。
次いで、運用ポリシ適用部35が、運用ポリシデータベース52を参照して運用ポリシを取得する(ステップS13)。
続いて、運用ポリシ適用部35が、取得した運用ポリシを各コンテナ24に適用する(ステップS14)。
次に、受付部36が、運用者からロジックデータベース51の個々のパラメータの入力を受け付け、それを記憶部33に格納する(ステップS15)。
次いで、ロジック生成部48がこれらのパラメータからロジックデータベース51を作成し、それを記憶部33に格納する(ステップS16)。
以上により、業務システム12の運用を開始するときの基本的な処理を終える。
次に、本実施形態に係る異常対処方法について説明する。
図15は、本実施形態に係る異常対処方法のフローチャートである。まず、運用ポリシ適用部35が運用ポリシデータベース52を参照し、運用ポリシに変更がある場合には変更後の運用ポリシを各コンテナ24に適用する(ステップS21)。
次いで、サイドカープロキシ25が、サービス情報27に含まれる各項目の情報を、当該サイドカープロキシ25と同じサービス23内のコンテナ24から収集し、それらをサービス情報取得部41に通知する(ステップS22)。
次に、サービス情報取得部41が各サイドカープロキシ25からサービス情報27を取得する(ステップS23)。
次いで、制御部42がサービス情報27を解析する(ステップS24)。例えば、制御部42は、通信テーブル23bに基づいて、複数のサービス23同士の依存関係を示すサービストポロジを生成する。また、制御部42は、サービス情報27に基づいて業務システム12のSLAを特定する。
次に、制御部42が、サービス情報27を解析した結果、サービストポロジが変更されたかを判定する(ステップS25)。
そして、サービストポロジが変更されたと判定された場合(ステップS25:肯定)はステップS26に移る。ステップS26では、運用ポリシ生成部34が、変更後のサービストポロジにとって望ましい運用ポリシを生成し、それを運用ポリシデータベース52に格納する。
一方、サービストポロジが変更されていないと判定された場合(ステップS25:否定)はステップS27に移る。
ステップS27においては、制御部42が、サービス情報27を解析した結果、業務システム12のSLAが基準を超えたかを判定する。ここで、SLAが基準を超えたと判定された場合(ステップS27:肯定)は前述のステップS26に移る。ステップS26では、運用ポリシ生成部34が、業務システム12のSLAが基準を満たすように運用ポリシを変更する。
一方、SLAが基準を超えていないと判定された場合(ステップS27:否定)はステップS28に移る。
ステップS28においては、制御部42が、コンテナ24に異常が発生したかを判定する。例えば、制御部42は、サービス情報27の「Status」が「Error」となっている場合に、サービス情報27の「Name」が示すサービス23に含まれるコンテナ24に異常が発生したと判定する。
ここで、異常は発生していないと判定された場合(ステップS28:否定)はステップS29に移る。
ステップS29においては、制御部42が、業務システム12が業務を終了したかを判定する。ここで、業務を終了していないと判定された場合(ステップS29:否定)にはステップS22に戻る。一方、業務を終了したと判定した場合(ステップS29:肯定)は処理を終える。
また、前述のステップS28において異常が発生したと制御部42が判定した場合にはステップS30の異常対処処理を行い、その後ステップS29に移る。以上により、図15のフローチャートの基本的な処理を終える。
図16は、前述のステップS30の異常対処処理のフローチャートである。
まず、制御部42が、サービス情報27に基づいて異常情報リソース44を生成し、それを記憶部33に格納する(ステップS41)。このとき、制御部42は、サービス情報27に基づいて異常の種類を特定し、その異常の種類に応じた「Kind」の値を異常情報リソース44に設定する。また、制御部42は、異常対処部32に対して異常の対処を依頼する。
次に、異常対処部32の異常特定部46が、制御部42からの依頼を受けて、異常の種類を特定する(ステップS42)。例えば、異常特定部46は、記憶部33にある異常情報リソース44を読み込み、その異常情報リソース44の「Kind」から異常の種類を特定する。また、異常特定部46は、異常への対処のスケジューリングを行うようにスケジューリング部47に依頼する。
次に、スケジューリング部47が、異常特定部46からの依頼を受けて、異常への対処のスケジューリングを行う(ステップS43)。例えば、スケジューリング部47は、異常情報リソース44の「Priority」から異常の優先度を特定し、優先度が高い異常から順に処理をするようにスケジューリングを行う。
次いで、ロジック生成部48が、異常特定部46が特定した異常の種類ごとに、当該異常を解消させるロジックを生成する(ステップS44)。一例として、ロジック生成部48は、記憶部33に格納されているロジックデータベース51を参照することにより、ステップS42で特定した異常の種類に対応するロジックを特定し、当該ロジックを生成する。
次に、ロジック実行部49が、ロジック生成部48が生成したロジックを実行する(ステップS45)。
次いで、制御部42がサービス情報27を新たに取得し、そのサービス情報27に基づいて異常情報リソース44を生成する(ステップS46)。
次に、ロジック実行部49が、ロジックを実行したことにより異常が解消されたかを判定する(ステップS47)。例えば、ロジック実行部49は、ステップS46で生成した異常情報リソース44の「Status」が「Running」の場合に異常が解消されたと判定し、「Status」が「Error」のままの場合に異常は解消されていないと判定する。
ここで、異常が解消されたと判定された場合(ステップS47:肯定)はステップS50に移る。
ステップS50においては、制御部42が、解消された異常に対応した異常情報リソース44を記憶部33から削除する。
一方、異常が解消されていないと判定された場合(ステップS47:否定)はステップS48に移る。
ステップS48においては、ロジック実行部49が、異常対処のリトライ回数を示す異常情報リソース44の「Retry_count」が閾値を超えたかを判定する。その閾値は、ある異常への対処を繰り返すことで他の異常への対処が遅れるのを防止する観点から設定される。
ここで、閾値を超えたと判定した場合(ステップS48:肯定)は、前述のステップS50に移り、制御部42が、ステップS45で対処した異常に係る異常情報リソース44を記憶部33から削除する。これにより、特定の異常に対する異常を何度も繰り返すことで他の異常への対処が遅れるのを防止することができる。
なお、この場合は異常が解消されていないことになるが、制御部42が表示装置等にアラートを表示することで、運用者に異常が解消されていないことを通知してもよい。
一方、閾値を超えていないと判定した場合(ステップS48:否定)はステップS49に移る。
ステップS49においては、対処していない異常があるかを制御部42が判定する。ここで、対処していない異常があると判定した場合(ステップS49:肯定)はステップS43に戻る。
一方、対処していない異常がないと判定した場合(ステップS49:肯定)は処理を終えて呼び出し元に戻る。
以上により、本実施形態に係る異常対処方法の基本的な処理を終える。
上記した本実施形態によれば、異常に対処すべき優先度を示す異常情報リソース44の「Priority」を制御部42が設定し(ステップS41)、その優先度の順に異常に対処する(ステップS43、S45)。そのため、重篤な異常の対処が後回しにされるのを抑制でき、異常への対処が遅れるのを抑制することができる。
更に、ロジック生成部48が異常の種類ごとにロジックを生成するため(ステップS44)、当該異常を解消するのに相応しいロジックを自動で実行でき、業務システム12の運用者が対処内容を判断する必要がない。
しかも、ステップS48においてある異常についてのリトライ回数が閾値を超えたと判定された場合には、ロジック実行部49がその異常への対処を停止する。そのため、同一の異常への対処が何度も行われることで他の異常への対処が遅れるのを抑制することができる。
次に、異常対処の具体例について説明する。
・第1例
図17は、第1例に係る異常対処について説明するための模式図である。
図17に示すように、第1例では、「ServiceA」~「ServiceD」の4つのサービス23で業務システム12が実現される場合を想定する。また、これらのサービス23のうちで、「ServiceA」と「ServiceD」の2つのコンテナ24に異常が発生したものとする。
図18(a)は、この場合のサービス情報27の模式図である。図18(a)に示すように、コンテナ24に異常が発生していない「ServiceB」と「ServiceC」の「Status」は「Running」となる。一方、コンテナ24に異常が発生した「ServiceA」と「ServiceD」の「Status」は「Error」となる。
図18(b)は、第1例において制御部42が生成した異常情報リソース44の模式図である。異常情報リソース44は、コンテナ24に異常が発生したサービス23ごとに制御部42が生成するため、この例では制御部42が「ServiceA」と「ServiceD」の異常情報リソース44を生成する。
ここでは、制御部42が、「ServiceD」に係る異常情報リソース44の「Priority」を「0」に設定し、「ServiceA」に係る異常情報リソース44の「Priority」をそれよりも高い「1」に設定したものとする。
図19は、この場合にロジック生成部48が生成したロジックの模式図である。
そのロジックには、「ServiceA」のコンテナ24の異常を解消させるスクリプトと、「ServiceD」のコンテナ24の異常を解消させるスクリプトが記述される。前述のように「ServiceA」の異常の優先度は「ServiceD」のそれよりも高い。そのため、スケジューリング部47は、「ServiceA」への対処が「ServiceD」への対処よりも先になるようにスケジューリングを行う。このスケジューリングの結果、ロジック生成部48は、「ServiceA」のコンテナ24の異常を解消させるためのスクリプトを、「ServiceD」のコンテナ24の異常を解消させるためのスクリプトよりも先に記述する。
これにより、ロジック実行部49は、優先度が高い「ServiceA」のコンテナ24の異常から先に対処し、その対処を終えた後に「ServiceD」のコンテナ24の異常に対処する。
その結果、優先度が高く重篤な異常への対処が遅れるのを抑制することができ、業務システム12を安定的に稼働させることができる。しかも、制御部42が自動的に異常の優先度を設定し、その優先度に従ってスケジューリング部47が自動的にスケジューリングを行うため、業務システム12の運用者が異常への対応順を決める必要もない。
・第2例
図20は、第2例に係る異常対処について説明するための模式図である。図20に示すように、第2例では、「ServiceA1」、「ServiceA2」、「ServiceA3」、及び「ServiceB」の4つのサービス23と、「DatabaseA」というデータベース29とによって業務システム21が実現されている場合を想定する。また、図20では、サービス23同士の依存関係を矢印で示している。その矢印の根元のサービス23は、通信パケットの送信元のコンテナ24が起動しているサービスを示す。また、矢印の先端のサービス23は、通信パケットの送信先のコンテナ24を示す。
なお、データベース29に向かう矢印は、矢印の根元のサービス23内のコンテナ24がデータベース29にアクセスすることを示す。
以下では、「ServiceA1」と「ServiceA2」の各々のコンテナ24に異常があった場合について説明する。
図21は、この場合のサービス情報27を示す模式図である。前述のように「ServiceA1」と「ServiceA2」の各々のコンテナ24に異常があるため、これらのサービス23における「Status」は「Error」となる。
また、「Using_db」と「Using_service」の各項目には、図20の依存関係を反映した値が格納される。例えば、「ServiceA1」の「Using_service」には「ServiceA2」と「ServiceA3」が格納される。なお、「ServiceA1」は「DatabaseA」にアクセスしないため、アクセスしないことを示す「NULL」が「Using_db」に格納される。
一方、「ServiceA2」は「DatabaseA」にアクセスするため、「ServiceA2」の「Using_db」には「DatabaseA」が格納される。また、「ServiceA2」は他のサービス23に依存しないため、「ServiceA2」の「Using_service」は「NULL」となる。
なお、「ServiceA3」の「Operation_type」における「CircuitBreakOK」は、「ServiceA3」のサービス23を実行しているコンテナ24に異常が発生した場合、業務システム21から「ServiceA3」を削除してもよいことを示す。
図22は、図21のサービス情報27を利用して制御部42が生成したサービストポロジの模式図である。
ここでは、制御部42は、サービストポロジを表現する隣接リストを生成する。この隣接リストの1行目の「ServiceA1-ServiceA2-ServiceA3」は、「ServiceA1」の通信先のサービス23が「ServiceA2」と「ServiceA3」であることを示す。2行目の「ServiceA2-DatabaseA」は、「ServiceA2」が「DatabaseA」にアクセスすることを示す。また、最後の行の「DatabaseA」は、「DatabaseA」のアクセス先がないことを示す。
図23は、本例において制御部42が生成した異常情報リソース44の模式図である。
図23の例では、「ServiceA1」と「ServiceA2」の各異常に対してロジック実行部49が既に1回ロジックを実行しており、それでも異常が解消されなかった場合を示す。この場合、「ServiceA1」と「ServiceA2」のそれぞれの「Status」は「Failed」となる。
また、「ServiceA1」と「ServiceA2」のそれぞれの「Priority」はいずれも「1」であるとする。
このように二つのサービス23の「Priority」が同一の場合は、スケジューリング部47は、通信パケットの送信先のサービス23に含まれるコンテナ24から先にロジックを実行するようにスケジューリングする。この例では通信パケットの送信先は「ServiceA2」であるため、スケジューリング部47は、「ServiceA1」よりも先に「ServiceA2」のロジックが実行されるようにスケジューリングする。
そのスケジューリングを受けて、ロジック実行部49は、「ServiceA1」よりも先に「ServiceA2」のロジックを実行し、「ServiceA2」のコンテナ24の異常の解消を試みる。
これとは逆に「ServiceA1」から先に対処することも考えられるが、この場合は仮に「ServiceA1」の異常が解消しても、送信先の「ServiceA2」で異常が発生しているため、「ServiceA1」にすぐに異常が発生することがある。
これに対し、本例では送信先の「ServiceA2」から先に対処し、その次に「ServiceA1」の対処を行う。そのため、「ServiceA2」の異常が解消した後に「ServiceA1」の対処を行っているときに「ServiceA2」で再び異常が発生する可能性が少なく、異常への無駄な対処を抑制できる。
(ハードウェア構成)
次に、本実施形態に係る異常対処装置22のハードウェア構成について説明する。
図24は、本実施形態に係る異常対処装置22のハードウェア構成図である。
図24に示すように、異常対処装置22は、記憶装置22a、メモリ22b、プロセッサ22c、通信インターフェース22d、入力装置22f、表示装置22g、及び媒体読取装置22hを有する。これらの各部は、バス22jにより相互に接続される。
このうち、記憶装置22aは、HDD(Hard Disk Drive)やSSD(Solid State Drive)等の不揮発性のストレージであって、本実施形態に係る異常対処プログラム100を記憶する。
なお、異常対処プログラム100をコンピュータが読み取り可能な記録媒体22iに記録し、媒体読取装置22hを介してプロセッサ22cにその異常対処プログラム100を読み取らせるようにしてもよい。
そのような記録媒体22iとしては、例えばCD-ROM (Compact Disc - Read Only Memory)、DVD (Digital Versatile Disc)、及びUSB (Universal Serial Bus)メモリ等の物理的な可搬型記録媒体がある。また、フラッシュメモリ等の半導体メモリやハードディスクドライブを記録媒体22iとして使用してもよい。これらの記録媒体22iは、物理的な形態を持たない搬送波のような一時的な媒体ではない。
更に、公衆回線、インターネット、及びLAN等に接続された装置に異常対処プログラム100を記憶させてもよい。その場合は、プロセッサ22cがその異常対処プログラム100を読み出して実行すればよい。
一方、メモリ22bは、DRAM(Dynamic Random Access Memory)等のようにデータを一時的に記憶するハードウェアである。
プロセッサ22cは、異常対処装置22の各部を制御するCPUやGPU(Graphical Processing Unit)等のハードウェアである。また、プロセッサ22cは、メモリ22bと協働して異常対処プログラム100を実行する。
これにより、図7に示した異常対処装置22の解析部31、異常対処部32、運用ポリシ生成部34、運用ポリシ適用部35、及び受付部36が実現される。
また、記憶部33(図7参照)は、記憶装置22aとメモリ22bによって実現される。
更に、通信インターフェース22dは、異常対処装置22をインターネットやLAN(Local Area Network)等のネットワークに接続するためのNIC(Network Interface Card)等のハードウェアである。この通信インターフェース22dを介して、コンテナ24やコンテナ基盤26の各々と異常対処装置22が通信することができる。
また、入力装置22fは、ロジックデータベース51に含まれる各パラメータや運用ポリシの初期値を運用者が入力するためのキーボードやマウス等のハードウェアである。
表示装置22gは、入力装置22fを介して運用者が異常対処装置22に入力した各種のデータを表示するための液晶ディスプレイ等の表示デバイスである。
媒体読取装置22hは、記録媒体22iを読み取るためのCDドライブ、DVDドライブ、及びUSBインターフェース等のハードウェアである。
1…業務システム、2…コンテナ基盤、2a…ヘルスチェック機構、4…サービス、5…コンテナ監視ソフトウェア、6…操作端末、12…業務システム、20…異常対処システム、21…業務システム、22…異常対処装置、23…サービス、23a…記憶領域、23b…通信テーブル、24…コンテナ、25…サイドカープロキシ、26…コンテナ基盤、27…サービス情報、29…データベース、31…解析部、32…異常対処部、33…記憶部、34…運用ポリシ生成部、35…運用ポリシ適用部、36…受付部、41…サービス情報取得部、42…制御部、44…異常情報リソース、46…異常特定部、47…スケジューリング部、48…ロジック生成部、49…ロジック実行部、51…ロジックデータベース、52…運用ポリシデータベース、100…異常対処プログラム。

Claims (5)

  1. 複数のコンテナの各々に発生した異常の優先度を設定し、
    前記異常の種類ごとに、当該異常を解消させるロジックを生成し、
    前記優先度の順に、前記異常に対して前記ロジックを実行する、
    処理をコンピュータに実行させるための異常対処プログラム。
  2. 複数の前記コンテナのうち、データの送信元の第1のコンテナと送信先の第2のコンテナとを特定し、
    前記第1のコンテナの前記異常と前記第2のコンテナの前記異常の各々の前記優先度が同じ場合は、前記第2のコンテナの前記異常から先に前記ロジックを実行する、
    処理を更に前記コンピュータに実行させるための請求項1に記載の異常対処プログラム。
  3. 同一の前記異常に対する前記ロジックの実行回数が閾値を超えた場合に、当該異常に対する前記ロジックの実行を停止する、
    処理を更に前記コンピュータに実行させるための請求項1に記載の異常対処プログラム。
  4. 複数のコンテナの各々に発生した異常の優先度を設定する制御を行う制御部と、
    前記異常の種類ごとに、当該異常を解消させるロジックを生成する生成部と、
    前記優先度の順に、前記異常に対して前記ロジックを実行する実行部と、
    を有することを特徴とする異常対処システム。
  5. コンピュータが、
    複数のコンテナの各々に発生した異常の優先度を設定し、
    前記異常の種類ごとに、当該異常を解消させるロジックを生成し、
    前記優先度の順に、前記異常に対して前記ロジックを実行する、
    処理を実行することを特徴とする異常対処方法。
JP2021042634A 2021-03-16 2021-03-16 異常対処プログラム、異常対処システム、及び異常対処方法 Pending JP2022142456A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2021042634A JP2022142456A (ja) 2021-03-16 2021-03-16 異常対処プログラム、異常対処システム、及び異常対処方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2021042634A JP2022142456A (ja) 2021-03-16 2021-03-16 異常対処プログラム、異常対処システム、及び異常対処方法

Publications (1)

Publication Number Publication Date
JP2022142456A true JP2022142456A (ja) 2022-09-30

Family

ID=83426350

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2021042634A Pending JP2022142456A (ja) 2021-03-16 2021-03-16 異常対処プログラム、異常対処システム、及び異常対処方法

Country Status (1)

Country Link
JP (1) JP2022142456A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117707830A (zh) * 2024-02-04 2024-03-15 中航信移动科技有限公司 Redis连接异常的处理方法、电子设备及存储介质

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117707830A (zh) * 2024-02-04 2024-03-15 中航信移动科技有限公司 Redis连接异常的处理方法、电子设备及存储介质
CN117707830B (zh) * 2024-02-04 2024-04-26 中航信移动科技有限公司 Redis连接异常的处理方法、电子设备及存储介质

Similar Documents

Publication Publication Date Title
US8533334B2 (en) Message binding processing technique
US9582312B1 (en) Execution context trace for asynchronous tasks
US8046641B2 (en) Managing paging I/O errors during hypervisor page fault processing
JP4558661B2 (ja) パーティション間で実行可能プログラムを転送するためのコンピュータシステム及び方法
US8826286B2 (en) Monitoring performance of workload scheduling systems based on plurality of test jobs
US8112526B2 (en) Process migration based on service availability in a multi-node environment
US9535754B1 (en) Dynamic provisioning of computing resources
US20090070457A1 (en) Intelligent Performance Monitoring of a Clustered Environment
US20080313502A1 (en) Systems, methods and computer products for trace capability per work unit
US8904063B1 (en) Ordered kernel queue for multipathing events
US20210224121A1 (en) Virtual machine-initiated workload management
JP5030647B2 (ja) 複数処理ノードを含むコンピュータ・システムでプログラムをロードする方法、該プログラムを含むコンピュータ可読媒体、及び、並列コンピュータ・システム
US20090319662A1 (en) Process Migration Based on Exception Handling in a Multi-Node Environment
JP2022142456A (ja) 異常対処プログラム、異常対処システム、及び異常対処方法
JP4992740B2 (ja) マルチプロセッサシステム、障害検出方法および障害検出プログラム
JP5642725B2 (ja) 性能分析装置、性能分析方法及び性能分析プログラム
US20100085871A1 (en) Resource leak recovery in a multi-node computer system
US20070174836A1 (en) System for controlling computer and method therefor
US9400691B2 (en) Process allocation management apparatus, system and method
JP2007242010A (ja) 共通ロギングにより収集される情報をロギングする解析コンピュータ・システム
JP6279816B2 (ja) ストレージ監視システムおよびその監視方法
US8203937B2 (en) Global detection of resource leaks in a multi-node computer system
US7568006B2 (en) e-Business on-demand for design automation tools
JP6123487B2 (ja) 制御装置、制御方法及び制御プログラム
US11571618B1 (en) Multi-region game server fleets