2.1 Zabbixアーキテクチャ概要

Zabbixの全体アーキテクチャと各コンポーネントの役割

Zabbixアーキテクチャ概要

Zabbixは、分散型監視システムとして設計されており、複数のコンポーネントが連携して包括的な監視ソリューションを提供します。企業規模から個人利用まで、幅広い要求に対応できる柔軟なアーキテクチャを持っています。

基本アーキテクチャの特徴

  • 分散型設計: 地理的に分散した環境での監視が可能
  • スケーラブル: 単一デバイスから数万台まで対応
  • モジュラー構成: 必要に応じてコンポーネントを追加・削除
  • 統合型ソリューション: 単一プラットフォームで完結

主要コンポーネント

Zabbixは以下の5つの主要コンポーネントで構成されます:

  1. Zabbix Server - 中央制御システム
  2. Zabbix Agent - 監視対象ホストのデータ収集
  3. Zabbix Proxy - 分散環境での中間サーバー
  4. Web Interface - 管理・可視化インターフェース
  5. Database - データ保存・管理システム

アーキテクチャ図

[Zabbix Web Interface] ←→ [Zabbix Server] ←→ [Database]

                         [Zabbix Proxy] ←→ [Database]

                    [Zabbix Agent] [SNMP Device] [External Check]

Zabbix Serverの役割と機能

中央制御システムとしての役割

Zabbix Serverは、監視システム全体の中枢として機能します。

主要な責務

  1. データ収集の統合管理

    • エージェント、プロキシ、外部チェックからのデータ統合
    • 収集スケジュールの管理
    • データ処理とバリデーション
  2. トリガー評価エンジン

    • リアルタイムでのトリガー条件評価
    • 問題の検出と状態管理
    • 依存関係の処理
  3. アクション実行システム

    • 通知の送信
    • リモートコマンドの実行
    • エスカレーション処理
  4. 設定管理

    • 監視設定の中央管理
    • テンプレートの管理
    • ユーザー・権限管理

プロセス構成

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は、リモートサイトや大規模環境での効率的な監視を実現する中間サーバーです。

プロキシの利点

  1. ネットワーク効率化

    • WAN帯域の節約
    • レイテンシの削減
    • 通信の最適化
  2. 可用性向上

    • 一時的な通信断対応
    • ローカルデータバッファリング
    • 独立した監視継続
  3. セキュリティ強化

    • DMZ配置による防御
    • 通信ポイントの最小化
    • 暗号化通信の実装
  4. パフォーマンス分散

    • サーバー負荷の分散
    • 大量デバイスの効率的監視
    • 地理的分散の最適化

プロキシの動作モード

アクティブプロキシ

  • 動作: プロキシからサーバーへデータ送信
  • 用途: 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ベースのフロントエンドです。

主要機能カテゴリ

  1. 監視・ダッシュボード

    • リアルタイム監視画面
    • カスタマイズ可能なダッシュボード
    • グラフとチャート表示
    • マップによる視覚化
  2. 設定・管理

    • ホスト・アイテム設定
    • トリガー・アクション設定
    • テンプレート管理
    • ユーザー・権限管理
  3. レポート・分析

    • 履歴データの分析
    • レポート生成
    • 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の全ての設定情報と監視データを保存する重要なコンポーネントです。

データベースの役割

  1. 設定データ管理

    • ホスト・アイテム・トリガー設定
    • ユーザー・権限情報
    • テンプレート・マクロ定義
  2. 監視データ保存

    • 履歴データ(History)
    • トレンドデータ(Trend)
    • イベント・アラート情報
  3. パフォーマンス最適化

    • インデックス最適化
    • データパーティショニング
    • キャッシュ活用

サポートデータベース

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 Server10051TCPデータ受信
Zabbix Agent10050TCPデータ送信
Web Interface80/443HTTP/HTTPSWeb管理画面
SNMP161UDPSNMP監視
IPMI623UDPIPMI監視

暗号化通信

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

セキュリティベストプラクティス

ネットワークセキュリティ

  1. ファイアウォール設定: 必要ポートのみ開放
  2. VPN利用: リモート接続のセキュア化
  3. セグメンテーション: 監視ネットワークの分離

認証・認可

  1. 強力なパスワード: 複雑性要件の設定
  2. 多要素認証: LDAP/SAML統合
  3. 最小権限: 役割ベースアクセス制御

まとめ

Zabbixのアーキテクチャは、以下の特徴により様々な監視要求に対応します:

アーキテクチャの強み

  1. スケーラビリティ: 小規模から大規模まで対応
  2. 分散対応: プロキシによる効率的な分散監視
  3. 統合性: 単一プラットフォームでの包括的監視
  4. 拡張性: モジュラー設計による柔軟な拡張

導入時の考慮事項

  1. 規模設計: 監視対象数に応じたコンポーネント選択
  2. ネットワーク設計: 通信経路とセキュリティの最適化
  3. データベース設計: データ保持戦略とパフォーマンス
  4. 運用設計: 保守・管理プロセスの確立

次のセクションでは、これらのコンポーネントがどのように連携してデータを処理するかについて、データフローとプロセスの詳細を説明します。


参考リンク

← 前へ: 1.3 基本概念と用語 | 次へ: 2.2 データフローとプロセス →