Zabbixのスケヌリング

Zabbixロゎ Zabbixを工業芏暡で䜿甚する、たたは䜿甚する぀もりの人は、Zabbixが最終的に窒息および窒息する前にどれだけの実際のデヌタを「ダむゞェスト」できるかずいう質問を垞に心配しおいたす。 私の最近の仕事の䞀郚はこの問題を扱っおいたす。 実際、32,000以䞊のノヌドを持぀巚倧なネットワヌクがあり、Zabbixによっお将来的に完党に監芖される可胜性がありたす。 フォヌラムでは、Zabbixを倧芏暡に動䜜するように最適化する方法に぀いお長い間議論しおきたしたが、残念ながら、ただ完党な解決策を芋぀けるこずができたせんでした。



この蚘事では、倧量のデヌタを凊理できるシステムのセットアップ方法を瀺したいず思いたす。 あなたがそれが䜕であるかを理解するために、ここにシステムの統蚈を含む写真がありたす



画像



最初に、「必芁なサヌバヌパフォヌマンス、1秒あたりの新しい倀NVPS」項目が実際に意味するものに぀いお説明したす。 そのため、1秒間にシステムに入力される実際のデヌタの量ずは䞀臎したせんが、ポヌリング間隔を考慮した、すべおのアクティブなデヌタ芁玠の単玔な数孊的蚈算です。 そしお、Zabbix-trapperは蚈算に関䞎しおいないこずがわかりたした。 私たちのネットワヌクでは、トラッパヌが非垞に積極的に䜿甚されおいたため、問題の環境に実際のNVPSがいく぀あるかを芋おみたしょう。



画像



グラフに瀺すように、Zabbixは平均しお1秒あたり玄9,260のリク゚ストを凊理したす。 さらに、ネットワヌク䞊に最倧15,000 NVPSの短いバヌストがあり、サヌバヌは問題なく察凊したした。 正盎なずころ、これは玠晎らしいです



建築



最初に理解するこずは、監芖システムのアヌキテクチャです。 Zabbixはフォヌルトトレラントであるべきですか 1時間たたは2時間のダりンタむムが問題になりたすか デヌタベヌスがクラッシュした堎合、どのような結果が埅っおいたすか ベヌスにはどのドラむブが必芁で、どのRAIDを構成する必芁がありたすか ZabbixサヌバヌずZabbixプロキシ間の垯域幅はどのくらいですか 最倧遅延ずは䜕ですか デヌタを収集する方法は ネットワヌクに問い合わせるパッシブモニタリングか、ネットワヌクをリッスンするアクティブモニタリングか



各質問を詳しく芋おみたしょう。 正盎に蚀うず、システムを展開するずきにネットワヌクの問題を考慮しなかったため、将来的に蚺断が困難な問題が発生したした。 そのため、ここに監芖システムアヌキテクチャの䞀般的な抂芁を瀺したす。



画像



鉄



適切な鉄を芋぀けるこずは簡単なプロセスではありたせん。 Zabbixデヌタベヌスは倧量のI / Oディスクシステムを必芁ずするため、ここで行った䞻なこずはSANを䜿甚しおデヌタを保存するこずでした。 簡単に蚀えば、デヌタベヌスサヌバヌ䞊のディスクが高速であるほど、Zabbixが凊理できるデヌタが増えたす。



もちろん、CPUずメモリもMySQLにずっお非垞に重芁です。 倧量のRAMにより、Zabbixは頻繁に読み取られたデヌタをメモリに保存できたす。これは圓然、システムの速床に貢献したす。 圓初、64GBのデヌタベヌスサヌバヌを蚈画しおいたしたが、これたでのずころすべおが32GBで正垞に機胜しおいたした。



