Troubleshooting agent issues
============================

PEMエージェントで発生する可能性のあるこれらの問題をトラブルシューティングできます。

削除されたPEMエージェントの復元
-------------------------------

エージェントが\ ``pem.agent``
テーブルから削除されている場合、復元することはできません。
pemworkerユーティリティを使用してエージェントを再登録する必要があります。

エージェントがPEM Webクライアントから削除されたが、値が\ ``active = f``
の\ ``pem.agent``
テーブルにエントリがまだある場合、エージェントを復元できます。

1. ``id`` および\ ``active`` フィールドの値を確認します。

``pem=# SELECT * FROM pem.agent;``

2. エージェントのステータスを\ ``pem.agent`` テーブルの\ ``true``
   に更新します。

``pem=# UPDATE pem.agent SET active=true WHERE id=<x>;``

``x`` は、ステップ1で使用したクエリーの出力に表示された識別子です。

3. PEM Webクライアントを更新します。

削除されたエージェントが復元されます。ただし、そのエージェントにバインドされたサーバーはダウンしているように見える場合があります。この問題を解決するには、サーバーのPEMエージェントプロパティを変更して、バインドされたエージェントを再度追加します。変更が成功すると、サーバーは正常に実行されているように表示されます。

構成ファイルパスの更新エージェントのステータスが不明と表示されます
------------------------------------------------------------------

エージェント構成ファイル ``agent.cfg``
をデフォルトの場所\ ``/usr/edb/pem/agent/etc``
から別の場所に移動すると、PEMダッシュボードにエージェントステータスが「不明」と表示される場合があります。その場合、\ ``pemagent``
サービスファイルのエージェント構成ファイルパスの値を更新する必要があります。

1. 次のコマンドを使用して、スーパーユーザーとして\ ``pemagent``
   サービスファイルを変更します。

.. code:: shell

       # Running as superuser
       sudo vi  /usr/lib/systemd/system/pemagent.service

2. ``agent.cfg``
   ファイルパスを更新します。たとえば、Redhatホストでは、ファイルパスを更新します。

.. code:: shell

       ExecStart=/usr/edb/pem/agent/bin/pemagent -c /usr/edb/pem/agent/etc/agent.cfg

3. ``systemd`` をリロードして、変更したサービススクリプトを更新します。

.. code:: shell

       sudo systemctl daemon-reload

4. PEMエージェントを再起動します。

.. code:: shell

       sudo systemctl restart pemagent

コマンドラインを使用してダウンまたは不明なステータスのPEMエージェントを削除する
-------------------------------------------------------------------------------

PEM
Webインターフェイスを使用して、ダウンまたは不明なステータスのPEMエージェントを削除することは、このようなエージェントの数が多い場合、困難になる場合があります。この状況では、コマンドラインインターフェイスを使用して、ダウンまたは不明なエージェントを削除できます。

次のクエリーを使用して、 *N*
時間以上ダウンしているエージェントを削除します。

.. code:: sql

   UPDATE pem.agent SET active=false WHERE id IN
   (SELECT a.id FROM pem.agent
   a JOIN pem.agent_heartbeat b ON (b.agent_id=a.id)
   WHERE a.id IN
   (SELECT agent_id FROM pem.agent_heartbeat WHERE (EXTRACT (HOUR FROM now())-
   EXTRACT (HOUR FROM last_heartbeat)) > <N> ));

次のクエリーを使用して、不明なステータスのエージェントを削除します。

.. code:: sql

   UPDATE pem.agent SET active=false WHERE id IN
   (SELECT id FROM pem.agent WHERE id NOT IN
   (SELECT agent_id FROM pem.agent_heartbeat));
