5.2 テンプレート設計 ​

効率的で保守性の高いZabbixテンプレートの設計原則と実装手法

概要 ​

テンプレート設計は、Zabbix監視システムの中核となる重要な要素です。適切に設計されたテンプレートにより、一貫性のある監視設定、効率的な保守運用、そしてスケーラブルな監視環境を実現できます。

テンプレート設計の価値 ​

要素効果適用場面
標準化設定の一貫性確保同種サーバーの統一監視
再利用性開発効率向上類似環境への適用
継承段階的設定管理共通機能の階層化
保守性変更管理の簡素化一括設定更新
品質監視漏れの防止ベストプラクティス適用

テンプレートの作成原則 ​

設計哲学 ​

単一責任の原則 ​

各テンプレートは明確に定義された単一の責任を持つべきです。

yaml
# 良い例:機能別分離
Template OS Linux Base          # OS基本監視
Template Service Apache         # Apache固有監視
Template Service MySQL          # MySQL固有監視

# 悪い例:全部盛り
Template Linux Apache MySQL     # 複数機能混在

段階的継承設計 ​

Template OS Linux Base
├── Template OS Linux Advanced
│   ├── Template Service Web Server
│   │   ├── Template Service Apache
│   │   └── Template Service Nginx
│   └── Template Service Database
│       ├── Template Service MySQL
│       └── Template Service PostgreSQL
└── Template OS Linux Minimal

命名規則 ​

体系的な命名戦略 ​

Template {Category} {Technology} [{Variant}]

例:
Template OS Linux               # OS基本テンプレート
Template OS Linux Advanced      # OS拡張テンプレート
Template Service Apache         # Apacheサービステンプレート
Template Service Apache SSL     # Apache SSL拡張
Template Device Network Switch  # ネットワークスイッチ
Template VM VMware              # VMware仮想マシン

日本語表記との併用 ​

yaml
英語名: "Template Service MySQL"
日本語名: "MySQLサービステンプレート"
説明: "MySQL database server monitoring template"
日本語説明: "MySQLデータベースサーバー監視テンプレート"

継承とリンク関係 ​

継承階層の設計 ​

基底テンプレート(Base Template) ​

yaml
# Template OS Linux Base
名前: "Template OS Linux Base"
説明: "Linux基本システム監視"

アイテム:
  - system.cpu.util[,idle]          # CPU使用率
  - vm.memory.utilization           # メモリ使用率
  - vfs.fs.size[/,used]            # ディスク使用量
  - system.uptime                   # システム稼働時間
  - agent.ping                      # エージェント接続確認

トリガー:
  - CPU使用率高(>90% 15分間)
  - メモリ使用率高(>90% 5分間)
  - ディスク使用率警告(>85%)
  - ディスク使用率危険(>95%)
  - エージェント接続不可

マクロ:
  - {$CPU.UTIL.CRIT}: "90"
  - {$MEMORY.UTIL.MAX}: "90"
  - {$VFS.FS.PUSED.MAX.WARN}: "85"
  - {$VFS.FS.PUSED.MAX.CRIT}: "95"

拡張テンプレート(Extended Template) ​

yaml
# Template OS Linux Advanced
名前: "Template OS Linux Advanced"
説明: "Linux拡張システム監視"
継承: ["Template OS Linux Base"]

追加アイテム:
  - proc.num[,,run]                 # 実行中プロセス数
  - system.users.num                # ログインユーザー数
  - vfs.file.cksum[/etc/passwd]     # パスワードファイル整合性
  - net.tcp.listen[22]              # SSHポート監視
  - kernel.maxfiles                 # ファイルディスクリプタ上限

追加トリガー:
  - プロセス数異常(>500)
  - 同時ログインユーザー数警告(>10)
  - /etc/passwdファイル変更検知
  - SSHサービス停止

追加マクロ:
  - {$MAX_PROCESSES}: "500"
  - {$MAX_USERS}: "10"
  - {$SSH_PORT}: "22"

水平継承パターン ​

サービス固有テンプレート ​

yaml
# Template Service Apache
名前: "Template Service Apache"
継承: ["Template OS Linux Base"]

専用アイテム:
  - net.tcp.service[http]           # HTTP サービス確認
  - net.tcp.service[https]          # HTTPS サービス確認
  - proc.num[httpd]                 # Apacheプロセス数
  - web.page.get[localhost,/server-status,80] # ステータス取得

専用トリガー:
  - HTTPサービス停止
  - HTTPSサービス停止
  - Apacheプロセス異常
  - サーバーステータス取得失敗

