CentOS 7でAlertaを使用してZabbixアラートを監視する方法

前書き

Alertaは、複数の監視システムからのアラートを統合および重複排除し、それらを単一の画面で視覚化するために使用されるWebアプリケーションです。 Alertaは、Nagios、Zabbix、Sensu、InfluxData Kapacitorなど、多くの有名な監視ツールと統合できます。

このチュートリアルでは、Alertaを設定し、Zabbix監視システムからの通知を表示するように設定します。

前提条件

このチュートリアルを実行するには、次のものが必要です。

  • https://www.digitalocean.com/community/tutorials/initial-server-setup-with-centos-7 [CentOS 7初期サーバーセットアップガイド]に従ってセットアップされた2台のCentOS 7サーバー(sudo非ルートユーザーを含む)およびファイアウォール。

  • Zabbixを実行する最初のCentOSサーバーに、次のコンポーネントをインストールします。

  • Apache、MySQL、およびPHP、チュートリアルhttps://www.digitalocean.com/community/tutorials/how-to-install-linux-apache-mysql-php-lamp-stack-on-centos-7[How CentOS 7にLinux、Apache、MySQL、PHP(LAMP)スタックをインストールするには。

  • チュートリアルhttps://www.digitalocean.com/community/tutorials/how-to-install-and-configure-zabbix-to-securely-monitor-remote-servers-on-centos-7 [ [CentOS 7でリモートサーバーを安全に監視するためのZabbixのインストールおよび構成方法]および構成するための前提条件。

  • このチュートリアルでAlertaをインストールする2番目のCentOSサーバーに、次のコンポーネントをインストールします。

  • Nginx、チュートリアルhttps://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-centos-7[CentOS 7にNginxをインストールする方法]に従ってインストールします。

  • チュートリアルhttps://www.digitalocean.com/community/tutorials/how-to-install-mongodb-on-centos-7[CentOS 7にMongoDBをインストールする方法]に従ってインストールされたMongoDB。

  • 手順6で説明したようにAlertaウェブインターフェースを保護するには、GitHub組織の一部であるhttps://github.com/[GitHub]アカウントが必要です。 https://help.github.com/articles/creating-a-new-organization-account/ [このチュートリアル]に従ってGitHub組織を作成します。

ステップ1-AlertaのAPIサーバーのインストール

Alertaは、サーバーとWebインターフェースで構成されています。 Alertaサーバーは、アラートを保存および処理し、APIを介してJSONを提供します。 Alertaウェブインターフェースでは、ブラウザでアラートのリストを表示できるため、JSONを自分で解釈する必要はありません。 MongoDBとNginxをインストールしたサーバーに両方のコンポーネントをインストールします。 このチュートリアルでは、このマシンをAlertaサーバーと呼びます。 非rootユーザーとしてこのマシンにログインします。

Alertaコンポーネントをインストールする前に、 + pip +、Pythonパッケージマネージャー、およびPython開発ファイルをインストールする必要があります。 GitHubからAlertaのソースコードを取得できるように、Gitもインストールする必要があります。

次のコマンドを実行して、これらのソフトウェアパッケージをインストールします。

sudo yum install python-pip python-devel gcc git

これらのパッケージがインストールされると、Alertaをインストールする準備ができました。

最初に、 `+ pip +`を使用してAlertaのサーバーをインストールします。

sudo pip install alerta-server

開発モードでAlertaサーバーを実行して、インストールを確認します。

sudo alertad

次のようなものが見えるはずです。

Output     * Running on http://0.0.0.0:8080/ (Press CTRL+C to quit)

ブラウザで `+ http://:8080 +`を開いてAlerta API Webページを表示すると、使用例が表示されます。

サーバーが実行されていることを確認したら、 `+ CTRL + C +`を押してサーバーを停止します。 まもなくサービスとして設定します。

Alerta APIサーバーがインストールされているので、ウェブコンソールをインストールしましょう。

ステップ2-Alerta Web UIのインストール

Alertaには、ブラウザにメッセージを表示するダッシュボードがあります。 アラートメッセージが表形式で表示されるため、簡単に読んで並べ替えることができます。 ニーズに合わせてビューを構成できます。メッセージをフィルタリングしたり、任意のフィールドでソートしたりできます。 さらに、各メッセージの詳細情報を表示できます。 これを、Alerta APIサーバーをインストールしたサーバーと同じサーバーにインストールします。

