Zabbix Advent Calendar 2019の10日目の記事です。
Zabbix関連のニュースをご覧になっていらっしゃる方は、「ZabbixエージェントがGo言語で書かれるようになった」とのニュースがあったことを覚えていらっしゃると思います。
Zabbix 4.4リリース時点では、旧来のC言語で記述されたZabbixエージェントが無くなったわけではなく、旧来のZabbixエージェントとZabbixエージェント2と呼ばれるGo言語で記述されたものの2つのエージェントが存在しています。また、現時点のリリースでは、Zabbixエージェント2は実験的(experimental)なリリースという状態です。
先日のオープンソースカンファレンスでもご紹介しましたが、その概要とインストールについてまとめておこうと思います。
Zabbixエージェント2とは
Zabbixエージェント2というのは、既存のZabbixエージェントをGo言語を使用して書き直したエージェントです。
C言語の実装をそのままGo言語に移植したのではなく、設計の見直しを行って、これまでの課題を解決することも視野にいれて開発されました。
これまでの課題
先日のZabbix Conference Japan 2019での説明では、旧来の以下の課題があると考えているようです。
- より高速な拡張にはC言語での実装が必要で敷居が高い
- アクティブチェックでは監視間隔のカスタマイズに対応していない
- アクティブチェックのプロセスがサーバーに対して1つしかない(処理並列度が低い)
- 他のプロセスやシステムからのイベントをエージェントで受け取ってサーバーに通知するような機能が無い
課題に対する対応状況
それらの課題に対して、現時点は以下のような改善が行われているそうです。
- Go言語での実装(C言語より簡単)
- TCPコネクション数の削減
- 同時実行性の改善
- 拡張を考慮したプラグインフレームワークとしての実装(長時間かかるスクリプトの実行などにも対応)
- 単一バイナリでの容易な配置
Zabbix Conference Japan 2019で発表され公開されている資料「MAGIC OF THE NEW ZABBIX AGENT」もご参照ください。
Zabbixエージェント2のインストール
それでは、早速使ってみましょう。
RHEL 8(CentOS 8)用であれば、公式のリポジトリからZabbixエージェント2のパッケージを取得できるので、Zabbixエージェントの代わりに、Zabbixエージェント2をインストールします。
もしも、すでにZabbixエージェントをインストール済みであったならば、一度アンインストールします。
# dnf remove zabbix-agent
Zabbixエージェント2をインストールするには、以下のようにコマンドを実行します。
# dnf install zabbix-agent2
Zabbixエージェント2の設定ファイルである/etc/zabbix/zabbix_agent2.conf内のHostnameやServer、ServerActiveなどの値が環境に合っているか確認します。基本的な設定は、以前のZabbixエージェントと同様です。将来的には、設定項目が追加されて、より柔軟な監視設定が可能となると思われます。
マニュアルを見ると、Zabbixエージェント2では、従来のZabbixエージェントの設定とは以下の部分が異なっているようです。
削除されたもの:
- AllowRoot
- HostInterface
- HostInterfaceItem
- LoadModule
- LoadModulePath
- StartAgents
- User
追加されたもの:
- ControlSocket
- Plugins
- StatusPort
追加されたものは、-Rオプションでのランタイムコマンド受付用ソケット、プラグインごとの設定追加、エージェントの状態を返却するためのポート番号などです。
詳細は、マニュアルをご参照ください。
設定が確認できたら、エージェントの起動と自動起動の設定を行います。
# systemctl start zabbix-agent2
# systemctl enable zabbix-agent2
注意点
旧来のZabbixエージェントと比較すると、設定から削除されていることからもお分かりの通り、ダイナミックライブラリを使用した機能拡張を使用することができません。また、AllowRootとUserを指定してrootユーザーで起動することもできません。
また、プラグインを追加して新しい監視対象や監視方法に対応するためには、プラグインのソースを追加してエージェントをビルドし直すことが必要です。
また、機能として、プラグインごとにタイムアウトの設定が可能になるような機能構成になってはいるようなのですが、現時点ではタイムアウトの設定としては、旧来のTimeoutのみとなっているように見えます。この部分は、正式リリース時には改善されるでしょう。
今後のリリース
Zabbix 4.4リリース時点では、UNIX系OSのみの対応となっています。Windows版は開発中だそうです。
また、C言語で記述されたライブラリにも一部依存しているので、Go言語だけで記述されたものではありません。
予定の段階ですが、次のLTSバージョンとなるZabbix 5.0で正式なリリースとなり、Windowsプラットフォームへも対応するそうです。現時点(2019/12/10)ではまだ公開されていませんが、Zabbix 5.0のロードマップを近日公開予定とのことですので、次バージョンがどうなるか興味のある方はウォッチしておいてください。
さてさて。明日は、誰でしょう?
どなたかよろしくお願いします。