専用マクロ:
  - {$APACHE.STATUS.URL}: "/server-status"
  - {$APACHE.PROC.MIN}: "2"
  - {$APACHE.PROC.MAX}: "100"

複数継承の活用 ​

コンポジションパターン ​

yaml
# Template Server Web Production
名前: "本番Webサーバーテンプレート"
継承: 
  - "Template OS Linux Advanced"    # OS詳細監視
  - "Template Service Apache"       # Webサーバー監視
  - "Template Security Base"        # セキュリティ監視
  - "Template Backup Monitor"       # バックアップ監視

統合マクロ:
  - {$ENVIRONMENT}: "production"
  - {$SERVICE_TIER}: "web"
  - {$BACKUP_TIME}: "02:00"
  - {$SECURITY_LEVEL}: "high"

マクロの効果的な使用 ​

マクロの分類と管理 ​

設定用マクロ ​

yaml
# 閾値設定
{$CPU.UTIL.CRIT}: "90"            # CPU使用率危険閾値
{$MEMORY.UTIL.MAX}: "85"          # メモリ使用率上限
{$DISK.UTIL.WARN}: "80"           # ディスク使用率警告

# タイムアウト設定
{$AGENT.TIMEOUT}: "30s"           # エージェントタイムアウト
{$HTTP.TIMEOUT}: "15s"            # HTTP監視タイムアウト
{$DB.TIMEOUT}: "30s"              # データベース接続タイムアウト

パス・ファイル指定マクロ ​

yaml
# ログファイルパス
{$LOG.ACCESS}: "/var/log/apache2/access.log"
{$LOG.ERROR}: "/var/log/apache2/error.log"
{$LOG.MYSQL}: "/var/log/mysql/error.log"

# 設定ファイルパス
{$CONF.APACHE}: "/etc/apache2/apache2.conf"
{$CONF.MYSQL}: "/etc/mysql/my.cnf"
{$CONF.PHP}: "/etc/php/7.4/apache2/php.ini"

動的フィルタマクロ ​

yaml
# プロセスフィルタ
{$PROC.NAME.MATCHES}: "^(apache2|httpd)$"
{$PROC.NAME.NOT_MATCHES}: "^(vim|nano|less)$"

# ファイルシステムフィルタ
{$VFS.FS.FSNAME.MATCHES}: "^/(|home|var|opt)$"
{$VFS.FS.FSNAME.NOT_MATCHES}: "^/(dev|sys|run|proc)"

# ネットワークインターフェースフィルタ
{$NET.IF.NAME.MATCHES}: "^eth[0-9]+$"
{$NET.IF.NAME.NOT_MATCHES}: "^(lo|docker|veth)"

高度なマクロ活用 ​

条件付きマクロ ​

yaml
# 環境別設定
{$MONITOR.INTERVAL:dev}: "300s"    # 開発環境:5分間隔
{$MONITOR.INTERVAL:stg}: "60s"     # ステージング:1分間隔
{$MONITOR.INTERVAL:prod}: "30s"    # 本番環境:30秒間隔

# サービス別設定
{$PROC.MAX:apache}: "100"          # Apache最大プロセス数
{$PROC.MAX:mysql}: "200"           # MySQL最大接続数
{$PROC.MAX:redis}: "50"            # Redis最大接続数

計算マクロ ​

yaml
# 容量計算
{$DISK.SIZE.TOTAL}: "{{HOST.HOST}.vfs.fs.size[/,total].last()}"
{$DISK.FREE.MIN}: "{{HOST.HOST}.vfs.fs.size[/,total].last()} * 0.1"

# パフォーマンス計算
{$CPU.CORES}: "{{HOST.HOST}.system.hw.cpu.num.last()}"
{$MEMORY.TOTAL}: "{{HOST.HOST}.vm.memory.size[total].last()}"

アプリケーション分類 ​

アプリケーションの体系的整理 ​

機能別分類 ​

yaml
# Webサーバーテンプレート
アプリケーション:
  - "Apache: 基本監視"
    - HTTP/HTTPSサービス監視
    - プロセス監視
    - アクセスログ監視
  
  - "Apache: パフォーマンス"
    - 接続数監視
    - レスポンス時間監視
    - スループット監視
  
  - "Apache: セキュリティ"
    - 異常アクセス検知
    - エラーログ監視
    - SSL証明書監視

レイヤー別分類 ​

