Registering a PEM agent
=======================

PEMエージェントを使用する前に、PEMサーバーに登録する必要があります。
**PEMサーバーパッケージによってインストールされたPEMエージェントは、サーバーの構成中に自動的に登録されます。**
他のすべてのエージェントの場合、これらの手順に従ってください。

..  Note::
   PEMエージェントをアップグレードした後、再起動する必要があります。再度登録する必要はありません。

PEMエージェントを登録する方法
-----------------------------

LinuxおよびWindowsホストでは、PEMエージェントパッケージにはpemworkerと呼ばれるコマンドラインユーティリティが含まれています。これを使用して、
:ref:`pemworkerユーティリティを使用したPEMエージェントの登録 <pemworkerユーティリティを使用したPEMエージェントの登録>` を含む管理タスクを実行できます。

Windowsでは、PEMエージェントグラフィカルインストーラーを使用して、インストール時にエージェントを登録できます。この便利なオプションは、pemworkerユーティリティが提供するすべての可能性をサポートしているわけではありません。インストーラーにエージェントを登録したくない場合は、
**Register now** チェックボックスをオフにします。詳細については、
`installation instructions <https://www.enterprisedb.com/docs/pem/latest/installing/windows/>`_ を参照してください。

pemworkerユーティリティを使用したPEMエージェントの登録
------------------------------------------------------

pemworkerユーティリティは、PEMエージェントとともにインストールされます。これは、
Linuxでは\ ``/usr/edb/pem/agent/bin`` 、
Windowsでは\ ``C:\Program Files\edb\pem\agent-x64\bin`` にあります。

エージェントを登録するには、PEMサーバーのパスワードを設定し、例に示すようにユーティリティを呼び出し、必要に応じてテーブルから関連オプションを追加します。各オプションの後には、対応する値を続けます。

Linux
^^^^^

.. code:: shell

   export PEM_SERVER_PASSWORD=edb

   #  Running as root

   pemworker --register-agent

Windows
^^^^^^^

.. code:: shell

   set PEM_SERVER_PASSWORD=edb

   #  Running as admin

   ./pemworker.exe REGISTER