zabbix_server自䜓がむンストヌルされおいるサヌバヌも、十分に高速なCPUを備えおいる必芁がありたす。䜕十䞇ものトリガヌを萜ち着いお凊理する必芁があるためです。 たた、Zabbixサヌバヌ自䜓には倚くのプロセスがないため、12GBで十分なメモリになりたすほずんどすべおの監芖はプロキシ経由です。



DBMSやzabbix_serverずは異なり、Zabbixプロキシは深刻なハヌドりェアを必芁ずしないため、仮想マシンを䜿甚したした。 基本的に、アクティブなデヌタ芁玠が収集されるため、プロキシ自䜓はデヌタ収集ポむントずしお機胜したすが、プロキシ自䜓は実際には䜕も調査したせん。



私のシステムで䜿甚した芁玄衚は次のずおりです。

Zabbixサヌバヌ Zabbix DB Zabbixプロキシ サン
HP ProLiant BL460c Gen8

12x Intel Xeon E5-2630

16GBメモリ

128GBディスク

CentOS 6.2 x64

Zabbix 2.0.6

HP ProLiant BL460c Gen8

12x Intel Xeon E5-2630

32GBのメモリ

2TB SAN-backedストレヌゞ4Gbps FC

CentOS 6.2 x64

MySQL 5.6.12

VMware仮想マシン

4x vCPU

8GBメモリ

50GBのディスク

CentOS 6.2 x64

Zabbix 2.0.6

MySQL 5.5.18

Hitachi Unified Storage VM

2TB LUN x 2

階局型ストレヌゞ2TB SSDを搭茉



フォヌルトトレランスZabbixサヌバヌ



䞊で述べたアヌキテクチャの問題に戻りたしょう。 倧芏暡なネットワヌクでは、明らかな理由から、監芖が機胜しないこずが実際の灜害です。 ただし、Zabbixアヌキテクチャでは、zabbixサヌバヌプロセスの耇数のむンスタンスを実行できたせん。



そこで、PacemakerずCMANでLinux HAを䜿甚するこずにしたした。 基本的なセットアップに぀いおは、 RedHat 6.4マニュアルをご芧ください。 残念ながら、呜什は䜿甚した時点から倉曎されたしたが、最終的な結果は同じになるはずです。 基本的なセットアップの埌、さらに構成したした



  1. 共有IPアドレス

    1. feyloverの堎合、IPアドレスはサヌバヌに送られ、サヌバヌがアクティブになりたす
    2. 共有IPアドレスは垞にアクティブなZabbixサヌバヌによっお䜿甚されるため、次の3぀の利点がありたす。

      • どのサヌバヌがアクティブであるかを垞に簡単に芋぀けるこずができたす
      • Zabbixサヌバヌからのすべおの接続は垞に同じIPからですzabbix_server.confでSourceIP =パラメヌタヌを蚭定した埌
      • すべおのZabbixプロキシおよびZabbix゚ヌゞェントは、サヌバヌずしお共通のIPを䜿甚するだけです


  2. Zabbix_serverプロセス

    • feyloverの堎合、zabbix_serverは叀いサヌバヌで停止され、新しいサヌバヌで開始されたす


  3. cronゞョブのシンボリックリンク

    1. Simlinkは、タスクが存圚するディレクトリを指したす。これは、アクティブなZabbixサヌバヌでのみ実行する必芁がありたす。 Crontabは、このシンボリックリンクを介しおすべおのタスクにアクセスできる必芁がありたす
    2. feyloverの堎合、シンボリックリンクは叀いサヌバヌで削陀され、新しいサヌバヌで䜜成されたす
  4. crond

    • feyloverの堎合、crondは叀いサヌバヌで停止し、新しいアクティブサヌバヌで起動したす


構成ファむルの䟋ず、zabbixサヌバヌのLSB initスクリプトは、 こちらからダりンロヌドできたす 。 「<>」で囲たれたパラメヌタヌを忘れずに線集しおください。 さらに、すべおのZabbixファむルが同じフォルダヌ/ usr / local / zabbixにあるずいう事実を考慮しお、initスクリプトが䜜成されたす。 そのため、必芁に応じおスクリプト内のパスを調敎したす。



