Enterprise 技術情報 Enterprise Technical information
ジョブフローの簡単な例 簡単なWebサーバーの監視をする
今回はWebサーバーが公開するURLにリクエストを送り、死活監視を行うジョブフローを作成します。
環境情報 本稿は、以下の環境で検証しています。
処理の流れとしては以下のような想定です。 * 指定のURLにリクエストを送信し、応答がなければエラーを表示 * HTTPのステータスコードが200以外の場合にはエラーを表示 * 上記以外の場合には正常であると表示 まずWEBサーバーにリクエストを送信する方法ですが、Kompiraの組み込み関数urlopen()を使います。引数で指定した url に対して、HTTPリクエストを送信し、結果を取得します。
urlopen()でアクセスに成功した場合の結果は、以下の要素を持つ辞書で返されます。codeには HTTP のステータスコードが、bodyにはレスポンスの内容が格納されています。
これを用いて、Webサーバーにリクエストを送信するのは以下のようなコードになります。
環境情報 本稿は、以下の環境で検証しています。
項目 | バージョン |
OS | CentOS Linux release 7.8.2003 |
Kompira | ver.1.5.5.post7 |
処理の流れとしては以下のような想定です。 * 指定のURLにリクエストを送信し、応答がなければエラーを表示 * HTTPのステータスコードが200以外の場合にはエラーを表示 * 上記以外の場合には正常であると表示 まずWEBサーバーにリクエストを送信する方法ですが、Kompiraの組み込み関数urlopen()を使います。引数で指定した url に対して、HTTPリクエストを送信し、結果を取得します。
urlopen(url [, user, password, data, params, files, timeout, encode, http_method, verify, quiet, headers, cookies, charset, binary, proxies])[ ] 内の引数は省略可能です。各引数の意味は以下の通りです。
user, password | Basic認証によるアクセスを行います。 |
data | 送信データを辞書型の値として格納し、HTTPのPOSTリクエストを送信できます。 |
params | 辞書を渡すと URL のクエリ文字列として展開されます。 例えばurlopen(url=’http://example.com‘, params={key1=’value1’,key2=’value2’}) とすると、 実際にアクセスする URL はhttp://example.com?key1=value1&key2=value2となります。 |
files | アップロードするファイルを渡すことができます。ファイルは nameとdataというフィールドを持つ辞書,ファイル名とコンテンツのリスト, Kompiraサーバ上のファイル名,または添付ファイルフィールド,のいずれか の形式で指定することができます。 例: files={file={name=’filename’, data=’content’}} |
timeout | timeout には、タイムアウトするまでの時間を秒単位で指定します。 |
encode | エンコードタイプとして “json”を指定することができます。 data が指定され encode が “json” のとき、HTTP リクエストのContent-Type: ヘッダには自動的に application/json が設定されます。 encode引数を省略した場合、送信データはapplication/x-www-form-urlencoded形式でエンコードされます。 |
http_method | HTTPリクエストのメソッドを’GET’, ‘POST’, ‘PUT’, ’DELETE’, ‘HEAD’のいずれかから指定します。 http_methodを省略した場合、dataが指定されていない場合はGETメソッド, 指定されている場合はPOSTメソッドとなります。 |
verify | true を指定すると、指定した URL が https アクセスである時に SSL 証明書のチェックを行います。 不正な SSL 証明書を検出するとurlopen ジョブはエラーになります。verify のデフォルト値は false です。 |
quiet | true を指定すると、verify オプションが true 時に、https アクセスした際に表示される警告メッセージを抑止します。 |
headers | HTTPリクエストに設定するヘッダ情報を辞書型の値で渡すことができます。 |
cookies | サーバに渡すクッキーを辞書型の値で渡します。 |
charset | レスポンスとして期待する文字コードを指定することができます。 |
binary | trueを指定すると、Content-Typeによらずコンテンツをバイナリとして扱います。 |
proxies | HTTPリクエスト送信時のプロキシサーバ情報を辞書型の値で渡すことができます。 例: urlopen(‘http://www.kompira.jp’, proxies={‘http’: ‘http://10.10.1.10:3128’, ‘https’: ‘http://10.10.1.10:1080’}) |
フィールド名 | 意味 |
url | レスポンスのURL |
code | 結果ステータスコード |
text | レスポンスの内容(エンコード情報をもとにレスポンス本文をテキストにデコードしたもの。ただし、バイナリコンテンツの場合は空文字になります) |
content | レスポンスの内容(バイナリのままのレスポンスの本文) |
body | レスポンスの内容(コンテンツがバイナリであると判断したとき content と同じ値になり、テキストであると判断したときは text と同じ値になります) |
encoding | エンコード情報 |
headers | レスポンスに含まれるヘッダ情報(辞書型) |
cookies | サーバから渡されたクッキー値(辞書型) |
history | リダイレクトがあった場合にその履歴情報(リスト型) |
binary | バイナリコンテンツであるかの真偽値 |
|url = "http://www.kompira.jp/"| urlopen(url)続いて結果を判断して表示の切り替えを行います。 条件分岐はifブロックを用いて行います。
{ if (条件式) | then: (条件が真の場合の処理) else: (条件が偽の場合の処理) }urlopen()を実行した際、リクエストの送信に成功した場合には$STATUSが0に、失敗した場合は$STATUSが0以外になります。 よって、まずはurlopen()自体が成功したかどうかで分岐する処理をします。
|url = "http://www.kompira.jp/"| urlopen(url) => { if $STATUS != 0 | then: print("異常が検出されました") else: print("正常です") }具体的に失敗する場合は、urlopen()に指定したホスト名やIPアドレスが間違っていたり、ネットワークが接続できなかったということが原因であると考えられます。 さて、今回は「HTTPの応答コードが200以外の場合にはエラーを表示」としたいので、このコードだけでは十分ではありません。 ここにHTTPリクエストのステータスコードが200であるかどうかを確認する処理を追加してみましょう。 ifブロックで追加条件を指定する場合にはelif節を用います。
{ if (条件式) | then: (条件が真の場合の処理) elif (追加条件式) : (条件が偽、かつ追加条件が真の場合の処理) else: (条件が偽、かつ追加条件も偽の場合の処理) }これを用いて、HTTPのステータスコードが200以外の場合は異常とします。urlopen()の結果は$RESULTに辞書型で格納されており、”code”というキーで参照できます。
|url = "http://www.kompira.jp/"| urlopen(url) => { if $STATUS != 0 | then: print("異常が検出されました") elif $RESULT.code != 200 : print("異常が検出されました。エラーコードは %{code}" % $RESULT) else: print("正常です") }HTTPリクエストに対する応答が正常でなかったときは、$RESULT.codeが200以外となります。 例えば、存在しないURLパスを指定してしまったり、Webサーバー側で何らかのトラブルが発生している場合等があります。 今回の例ではHTTP GETリクエストを送信するのにurlopen()を使用しました。 上記ではレスポンス中のステータスコードを確認するだけにとどまっていますが、サイトのコンテンツ内容の取得はもちろん、ファイルのダウンロードや、外部のREST API呼び出しなど、urlopen()は様々な場面で使用することができます。
スタートガイド
Kompiraジョブフローの基礎
ジョブフローの簡単な例
Kompiraの機能
-
- フィールド修飾子でフィールドの入力内容に制約を設ける
- Kompiraでの文字列のパターンマッチング
- Kompira上でWikiページを作成する
- スケジューラを使って定期的にジョブを実行する
- ジョブフローを実行するフォームを作成する
- テーブル内の情報を選択して処理を実行する
- ジョブフローに権限設定をする
- ジョブフロー画面の各種設定
- Pythonで記述された処理をKompiraから呼び出す
- Kompiraオブジェクトのプロパティ,メソッド,フィールドを扱う
- Windowsでリモートスクリプトを実行する(その1)
- Windowsでリモートスクリプトを実行する(その2)
- Kompira上のデータをバックアップする(その1)
- Kompira上のデータをバックアップする(その2)
- Kompira上のデータをバックアップする(その3)
外部との連携
-
- Prometheusからの通知をKompiraで受信する
- Kompira cloud Pigeonを利用した通知電話の利用
- ネットワーク機器へのコマンド投入
- KompiraからWindowsGUIアプリケーションを操作する (1/2)
- メールを送信する
- メール受信をトリガーにしてジョブフローを実行する
- アラートメールをフィルタリングして転送する
- チャネルを利用して外部システムからデータを受信する
- Webページから内容を取得する
- Redmineへ新規チケットを登録する
- Redmineでのチケット作成をKompiraに通知する
- Kompira REST APIを利用して外部からジョブフローを実行する
- Kompira REST APIを利用して外部からオブジェクト情報を取得する
- KompiraからSlackに通知する
- Slackでの投稿をKompiraに通知する
- KompiraからTwilioで電話をかける
- Zabbixからの通知をKompiraで受信する
- syslogをKompiraで受信する
- snmptrapをKompiraで受信する
- KompiraでExcelファイルの読み書きをする
- KompiraでGoogle SpreadSheetの読み書きをする
- Active Directoryから情報を取得する
- Active Directoryにユーザーを登録する