Windows「Zabbix agent is not available」エラーを完全解決!原因から対処法まで徹底解説

Windows

「Zabbix agent is not available」

このエラーメッセージを見て、焦っていませんか?

「昨日まで正常に監視できていたのに…」 「Windowsサーバーの死活監視が全部赤くなってる!」 「ファイアウォールは開けたはずなのに、なぜ繋がらない?」

大丈夫です。このエラーの90%以上は設定ミスか、サービスの停止が原因です。ハードウェア故障ではありません。

実は、このエラーには明確なパターンがあり、順番にチェックしていけば15分以内に解決できることがほとんどです。

この記事では、現場で実際に遭遇する原因と、その解決方法を優先度順に解説します。監視を一刻も早く復旧させましょう!


スポンサーリンク

まず確認!3分で試せる基本チェック

1. Zabbix Agentサービスの状態確認【最重要】

これが原因の50%を占めます!

確認手順:

  1. services.mscを実行(Windowsキー + R)
  2. **「Zabbix Agent」または「Zabbix Agent 2」**を探す
  3. 状態を確認

状態別の対処法:

  • 停止 → 右クリック → 「開始」
  • 開始済みなのにエラー → 「再起動」を試す
  • サービスが存在しない → エージェントの再インストールが必要

PowerShellで確認:

Get-Service "Zabbix Agent*" | Select-Object Name, Status, StartType

サービスが「Running」でない場合:

Start-Service "Zabbix Agent"
# または
Restart-Service "Zabbix Agent"

2. ポート10050の疎通確認

Zabbixサーバーから到達できるか確認します。

エージェント側(Windows)で確認:

# ポートがリッスンしているか
netstat -an | findstr :10050

正常な場合の表示:

TCP    0.0.0.0:10050    0.0.0.0:0    LISTENING

Zabbixサーバー側から確認:

# telnetで接続テスト
telnet [WindowsサーバーIP] 10050

# ncコマンドでも可
nc -zv [WindowsサーバーIP] 10050

繋がらない場合 → ファイアウォールの問題

3. 設定ファイルの基本項目確認

設定ファイルの場所:

  • 通常:C:\Program Files\Zabbix Agent\zabbix_agentd.conf
  • または:C:\Program Files\Zabbix Agent 2\zabbix_agent2.conf

必須確認項目:

# Zabbixサーバーのアドレス(必須)
Server=192.168.1.100

# アクティブチェック用(該当する場合)
ServerActive=192.168.1.100

# ホスト名(Zabbixサーバーの設定と一致させる)
Hostname=WIN-SERVER01

# ログファイル(エラー確認用)
LogFile=C:\Program Files\Zabbix Agent\zabbix_agentd.log