DBMSのフォヌルトトレランス



デヌタベヌスがい぀でもクラッシュする可胜性がある堎合、明らかにZabbixサヌバヌを備えたサヌバヌのフォヌルトトレランスの利点はありたせん。 MySQLには、クラスタヌを䜜成する方法が数倚くありたす。䜿甚した方法に぀いお説明したす。



たた、Linux HAをPacemakerずCMANずずもに、デヌタベヌスに䜿甚したした。 結局のずころ、MySQLレプリケヌションを管理するための優れた機胜がいく぀かありたす。 アクティブマスタヌずスタンバむスレヌブMySQLの間でデヌタを同期するためにレプリケヌションを䜿甚したす䜿甚、「未解決の問題」セクションを参照。 たず、Zabbixサヌバヌサヌバヌず同様に、基本的なクラスタヌ構成を行いたす。 次に、アドオンで以䞋を構成したした。



  1. 共有IPアドレス

    1. feyloverの堎合、IPアドレスはサヌバヌに送られ、サヌバヌがアクティブになりたす
    2. 共有IPアドレスは垞にアクティブなZabbixサヌバヌによっお䜿甚されるため、次の2぀の利点がありたす。

      • どのサヌバヌがアクティブであるかを芋぀けるのは垞に簡単です。
      • フェむルオヌバヌの堎合、Zabbixサヌバヌ自䜓で新しいアクティブなMySQLサヌバヌのアドレスを瀺すアクションは䞍芁です


  2. 共通スレヌブIPアドレス

    1. このIPアドレスは、デヌタベヌスぞの読み取り芁求が発生したずきに䜿甚できたす。 したがっお、ク゚リは、䜿甚可胜な堎合、MySQLスレヌブサヌバヌによっお凊理できたす。
    2. どのサヌバヌにも远加のアドレスを蚭定できたすが、次の条件に䟝存したす。

      • スレヌブサヌバヌが利甚可胜であり、クロックが60秒以䞊遅れない堎合、アドレスを持ちたす。
      • それ以倖の堎合、MySQLマスタヌサヌバヌのアドレスは
  3. mysqld

    • feyloverの堎合、新しいMySQLサヌバヌがアクティブになりたす。 その埌、叀いサヌバヌが動䜜に戻るず、すでに新しく䜜成されたマスタヌのスレヌブのたたになりたす。


蚭定ファむルの䟋は、 ここで取埗できたす 。 「<>」で囲たれたペヌスメヌカヌパラメヌタを線集するこずを忘れないでください。 たた、ペヌスメヌカヌで䜿甚するために別のMySQLリ゜ヌス゚ヌゞェントをダりンロヌドする必芁がありたす。 リンクは、Percona github リポゞトリにペヌスメヌカヌを䜿甚しおMySQLクラスタヌをむンストヌルするためのドキュメントに蚘茉されおいたす 。 たた、「火灜事故」の堎合に備えお、コピヌがここにありたす 。



Zabbixプロキシ



䜕らかの理由でZabbixプロキシに぀いお聞いたこずがない堎合は、 ドキュメントを早急にご芧ください。 プロキシにより、Zabbixは耇数のマシンに監芖負荷を分散できたす。 その埌、すべおのZabbixプロキシは、収集されたすべおのデヌタをZabbixサヌバヌに送信したす。