最初にGithubからソースコードを取得します。

git clone https://github.com/alerta/angular-alerta-webui.git

次に、アプリケーションファイルをWebサーバーディレクトリにコピーします。

sudo mkdir -p /var/www/html/
sudo cp -r angular-alerta-webui/app/* /var/www/html/

デフォルトでは、Alertaのウェブインターフェースは、ポート「8080」で実行されている開発サーバーAPIと通信するように設定されています。 サーバーの `+ / api +`エンドポイントでAlertaサーバーのAPIを使用できるようにすることでこれを実稼働用に設定し、同じドメインからWebコンソールの静的コンテンツを提供します。これによりhttps://の問題を回避できます。 ru.wikipedia.org/wiki/Cross-origin_resource_sharing[CORS]、またはHTTPS混合コンテンツエラー。

`+ config.js`設定ファイルを開きます:

sudo vi /var/www/html/config.js

そして、 + endpoint`を + / api _`に設定します。

/var/www/html/config.js

   'use strict';

   angular.module('config', [])
     .constant('config', {
       'endpoint'    : "",
       'provider'    : "basic", // google, github, gitlab, keycloak or basic
   ...

他のオプションはデフォルト値のままにします。 これらの一部は、このチュートリアルの後半でOAuth認証を構成するときに変更します。

これで、必要なすべてのAlertaコンポーネントがインストールされました。 連携するようにセットアップするだけです。

手順3-Nginxの背後でuWSGIを使用してAlertaを実行します。

いくつかの簡単なテストに「+ alertad 」開発サーバーを使用できますが、実稼働環境での使用には適していないため、それを修正しましょう。 AlertaはPythonで作成されているため、WSGIサーバーを使用して実行する必要があります。 このチュートリアルでは、AlginaをNginxの背後でプロキシされるuWSGIアプリケーションとして、 ` http:/// api +`で実行します。

最初に、Pythonパッケージマネージャーを使用してhttps://uwsgi-docs.readthedocs.io/en/latest/[uWSGI]アプリケーションサーバーをインストールします。

sudo pip install uwsgi

次に、アプリケーションサーバーがアプリケーションと通信するために使用する `+ wsgi.py +`ファイルを作成します。 エディターでファイルを開きます。

sudo vi /var/www/wsgi.py

以下の行をファイルに追加します。これは、uWSGIにAlertaアプリケーションを呼び出す方法を指示します。

/var/www/wsgi.py

from alerta.app import app

次に、uWSGIサーバー自体を構成する必要があります。 uWSGIがソケットファイルを保存できるディレクトリを作成し、Nginxプロセスがアクセスできることを確認します。

sudo mkdir /var/run/alerta
sudo chown -R nginx.nginx /var/run/alerta/

次に、設定ファイル `+ / etc / uwsgi.ini +`を作成し、エディターで開きます。

sudo vi /etc/uwsgi.ini

このファイルは、Nginxと対話するためのソケットオプションとともに、アプリケーションの場所を指定します。

ファイルに次の行を追加します。

/etc/uwsgi.ini

[uwsgi]
chdir = /var/www
mount = /api=wsgi.py
callable = app
manage-script-name = true

master = true
processes = 5
logger = syslog:alertad

socket = /var/run/alerta/uwsgi.sock
chmod-socket = 664
uid = nginx
gid = nginx
vacuum = true

die-on-term = true

uWSGIオプションの完全なリファレンスリストは、http://uwsgi-docs.readthedocs.io/en/latest/Options.html [ドキュメント]で見ることができます。

次に、このアプリケーションのSystemdユニットを作成して、 `+ systemctl +`コマンドを使用して制御できるようにします。

sudo vi /etc/systemd/system/alerta-app.service

このユニットファイルには、ユニットを記述し、その動作を定義するいくつかの設定ディレクティブが必要です。 ファイルに次の行を追加します。

/etc/systemd/system/alerta-app.service

[Unit]
Description=uWSGI service for Alerta
After=syslog.target

[Service]
ExecStart=/usr/bin/uwsgi --ini /etc/uwsgi.ini
RuntimeDirectory=uwsgi
Restart=always
KillSignal=SIGQUIT
Type=notify
StandardError=syslog
NotifyAccess=all

[Install]
WantedBy=multi-user.target

これらの設定とSystemdユニットの操作方法の詳細については、https://www.digitalocean.com/community/tutorials/systemd-essentials-working-with-services-units-and-the-journal [this Systemdチュートリアル]。

これで、uWSGIサービスを実行できます。

sudo systemctl start alerta-app

次のコマンドを実行して、ステータスを確認できます。

systemctl status alerta-app

次の出力が表示されます。

Output    ●
      Loaded: loaded (/etc/systemd/system/alerta-app.service; disabled; vendor preset: disabled)
      Active:  (running) since Fri 2017-04-07 12:15:21 EEST; 2min 25s ago
    Main PID: 15935 (uwsgi)
      Status: "uWSGI is ready"
      CGroup: /system.slice/alerta-app.service
              ├─15935 /usr/bin/uwsgi --ini /etc/uwsgi.ini
              ├─15946 /usr/bin/uwsgi --ini /etc/uwsgi.ini
              ├─15947 /usr/bin/uwsgi --ini /etc/uwsgi.ini
              ├─15948 /usr/bin/uwsgi --ini /etc/uwsgi.ini
              ├─15949 /usr/bin/uwsgi --ini /etc/uwsgi.ini
              └─15950 /usr/bin/uwsgi --ini /etc/uwsgi.ini

ご覧のとおり、サービスはデフォルトで無効になっています。つまり、自動的に開始されません。 有効にします:

sudo systemctl enable alerta-app

最後に、 `+ / api +`に対するすべてのリクエストを実行中のuWSGIサーバーにリダイレクトし、NginxでWebフロントエンドを提供するようにNginxを設定する必要があります。

デフォルトのNginx設定ファイルを変更するのではなく、Alerta設定を独自のファイルに配置します。

sudo vi /etc/nginx/conf.d/alerta.conf

次の内容をファイルに追加します。 `+ server_name +`の値をAlertaサーバーのIPアドレスに置き換えてください。

/etc/nginx/conf.d/alerta.conf

server {
   listen  80;
   server_name  ;

   location /api { try_files $uri @api; }
   location @api {
   include uwsgi_params;
       uwsgi_pass unix:/var/run/alerta/uwsgi.sock;
       proxy_set_header Host $host:$server_port;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   }

   location / {
       root /var/www/html;
   }

   error_page  500 502 503 504  /50x.html;
   location = /50x.html {
       root  /usr/share/nginx/html;
   }
}

Nginxサーバーブロックの詳細については、https://www.digitalocean.com/community/tutorials/how-to-set-up-nginx-server-blocks-on-centos-7 [チュートリアル]をご覧ください。

ファイルを保存し、エディターを終了します。

次に、Nginx設定をテストして、タイプミスや設定ミスがないことを確認します。

sudo nginx -t

設定にエラーがない場合、次の出力が表示されます。

Output    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
   nginx: configuration file /etc/nginx/nginx.conf test is successful

別の何かが表示された場合は、エラーに対処して再試行してください。

これで、Nginxをリロードして新しい設定を適用できます。

sudo nginx -s reload

ブラウザで「+ http:// +」リンクを開き、Alertaダッシュボードを表示します。

画像:https://assets.digitalocean.com/articles/alerta_zabbix_centos7/vlrsF6x.png [Alerta dashboard]

公的にアクセス可能なサーバーにAlertaをインストールする場合、認証を要求するように設定する必要があります。 そのためのいくつかの方法を見てみましょう。

ステップ4-基本認証でAlertaを保護する

デフォルトでは、Alertaサーバーのアドレスを知っている人は誰でもメッセージを表示できます。 テスト環境では許容されますが、実稼働環境では許容されません。 認証を強制するには、 `+ alertad.conf +`設定ファイルを開きます:

sudo vi /etc/alertad.conf

ファイルに次のコードを追加します。

/etc/alertad.conf

AUTH_REQUIRED = True
SECRET_KEY = ''

`+ SECRET_KEY +`を選択したランダムな文字列に設定します。 ファイルを保存し、エディターを終了して、uWSGIサービスを再起動します。

sudo systemctl restart alerta-app

Alerta Web UI Webページをリロードし、メニューで*ログイン*リンクを選択します。 「続行するにはログインしてください」というメッセージが表示されます。 [アカウントの作成]リンクをクリックして、新しいアカウントを作成します。 プロセスを完了すると、Alertaダッシュボードにアクセスできます。

認証を有効にすると、Alerta APIにアクセスするためのAPIキーが必要になります。 構成*メニューを選択し、 APIキー*を選択します。

APIへのアクセスが必要なアプリケーションの名前を入力します。 このチュートリアルでは、* zabix と入力します。 次に、ドロップダウンから read-write を選択し、 Create new API Key *ボタンをクリックします。 新しいキーが作成され、その詳細が表示されます。 このキーをコピーします。後で必要になります。

または、OAuth認証を設定し、GitHubまたはGoogleの資格情報を使用してAlertaユーザーインターフェイスにログインできます。 基本認証で十分な場合は、次の手順をスキップできます。

ステップ5-OAuthでAlertaを保護する(オプション)

AlertaのWeb UIは、Google、GitHub、Gitlab、KeycloakのOAuth認証をサポートしています。 GitHubアカウントを介してログインを構成するため、先に進む必要があります。

最初に、GitHubで新しいアプリケーションを登録します。 GitHubアカウントにログインし、https://github.com/settings/applications/new [新しいアプリケーションページ]に移動します。

次の詳細をフォームに入力します。

  1. アプリケーション名*に Alerta *または適切な説明的な名前を入力します。

  2. *ホームページのURL *には、「+ http:/// +」を使用します。

  3. *承認コールバックURL *に `+ http:/// +`を入力します。

  4. [*アプリケーションの登録]をクリックして、設定を保存します。

  5. 次の画面で提供される* Client ID および Client Secret *の値をコピーします。

次に、Alerta構成を編集してOAuth認証を有効にします。 構成ファイルを開きます。

sudo vi /etc/alertad.conf

ファイルの最後に次の設定を追加します。

/etc/alertad.conf

OAUTH2_CLIENT_ID = ''
OAUTH2_CLIENT_SECRET = ''
ALLOWED_GITHUB_ORGS = ['']

これらの値には、それぞれGitHubクライアントID、GitHubクライアントシークレット、およびGitHub組織を使用します。

ファイルを保存し、エディターを終了して、uWSGIサービスを再起動します。

sudo systemctl restart alerta-app

次に、Webインターフェースの認証プロバイダーを変更します。 構成ファイルを編集します。

sudo vi /var/www/html/config.js

次のセクションを見つけて、プロバイダーを「+ basic 」から「 github +」に変更し、GitHubクライアントIDを入力します。

/var/www/html/config.js

   ...


   ...

Alerta Web UIにアクセスするには、「+ http:// +」を開きます。 今回は、「ログインして続行してください」というメッセージが表示されます。 [ログイン]ボタンをクリックしてログインすると、アプリケーションからGitHubアカウントへのアクセスを許可するよう求められます。 アクセスを許可すると、ログインできます。

これで、Alertaが正しくセットアップされて機能しているかどうかを確認する簡単なテストを実行できます。

ステップ6-テストメッセージの送信

Alertaの統合コマンドラインツールを使用して、テストアラートを送信します。 最初に、コマンドラインクライアントをインストールします。

sudo pip install alerta

次に、以前に設定したAlerta APIエンドポイントと、使用するAPIキーを定義する設定ファイルを作成します。 エディターで新しいファイルを作成します。

vi ~/.alerta.conf

以下をファイルに貼り付けます。

〜/ .alerta.conf

[DEFAULT]
endpoint = http://
key=

`+ key +`オプションには、ステップ4で設定したAPIキーを使用します。

これで、テストアラートを送信できます。

alerta send --resource webserver01 --event down --environment Production --service Website01 --severity major --text "Web server 01 is down." --value ERROR

次のような出力が表示されます。

Output1015fca2-eff6-441d-8c66-6abf9368b830 (indeterminate -> major)

ブラウザで「+ http:// +」にアクセスすると、ダッシュボードに次の図のようなメッセージが表示されます。

image:https://assets.digitalocean.com/articles/alerta_zabbix_centos7/SC6mZ6A.png [テストアラートを表示するアラート]

メッセージをクリックして詳細を表示できます。

Alertaサーバーが起動し、新しいメッセージを待っています。 アラートをAlertaに送信するように、Zabbix監視システムを設定しましょう。

ステップ7-Zabbix-Alerta Gatewayのインストール

この手順では、通知メッセージをAlertaに送信するようにZabbix監視システムを変更します。

非rootユーザーとしてZabbixサーバーマシンにログインします。

デフォルトでは、Zabbixは電子メール、SMSまたはJabberメッセージで通知を送信できますが、スクリプトを使用して新しい通知ハンドラーを追加できます。 Alerta開発者は、既製の通知スクリプトを提供します。 これをインストールするには、https://github.com/alerta/zabbix-alerta [zabbix-alerta]リポジトリを複製し、インストールスクリプトを使用してインストールします。

git clone
cd zabbix-alerta
sudo python setup.py install

次に、Zabbixがアラートスクリプトを保存するディレクトリに、 `+ zabbix-alerta `スクリプトのシンボリックリンクを作成します。 そのパスは ` / etc / zabbix / zabbix_server.conf +`設定ファイルで見つけることができます:

sudo grep -e '^AlertScriptsPath' /etc/zabbix/zabbix_server.conf

次のような出力が表示されます。

OutputAlertScriptsPath=/usr/lib/zabbix/alertscripts

デフォルトでは、Zabbixは `+ / usr / lib / zabbix / alertscripts +`でスクリプトを探します。 次のコマンドを実行して、シンボリックリンクを作成します。

sudo ln -s `which zabbix-alerta` /usr/lib/zabbix/alertscripts

Alerta統合を構成しましょう。 `+ http:/// zabbix / +`でZabbixウェブインターフェースにログインします。

メインメニューで[管理]をクリックし、[メディアタイプ]を選択して、右上隅の[メディアタイプの作成]ボタンをクリックします。

次の詳細をフォームに入力します。

  • *名前*には、「+ Alerta +」と入力します。

  • *タイプ*では、ドロップダウンから*スクリプト*を選択します。

  • *スクリプト名*には、「+ zabbix-alerta +」と入力します。

  • *スクリプトパラメータ*には、次の値を入力します。

  • + {ALERT.SENDTO} +

  • + {ALERT.SUBJECT} +

  • + {ALERT.MESSAGE} +

  • [有効]チェックボックスがオンになっていることを確認します。

[追加]ボタンをクリックして、新しいメディアタイプを作成します。

次に、ユーザーアカウント用の新しいメディアを追加します。 メインメニューで[管理]を選択し、[ユーザー]を選択します。 ユーザー名をクリックし、[メディア]タブを選択します。 次の詳細を入力してください

  • * Type には、 Alerta *を選択します。

  • *送信先*には、「+ http:/// api; +」と入力します。

手順4で作成したAPIキーを使用します。

*更新*ボタンをクリックして、構成を保存します。

次に、メッセージを送信するアクションを構成します。 メインメニューで[構成]を選択し、[アクション]を選択します。 [アクションの作成]ボタンをクリックします。

[アクション]タブで、[名前]フィールドの値を「+ Forward to Alerta +」に設定します。

[操作]タブで、次のオプションを設定します。

  • *デフォルトの件名*を + {TRIGGER.STATUS}に設定:{TRIGGER.NAME} +

  • * Default message *には、次のテキストを入力します。

Default message    resource={HOST.NAME1}
 event={ITEM.KEY1}
 environment=Production
 severity={TRIGGER.SEVERITY}
 status={TRIGGER.STATUS}
 ack={EVENT.ACK.STATUS}
 service={TRIGGER.HOSTGROUP.NAME}
 group=Zabbix
 value={ITEM.VALUE1}
 text={TRIGGER.STATUS}: {TRIGGER.NAME}
 tags={EVENT.TAGS}
 attributes.ip={HOST.IP1}
 attributes.thresholdInfo={TRIGGER.TEMPLATE.NAME}: {TRIGGER.EXPRESSION}
 type=zabbixAlert
 dateTime={EVENT.DATE}T{EVENT.TIME}Z

Zabbixは、問題を検出すると、指定された形式でメッセージを送信します。 中括弧内の式を対応する値に置き換えます。 これらすべてのフィールドは、Alertaがアラートを受信して​​正しく表示するために必要です。

次に、* Operations フィールドの New *をクリックして、新しい操作を作成します。 次の値をフォームに挿入します。

  • *ユーザーに送信*には、「++」と入力します。

  • [のみ送信]の場合、ドロップダウンボックスから[* Alerta *]を選択します。

次に、「回復操作」タブを選択し、「デフォルト」メッセージを次のように変更します。

Recovery operationsresource={HOST.NAME1}
event={ITEM.KEY1}
environment=Production
severity={TRIGGER.SEVERITY}
status={TRIGGER.STATUS}
ack={EVENT.ACK.STATUS}
service={TRIGGER.HOSTGROUP.NAME}
group=Zabbix
value={ITEM.VALUE1}
text={TRIGGER.STATUS}: {ITEM.NAME1}
tags={EVENT.RECOVERY.TAGS}
attributes.ip={HOST.IP1}
attributes.thresholdInfo={TRIGGER.TEMPLATE.NAME}: {TRIGGER.EXPRESSION}
attributes.moreInfo=<a href="http://x.x.x.x/tr_events.php?triggerid={TRIGGER.ID}&eventid={EVENT.RECOVERY.ID}">Zabbix console</a>
type=zabbixAlert
dateTime={EVENT.RECOVERY.DATE}T{EVENT.RECOVERY.TIME}Z

このメッセージは前のメッセージに似ています。 問題がなくなると、このメッセージが送信されます。

*追加*ボタンをクリックして設定を完了します。

ZabbixはAlertaにアラートを送信する準備ができています。 生成してみましょう。

ステップ8-Zabbix-Alerta統合を検証するためのテストアラートの生成

テストアラートを生成して、すべてが接続されていることを確認しましょう。 デフォルトでは、Zabbixはサーバーの空きディスク容量を追跡します。 Zabbixのファイルシステム使用状況アラートをトリガーするのに十分な大きさの一時ファイルを作成します。

まだ接続していない場合は、Zabbixサーバーにログインします。

次に、サーバー上の空き容量を確認します。 `+ df +`コマンドを使用して確認できます:

df -h

次のような出力が表示されます。

Output    Filesystem      Size  Used Avail Use% Mounted on
   /dev/vda1        20G  1.5G      9% /

空き容量に興味があります。 この場合、空き領域は「+ 18GB +」です。 空き容量は異なる場合があります。

`+ fallocate +`コマンドを使用して、利用可能なディスク容量の80%以上を占めるファイルを作成します。これはアラートをトリガーするのに十分なはずです:

fallocate -l 16G /tmp/temp.img

数分以内に、Zabbixは空きディスク容量についてのアラートをトリガーし、設定したアクションを実行して、アラートメッセージをAlertaに送信します。 Alertaダッシュボードにこの新しい通知が表示されます。

image:https://assets.digitalocean.com/articles/alerta_zabbix_centos7/sLlRWM3.png [Zalbixからの空き領域アラートを表示するアラート]

アラートが機能していることがわかったので、作成した一時ファイルを削除して、ディスク容量を再利用できるようにします。

rm -f /tmp/temp.img

しばらくすると、Zabbixが回復メッセージを送信します。 アラートはメインダッシュボードから消えますが、* Closed *を選択すると、すべてのクローズイベントを表示できます。

image:https://assets.digitalocean.com/articles/alerta_zabbix_centos7/zWuB6Hz.png [Alertaのクローズドアラート、解決された空き領域アラートを表示]

イベント行をクリックして、詳細を表示できます。

結論

このチュートリアルでは、Alertaをインストールして設定し、通知を送信するようにZabbixを設定しました。 その結果、アラートを追跡する便利なツールが手に入りました。 将来、他の通知ソースを追加して、さまざまな監視システムからの情報を統合および一元化できます。

前の投稿:Ubuntu 18.04でmdadmを使用してRAIDアレイを作成する方法
次の投稿:Natural Language Toolkit(NLTK)を使用してPython 3で感情分析を実行する方法