2.1 Zabbixアーキテクチャ概要
Zabbixの全体アーキテクチャと各コンポーネントの役割
Zabbixアーキテクチャ概要
Zabbixは、分散型監視システムとして設計されており、複数のコンポーネントが連携して包括的な監視ソリューションを提供します。企業規模から個人利用まで、幅広い要求に対応できる柔軟なアーキテクチャを持っています。
基本アーキテクチャの特徴
- 分散型設計: 地理的に分散した環境での監視が可能
- スケーラブル: 単一デバイスから数万台まで対応
- モジュラー構成: 必要に応じてコンポーネントを追加・削除
- 統合型ソリューション: 単一プラットフォームで完結
主要コンポーネント
Zabbixは以下の5つの主要コンポーネントで構成されます:
- Zabbix Server - 中央制御システム
- Zabbix Agent - 監視対象ホストのデータ収集
- Zabbix Proxy - 分散環境での中間サーバー
- Web Interface - 管理・可視化インターフェース
- Database - データ保存・管理システム
アーキテクチャ図
[Zabbix Web Interface] ←→ [Zabbix Server] ←→ [Database]
↓
[Zabbix Proxy] ←→ [Database]
↓
[Zabbix Agent] [SNMP Device] [External Check]
Zabbix Serverの役割と機能
中央制御システムとしての役割
Zabbix Serverは、監視システム全体の中枢として機能します。
主要な責務
データ収集の統合管理
- エージェント、プロキシ、外部チェックからのデータ統合
- 収集スケジュールの管理
- データ処理とバリデーション
トリガー評価エンジン
- リアルタイムでのトリガー条件評価
- 問題の検出と状態管理
- 依存関係の処理
アクション実行システム
- 通知の送信
- リモートコマンドの実行
- エスカレーション処理
設定管理
- 監視設定の中央管理
- テンプレートの管理
- ユーザー・権限管理
プロセス構成
Zabbix Serverは複数のプロセスが協調動作します:
データ収集プロセス
- Poller: アクティブチェックのデータ収集
- Trapper: パッシブチェック(エージェント・プロキシ)からのデータ受信
- ICMP Pinger: ネットワーク可用性チェック
- IPMI Poller: IPMIデバイスの監視
データ処理プロセス
- Preprocessing Manager: データの前処理
- History Syncer: 履歴データのデータベース同期
- Trend Syncer: トレンドデータの計算・保存
通知・アクション処理
- Alerter: 通知の送信
- Escalator: エスカレーション処理
- Timer: 定期実行タスクの管理
設定例
基本設定(zabbix_server.conf)
conf
# データベース接続
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=password
# ログ設定
LogFile=/var/log/zabbix/zabbix_server.log
LogLevel=3
LogFileSize=10
# プロセス数調整
StartPollers=5
StartTrappers=5
StartPingers=1
パフォーマンス調整
conf
# 大規模環境向け設定
CacheSize=128M
HistoryCacheSize=64M
TrendCacheSize=32M
ValueCacheSize=256M
# プロセス数増加
StartPollers=30
StartTrappers=15
StartDBSyncers=8
Zabbix Agentの仕組み
軽量監視エージェントとしての特徴
Zabbix Agentは、監視対象ホストに導入する軽量なデータ収集プログラムです。
エージェントの特徴
- 軽量設計: 最小限のリソース消費
- セキュア通信: 暗号化通信対応
- プラットフォーム対応: Windows、Linux、macOS、AIX、Solaris等
- 拡張可能: ユーザー定義パラメータ対応
データ収集モード
パッシブモード(デフォルト)
- 動作: サーバーからの要求を受けてデータを返送
- 特徴: ファイアウォール設定が簡単
- ポート: 10050(デフォルト)
Zabbix Server → [要求] → Zabbix Agent
Zabbix Server ← [データ] ← Zabbix Agent
アクティブモード
- 動作: エージェントから能動的にデータを送信
- 特徴: NAT環境やプロキシ経由で有効
- ポート: サーバーの10051ポート
Zabbix Agent → [データ] → Zabbix Server
Zabbix Agent ← [設定] ← Zabbix Server
エージェント設定
基本設定(zabbix_agentd.conf)
conf
# サーバー接続設定
Server=192.168.1.10
ServerActive=192.168.1.10
Hostname=web-server-01
# ログ設定
LogFile=/var/log/zabbix/zabbix_agentd.log
LogLevel=3
# セキュリティ設定
EnableRemoteCommands=1
パフォーマンス設定
conf
# バッファリング設定
BufferSend=5
BufferSize=100
# タイムアウト設定
Timeout=30
内蔵監視項目
システムリソース
system.cpu.util[,user] # CPU使用率(ユーザー)
system.cpu.load[percpu,avg1] # CPUロードアベレージ
vm.memory.size[available] # 利用可能メモリ
vm.memory.util[available] # メモリ使用率
ファイルシステム
vfs.fs.size[/,total] # ファイルシステム総容量
vfs.fs.size[/,used] # 使用済み容量
vfs.fs.size[/,pfree] # 空き容量率
vfs.fs.inode[/,pfree] # 空きinodeの割合
ネットワーク
net.if.in[eth0] # ネットワーク受信バイト数
net.if.out[eth0] # ネットワーク送信バイト数
net.tcp.listen[80] # TCPポートリスニング状態
プロセス・サービス
proc.num[httpd] # プロセス数
proc.cpu.util[httpd] # プロセスCPU使用率
service.info[httpd] # サービス状態(Windows)
Zabbix Proxyの活用場面
分散監視の中間サーバー
Zabbix Proxyは、リモートサイトや大規模環境での効率的な監視を実現する中間サーバーです。
プロキシの利点
ネットワーク効率化
- WAN帯域の節約
- レイテンシの削減
- 通信の最適化
可用性向上
- 一時的な通信断対応
- ローカルデータバッファリング
- 独立した監視継続
セキュリティ強化
- DMZ配置による防御
- 通信ポイントの最小化
- 暗号化通信の実装
パフォーマンス分散
- サーバー負荷の分散
- 大量デバイスの効率的監視
- 地理的分散の最適化
プロキシの動作モード
アクティブプロキシ
- 動作: プロキシからサーバーへデータ送信
- 用途: NAT環境、ファイアウォール制約がある環境
- 設定: プロキシ側でサーバー情報を設定
パッシブプロキシ
- 動作: サーバーからプロキシへデータ要求
- 用途: 通常の企業内ネットワーク
- 設定: サーバー側でプロキシ情報を設定
プロキシ設定例
プロキシ設定(zabbix_proxy.conf)
conf
# プロキシモード設定
ProxyMode=0 # 0=アクティブ, 1=パッシブ
Hostname=proxy-tokyo
# サーバー接続
Server=zabbix.company.com
ServerPort=10051
# ローカルデータベース
DBHost=localhost
DBName=zabbix_proxy
DBUser=zabbix
# データ保持期間
ProxyLocalBuffer=720 # 30日間(時間単位)
ProxyOfflineBuffer=24 # 1日間(時間単位)
大規模環境向け設定
conf
# プロセス数増加
StartPollers=30
StartTrappers=15
StartPingers=5
# キャッシュサイズ増加
CacheSize=256M
HistoryCacheSize=128M
プロキシ配置パターン
リモートサイト監視
[本社] Zabbix Server ←WAN→ [支社] Zabbix Proxy → [ローカル機器群]
セキュリティ強化型配置
[内部ネット] Zabbix Server ←DMZ→ [DMZ] Zabbix Proxy → [外部監視対象]
大規模分散型配置
[中央] Zabbix Server
├─ [地域A] Proxy-A → [機器群A]
├─ [地域B] Proxy-B → [機器群B]
└─ [地域C] Proxy-C → [機器群C]
Webインターフェースの機能
管理・可視化プラットフォーム
Zabbix Web Interfaceは、システム管理と監視データ可視化のためのWebベースのフロントエンドです。
主要機能カテゴリ
監視・ダッシュボード
- リアルタイム監視画面
- カスタマイズ可能なダッシュボード
- グラフとチャート表示
- マップによる視覚化
設定・管理
- ホスト・アイテム設定
- トリガー・アクション設定
- テンプレート管理
- ユーザー・権限管理
レポート・分析
- 履歴データの分析
- レポート生成
- SLA計算
- 統計情報表示
アーキテクチャ特徴
技術スタック
- フロントエンド: PHP、JavaScript、CSS
- 通信: HTTPSセキュア通信
- 認証: 内蔵認証・LDAP・SAML対応
- API: RESTful API提供
設定要件
apache
# Apache設定例
<VirtualHost *:80>
DocumentRoot /usr/share/zabbix
ServerName monitoring.company.com
<Directory "/usr/share/zabbix">
Options FollowSymLinks
AllowOverride None
Require all granted
<Files "*.php">
SetHandler application/x-httpd-php
</Files>
</Directory>
</VirtualHost>
PHP要件
ini
# PHP設定(php.ini)
max_execution_time = 300
memory_limit = 128M
post_max_size = 16M
upload_max_filesize = 2M
max_input_time = 300
date.timezone = Asia/Tokyo
ユーザーインターフェース
メイン画面構成
- ヘッダー: ナビゲーション・ユーザー情報
- メニュー: 機能カテゴリ別メニュー
- メインエリア: 各機能の表示領域
- フッター: システム情報・ステータス
多言語対応
- 対応言語: 50以上の言語をサポート
- 日本語: 完全日本語対応
- カスタマイズ: 用語の独自定義可能
データベースの役割と選択肢
データ保存・管理システム
Databaseは、Zabbixの全ての設定情報と監視データを保存する重要なコンポーネントです。
データベースの役割
設定データ管理
- ホスト・アイテム・トリガー設定
- ユーザー・権限情報
- テンプレート・マクロ定義
監視データ保存
- 履歴データ(History)
- トレンドデータ(Trend)
- イベント・アラート情報
パフォーマンス最適化
- インデックス最適化
- データパーティショニング
- キャッシュ活用
サポートデータベース
MySQL/MariaDB
- 特徴: 最も一般的な選択肢
- 適用: 中小規模から大規模まで
- 最小バージョン: MySQL 8.0、MariaDB 10.5
sql
-- データベース作成例
CREATE DATABASE zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
CREATE USER 'zabbix'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'localhost';
PostgreSQL
- 特徴: 高度なSQL機能とパフォーマンス
- 適用: 大規模・高負荷環境に最適
- 最小バージョン: PostgreSQL 13
sql
-- データベース作成例
CREATE USER zabbix WITH PASSWORD 'password';
CREATE DATABASE zabbix OWNER zabbix;
GRANT ALL PRIVILEGES ON DATABASE zabbix TO zabbix;
Oracle Database
- 特徴: エンタープライズ級の機能と信頼性
- 適用: 大企業の基幹システム
- 最小バージョン: Oracle 19c
SQLite
- 特徴: 軽量・組み込み用途
- 適用: Zabbix Proxyでの利用
- 制限: Zabbix Serverでは非対応
データベース設計とパフォーマンス
データ保持戦略
履歴データ(History)
sql
-- データ保持期間の設定
- リアルタイムデータ: 7-30日
- 重要メトリクス: 90日
- アーカイブ: 1年以上
トレンドデータ(Trend)
sql
-- 集約データの保持
- 1時間集約: 13ヶ月
- 1日集約: 5年
- 月次集約: 長期保存
パフォーマンス最適化
インデックス戦略
sql
-- 重要なインデックス例
CREATE INDEX history_uint_itemid_clock ON history_uint (itemid, clock);
CREATE INDEX trends_uint_itemid_clock ON trends_uint (itemid, clock);
パーティショニング
sql
-- MySQL パーティショニング例
ALTER TABLE history_uint PARTITION BY RANGE (clock) (
PARTITION p2024_01 VALUES LESS THAN (UNIX_TIMESTAMP('2024-02-01')),
PARTITION p2024_02 VALUES LESS THAN (UNIX_TIMESTAMP('2024-03-01'))
);
通信プロトコルとセキュリティ
Zabbix内部通信
通信ポート
コンポーネント | ポート | プロトコル | 用途 |
---|---|---|---|
Zabbix Server | 10051 | TCP | データ受信 |
Zabbix Agent | 10050 | TCP | データ送信 |
Web Interface | 80/443 | HTTP/HTTPS | Web管理画面 |
SNMP | 161 | UDP | SNMP監視 |
IPMI | 623 | UDP | IPMI監視 |
暗号化通信
PSK(Pre-Shared Key)
conf
# エージェント設定
TLSConnect=psk
TLSAccept=psk
TLSPSKIdentity=psk001
TLSPSKFile=/etc/zabbix/zabbix_agentd.psk
証明書ベース
conf
# 証明書設定
TLSConnect=cert
TLSAccept=cert
TLSCAFile=/etc/zabbix/ca.crt
TLSCertFile=/etc/zabbix/client.crt
TLSKeyFile=/etc/zabbix/client.key
セキュリティベストプラクティス
ネットワークセキュリティ
- ファイアウォール設定: 必要ポートのみ開放
- VPN利用: リモート接続のセキュア化
- セグメンテーション: 監視ネットワークの分離
認証・認可
- 強力なパスワード: 複雑性要件の設定
- 多要素認証: LDAP/SAML統合
- 最小権限: 役割ベースアクセス制御
まとめ
Zabbixのアーキテクチャは、以下の特徴により様々な監視要求に対応します:
アーキテクチャの強み
- スケーラビリティ: 小規模から大規模まで対応
- 分散対応: プロキシによる効率的な分散監視
- 統合性: 単一プラットフォームでの包括的監視
- 拡張性: モジュラー設計による柔軟な拡張
導入時の考慮事項
- 規模設計: 監視対象数に応じたコンポーネント選択
- ネットワーク設計: 通信経路とセキュリティの最適化
- データベース設計: データ保持戦略とパフォーマンス
- 運用設計: 保守・管理プロセスの確立
次のセクションでは、これらのコンポーネントがどのように連携してデータを処理するかについて、データフローとプロセスの詳細を説明します。
参考リンク