Zabbixプロキシを䜿甚する堎合、次の点に泚意するこずが重芁です。



  1. Zabbixプロキシは、適切に蚭定されおいれば、非垞に倧量のデヌタを凊理できたす。 そのため、たずえば、テスト䞭、プロキシプロキシAず呌びたすは1500-1750 NVPSを問題なく凊理したした。 これは、2぀の仮想CPU、4GBのRAM、およびSQLite3デヌタベヌスを備えた仮想マシンです。 同時に、プロキシはサヌバヌ自䜓ず同じサむト䞊にあったため、ネットワヌクの遅延を単玔に考慮するこずはできたせんでした。 たた、収集されたほずんどすべおがアクティブなZabbix゚ヌゞェントのデヌタ芁玠でした
  2. 前に、監芖する際のネットワヌク遅延がどれほど重芁かを述べたした。 したがっお、これは倧芏暡システムの堎合に圓おはたりたす。 実際、プロキシが遅れるこずなく送信できるデヌタの量は、ネットワヌクに盎接䟝存したす。



    以䞋のグラフは、ネットワヌク遅延を考慮しない堎合に問題がどのように蓄積されるかを明確に瀺しおいたす。 時間がないプロキシ


画像



おそらく、送信甚のデヌタからのキュヌが増加しおはならないこずは明らかです。 グラフは別のZabbixプロキシプロキシBを参照したすが、プロキシAずハヌドりェアの違いはありたせんが、プロキシAのような1500NVPSではなく500NVPSのみを問題なく送信できたす。違いは、Bがシンガポヌルずそれ自䜓にあるこずです。北米のサヌバヌ、およびサむト間の遅延は玄230ミリ秒です。 デヌタの送信方法を考えるず、この遅延は深刻な圱響を及がしたす。 この堎合、プロキシBは2〜3秒ごずに収集されたZabbix芁玠を1000個だけサヌバヌに送信できたす。 私の芳察によれば、これは䜕が起こるかです





この手順は、必芁な回数だけ繰り返されたす。 倧きな遅延の堎合、この方法にはいく぀かの重倧な問題がありたす。





デヌタベヌスのパフォヌマンス



収集されたすべおの情報が確実にそこに到達するため、高いデヌタベヌスパフォヌマンスが監芖システムの鍵ずなりたす。 同時に、デヌタベヌスぞの倚数の曞き蟌み操䜜を考えるず、ディスクパフォ​​ヌマンスが最初のボトルネックです。 幞運にもSSDを自由に䜿甚できたしたが、それでもベヌスの高速動䜜を保蚌するものではありたせん。 以䞋に䟋を瀺したす。





グラフは、デヌタベヌス内の1秒あたりのリク゚スト数を瀺しおいたす。

画像



ほずんどのリク゚ストは「Com_update」であるこずに泚意しおください。 その理由は、受け取った各倀が「アむテム」テヌブルの曎新に぀ながるずいう事実にありたす。 デヌタベヌスには䞻に曞き蟌み操䜜もあるため、MySQLク゚リキャッシュは圹に立ちたせん。 実際、リク゚ストを垞に無効ずしおマヌクする必芁があるため、パフォヌマンスに悪圱響を䞎える可胜性さえありたす。



別のパフォヌマンスの問題は、Zabbix Housekeeperである可胜性がありたす。 倧芏暡なネットワヌクでは、オフにするこずを匷くお勧めしたす。 これを行うには、構成ファむルでDisableHousekeeping = 1を蚭定したす。 ハりスキヌピングがなければ、叀いデヌタデヌタ芁玠、むベント、アクションがデヌタベヌスから削陀されないこずは明らかです。 その埌、パヌティション分割によっお削陀を敎理できたす。



ただし、MySQL 5.6.12の制限の1぀は、倖郚キヌを持぀テヌブルではパヌティション化を䜿甚できないこずであり、Zabbixデヌタベヌスのほがすべおの堎所に存圚したす。 しかし、必芁な履歎テヌブルのほかに。 パヌティション化には2぀の利点がありたす。



  1. 日/週/月/などで分割されたすべおの履歎テヌブルデヌタ デヌタベヌスに圱響を䞎えるこずなく、将来的にデヌタを削陀できる別のファむルにするこずができたす。 たた、䞀定期間に収集されるデヌタ量を理解するこずも非垞に簡単です。
  2. テヌブルをクリアした埌、InnoDBはディスク容量を返さず、新しいデヌタ甚にそれ自䜓を残したす。 その結果、InnoDBを䜿甚しおディスク領域をクリアするこずはできたせん。 パヌティショニングの堎合、これは問題ではなく、単に叀いパヌティションを削陀するだけでスペヌスを解攟できたす。


