zabbix server 冗長構成環境下でzabbix proxyと通信する場合について
いつもお世話になります。
zabbix server 冗長構成環境下でzabbix proxyと通信する場合についてご質問させてください。
■ソフトウェア詳細
・OS CentOS 7.6
・drbd9
・Corosync
・Pacemaker
・zabbix server 4.0.18
DRBD9,Corosync,Pacemakerを使い、zabbix serverを冗長化しております。
また、フェイルオーバー時でもIPに変更が無い様にPacemakerでVIPを付与しております。
zabbix_proxy.conf内のServerIPにはPacemakerで付与したVIPを指定しておりますが、proxy配下のホストが登録されません。
zabbix_proxy.conf内のServerIPは複数登録が不可能なのは存じ上げておりますが、
zabbix serverを冗長構成にしている場合、zabbix_proxy.conf内のServerIPに指定するIPはVIPだと不可能なのでしょうか?
zabbix serverに付与している実際のIPをzabbix_proxy.conf内のServerIPに指定したところ、
zabbixサーバとZabbixプロキシ間は下記ログが出力されておりましたが、proxy配下のホストが登録されませんでした。
-------------------
5552:20200324:181325.847 received configuration data from server at "zabbix serverの実際のIP", datalen 3550
5550:20200324:181425.988 received configuration data from server at "zabbix serverの実際のIP", datalen 3550
5549:20200324:181525.118 received configuration data from server at "zabbix serverの実際のIP", datalen 3550
-------------------
zabbix serverに付与しているVIPをzabbix_proxy.conf内のServerIPに指定したところ、
zabbixサーバとZabbixプロキシ間は下記ログが出力されておりましたが、こちらもproxy配下のホストが登録されませんでした。
-------------------
6663:20200324:183048.557 proxy data request from server is not allowed: connection from "zabbix serverの実際のIP" rejected, allowed hosts: "VIPに指定しているIP"
6663:20200324:183049.591 proxy data request from server is not allowed: connection from "zabbix serverの実際のIP" rejected, allowed hosts: "VIPに指定しているIP"
6661:20200324:183050.625 proxy data request from server is not allowed: connection from "zabbix serverの実際のIP" rejected, allowed hosts: "VIPに指定しているIP"
6661:20200324:183051.710 proxy data request from server is not allowed: connection from "zabbix serverの実際のIP" rejected, allowed hosts: "VIPに指定しているIP"
-------------------
構築のヒントをいただけると幸いです。
よろしくお願いします。
fripper - 投稿数: 495
「proxy data request from server is not allowed」の出力からの推察なのですが‥
このProxy は、Zabbix標準で広く使われている「アクティブProxy」ではなく
「パッシブProxy」でしょうか?
「アクティブProxy」の場合は、基本、Server-Proxy間の通信はすべてProxy起点で行われていて
・Proxyが、proxy.conf 内の server= 設定にあるIPへ接続して、自ProxyのHostnameを伝えて
自Proxy配下として設定されている各監視対象の情報をとってくる
・Proxyは、とってきた設定をもとに、自Proxy配下の監視を行ってデータを収集する
・Proxyは、proxy.conf 内の server= 設定にあるIPへ接続して、自ProxyのHostnameを伝えて
自Proxy配下として収集した値を報告・伝達する
といった流れになりますが
「パッシブProxy」の場合は、基本、Server-Proxy間の通信はすべてServer起点となります
・Serverが、Proxy設定のIP/Portへ向けて接続し、当該Proxy配下の監視対象について伝達
・Proxyは、Server=で記載のあるIPからの接続を受諾し、設定情報をうけいれる
・Proxyは、受信した設定をもとに、自Proxy配下の監視を行ってデータを収集する
・Serverが、定期的にProxyへデータを採りにいく
・Proxyは、Server=で記載のあるIPからの接続を受諾し、収集結果を渡す
これらより、パッシブProxyとして設定されているならば‥
・実際のIPをzabbix_proxy.conf内のServerIPに指定した場合
Server→Proxy方向の通信がProxyによって受諾され、自Proxy以下の設定として受信される
> received configuration (略) datalen 3550 が出力される
・VIPをzabbix_proxy.conf内のServerIPに指定した場合
Server→Proxy方向の通信は、VIP起点ではなく、各冗長化サーバの実IP起点と見えるので
Proxy側は、Server=の設定値と一致しないため、設定値を受諾せず、拒絶する
> proxy data request from server is not allowed が出力される
といった結果になっているのではないかと推察します
VIPを利用した構成とする場合、面倒ですが、iptables の SNAT 等を利用するなどして
Server起点の、Server→Proxy方向の通信についてのみ、FromのIPをVIPに見せかけるような工夫をする必要がありそうです‥
ファイアウォール等での要件が無いのであれば「パッシブProxy」ではなく「アクティブProxy」とすれば
上記問題は回避できる気がしますが‥いかがでしょうか?
あと、問題・事象として報告されている
>proxy配下のホストが登録されませんでした
コレについては、別要因だと思います
IP範囲指定での、監視対象ネットワークディスカバリ等を設定していらっしゃいますか?
とりあえずは、先の「Server=Proxy間」の設定情報やりとり‥という部分の問題が
解消したうえでないと、調査が難しいと思います
とりあえずは、Proxy配下に、固定IP等で、ディスカバリ等を経由しない監視対象を1・2つ設定して
それらの収集データがServerまで届くまで、という部分を調査・修正されるのが先決かと思います
myyam - 投稿数: 63
fripper 様
お世話になります。ご返信ありがとうございます。
はい、そのとおりでパッシブProxyとして登録しております。
また、監視対象ホストについては、下記の設定で自動登録をする様に設定しておりますが、
いずれもホストとして登録されませんでした。
--------------------------------
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
#サーバのIPアドレス
Server=プロキシのIP
#system.hostnameを指定し、監視対象サーバーのホスト名を参照
HostnameItem=system.hostname
#自動登録のためのメタデータ
HostMetadata=Linux hogehoge-Linux
#インクルード設定
Include=/etc/zabbix/zabbix_agentd.d/*.conf
--------------------------------
プロキシ配下のホストについては、上記設定ではNGでしょうか?
大変お手数おかけしますが、ご確認よろしくお願いします。
myyam - 投稿数: 63
fripper 様
度々失礼します。
>ファイアウォール等での要件が無いのであれば「パッシブProxy」ではなく「アクティブProxy」とすれば
なるほどです。FWについては全て開けておりますので、特に問題にはなりません。なので、
アクティブproxyで再設定してみます。
ありがとうございます。
myyam - 投稿数: 63
fripper 様
度々失礼します。
すみません、zabbix server側は開けておりますが、一部の拠点でFWがおりました。
アクティブProxy場合、FWのポートはどのように開けるのが適切でしょうか?
サーバのVIPに向けて10051を開放すればOKという認識ですが正しいでしょうか。
取り急ぎ、アクティブ設定に変更しました。portの開放を待って、様子を見てみます。
ありがとうございます。
fripper - 投稿数: 495
何をどこにどう設定しているのか、もちろん、業務でご利用の場合など、
出せる情報と出せない情報があるかとは思いますが、ある程度整頓したうえで
全体的に明記していただかないと
「どこをどう設定してダメだったのか」
「設定のこの部分は正しいけれど、この部分が漏れている」
「回答を見た結果、どの部分がどう改善できていて、どの部分は改善できていないのか」
といったことがわかりません
「自動登録を設定しています」と仰っていましたが‥その関連事項についても
別スレッドとして新たな質問を出されているようです
本記事のほうで質問に記載されていた「自動登録される・されない」の部分は
「登録される」まで進んだ・改善した‥ということなのでしょうか‥?
#断片的な情報では、次に訪れた方がこのやり取りを見ても、どこをどう設定すれば
#良いのかが判断・理解できず、せっかくのやり取りが有効に活用されなくなります
myyam - 投稿数: 63
fripper 様
お世話になります。大変失礼しました。
結論から言いますと、ProxyMode=0として、zabbix server側とアクティブProxyとして通信ができる事を確認出来ました。
(一部、Switch側でportを閉じてしまっていたようです)
下記設定にてOKでした。
なので、Corosync,Pacemaker で冗長構成にしている環境下でzabbix Proxyを利用する場合、アクティブProxyとして動作させる事で解決出来ました。
zabbix_proxy.conf
-------------------
ProxyMode=0
Server=Pacemakerで付与したVIP
Hostname=zbxproxy
LogFile=/var/log/zabbix/zabbix_proxy.log
LogFileSize=0
PidFile=/var/run/zabbix/zabbix_proxy.pid
SocketDir=/var/run/zabbix
DBName=zabbix_proxy
DBUser=zabbix_proxy
DBPassword=zabbix_proxy
DBSocket=/var/lib/mysql/mysql.sock
ConfigFrequency=60
SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
Timeout=4
ExternalScripts=/usr/lib/zabbix/externalscripts
LogSlowQueries=3000
-------------------
zabbix_agentd.conf (proxy配下の監視対象ホスト)
--------------------------------
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=proxyサーバのIPアドレス
ServerActive=proxyサーバのIPアドレス:10051
HostnameItem=system.hostname
HostMetadata=Linux hogehoge-Linux
Include=/etc/zabbix/zabbix_agentd.d/*.conf
--------------------------------
また、proxy環境下でも自動登録ができる事を確認できたのですが、下記エラーが出ており、
HostnameItemを使った自動登録の場合、アクティブチェックが出来ない旨の記載がネット上にありましたので、
この点だけが不明でした。
------------------------
no active checks on server [zabbix server IP:10051]: host [監視対象ホスト名] not found
------------------------
fripper - 投稿数: 495
書込多数いただいていた中、確認・返信できておらず申し訳ありませんでした
また、解決状況の共有、ありがとうございました
>Corosync,Pacemaker で冗長構成にしている環境下でzabbix Proxyを利用する場合、アクティブProxyとして動作させる事で解決
アクティブProxy化したことでうまく動作したようで、よかったです
#解決状況についてこうやって公開していただけると、同じような疑問で来られた方の
#参考になることもあってありがたいです‥