よくあるミス:

  • ServerにlocalhostやZabbixサーバー自身のIPを書いている
  • Hostnameが大文字小文字含めて完全一致していない
  • コメントアウト(#)し忘れ

エラーパターン別:詳細な解決方法

パターン1:「Cannot connect to [host:10050]: [113] No route to host」

原因: ネットワーク到達性の問題

解決手順:

  1. Windowsファイアウォールの確認
# 受信規則を追加
New-NetFirewallRule -DisplayName "Zabbix Agent" `
  -Direction Inbound -Protocol TCP -LocalPort 10050 `
  -Action Allow
  1. Windows Defenderファイアウォールで確認
    • コントロールパネル → Windows Defender ファイアウォール
    • 「詳細設定」→ 受信の規則
    • ポート10050が許可されているか確認
  2. 一時的に無効化してテスト(本番環境では非推奨)
Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled False
# テスト後は必ず有効化
Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled True

パターン2:「Get value from agent failed: ZBX_TCP_READ() failed」

原因: エージェントが応答を返せない

解決方法:

  1. タイムアウト値を増やす

zabbix_agentd.conf:

Timeout=30  # デフォルト3秒から30秒に
  1. 同時接続数を確認
StartAgents=5  # 必要に応じて増やす
  1. メモリ不足の確認
Get-WmiObject Win32_OperatingSystem | 
  Select-Object TotalVisibleMemorySize, FreePhysicalMemory

パターン3:「Received empty response from Zabbix Agent」

原因: 設定の不一致またはアクセス制限

確認ポイント:

  1. Server設定の確認
# 複数のZabbixサーバーがある場合
Server=192.168.1.100,192.168.1.101

# セキュリティ注意:以下は避ける
Server=0.0.0.0/0  # 全てのIPを許可(危険)
  1. ホスト名の完全一致を確認

Windowsで現在のホスト名確認:

hostname
# または
[System.Net.Dns]::GetHostName()

Zabbixサーバー側の設定と完全一致させる(大文字小文字も)

パターン4:「Host [hostname] not found」

原因: Zabbixサーバー側にホストが登録されていない、または名前が違う

解決手順:

  1. Zabbix Web UIで確認
    • 設定 → ホスト
    • ホスト名が正確に登録されているか
  2. エージェント側の設定
# 以下の3つの方法から選択

# 方法1:ホスト名を明示的に指定
Hostname=WIN-SERVER01

# 方法2:システムのホスト名を使用
# Hostname=

# 方法3:ホスト名の代わりにIPを使用
HostnameItem=system.hostname

Windowsファイアウォール完全攻略

GUIでの設定方法

手順詳細:

  1. Windows Defender ファイアウォール with Advanced Security を開く
    • wf.msc を実行
  2. 受信規則を作成
    • 「受信の規則」→ 「新しい規則」
    • 規則の種類:「ポート」
    • プロトコル:TCP
    • 特定のローカルポート:10050
    • 接続を許可する
    • プロファイル:すべて選択(またはドメインのみ)
    • 名前:「Zabbix Agent Inbound」
  3. 送信規則(アクティブチェック使用時)
    • 同様に送信規則でポート10051を許可

PowerShellでの一括設定

# Zabbix Agent用の規則を作成
New-NetFirewallRule -DisplayName "Zabbix Agent Passive" `
  -Direction Inbound -Protocol TCP -LocalPort 10050 `
  -Action Allow -Profile Any

# アクティブチェック用(必要な場合)
New-NetFirewallRule -DisplayName "Zabbix Agent Active" `
  -Direction Outbound -Protocol TCP -RemotePort 10051 `
  -Action Allow -Profile Any

# 特定のIPからのみ許可(セキュリティ強化)
New-NetFirewallRule -DisplayName "Zabbix Agent Secure" `
  -Direction Inbound -Protocol TCP -LocalPort 10050 `
  -RemoteAddress "192.168.1.100" -Action Allow

セキュリティグループ(AWS/Azure)の設定

AWS EC2の場合:

  • インバウンドルール:TCP 10050をZabbixサーバーのIPから許可
  • アウトバウンドルール:通常はすべて許可でOK

Azureの場合:

  • ネットワークセキュリティグループ(NSG)
  • 受信セキュリティ規則でポート10050を追加

ログファイルから原因を特定

ログファイルの場所と確認方法

デフォルトの場所:

C:\Program Files\Zabbix Agent\zabbix_agentd.log

PowerShellで最新ログを確認:

# 最新50行を表示
Get-Content "C:\Program Files\Zabbix Agent\zabbix_agentd.log" -Tail 50

# リアルタイム監視
Get-Content "C:\Program Files\Zabbix Agent\zabbix_agentd.log" -Wait

# エラーのみ抽出
Select-String -Path "C:\Program Files\Zabbix Agent\zabbix_agentd.log" `
  -Pattern "ERROR|WARNING" | Select-Object -Last 20

よくあるエラーメッセージと対処法

「cannot bind to port 10050」

  • 原因:ポートが既に使用中
  • 対処:netstat -ano | findstr :10050で確認し、競合プロセスを停止

「cannot open log file」

  • 原因:権限不足
  • 対処:Zabbix Agentサービスの実行アカウントに書き込み権限を付与

「no active checks on server」

  • 原因:アクティブチェックの設定ミス
  • 対処:ServerActiveの設定を確認

「permission denied」

  • 原因:監視項目へのアクセス権限不足
  • 対処:サービスアカウントをLocal Systemに変更

サービスアカウントと権限設定

適切なアカウントの選択

選択肢と特徴:

  1. Local System(推奨)
    • 最も権限が強い
    • パフォーマンスカウンター等すべて取得可能
    • セキュリティリスクは高い
  2. Network Service
    • 制限付きだが多くの監視は可能
    • ドメイン環境では推奨
  3. 専用サービスアカウント
    • 最もセキュア
    • 必要な権限のみ付与

サービスアカウントの変更:

  1. services.msc → Zabbix Agent → プロパティ
  2. 「ログオン」タブ
  3. 「ローカルシステムアカウント」を選択
  4. サービスを再起動

必要な権限の付与

パフォーマンスモニター権限:

# ユーザーをPerformance Monitor Usersグループに追加
Add-LocalGroupMember -Group "Performance Monitor Users" `
  -Member "ドメイン\ユーザー名"

イベントログ読み取り権限:

# Event Log Readersグループに追加
Add-LocalGroupMember -Group "Event Log Readers" `
  -Member "ドメイン\ユーザー名"

設定ファイルの最適化

パフォーマンス向上設定

# === 基本設定 ===
Server=192.168.1.100
ServerActive=192.168.1.100
Hostname=WIN-SERVER01

# === パフォーマンス設定 ===
StartAgents=5              # 同時処理数(CPU数に応じて調整)
Timeout=30                 # タイムアウト(重い処理がある場合)
BufferSize=1000           # バッファサイズ(大量アイテム時)
BufferSend=10             # 送信間隔(秒)

# === ログ設定 ===
LogFile=C:\Program Files\Zabbix Agent\zabbix_agentd.log
LogFileSize=10            # ログローテーション(MB)
DebugLevel=3              # 通常運用は3、トラブル時は4

# === セキュリティ設定 ===
EnableRemoteCommands=0    # リモートコマンド無効(セキュリティ)
UnsafeUserParameters=0    # 安全でないパラメータ拒否

# === Windows固有設定 ===
PerfCounter=\Processor(_Total)\% Processor Time,30
PerfCounter=\Memory\Available MBytes,60

トラブルシューティング用設定

デバッグ時の設定:

DebugLevel=4              # 詳細ログ
LogFileSize=50            # ログサイズを増やす
Timeout=30                # タイムアウトを延ばす

一般的なトラブルと解決策

監視データは取れるがグラフが描画されない

原因と対策:

  1. 時刻同期のずれ → NTPで同期
  2. ヒストリ保存期間が短い → Zabbix側で調整
  3. アイテムの型が不一致 → 数値型に統一

特定のアイテムだけエラーになる

確認方法:

# エージェント側でテスト
"C:\Program Files\Zabbix Agent\zabbix_agentd.exe" -t system.cpu.load[all,avg1]

よくある原因:

  • UserParameterの記述ミス
  • 実行権限不足
  • タイムアウト

CPU使用率が高い

対策:

# 監視間隔を調整
BufferSend=30           # 送信間隔を延ばす
StartAgents=3           # エージェント数を減らす

予防保守とベストプラクティス

定期メンテナンス項目

週次:

  • ログファイルのサイズ確認
  • エラーログの確認
  • CPU/メモリ使用率確認

月次:

  • Zabbix Agentのバージョン確認
  • Windowsアップデート後の動作確認
  • ファイアウォール規則の確認

監視設定のベストプラクティス

推奨設定:

  1. 暗号化通信の使用(Zabbix Agent 2)
TLSConnect=psk
TLSAccept=psk
TLSPSKIdentity=PSK001
TLSPSKFile=C:\Program Files\Zabbix Agent\zabbix_agentd.psk
  1. 監視専用アカウントの作成
  2. 定期的なバックアップ
    • 設定ファイル
    • PSKファイル
    • UserParameterスクリプト

アップグレード時の注意点

手順:

  1. 設定ファイルのバックアップ
  2. サービス停止
  3. 新バージョンインストール
  4. 設定ファイルの移行
  5. サービス開始
  6. 動作確認

まとめ:「not available」エラーを二度と起こさない!

ここまで読んでいただき、ありがとうございます!

「Zabbix agent is not available」エラーは、適切な手順で確認すれば必ず解決できます。

今すぐ確認すべき3つ:

  1. サービスが起動しているか Get-Service "Zabbix Agent*"
  2. ポート10050が開いているか Test-NetConnection -ComputerName localhost -Port 10050
  3. 設定ファイルのServerとHostname
    • 特にHostnameの大文字小文字に注意!

トラブルシューティングの順序:

  1. サービス確認 → 再起動
  2. ファイアウォール確認 → ポート開放
  3. 設定ファイル確認 → 修正
  4. ログ確認 → エラー特定
  5. 権限確認 → 付与

予防のために:

  • 設定変更時は必ずバックアップ
  • ログの定期確認を習慣化
  • テスト環境で事前検証

最後に、Zabbix Agentのトラブルは焦らず順番に確認することが大切です。この記事をブックマークして、トラブル時のチェックリストとして活用してください。

安定した監視環境の構築・運用を応援しています!

コメント

タイトルとURLをコピーしました