Zabbiksでのパヌティション分割に぀いおは、すでにHabréで曞かれおいたす。



収集たたは聞く



Zabbixには、アクティブずパッシブの2぀のデヌタ収集方法がありたす。Zabbixのパッシブ監芖の堎合、サヌバヌ自䜓がZabbix゚ヌゞェントをポヌリングし、アクティブの堎合、Zabbix゚ヌゞェントがサヌバヌ自䜓に接続するのを埅機したす。 Zabbixトラッパヌも、ホスト偎に送信開始が残っおいるため、アクティブな監芖の察象ずなりたす。



いずれかの方法を䞻な方法ずしお遞択するず、パフォヌマンスの違いが深刻になる可胜性がありたす。 パッシブモニタリングでは、Zabbixサヌバヌでプロセスを実行する必芁がありたす。Zabbixサヌバヌは、Zabbix゚ヌゞェントに定期的にリク゚ストを送信し、応答を埅機したす。堎合によっおは、埅機が最倧数秒遅れるこずもありたす。 この時間に少なくずも1000台のサヌバヌを掛けるず、ポヌリングに時間がかかるこずが明らかになりたす。



アクティブな監芖の堎合、ポヌリングプロセスはありたせん。監芖察象のデヌタ項目のリストを取埗するために゚ヌゞェント自䜓がZabbixサヌバヌぞの接続を開始するず、サヌバヌは埅機状態になりたす。



さらに、゚ヌゞェントは、サヌバヌから受信した間隔を考慮しおデヌタ芁玠の収集を開始し、それらを送信したすが、接続は、゚ヌゞェントに送信するものがある堎合にのみ開かれたす。 したがっお、デヌタを受信する前に怜蚌する必芁はありたせん。これは、パッシブモニタリングに存圚したす。 結論アクティブモニタリングは、倧芏暡ネットワヌクで必芁なデヌタ収集の速床を向䞊させたす。



Zabbix自身を監芖する



Zabbix自䜓を監芖しないず、倧芏暡システムの効果的な運甚はたったく䞍可胜です。システムが新しいデヌタの受信を拒吊したずきに「プラグ」が発生する堎所を理解するこずは非垞に重芁です。 既存のZabbix監芖デヌタ芁玠は、 ここにありたす 。 Zabbixのバヌゞョン2.xでは、「箱から出しおすぐに」提䟛されるZabbixサヌバヌ監芖テンプレヌトに芪切に組み蟌たれたした。 それを䜿甚しおください



有甚なメトリックの1぀は、History Write Cacheの空き領域サヌバヌ構成ファむルのHistoryCacheSizeです。 このパラメヌタヌは垞に100に近い倀にする必芁がありたす。 キャッシュがいっぱいの堎合、Zabbixに着信デヌタをデヌタベヌスに远加する時間がありたせん。



残念ながら、このオプションはZabbixプロキシではサポヌトされおいたせん。 さらに、Zabbixには、Zabbixサヌバヌぞの送信を埅機しおいるデヌタ量を瀺すデヌタ芁玠はありたせん。 ただし、このデヌタ項目は、プロキシデヌタベヌスぞのSQLク゚リを䜿甚しお簡単に実行できたす。



SELECT ((SELECT MAX(proxy_history.id) FROM proxy_history)-nextid) FROM ids WHERE field_name='history_lastid'







芁求は、必芁な数を返したす。 ZabbixプロキシのデヌタベヌスずしおSQLite3を䜿甚しおいる堎合、Zabbixプロキシが実行されおいるマシンにむンストヌルされおいるZabbix゚ヌゞェントの蚭定ファむルにUserParameterずしお次のコマンドを远加するだけです。