yaml
# データベーステンプレート
アプリケーション:
  - "MySQL: 接続"
    - 接続数監視
    - 接続拒否監視
    - 認証失敗監視
  
  - "MySQL: パフォーマンス"
    - クエリパフォーマンス
    - ロック状況
    - インデックス効率
  
  - "MySQL: レプリケーション"
    - レプリケーション遅延
    - レプリケーション状態
    - バイナリログ監視

動的アプリケーション管理 ​

ディスカバリ連携 ​

yaml
# ディスクデバイス自動分類
ディスカバリルール: "Block devices discovery"
アプリケーションプロトタイプ: "Disk: {#DEVNAME}"

生成例:
  - "Disk: /dev/sda"
  - "Disk: /dev/sdb" 
  - "Disk: /dev/nvme0n1"

テンプレートのエクスポート/インポート ​

エクスポート戦略 ​

バージョン管理対応エクスポート ​

yaml
# エクスポート設定
範囲: テンプレートのみ
関連要素: 含める
  - 関連アイテム
  - 関連トリガー
  - 関連グラフ
  - 関連アプリケーション
  - 関連マクロ

除外要素:
  - ホスト情報
  - ユーザー設定
  - メディア設定

環境間移行手順 ​

bash
#!/bin/bash
# テンプレート移行スクリプト

SOURCE_ENV="development"
TARGET_ENV="production"
TEMPLATE_NAME="Template Service Apache"

# 1. ソース環境からエクスポート
curl -X POST "https://${SOURCE_ENV}-zabbix.example.com/api_jsonrpc.php" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "method": "configuration.export",
    "params": {
      "options": {
        "templates": ["'$TEMPLATE_NAME'"]
      },
      "format": "xml"
    },
    "auth": "'$SOURCE_AUTH'",
    "id": 1
  }' > template_export.xml

# 2. ターゲット環境へインポート
curl -X POST "https://${TARGET_ENV}-zabbix.example.com/api_jsonrpc.php" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "method": "configuration.import",
    "params": {
      "format": "xml",
      "rules": {
        "templates": {
          "createMissing": true,
          "updateExisting": true
        },
        "items": {
          "createMissing": true,
          "updateExisting": true
        }
      },
      "source": "'$(cat template_export.xml | sed 's/"/\\\"/g' | tr -d '\n')'"
    },
    "auth": "'$TARGET_AUTH'",
    "id": 1
  }'

インポート自動化 ​

GitOps連携 ​

テンプレートを Git リポジトリで管理し、GitHub Actions や GitLab CI を使用して自動デプロイできます。ステージング環境へは全テンプレート変更で自動デプロイし、本番環境へは main ブランチのマージ時のみデプロイする段階的なアプローチが推奨されます。デプロイスクリプトは Zabbix API を呼び出して XML ファイルをインポートし、シークレット管理で認証トークンを保護します。

OOTBテンプレートの活用 ​

標準テンプレートの理解 ​

OS別テンプレート ​

yaml
# Linux OS テンプレート
Template OS Linux by Zabbix agent:
  - 基本システムメトリクス
  - プロセス監視
  - ネットワーク監視
  - ファイルシステム監視

Template OS Linux by Zabbix agent active:
  - アクティブエージェント用
  - 高頻度データ収集
  - バッファリング対応

アプリケーション別テンプレート ​

yaml
# データベーステンプレート
Template DB MySQL by Zabbix agent:
  - MySQL基本監視
  - レプリケーション監視
  - パフォーマンススキーマ活用

Template DB PostgreSQL by Zabbix agent:
  - PostgreSQL基本監視
  - コネクション監視
  - WAL監視

カスタマイズ戦略 ​

段階的カスタマイズ ​

yaml
# ステップ1: 標準テンプレートの複製
名前: "Template OS Linux Custom"
基盤: "Template OS Linux by Zabbix agent"

# ステップ2: 企業固有要件追加
追加監視項目:
  - セキュリティパッチレベル
  - 企業内ソフトウェア監視
  - コンプライアンス要件

# ステップ3: 環境固有最適化
調整項目:
  - 監視間隔の最適化
  - 閾値の環境別調整
  - 不要項目の無効化

ハイブリッドアプローチ ​

yaml
# 継承構成
Template OS Linux Production:
  継承:
    - "Template OS Linux by Zabbix agent"  # OOTB
    - "Template Security Corporate"        # 自社セキュリティ
    - "Template Backup Standard"           # 自社バックアップ
  
  オーバーライド:
    - CPU閾値: 95% → 85%
    - メモリ閾値: 90% → 80%
    - 監視間隔: 1分 → 30秒

高度なテンプレート設計 ​

パフォーマンス最適化 ​

