Zabbix + Communigate Pro:低レベルの検出とアカウント監視

まえがき



最初の出版物で、 ZabbixのCommunigate Pro(CGP)メールサーバーのキューの監視を設定する方法について説明しました。 今日は、 低レベル検出(LLD) Zabbixを使用してドメイン内のユーザー数を監視した私の小さな経験についてお話します。 私の意見では、実際的な意味はユーザーの数を監視することであるとすぐに言わなければなりません。 これは、私自身の喜びと、すべてのサーバーを介さずに「何人のユーザーがいるのか」という質問に上司に迅速に回答するために行われました。



低レベルの発見



LLDは、さまざまなコンピューター設定のデータ要素、トリガー、およびグラフを自動的に作成する機能を提供します。 たとえば、Zabbixはファイルシステムまたはネットワークインターフェースに関するデータを自動的に収集し、この情報に基づいて監視用のデータアイテムを構築できます。

LLDを可能にするには、Zabbixエージェント設定にユーザーパラメーターを追加する必要があります。その要求は、監視サーバーにJSONオブジェクトのリストを返します。たとえば、ネットワークインターフェースの場合、それぞれが1つのインターフェースに対応します。



挑戦する



CGPサーバーのすべてのドメインのユーザー数+サーバー上のユーザーの総数を「監視」できるようにする必要があります。

このタスクの実装は、次の手順で構成されます。

1. LLDのCGPドメインのリストを取得するスクリプト。

2.ドメインのアカウント数を取得するスクリプト。

3.これらのスクリプトをサーバーに配置します。

4. Zabbixエージェントを設定します。

5.アカウントの数を監視するために、Zabbixでテンプレートを作成します。

6.このテンプレートをZabbixの目的のノードに追加します。



重要なお知らせ! この場合に使用されるスクリプトでは、作業に使用する名前を持つユーザーに「すべてのドメインとアカウント設定を変更できる」アクセス権が必要です(詳細はこちらを参照)。 これらは、ユーザーのドメインを単純にクリアできる非常に深刻な権利です。 したがって、あなたがすることすべて-あなたはあなた自身の危険とリスクで行います。



1. LLDのCGPドメインのリストを取得するスクリプト



どちらのスクリプトもCLI.pm pearlライブラリを使用しており、これによりCommunigate Pro APIにアクセスできます

最初のスクリプトには、サーバードメインのリストを返す1つの単純なListDomains関数が必要です。

このスクリプトの重要な機能は、JSON形式で応答を返す必要があることです。 追加の依存関係が生成されないように、真珠に個別のJSONライブラリ(たとえば、JSON :: DWIW)を配置したくありませんでした。 この場合、Perlツールを完全に省くことができると判断しました。

スクリプトの主な機能は、ヘルプに記載されています。



discovery_cgp_domains [-h hostname] [-p port] -u username -w password discovery_cgp_domains -h|--help -h hostname - address of DNS name of the server (Default: localhost) -p port - port for connection (Default: 106) -u username - account on CGatePro with grant 'Can Modify All Domains and Accounts Settings' -w password - user password --help - print this help --debug - show debug lines
      
      





スクリプトのソースコードはこちらにあります

使用例:

 torwald@torwald-station:~/cgp_utility$ ./discovery_cgp_domains.pl -h cgp.server.org -u cgpmonitor -w password { "data":[ {"{#CGPDOMAIN}":"main.domain.org"}, {"{#CGPDOMAIN}":"support.domain.org"}, {"{#CGPDOMAIN}":"hosting.domain.org"} ] }
      
      





ご覧のとおり、回答には、「#CGPDOMAIN」という1つの属性を持つオブジェクトのリストが含まれており、それぞれがサーバー上の1つのドメインを表しています。 属性名は、LLD構成でさらに使用されます。



2.ドメインのアカウント数を取得するスクリプト。



2番目のスクリプトで、別の関数-ListAccounts(ドメイン)を追加します。 名前が示すように、ドメインユーザーのリストを返します。 CGP APIでユーザー数を取得するための個別の関数はないため、ユーザーリストの長さの計算を使用します。

さらに、スクリプトはサーバー上のすべてのユーザーの数を要約できます。 これを行うには、-d TOTALオプションを指定して呼び出す必要があります。

すべてのスクリプトオプションもヘルプに表示されます。

 count_cgp_account [-h hostname] [-p port] -u username -w password [-d domain] count_cgp_account -h|--help -h hostname - address of DNS name of the server (Default: localhost) -p port - port for connection (Default: 106) -u username - account on CGatePro with grant 'Can Modify All Domains and Accounts Settings' -w password - user password -d domain - domain name to count accounts; if you use -d TOTAL then you'll get number of all accounts on server --help - print this help --debug - show debug lines
      
      





