
簡単な要約:ほとんどのプロセスを自動化したZabbixの実装の成功に関する記事はチュートリアルではありませんが、詳細が必要な場合は提供できます。
当社は長年にわたり、実績のある実証済みのモニタリングモニター+サボテンを使用してきました 。 しかし、すべてが流れます-すべてが変わります。 そして、私たちは大きく成長して、monitが対処しなくなりました。 検証サイクルは1分から10〜20分に拡大しましたが、これは受け入れられません。 monit開発者は私たちを助けることができなかったので、新しい監視システムを追加することを決定しました(監視が多すぎることはありません)。 ここでの「作業-触らない」という原則は、もはや機能しません。 どれだけ長く、短いが、選択はZabbixにかかった。 なんで? 彼らは読み、議論し、考え、そしてパフォーマーが決定しました。 各システムには長所と短所があり、これについては十分な情報があり、誰もが彼にとって便利なものを選択します。 たとえば、ZabbixでOracleDBを監視する方法はすでに知っています。 おそらくこの記事は誰かをZabbixの側に押しやるだろう-嬉しい。
したがって、私が追求した主な目標は、信頼性が高く、高速で、便利であり、不必要なジェスチャーが不要であることです(怠lazはすべてのエンジンです)。 彼らは鉄に煩わされず、ヘッツナーから古いex6サーバーを取り出し、そこにコンテナーを接続しました。
- CPU:Intel Corporation Xeon E3-1200プロセッサー
- RAM:16 GB
- HDD:SATAソフトウェアRAID 1
一般的にも一般的にも、それは印象的ではありませんが、少なくとも実装段階までは落ち着くでしょう。
Zabbix-serverはオフィスにインストールおよび設定されています。 手順+データベースを数回調整しました。 CentOS 6.5 nginx + apache + mysqlを使用しました。
ここで、自動化することを理解する必要があります(すべてですか?)。 これを行うために、私たちが使用する基本的なツールである構成管理システムとRedmineを紹介します。 そのため、構成管理システムからホストとプラグインテンプレートのリストを取得し(短縮しませんでした)、Redmineでタスクを自動的に実行する必要があります。
domain.ruクライアントなど、ホストリストの格納方法の例。 domain.ru.confファイルがあり、次の原則に従ってその中にサーバーのリストがあります。
d1.domain.ru: nginx.domain.d1 mysql.domain.d1 zabbix.domain.d1 role4.domain.d1
などなど。
Zabbixサーバーにサーバーを追加します。
このために、アクション-自動登録を使用します。 とても便利です。 構成管理システムを介して、Zabbixロールがあるサーバーにzabbix-agentをインストールし、config HostMetadata = d.domain.ruに登録します。 ドメインだけを実行できますが、d。 またはv。 ノードまたはコンテナに依存します。 他のすべての設定(サーバーホスト)を登録し、zabbix-agentとビジネス全体を再起動します。
サーバー上の詐欺。 ドメインごとに、ホストグループと自動登録ルール自体を作成する必要があります。 そして、それらの多くがあり、彼らさえ到着しています。 ここで、ZabbixApiは私たちを助けるために急いでいます。 それに関する文書は良いです、それは非常に簡単に習得されます。 もちろん、古いテンプレートを上書きせずにホストにテンプレートを追加することができないなど、わずらわしいことがいくつかあります...そして、だから誰がAPIで私の作業の例を必要とするでしょう(私は自分でPythonで別のlibを書いた)どこかに置くことができます。
ZabbixApiをマスターしたら、プロジェクトの現在の状態(domain.ru.confファイルがあります)を取得し、変更に応じてグループと自動登録ルールを作成/削除します。
ノードの自動登録ルールの例を示します。