.. csv-table::
  :header: Option,Description
  :widths: 10,30
  :align: left
  :class: longtable

  `--pem-server`,PEMバックエンドデータベースサーバーのIPアドレス。このパラメーターは必須です。
  `--pem-port`,PEMバックエンドデータベースサーバーのポート。デフォルト値は`5432`です。
  `--pem-user`,pem_adminロールとPEMバックエンドデータベースサーバーで`rolcreaterole`フラグが設定されているデータベースユーザーまたはスーパーユーザーの名前。このユーザーはPEMサーバーに接続し、エージェント登録を実行するために使用されます。このパラメーターは必須です。
  `--pem-agent-user`,PEMバックエンドデータベースサーバー上のデータベースユーザーの名前。登録後、エージェントはこのユーザーを使用してPEMデータベースサーバーへの接続を開き、プローブデータの書き込み、アラートの評価などを行います。このパラメーターはオプショナル。省略すると、エージェントは登録時に作成された`agent<N>`という名前の新しいユーザーを使用して接続します。`<N>`はエージェントIDです。このユーザーは常に作成されます。 `pem-agent-user`を指定した場合でも、エージェントは`SET ROLE agent<N>`を使用して、接続が確立された後にロールを切り替えます。
  `--pem-ssl-mode`,使用するPEMエージェントユーザーの  `SSL mode <https://www.postgresql.org/docs/current/libpq-ssl.html#LIBPQ-SSL-PROTECTION>`__  上記を参照してください。使用可能な値は`prefer`、`require`、`disable`、`verify-CA`、および`verify-full`です。デフォルト値は`require`です。
  `--cert-path`,証明書を保存するディレクトリへの完全なパス。パスを提供しない場合、証明書はLinuxでは`~/.pem`、 Windowsでは`%APPDATA%/pem`で作成されます。
  `--config-dir`,構成ファイルのディレクトリパス。デフォルトは`<pemworker path>/../etc`です。
  `--display-name`,PEMブラウザツリーに表示されるエージェントのわかりやすい名前。 PEM 9.6以降では、デフォルトはホストの完全修飾ドメイン名FQDNであり、このオプションが設定されていない場合はホスト名にフォールバックします。 PEM 9.6より前のリリースの場合、デフォルトはホスト名です。
  `--force-registration`,`force-registration`句を含めて、指定された引数でエージェントを登録します。この句は、既存のエージェント構成をオーバーライドする場合に役立ちます。デフォルト値は`Yes`です。
  `--group`,エージェントを配置するグループの名前。このパラメーターはオプショナル。省略すると、エージェントはグループに配置されません。
  `--team`,PEMバックエンドデータベースサーバー上のデータベースロールの名前。このエージェントへのアクセスは、名前付けたロール、所有者、およびpem_adminロールのみに制限されています。このパラメーターはオプショナル。省略すると、チームは割り当てられず、すべてのユーザーがこのエージェントにアクセスできます。
  `--owner`,PEMバックエンドデータベースサーバー上のデータベースユーザーの名前。このユーザーは、エージェントの所有者として割り当てられます。省略すると、指定された`pem-user`が所有者として割り当てられます。
  `--allow_server_restart`,PEMが監視対象サーバーを再起動できます。デフォルト値は`True`です。
  `--allow-batch-probes`,PEMがこのエージェントでバッチプローブを実行できるようにします。デフォルト値は`False`です。
  `--batch-script-user`,バッチ/シェルスクリプトの実行に使用するオペレーティングシステムユーザー。デフォルト値はnoneです。このパラメーターを空白のままにするか、指定されたユーザーが存在しない場合、スクリプトは実行されません。
  `--enable-heartbeat-connection`,PEMエージェントとサーバーの間に専用のハートビート接続を作成して、アクティブステータスを更新します。デフォルト値は`False`です。
  `--enable-smtp`,PEMエージェントがPEMサーバーに代わって電子メールを送信できるようにします。デフォルト値は`False`です。
  `--enable-snmp`,PEMエージェントがPEMサーバーに代わってSNMPトラップを送信できるようにします。デフォルト値は`False`です。
  `-o`,構成ファイルオプションをオーバーライドします。使用方法については、次の :ref:`デフォルト構成のオーバーライド-例<デフォルト構成のオーバーライド-例>` を参照してください。

..  Note Allowing the agent to restart the database server::
   PEMエージェント監査マネージャー、ログマネージャー、またはチューニングウィザードなどによるデータベースサーバーの再起動が必要なPEMの機能を使用する場合、 `agent.cfg` ファイルで`allow_server_restart` の値を`true` に設定するか、システムを再起動する必要があります。サーバーを手動で削除して変更を有効にします。

..  Note Running shell/batch jobs::
   エージェントを使用してシェル/バッチジョブを実行する場合、 `batch_script_user` パラメーターにユーザーを指定する必要があります非rootユーザーを使用してスクリプトを実行することを強くお勧めします。  rootユーザーを使用すると、データセキュリティとオペレーティングシステムのセキュリティが危険にさらされる可能性があります。

pemworkerユーティリティの認証
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

PEMデータベースに変更を加える前に、接続はPEMデータベースサーバーで認証されます。
pemworkerユーティリティを呼び出すときに、PEMサーバーの管理ユーザーロールpostgresに関連付けられたパスワードを提供する必要があります。管理パスワードは3つの方法で指定できます。

- ``PEM_SERVER_PASSWORD`` 環境変数を設定します。

- ``PGPASSWORD``
  キーワードを使用して、コマンドラインにパスワードを入力します。

- ``.pgpass`` ファイルにエントリーを作成します。

パスワードを入力しない場合、パスワード認証エラーが発生します。認証が成功すると、その他の不足している必須情報の入力を求められます。登録が完了すると、サーバーはエージェントが正常に登録されたことを確認します。

PEMエージェントの登録解除
-------------------------

pemworkerユーティリティを使用して、PEMエージェントの登録を解除できます。エージェントの登録を解除するには、以下の例に示すようにpemworkerユーティリティを呼び出します。