効率的なアイテム設計 ​

yaml
# 集約アイテムパターン
マスターアイテム: system.proc.num[]
依存アイテム:
  - system.proc.num[httpd]: "system.proc.num[httpd,,run]"
  - system.proc.num[mysql]: "system.proc.num[mysql,,run]"
  - system.proc.num[redis]: "system.proc.num[redis,,run]"

前処理: JSONPath抽出
更新間隔: マスター60秒、依存項目は無し

バッチ処理活用 ​

yaml
# ログ監視バッチ処理
log.count[/var/log/apache2/access.log,"ERROR",,"skip"]:
  更新間隔: 60秒
  前処理:
    - 正規表現抽出: "ERROR.*"
    - カウント処理
    - 差分計算

条件分岐テンプレート ​

動的設定切り替え ​

yaml
# 環境別監視間隔
アイテム: system.cpu.util
更新間隔式: 
  "{$ENVIRONMENT}=production ? 30s : 
   {$ENVIRONMENT}=staging ? 60s : 300s"

# サービス別閾値
トリガー式:
  "last(/host/system.cpu.util)>
   ({$SERVICE_TYPE}=web ? 80 : 
    {$SERVICE_TYPE}=db ? 90 : 95)"

テンプレート品質保証 ​

テスト手法 ​

テンプレート品質検証の自動化 ​

テンプレートの品質を確保するには、Zabbix API を使用した自動検証が有効です。検証対象として、アイテムの更新間隔(推奨:30秒以上)、トリガー式の構文正確性、マクロの命名規則、キーの重複がないかを確認します。検証スクリプトは Python や Bash で実装でき、CI/CD パイプラインに統合して本番環境へのデプロイ前に問題を検出できます。

ドキュメント化 ​

テンプレート仕様書 ​

markdown
# Template Service Apache v2.1 仕様書

## 概要
Apache Webサーバー監視用テンプレート

## 監視項目

### サービス監視
| アイテム名 | キー | 間隔 | 説明 |
|-----------|------|------|------|
| HTTP service | net.tcp.service[http] | 60s | HTTP接続確認 |
| HTTPS service | net.tcp.service[https] | 60s | HTTPS接続確認 |

### プロセス監視
| アイテム名 | キー | 間隔 | 説明 |
|-----------|------|------|------|
| Apache processes | proc.num[apache2] | 60s | Apacheプロセス数 |

## トリガー設定

### 重要度:High
- HTTP service down: HTTP接続失敗
- HTTPS service down: HTTPS接続失敗

### 重要度:Warning  
- Apache process count low: プロセス数が{$APACHE.PROC.MIN}以下

## マクロ設定
- {$APACHE.PROC.MIN}: "2" - 最小プロセス数
- {$APACHE.PROC.MAX}: "100" - 最大プロセス数

## 依存関係
- Template OS Linux by Zabbix agent

## バージョン履歴
- v2.1: SSL証明書有効期限監視追加
- v2.0: プロセス監視強化
- v1.0: 初版

ベストプラクティス ​

設計原則 ​

SOLID原則の適用 ​

yaml
# Single Responsibility (単一責任)
Template Service MySQL:        # MySQL監視のみ
Template Security SSH:         # SSH監視のみ
Template OS Linux Base:        # Linux基本監視のみ

# Open/Closed (開放閉鎖)
Template OS Linux Base:        # 拡張に開放
├── Template OS Linux Web      # 新機能追加
└── Template OS Linux DB       # 新機能追加

# Dependency Inversion (依存性逆転)
Template Application:           # 抽象化
├── Template Service Apache     # 具象実装
└── Template Service Nginx      # 具象実装

パフォーマンス考慮事項 ​

効率的な監視設計 ​

yaml
# データ収集の最適化
高頻度監視 (30秒):
  - サービス可用性
  - 重要なメトリクス

中頻度監視 (5分):
  - パフォーマンス指標
  - リソース使用率

低頻度監視 (30分):
  - 設定変更検知
  - ベースライン情報

セキュリティ考慮事項 ​

安全なテンプレート設計 ​

yaml
# 機密情報の保護
マクロ使用:
  - パスワード: {$DB_PASSWORD}
  - API Key: {$API_SECRET}
  - 証明書パス: {$SSL_CERT_PATH}

直接記述禁止:
  - ✗ password="secret123"
  - ✗ api_key="abc123xyz"
  - ✓ password="{$DB_PASSWORD}"

関連リンク ​


← 前へ: 5.1 ホスト管理 | 次へ: 5.3 自動ディスカバリ →