さて、ここで標準テンプレートを使用してサーバーを追加しました。 次に、構成管理システムのサーバーの役割に応じて、追加のテンプレートを追加する必要があります。 最新の情報を取得し、それを標準と比較し、何かを行うかしないか、および標準を上書きするパーサーを作成します。 ここで、ZabbixApiではテンプレートを追加することはできず、残りは上書きされ、単に「追加しない」ことはできないという問題に遭遇しました。履歴とトリガーは削除されません。 同じスクリプトで、テンプレートにはあるが構成管理システムにはないホストを削除します。 これらのスクリプトをリストして記事をロードすることはありません。そこには多くの行があり、原則を説明しています。
最も簡単なのは、ホストを削除することです。ホストが標準にある場合は削除しますが、新しいデータによるとそうではありません。 追加すると、さらに悪いことです。つまり、標準にはないが、新しいデータによると、ホストは無視されます。 自動登録のルールを介してそれらを追加するためです。 主な仕事はテンプレートのリストです。 ホストに新しい役割がある場合は、1つの要求ですべての古いテンプレートと新しいホストを追加します。 1つの役割を削除した場合、まずそのようなテンプレートが存在するかどうかを確認し、存在する場合はそれを削除してホストから解放します。
ホストとテンプレートを追加するだけです! これで、サーバーを構成管理システムに追加し、必要な役割を登録するだけで、人生を楽しむことができます。
2番目のポイント、メール通知は興味深いものですが、Redmineのタスクには慣れています。 はい、Redmineはあらゆる種類のSMSを送信し、顧客はタスクのアクティビティを確認します。 RedmineにはAPIもあります。 処理:Zabbixアクションで設定します。これは、特定の条件下でZabbixサーバーでRemoteコマンドを実行します。 たとえば、クライアントサイトは応答の正しい部分文字列をチェックします。コマンドは次のようになります。
/srv/scripts/redmine_api_content.py {TRIGGER.DESCRIPTION} {TRIGGER.STATUS} {TRIGGER.SEVERITY} '{TRIGGER.NAME}' '{ITEM.NAME2} {ITEM.KEY2}: {ITEM.VALUE2}' >> /var/log/zabbix/redmine_api_content.log 2>&1
スクリプト{TRIGGER.DESCRIPTION}で-これはタスクが作成されるプロジェクトです。通常のチェック(pingなど)で、{HOST.NAME}がここから渡され、そこからプロジェクト識別子が生成されます。 {TRIGGER.STATUS}-問題があり、この名前のタスクがない場合は作成し、タスクがある場合はコメントを追加します。 OKでタスクがある場合-コメントを追加します。それ以外の場合は何もしません。 {TRIGGER.SEVERITY}-トリガーの重要度はタスクステータス(高、クラッシュ!)に変換されます。 {TRIGGER.NAME}-実際に何が起こっているのか:)これはタスクの名前になります。 {ITEM.NAME2} {ITEM.KEY2}:{ITEM.VALUE2}ここに、Webチェックの理由に関する情報(web.test.error)を追加します。
このスクリプトのリストを示します。python-redmineパッケージを使用します 。
#!/usr/bin/python import sys, time from redmine import Redmine from datetime import datetime, timedelta, date, time as dt_time if len (sys.argv) != 6: print "use params: project, status, priority, trigger_name, item_value." print sys.argv sys.exit("Erorr! Wrong arguments!") else: PROJECT_NAME = sys.argv[1] TRIGGER_STATUS = sys.argv[2] TRIGGER_PRIORITY = sys.argv[3] TRIGGER_NAME = sys.argv[4] ITEM_VALUE = sys.argv[5] REDMINE_URL = 'https://factory.example.com' REDMINE_KEY = 'API_KEY' # Redmine ADMINS_ID = 33 # priority = 4 if TRIGGER_PRIORITY == "Disaster": priority = 14 if TRIGGER_PRIORITY == "High": priority = 5 # Redmine redmine = Redmine(REDMINE_URL, key=REDMINE_KEY) # issueExist = redmine.issue.filter( project_id = PROJECT_NAME, subject = "PROBLEM: "+ TRIGGER_NAME ) # ( ) print datetime.now() print TRIGGER_STATUS +": "+ TRIGGER_NAME + "\n" + ITEM_VALUE # / if TRIGGER_STATUS == "PROBLEM": if issueExist: print "Issue already exist. Create comment" issue = redmine.issue.update( issueExist[0].id, notes = TRIGGER_STATUS +": "+ TRIGGER_NAME + "\n" + ITEM_VALUE ) else: print "Issue not exist. Create issue" issue = redmine.issue.create( project_id = PROJECT_NAME, subject = TRIGGER_STATUS +": "+ TRIGGER_NAME, tracker_id = 3, description = TRIGGER_STATUS +": "+ TRIGGER_NAME + "\n" + ITEM_VALUE, status_id = 1, priority_id = priority, assigned_to_id = ADMINS_ID ) if TRIGGER_STATUS == "OK": if issueExist: print "Add comments" issue = redmine.issue.update( issueExist[0].id, notes = TRIGGER_STATUS +": "+ TRIGGER_NAME + "\n" + ITEM_VALUE )
負荷で行ったことは、鉄の構成をもたらしたのは無駄ではありませんでした。 そのようなデータの場合:

サーバーの負荷は2〜3laの領域に維持されます。つまり、非常に価値があります。 RAMが小さいため、ディスクが最も被害を受けます。 もちろん、システムは新しいテンプレートとチェックで大きくなりすぎ、負荷が増加し、新しいハードウェアに移行する必要があります。 ちなみに、ちょっとしたアドバイス履歴からすべての履歴*テーブルを除外します。
合計:機能性と自動化された監視システムを備えた、機能するものを手に入れました。 タスクは問題に対して非常に積極的かつ敏感に作成されるため、
作成者:Centos-admin.ru、チーフシステム管理者、 Roman Burnashev