.. _linux-1:

Linux
^^^^^

.. code:: shell


   #  Running as root

   pemworker --unregister-agent

.. _windows-1:

Windows
^^^^^^^

.. code:: shell

   ./pemworker.exe UNREGISTER-AGENT

pemworkerユーティリティを呼び出すときに、コマンド文字列にコマンドラインオプションを追加します。各オプションの後には、対応する値を続けます。

.. csv-table::
  :header: Option,Description
  :widths: 10,30
  :align: left
  :class: longtable

  `--pem-user <username>`,PEMバックエンドデータベースサーバーのデータベースユーザーpem_adminロールのメンバーの名前。このパラメーターは必須です。
  `--config-dir`,"構成ファイルのディレクトリパス。デフォルトは`""<pemworker path>/../etc""`です。"

高度な使用法
------------

以下は、PEMエージェント登録の詳細なオプションの一部です。

エージェントIDの設定
^^^^^^^^^^^^^^^^^^^^

登録された各PEMエージェントには、一意のエージェントIDが必要です。
:ref:`デフォルト構成のオーバーライド-例 <デフォルト構成のオーバーライド-例>` に示すように、 ``-o``
オプションを使用して値が提供されない限り、値\ ``max(id)+1``
は各エージェントIDに割り当てられます。

デフォルト構成のオーバーライド-例
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

この例は、PEMエージェントを登録し、デフォルト構成をオーバーライドする方法を示しています。

.. _エージェントidの設定-1:

エージェントIDの設定
^^^^^^^^^^^^^^^^^^^^

コマンドラインを使用してPEMエージェントを登録します。 ``-o``
オプションを使用して、\ ``agent_id`` 値8を割り当てます。

.. code:: shell


   #  Running as root

   /usr/edb/pem/agent/bin/pemworker --register-agent \
   - -pem-server pemserver \
   - -pem-user postgres \
   - -pem-port 5432 \
   - -display-name agent8 \
   - o agent_id=8
   __OUTPUT__
   Postgres Enterprise Manager Agent registered successfully!

8の\ ``agent_id``
が利用可能なため、PEMエージェントは正常に登録されました。指定されたIDが既存のエージェントによって既に使用されている場合、エラーが発生します。

既存のSSL証明書とキーの提供
^^^^^^^^^^^^^^^^^^^^^^^^^^^

コマンドラインを使用してPEMエージェントを登録します。既存のSSL証明書とキーファイルを割り当てて、特定のエージェントIDに対して新しい証明書が生成されないようにします。
SSL証明書とキーファイルは、データベースユーザー\ ``agent<ID>``
に対して有効である必要があります。\ ``<ID>``
は、コマンドラインを使用して指定されたものと同じである必要があります。
``-o`` オプションを使用します。

.. code:: shell


   #  Running as root

   #  List the location of valid SSL certificates and key files.

   ls -l /root/.pem/agent5.*
   - rw------- 1 root root 2192 Nov  7 11:27 /root/.pem/agent5.crt
   - rw------- 1 root root 3244 Nov  7 11:27 /root/.pem/agent5.key
      

   #  Register the PEM agent using command line. Assign the

   #  SSL certificates and key files using the -o option.

   /usr/edb/pem/agent/bin/pemworker --register-agent \
   - -pem-server pemserver \
   - -pem-user postgres \
   - -pem-port 5432 \
   - -config-dir /tmp/pem-config \
   - -display-name agent5 \
   - o agent_id=5 \
   - o agent_ssl_crt=/root/.pem/agent5.crt \
   - o agent_ssl_key=/root/.pem/agent5.key
   __OUTPUT__
   Postgres Enterprise Manager Agent registered successfully!

有効なSSL証明書とキーファイルは、適切な権限を持つ指定された場所で利用できるため、PEMエージェントは正常に登録されます。証明書またはキーファイルが有効でない場合、または適切な権限がない場合、エラーが発生します。

非rootユーザーアカウントを使用してLinuxでPEMエージェントを登録する
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

非rootユーザーアカウントを使用してPEMエージェントを登録するには、最初にrootユーザーとしてPEMエージェントをインストールする必要があります。インストール後、edbなどの非rootユーザーのIDを引き継ぎます。次に

