監視対象ログのバースト発生時に全ての監視項目のヒストリ格納が遅延してしまう
お世話になります。
監視対象ログのバースト発生時に全ての監視項目のヒストリ格納が遅延してしまう場合の回避策について
識者の方のお知恵を拝借したく投稿させて頂きます。
環境
【Zabbix Server】
OS:CentOS Linux release 7.0.1406 (Core)
Zabbix:zabbix-server-2.2.11
DB:mariadb-5.5.35-3.el7.x86_64
【Zabbix Proxy】 *4台
OS:CentOS Linux release 7.0.1406 (Core)
Zabbix:zabbix-proxy-2.2.11
DB:mariadb-5.5.35-3.el7.x86_64
監視対象の複数ログ(2Agent*3ログ)のログバーストが同時発生した際に、
全ての監視項目のヒストリ格納の遅延が発生してしまい、当該時刻での障害検知が遅延しまう事象が発生しました。
この間各監視Proxyでは監視が継続されていたようで、遅延時間が40分程度継続した後、
ヒストリに監視データが格納された時には実際の更新間隔での時刻でヒストリが順次格納されていきました。
(イベントの発生時刻も過去時間として表記されるが、アクション通知は実際にイベントが起こった時間)
以上の事から監視自体は行われていたが、ZabbixServer上での監視データの書き込みがログバーストによって滞ってしまったと考えられますが、
この様な場合に回避方法があればご教示いただきたいです。
私共で試した内容として、/etc/zabbix/zabbix_server.confの
HistoryTextCacheSize=の値を増やす
StartDBSyncers=の値を増やす
を実施しましたが、同様の事象はやはり起きてしまうようでした。
アイテムフィルタ条件によるヒストリ格納対象のログを削減する事を推奨される事は重々承知しておりますが、
それ以外の方法で回避の方策が、もしございましたら、ご回答頂けましたら幸いです。
fripper - 投稿数: 495
proxy を利用されている環境とのことですね
★Proxyより先の部分、Agent→Proxy
・Agent側で、BufferSize等を大きめにして、取りこぼしの発生を抑える
・Agent側で、MaxLinesPerSecondを大きめにして、1回のログチェックでデータ化する行数を増やす
結果、Proxyへの報告でより多くのログ情報を一気に報告できるようにする
・Proxy側で、HistoryTextCacheSizeを大きめにして、Agentからの報告が
受けきれずに溢れないようにする
・Proxy側のStartDBSyncersをチューニングして、DB書込の遅延を少なくする
安易に増やせば良いわけでもない
DB(MariaDB)側の同時接続数、キャッシュサイズ、cpu数等の同時処理能力などと
勘案してのチューニングが必要
★Proxy→Server
・Proxy側で、DataSenderFrequencyを短めに設定して、Agentから受けたデータを
可能な限り早めにServerへ投げてしまう
・Server側で、HistoryTextCacheSizeを大きめにして、Proxyからの報告が
受けきれずに溢れないようにする
・Server側のStartDBSyncersをチューニングして、DB書込の遅延を少なくする
安易に増やせば良いわけでもない
DB(MariaDB)側の同時接続数、キャッシュサイズ、cpu数等の同時処理能力などと
勘案してのチューニングが必要
私の環境でも、ログ大量発生時には、他の監視データも含めて数十分単位で遅れてしまって‥という
状況は時折発生してしまっています
これについては、もう「ピーク時の需要を見越してサーバのスペックをサイジングする」しか
無いのかなぁと思っています‥
Zabbixインターナルの「zabbix[xxxx]」なアイテムを設定しておくことで、Server・Proxyの
バッファ・遅延等の状況を可視化できるので、
どこがボトルネックになっているか、ある程度、特定する助けになるかなぁと思います
hajime - 投稿数: 57
回答ありがとうございます。
innodbcachesizeやmax_connections、table_open_cacheのチューニング等も試してみましたが、
どうやっても限界はあって発生はしてしまうのですね…。
1点質問ですが、どのようなZabbixインターナル監視を用いて遅延状況監視を行っていますか?
このZabbixインターナルの監視項目自体のヒストリ格納自体が遅延してしまってトリガー評価が行えないなあと思っていたのですが…。
それかshellscriptあたりでメールを投げる様な作りこみがいりますでしょうか?
fripper - 投稿数: 495
私の環境は 2.0.x 系で古いため、Proxy側の internalチェックがサポートされていません
そのため、サーバ側のみの対処となっていますが‥
データがProxyからServerへ一気に大量に届いた場合に、
Server側のDBへの書込処理が追いつかなかった場合には、
以下のアイテム値が 0% となるなど、バッファが溢れていた様子でした
zabbix[wcache,history,pfree]
zabbix[wcache,text,pfree]
2.2.x 以降であれば、上記アイテムはProxyでも取得できるので
AgentからProxyへの受信→DB書込が追いついているかの指標にはなると思います
ProxyからServerへの送信が追いつかずに、Proxy側で溜まった状態になっている数は
各Proxyの
zabbix[proxy_history]
で取得できそうな雰囲気ですね‥