3.3 初期設定とセットアップ
Zabbixインストール後の基本設定と運用開始のための初期設定
初期設定概要
Zabbixのインストール完了後、実際の監視を開始するためには適切な初期設定が必要です。この段階では、セキュリティの強化、基本的な監視設定、運用に必要な各種設定を行います。
初期設定の重要性
適切な初期設定により以下が実現されます:
- セキュリティの確保: 不正アクセスの防止
- 効率的な監視: 必要な情報の確実な収集
- 運用の最適化: 管理負荷の軽減
- スケーラビリティ: 将来の拡張への対応
データベースの初期設定
MySQLの最適化設定
設定ファイルの調整
ini
# /etc/mysql/mysql.conf.d/mysqld.cnf の最適化例
[mysqld]
# 基本設定
bind-address = 127.0.0.1
port = 3306
socket = /var/run/mysqld/mysqld.sock
# 文字セット設定
character-set-server = utf8mb4
collation-server = utf8mb4_bin
# InnoDB設定(メモリ8GBサーバーの例)
innodb_buffer_pool_size = 4G
innodb_log_file_size = 256M
innodb_flush_log_at_trx_commit = 2
innodb_file_per_table = 1
innodb_doublewrite = 1
# 接続設定
max_connections = 1000
connect_timeout = 10
wait_timeout = 600
interactive_timeout = 600
# キャッシュ設定
table_open_cache = 5000
table_definition_cache = 1000
query_cache_type = 0
query_cache_size = 0
# ログ設定
log_error = /var/log/mysql/error.log
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 5
# 一時テーブル設定
tmp_table_size = 128M
max_heap_table_size = 128M
データベースのメンテナンス設定
sql
-- 定期的なメンテナンス用プロシージャの作成
DELIMITER $$
CREATE PROCEDURE OptimizeZabbixTables()
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE table_name VARCHAR(128);
DECLARE cur CURSOR FOR
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'zabbix' AND ENGINE = 'InnoDB';
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur;
read_loop: LOOP
FETCH cur INTO table_name;
IF done THEN
LEAVE read_loop;
END IF;
SET @sql = CONCAT('OPTIMIZE TABLE zabbix.', table_name);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END LOOP;
CLOSE cur;
END$$
DELIMITER ;
-- 履歴データクリーンアップのイベント作成
CREATE EVENT IF NOT EXISTS cleanup_old_data
ON SCHEDULE EVERY 1 DAY
STARTS CURRENT_TIMESTAMP
DO
BEGIN
DELETE FROM history WHERE clock < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 30 DAY));
DELETE FROM history_uint WHERE clock < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 30 DAY));
DELETE FROM history_str WHERE clock < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 7 DAY));
DELETE FROM history_text WHERE clock < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 7 DAY));
DELETE FROM history_log WHERE clock < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 7 DAY));
END;
-- イベントスケジューラーの有効化
SET GLOBAL event_scheduler = ON;
PostgreSQLの最適化設定
conf
# /etc/postgresql/15/main/postgresql.conf の最適化例
# メモリ設定(8GBサーバーの例)
shared_buffers = 2GB
effective_cache_size = 6GB
work_mem = 64MB
maintenance_work_mem = 512MB
# 接続設定
max_connections = 200
listen_addresses = 'localhost'
port = 5432
# WAL設定
wal_buffers = 16MB
checkpoint_completion_target = 0.9
max_wal_size = 2GB
min_wal_size = 1GB
# ログ設定
log_destination = 'stderr'
logging_collector = on
log_directory = 'pg_log'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
log_min_duration_statement = 1000
# 統計情報収集
track_activities = on
track_counts = on
track_functions = all
Webインターフェースの初期設定
初回セットアップウィザード
アクセスとセットアップ開始
1. ブラウザでアクセス: http://your-server-ip/zabbix
2. セットアップウィザードが自動的に開始
3. 言語選択: 日本語を選択可能
前提条件の確認
確認項目:
- PHP バージョン(8.0以降)
- PHP拡張モジュール
- PHP設定値
- データベース接続
データベース接続設定
設定項目:
Database type: MySQL
Database host: localhost
Database port: 3306
Database name: zabbix
Username: zabbix
Password: [設定したパスワード]
Zabbixサーバー設定
設定項目:
Host: localhost
Port: 10051
Name: Zabbix server
管理者アカウントの設定
デフォルトパスワードの変更
初期ログイン情報:
Username: Admin
Password: zabbix
必須変更事項:
1. 管理者パスワードの変更
2. ユーザープロファイルの設定
3. タイムゾーンの設定
ユーザー管理の初期設定
sql
-- データベースで直接パスワードを変更する場合
-- (Web UI での変更を推奨)
UPDATE users SET passwd = MD5('new_secure_password') WHERE alias = 'Admin';
タイムゾーンと地域設定
PHP設定での時刻設定
ini
# /etc/php/8.2/apache2/php.ini
date.timezone = Asia/Tokyo
Zabbixサーバー設定での時刻同期
bash
# NTPクライアントの設定
apt install chrony
# Chrony設定例
cat > /etc/chrony/chrony.conf << EOF
pool 2.pool.ntp.org iburst
pool 1.asia.pool.ntp.org iburst
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
EOF
# サービス開始
systemctl enable chrony
systemctl start chrony
# 時刻同期確認
chrony sources -v
Web UI での地域設定
Administration → General → GUI:
- Default time zone: (GMT+09:00) Asia/Tokyo
- Date format: Y-m-d
- Time format: H:i:s
基本的なセキュリティ設定
ネットワークセキュリティ
ファイアウォール設定の強化
bash
# UFW(Ubuntu Firewall)の設定例
ufw --force reset
ufw default deny incoming
ufw default allow outgoing
# SSH アクセス
ufw allow from 192.168.1.0/24 to any port 22
# Web UI アクセス
ufw allow from 192.168.1.0/24 to any port 80
ufw allow from 192.168.1.0/24 to any port 443
# Zabbix エージェント通信
ufw allow from 192.168.1.0/24 to any port 10050
ufw allow from 192.168.1.0/24 to any port 10051
# ファイアウォール有効化
ufw --force enable
SSL/TLS設定の強化
apache
# /etc/apache2/sites-available/zabbix-ssl.conf
<VirtualHost *:443>
ServerName zabbix.yourdomain.com
DocumentRoot /usr/share/zabbix
# SSL設定
SSLEngine on
SSLCertificateFile /etc/ssl/certs/zabbix.crt
SSLCertificateKeyFile /etc/ssl/private/zabbix.key
# セキュリティヘッダー
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
Header always set X-Content-Type-Options nosniff
Header always set X-Frame-Options DENY
Header always set X-XSS-Protection "1; mode=block"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
# セキュリティ設定
<Directory "/usr/share/zabbix">
AllowOverride None
Require all granted
# PHPセキュリティ設定
php_admin_value expose_php Off
php_admin_value display_errors Off
php_admin_value log_errors On
</Directory>
# 不要なディレクトリのアクセス拒否
<Directory "/usr/share/zabbix/conf">
Require all denied
</Directory>
</VirtualHost>
認証設定の強化
Web UI セッション設定
php
// /usr/share/zabbix/conf/zabbix.conf.php 追加設定
// セッションタイムアウト(秒)
$ZBX_SESSION_TIMEOUT = 1800; // 30分
// セッションCookie設定
ini_set('session.cookie_httponly', 1);
ini_set('session.cookie_secure', 1);
ini_set('session.use_strict_mode', 1);
LDAP認証の設定
Administration → Authentication:
1. Authentication type: LDAP
2. LDAP settings:
- Host: ldap.yourdomain.com
- Port: 389 (or 636 for LDAPS)
- Base DN: ou=users,dc=yourdomain,dc=com
- Search attribute: uid
- Bind DN: cn=zabbix,ou=services,dc=yourdomain,dc=com
- Bind password: [LDAP bind password]
アクセス制御の設定
IPアドレス制限
apache
# Apache設定での IP制限例
<Directory "/usr/share/zabbix">
<RequireAll>
Require ip 192.168.1.0/24
Require ip 10.0.0.0/8
Require not ip 192.168.1.100
</RequireAll>
</Directory>
ユーザーグループとロールの設定
Administration → User groups:
1. 読み取り専用オペレータ
- GUI access: Internal
- Users status: Enabled
- Frontend access: Default
2. 上級オペレータ
- GUI access: Internal
- Debug mode: Enabled
- Users status: Enabled
3. スーパー管理者
- GUI access: Internal
- Debug mode: Enabled
- Users status: Enabled
- Frontend access: Default
基本監視設定
Zabbixエージェントの設定
エージェント設定ファイル
ini
# /etc/zabbix/zabbix_agentd.conf
# パッシブチェック設定
Server=127.0.0.1,192.168.1.10
ListenPort=10050
ListenIP=0.0.0.0
# アクティブチェック設定
ServerActive=192.168.1.10:10051
Hostname=zabbix-server
# ログ設定
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=10
DebugLevel=3
# セキュリティ設定
AllowRoot=0
User=zabbix
# パフォーマンス設定
StartAgents=5
RefreshActiveChecks=60
BufferSend=5
BufferSize=100
MaxLinesPerSecond=20
# タイムアウト設定
Timeout=3
UnsafeUserParameters=0
# ユーザーパラメータ例
UserParameter=mysql.ping,mysqladmin -uzabbix -p'password' ping 2>/dev/null | grep -c alive
UserParameter=mysql.uptime,mysqladmin -uzabbix -p'password' status | grep -oE 'Uptime: [0-9]+'
ホストの追加と基本監視
Zabbixサーバー自身の監視設定
Configuration → Hosts → Create host:
1. Host name: Zabbix server
2. Templates:
- Linux by Zabbix agent
- Zabbix server health
3. Groups: Zabbix servers
4. Interfaces:
- Agent: 127.0.0.1:10050
- JMX: 127.0.0.1:12345 (必要に応じて)
基本テンプレートの確認
推奨テンプレート:
- Linux by Zabbix agent: OS基本監視
- Apache by HTTP: Webサーバー監視
- MySQL by Zabbix agent: データベース監視
- Zabbix server health: Zabbixサーバー自身の監視
アクション設定
メール通知の設定
Administration → Media types → Email:
1. Name: Email
2. Type: Email
3. SMTP server: mail.yourdomain.com
4. SMTP server port: 587
5. SMTP security: STARTTLS
6. Authentication: Username and password
7. Username: [email protected]
8. Password: [メールパスワード]
基本アクションの作成
Configuration → Actions → Create action:
1. Name: Send email on problems
2. Conditions:
- Trigger severity >= Warning
- Host group = Linux servers
3. Operations:
- Send message to users: Admin
- Subject: Problem: {EVENT.NAME}
- Message:
Problem started at {EVENT.TIME} on {EVENT.DATE}
Problem name: {EVENT.NAME}
Host: {HOST.NAME}
Severity: {EVENT.SEVERITY}
運用設定
ログ管理設定
ログローテーション設定
bash
# /etc/logrotate.d/zabbix
/var/log/zabbix/*.log {
weekly
missingok
rotate 52
compress
delaycompress
notifempty
create 0640 zabbix zabbix
postrotate
/bin/kill -SIGUSR1 `cat /var/run/zabbix/zabbix_server.pid 2> /dev/null` 2> /dev/null || true
/bin/kill -SIGUSR1 `cat /var/run/zabbix/zabbix_agentd.pid 2> /dev/null` 2> /dev/null || true
endscript
}
バックアップ戦略
データベースバックアップスクリプト
bash
#!/bin/bash
# /usr/local/bin/zabbix_backup.sh
BACKUP_DIR="/backup/zabbix"
DATE=$(date +%Y%m%d_%H%M%S)
DB_NAME="zabbix"
DB_USER="zabbix"
DB_PASS="password"
# ディレクトリ作成
mkdir -p ${BACKUP_DIR}
# データベースバックアップ
mysqldump -u${DB_USER} -p${DB_PASS} \
--single-transaction \
--routines \
--triggers \
${DB_NAME} | gzip > ${BACKUP_DIR}/zabbix_db_${DATE}.sql.gz
# 設定ファイルバックアップ
tar czf ${BACKUP_DIR}/zabbix_config_${DATE}.tar.gz \
/etc/zabbix/ \
/usr/share/zabbix/conf/
# 古いバックアップの削除(7日以上古いもの)
find ${BACKUP_DIR} -name "*.gz" -mtime +7 -delete
echo "Backup completed: ${DATE}"
バックアップの自動実行設定
bash
# crontab -e
# 毎日午前3時にバックアップ実行
0 3 * * * /usr/local/bin/zabbix_backup.sh >> /var/log/zabbix_backup.log 2>&1
監視の確認
基本動作確認チェックリスト
markdown
## サービス確認
- [ ] Zabbixサーバーサービスが稼働中
- [ ] Zabbixエージェントサービスが稼働中
- [ ] Webサーバーが稼働中
- [ ] データベースサービスが稼働中
## 通信確認
- [ ] Web UI にアクセス可能
- [ ] エージェント通信が正常
- [ ] データベース接続が正常
## 監視機能確認
- [ ] ホストが正常に登録されている
- [ ] アイテムがデータを収集している
- [ ] トリガーが正常に動作している
- [ ] 通知が正常に送信される
## セキュリティ確認
- [ ] デフォルトパスワードが変更済み
- [ ] ファイアウォール設定が適切
- [ ] SSL/TLS が設定済み
- [ ] アクセス制限が設定済み
パフォーマンス監視
Zabbix内部メトリクスの監視
監視すべき内部メトリクス:
- zabbix[process,poller,avg,busy]
- zabbix[process,trapper,avg,busy]
- zabbix[wcache,values,all]
- zabbix[vcache,buffer,pfree]
- zabbix[rcache,buffer,pfree]
まとめ
Zabbixの初期設定では以下のポイントが重要です:
- セキュリティファースト: デフォルト設定のまま運用しない
- 適切な監視設定: 必要十分な監視項目の設定
- 運用の自動化: バックアップとメンテナンスの自動化
- パフォーマンス最適化: データベースとシステムの調整
- 継続的な改善: 監視内容の定期的な見直し
これで第3部「インストールと初期設定」が完了しました。次の第4部では、実際の監視機能について詳しく学習していきます。
参考リンク