1. edbとしてログインします。 ``pem`` および\ ``logs``
   ディレクトリを作成し、読み取り、書き込み、および実行権限を割り当てます。

.. code:: shell

       # Running as nonroot user edb
       mkdir /home/edb/pem
       mkdir /home/edb/pem/logs
       chmod 700 /home/edb/pem
       chmod 700 /home/edb/pem/logs

2. エージェントをPEMサーバーに登録します。

.. code:: shell

       export PEM_SERVER_PASSWORD=edb
       
       # Use the following command to create agent certificates and an agent 
       # configuration file (`agent.cfg`) in the `/home/edb/pem` directory. 
       /usr/edb/pem/agent/bin/pemworker --register-agent --pem-server <172.19.11.230> --pem-user postgres --pem-port 5432 --display-name non_root_pem_agent --cert-path /home/edb/pem --config-dir /home/edb/pem

       # Use the following command to assign read and write permissions to 
       # these files:
       chmod -R 600 /home/edb/pem/agent*

3. ``agent.cfg`` ファイルのパラメーターを変更します。

.. code:: ini

       vi /home/edb/pem/agent.cfg
       agent_ssl_key=/home/edb/pem/agent<id>.key
       agent_ssl_crt=/home/edb/pem/agent<id>.crt
       log_location=/home/edb/pem/worker.log
       agent_log_location=/home/edb/pem/agent.log

``<id>`` は、割り当てられたPEMエージェントIDです。

4. ``tmp``
   ディレクトリを作成し、環境変数を設定して、エージェントを起動します。

.. code:: ini

       mkdir /home/edb/pem/tmp
       
       # Create a script file, add the environment variable, give permissions, and execute:
       vi /home/edb/pem/run_pemagent.sh
       #!/bin/bash
       export TEMP=/home/edb/agent/tmp
       /usr/edb/pem/agent/bin/pemagent -c /home/edb/agent/agent.cfg
       chmod a+x /home/edb/pem/run_pemagent.sh
       cd /home/edb/pem
       ./run_pemagent.sh

これで、PEMエージェントが登録され、edbユーザーで起動されました。マシンが再起動しても、このエージェントは自動的に再起動しません。前述のコマンドを使用して手動で起動する必要があります。

5. オプションで、ルートユーザーとしてこのPEMエージェントのサービスを作成して、次のようにマシンの再起動時にこのエージェントを自動的に起動できます。

a. 構成ファイルパスの値と、\ ``pemagent``
   サービスファイルのユーザーをスーパーユーザーとして更新します。

.. code:: ini

          # Running as superuser
          sudo vi  /usr/lib/systemd/system/pemagent.service
          [Service]
          Type=forking
          WorkingDirectory=/home/edb/pem
          Environment=LD_LIBRARY_PATH=/usr/edb/pem/agent/lib:/usr/libexec/edb-snmp++/lib 
          Environment=TEMP=/home/edb/pem/tmp
          ExecStart=/usr/edb/pem/agent/bin/pemagent -c /home/edb/pem/agent.cfg

b. 実行中のエージェントプロセスを停止し、エージェントサービスを再起動します。

.. code:: shell

          # Find the process id of the running pem agent and pem worker process and kill that process
          ps -ax | grep pemagent
          kill -9 <process_id_of_pemagent>
          ps -ax | grep pemworker
          kill -9 <process_id_of_pemworker>
          # Enable and start pemagent service
          sudo systemctl enable pemagent
          sudo systemctl start pemagent
          sudo systemctl status pemagent

6. PEMダッシュボードでエージェントのステータスを確認します。

..  Note::
   - root権限または別のユーザーたとえば、enterprisedbが所有するファイルへのアクセスを必要とするプローブとジョブは失敗します。  - `agent.cfg` ファイルをデフォルトの場所から別の場所に移動すると、PEMダッシュボードにエージェントステータスが`unknown` として表示される場合があります。詳細については、 :ref:`Troubleshooting agent issues <Troubleshooting agent issues>` を参照してください。