このスクリプトは、サーバー上のユーザー数を表示するだけです。 作業例:

 #    hosting.domain.org torwald@torwald-station:~/cgp_utility$ ./count_cgp_account.pl -h cgp.server.org -u cgpmonitor -w password -d hosting.domain.org 6537 #    torwald@torwald-station:~/cgp_utility$ ./count_cgp_account.pl -h cgp.server.org -u cgpmonitor -w password -d TOTAL 6559 #    -    torwald@torwald-station:~/cgp_utility$ ./count_cgp_account.pl -h cgp.server.org -u cgpmonitor -w password 6559
      
      





ソースコードはここにあります



3.サーバーにスクリプトを配置します



この場合、すべてが非常に簡単です。

  1. ユーティリティを/ usr / local / binに配置し(拡張機能を「切断」することができます)、このユーティリティを実行するzabbixエージェント(デフォルトでは-zabbix)の権限をユーザーに付与します。
  2. CLI.pmモジュールは、zabbixに代わって起動されるPerlインタープリターに「見える」場所に配置します。 これは/ usr / local / lib / perl5です。
  3. CGP管理インターフェイスで、「すべてのドメインとアカウントの設定を変更できる」権限を持つユーザー(たとえば、cgpmon)を作成します。
  4. zabbixユーザーの下から接続を確認します。




4. Zabbixエージェントを構成する



1.次の設定をエージェント構成ファイルに追加します。



 # /etc/zabbix_agentd.conf # low-level discovery  Communigate UserParameter=cgp.domains.discovery,/usr/local/bin/discovery_cgp_domains -u cgpmon -w password #    UserParameter=cgp.domain.accounts.count[*],/usr/local/bin/check_cgp_queue -u cgpmon -w password -d $1
      
      







特に、このパラメーターと「アスタリスク」を使用した構文の詳細については、 ドキュメントを参照してください

したがって、監視エージェントを使用して、ドメインのリストとこのドメイン内のアカウントの数を取得できます。



2.エージェントを再起動して、新しい設定を有効にします。



5. Zabbixテンプレートの構成



アカウント監視で作業するために、別のテンプレート-Template Communigate Domains Infoを作成しました。



品目グループ



まず、テンプレートにデータ要素のグループを作成する必要があります。 私の場合、これはCGP.DomainsInfoです。 これにより、LLD後に生成されたすべてのデータ要素を1か所で収集できます。



発見ルール



テンプレートを開き、ディスカバリルールに移動して、新しいルールを作成します。



マクロフィールドに注意してください。 その中に属性名「{#CGPDOMAIN}」を書きます。 思い出すと、ドメインのリストを取得するスクリプトによって返されるすべてのオブジェクトに含まれています。 そして、すべてのプロトタイプ(データ、トリガー、グラフ)が使用するのは、この属性の値です。 多くの場合、サーバーに対してLLDを実行する価値はありません。1日1回で十分です。 私の場合、それは月に少なくとも1回は配信できる方法です。



データ項目プロトタイプ



これらの準備が完了したら、データ要素のプロトタイプに進み、新しいプロトタイプを作成します。



ここでは、[名前]フィールドと[キー]フィールドでの文字列「{#CGPDOMAIN}」の使用にも注意を払う必要があります。 新しいデータ項目を生成するとき、この文字列は対応するドメイン名に置き換えられます。 また、作成された要素のグループを示すことを忘れないでください。そうしないと、「ホームレス」データ要素の大きなリストを取得する危険があります。



必要に応じて、プロトタイプトリガーを規定できます。 たとえば、アカウントを作成および削除するためのトリガー。

総ユーザー数のルール



すべてのプロトタイプを作成した後、サーバー上のアカウントの総数を監視するルールをテンプレートに追加します。





急いでテンプレート



既製のテンプレートを急いで使用する場合は、 こちらをご覧ください



6.ノードをテンプレートに追加します



ここでは複雑なこともRTFMもありません。 追加後、LLDが機能するまで待機し、ユーザー数の監視を取得します。



あとがき



私が言ったように、なぜこの監視が必要なのかはわかりません。 これまで。 賢い人がこのデータで何ができるか教えてくれることを願っています。

さらに、このような実装は原則として安全ではありません。なぜなら、 Communigateアカウントのパスワードを設定で適切な権限で保持する必要があります。 しかし、これは原則として回避できます。

また、OSコマンドを使用してもほぼ同じ情報を取得できます。

たとえば、CommunigateディレクトリのDomainsディレクトリをスキャンするだけで、ドメインのリストを取得できます。

また、ユーザー数は、ドメイン内のusername.macnt形式のディレクトリ数を再帰的に計算することです。

しかしこの場合、Zabbixを使用してCommunigateで情報を自動的に収集する方法の一般的な原則を示したかったのです。 そして、さまざまな方法で必要なデータを取得する方法。



All Articles