Enterprise 技術情報 Enterprise Technical information
外部との連携 Prometheusからの通知をKompiraで受信する
“Prometheus”はOSSのメトリクスベースのシステム監視ツールで、実行ファイルをコピーして設定を入れるだけで導入できるなど、最近、人気が出てきたツールの一つです。
Prometheusのアーキテクチャーは下図のように、監視を行うPrometheusサーバーとそれらと連携するエコシステムが形成されています。
連携の構成
また稼働環境としては、Ubuntu Server 19をインストールしたLinux機2台を用意し、Prometheusサーバーと監視対象サーバーとします。
インストールしたPrometheusのバージョンはバージョンは 2.7.1です。
Prometheus関連では、本稿では以下の3つのコンポーネントを利用します。
名称 | 説明 |
prometheus | 監視サーバー上で稼働するプログラム
定期的にexporterをポーリングして情報収集を行う。 取得したデータはTSDBなどに記録する。 |
exporter | 監視対象サーバー上で稼働させるプログラム
リクエストに応じてリソース情報を返すAPI |
Alertmanager | 監視サーバー上で稼働するプログラム
prometheusで監視中の情報が閾値を超えた場合などのアラートを処理 メール、メッセンジャーソフトなど、アラートの送信先に対して中継する。 |
監視対象サーバーをダウンさせて、Prometheusの監視で検知。障害通知をAlert Managerを通じて、KompiraのREST APIに向けて送信します。
以下はお使いの環境に合わせてコマンドなどを読み替えてください。
prometheusのインストール
基本的にはPrometheus公式のダウンロードページより、実行ファイルをダウンロードしてPrometheus機にコピーすれば動かす事は可能です。
https://prometheus.io/download/
本稿ではUbuntuを利用しているため、aptコマンドを利用してインストールします。
まずはPrometheusサーバーに以下のプログラムをaptコマンドでインストールします。
$ sudo apt install prometheus $ sudo apt install prometheus-alertmanager
この場合、実行ファイルは /usr/bin/prometheusに、設定ファイルなどは /etc/prometheus にコピーされます。
/etc/prometheus/prometheus.yml は用意されているサンプルファイルを一部書き換えます。
global: scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute. evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute. external_labels: monitor: 'example' alerting: alertmanagers: - static_configs: - targets: ['localhost:9093'] rule_files: - "rules.yml" scrape_configs: - job_name: 'prometheus' scrape_interval: 5s scrape_timeout: 5s static_configs: - targets: ['localhost:9090'] - job_name: node static_configs: - targets: ['(監視対象サーバーのIPアドレス):9100']
監視のルールは別途にrules.yml を作成しました。監視対象機が5秒以上ダウンした状態が続くと発火して、通知を行います。
groups: - name: example rules: - alert: InstanceDown expr: up{job='node'} == 0 for: 5s labels: severity: critical annotations: summary: "Instance {{ $labels.instance }} down" description: "{{ $labels.instance }} of job {{ $labels.job }} is down"
Alert Managerの設定は alertmanager.yml で行いますが、こちらはKompira APIの設定と関係するために後述します。
設定を変更しましたら、それぞれプログラムを再起動して反映させます。
$ sudo systemctl restart prometheus $ sudo systemctl restart prometheus-alertmanager
続いて監視対象サーバーにnode exporterをインストールします。
$ sudo apt-get install prometheus-node-exporter
こちらは /usr/bin/prometheus-node-exporter というプログラムが動いていればOKです。psコマンド等で確認し、もし動作していないようでしたら起動してください。
$ sudo systemctl start prometheus-node-exporter
ここまで出来ましたらPrometheusは稼働を始め、監視対象サーバーの情報を取得しています。
http://(Prometheusサーバーのアドレス):9090/graph
このURLで Prometheus の画面にアクセスできますので、”node_load1″や”node_cpu_seconds_total”など、適当なメトリックを指定して”Execute”ボタンをクリックし、値が取得出来ている事を確認してください。
Kompira REST APIの準備
Prometheusからの通知を受け取るKompira Enterprise側のAPIの設定を行います。本稿ではKompiraはrootアカウントで設定を行っています。
画面右上のroot>ユーザー情報>「編集」ボタンをクリック>(画面下の)「REST API有効化」スイッチをON >「保存」ボタンをクリック
情報画面の「REST APIトークン」欄の「トークンを表示する」をクリックして、トークンを表示して、トークン文字列を控えておいてください。
本稿ではデフォルトのAlertチャネルオブジェクトに対するリクエストとして通知を受け取ります。この場合のURLは以下の通りになります。
http://(Kompiraサーバーのアドレス)/system/channels/Alert.send?format=json&token=(REST APIトークン文字列)
Alert Managerの設定
あらためてAlert Managerの設定を行います。通知の手段としてはメールやWeChatなどのメッセンジャーへの転送など、いろいろな手段が利用出来ますが、ここではWebhookを利用して、PrometheusからKompiraのREST APIを呼び出します。
ここでは receiverを”kompira”と名付け、Prometheusから受け取った通知より KompiraのAPIを呼び出します。
設定は /etc/prometheus/alertmanager.yml に記載します。(この例では実験のためインターバル時間などを極端に短くしています。)
global: route: receiver: kompira group_wait: 5s group_interval: 5s repeat_interval: 1m group_by: [alertname] receivers: - name: "kompira" webhook_configs: - url: 'http://(Kompiraサーバーのアドレス)/system/channels/Alert.send?format=json&token=(REST APIトークン文字列)'
設定を変更しましたら、Alert Managerのプロセスを再起動します。
$ sudo systemctl restart prometheus-alertmanager
通知を受信するジョブフローの作成
Kompira側ではチャネルで受信した通知を表示するジョブフローを作成して実行します。
</system/channels/Alert> -> print($RESULT) -> self()
障害のテスト
さて実際に監視対象サーバーをダウンさせて、Prometheusに検知させます。サーバーが正常時にはPrometheusのAlerts画面がグリーンになっています。
サーバーをダウンさせた後は、”State”はPENDING → FIRING になり、Alertsは赤に変わります。
KompiraのAlertチャネルでは、例えば以下のように Prometheusからの通知を受け取ります。
上記の通りに、JSON形式にて通知を受信できました。
実務上はここからノードの名称やアラート名称などを抽出してから判断させて、以降の処理を記載する必要があります。上記のジョブフローの例では $RESULT 変数の上記のJSONデータが辞書型で格納されています。
例えば、上記の例でアノテーションの詳細(description)のみを表示する場合には、Kompiraの受信ジョブフローは以下の様に記述できます。
< /system/channels/Alert > -> print($RESULT.commonAnnotations.description) -> self()
同様にラベル値などを抽出する事も容易ですので、上記の例では rules.yml で定義した監視の発火条件に合わせて、管理者への通知や監視対象サーバーの情報収集、障害対応の一時処理などを追加してください。
この他、Alert Managerからの通知手段としてはメールなども使えますので、Kompiraからはメールチャネルを経由した連携方法も可能でしょう。(この場合は alertmanager.yml に smtpの設定を行う事になります。)
スタートガイド
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にユーザーを登録する