UserParameter=zabbix.proxy.items.sync.remaining,/usr/bin/sqlite3 /path/to/the/sqlite/database "SELECT ((SELECT MAX(proxy_history.id) FROM proxy_history)-nextid) FROM ids WHERE field_name='history_lastid'" 2>&1









次に、プロキシが察凊しおいないこずを通知するトリガヌを配眮したす。



{Hostname:zabbix.proxy.items.sync.remaining.min(10m)}>100000







総統蚈



最埌に、システム負荷グラフを提案したす。 7月16日に䜕が起こったのかわからないずすぐに蚀いたす。問題を解決するために、すべおのプロキシデヌタベヌス圓時のSQLiteを再䜜成する必芁がありたした。 それ以来、すべおのプロキシをMySQLに倉換したしたが、問題は繰り返されおいたせん。 グラフの残りの「䞍芏則性」は、負荷テストの時間ず䞀臎したす。 䞀般に、グラフは、䜿甚される鉄に倧きな安党マヌゞンがあるこずを瀺しおいたす。



画像

画像

画像

画像

画像

画像



次に、デヌタベヌスサヌバヌからのグラフを瀺したす。 毎日のトラフィックの増加は、ダンプの時間mysqldumpに察応しおいたす。 たた、ク゚リグラフqpsの7月16日の倱敗は、䞊蚘で説明したのず同じ問題に関連しおいたす。



画像

画像

画像

画像

画像



運営管理



合蚈で、システムは、Zabbixサヌバヌ甚に2台のサヌバヌ、MySQL甚に2台のサヌバヌ、Zabbixプロキシ甚に16台の仮想サヌバヌ、Zabbix゚ヌゞェントを備えた数千の監芖察象サヌバヌを䜿甚したす。 ホストが非垞に倚いため、手䜜業で倉曎を加えるこずに疑問の䜙地はありたせんでした。 そしお、゜リュヌションはGitリポゞトリであり、すべおのサヌバヌがアクセスでき、すべおの構成ファむル、スクリプト、および配垃する必芁のあるすべおのものを配眮したした。 次に、゚ヌゞェントのUserParameterを介しお呌び出されるスクリプトを䜜成したした。 スクリプトの実行埌、サヌバヌはGitリポゞトリに接続し、必芁なすべおのファむルず曎新をダりンロヌドし、蚭定ファむルに倉曎があった堎合はZabbix゚ヌゞェント/プロキシ/サヌバヌを再起動したす。 曎新はzabbix_getを実行するより難しくありたせん



Webむンタヌフェむスを介しお手動で新しいホストを䜜成するこずも、非垞に倚くのサヌバヌを䜿甚する方法ではありたせん。 圓瀟にはCMDBがあり、そこに提䟛されるすべおのサヌバヌずサヌビスに関する情報が含たれおいたす。 そのため、別のマゞックスクリプトが1時間ごずにCMDBから情報を収集し、それをZabbixにあるものず比范したす。 この比范の結論ずしお、スクリプトはホストを削陀/远加/オン/オフし、グルヌプホストを䜜成し、テンプレヌトをホストに远加したす。 この堎合、手動で行う必芁があるのは、新しいタむプのトリガヌたたはデヌタ芁玠の実装だけです。 残念ながら、これらのスクリプトはシステムに匷く結び付けられおいるため、共有できたせん。



未解決の問題



私が行ったすべおの努力にもかかわらず、ただ解決しおいない重芁な問題が1぀残っおいたす。 実際、システムが8000-9000NVPSに達するず、バックアップMySQLデヌタベヌスはメむンデヌタベヌスに远い付かないため、実際にはフォヌルトトレランスはありたせん。



この問題を解決する方法はありたすが、ただ実装する時間がありたせん。





参照資料






All Articles