Podmanでプライベートロケーションを立てて外形監視してみた！

New Relicで外形監視をする際に監視対象がプライベートネットワーク内にある場合、Synthetics Job Managerを使うことでプライベートネットワーク内でも簡単に外形監視を実施できます。最近のアップデートで、**podman上でSynthetics Job Managerを動作できるようになったので試してみたいと思います。**

ちなみに、Synthetics Job Managerはpodmanの他に**DockerやKubernetesでも動作**させることが可能です。

https://docs.newrelic.com/docs/synthetics/synthetic-monitoring/private-locations/install-job-manager/

# :one: 動作環境の要件確認

まずは下記のページでSynthetics Job Managerを動作させるpodmanの要件を確認してください。

https://docs.newrelic.com/docs/synthetics/synthetic-monitoring/private-locations/install-job-manager/#podman-requirements

# :two: Podmanの事前設定

PodmanでSynthetics Job Mangerを動かす際に事前にサンドボックス技術使うようにしましょう。
詳細は下記の手順を参考にしてください。

https://docs.newrelic.com/docs/synthetics/synthetic-monitoring/private-locations/install-job-manager/#podman-dependencies

## 1. Podmanのインストール
インストールされていない場合は下記を参考に5.0.0-ce以上をインストールしてください。

https://podman.io/docs/installation

## 2. Rootless実行の設定

### Podman設定ディレクトリの作成:

```bash
mkdir -p ~/.config/containers
touch ~/.config/containers/containers.conf
```

### containers.confファイルの編集:

```bash
vi ~/.config/containers/containers.conf
```

以下の内容を追加：

```text
[engine]
runtime = "crun"
cgroup_manager = "systemd"
```

## 3. cgroups v2の有効化（RHELのみ）

### GRUBの編集：

```bash
sudo sed -i 's/GRUB_CMDLINE_LINUX="/&systemd.unified_cgroup_hierarchy=1 /' /etc/default/grub
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
sudo reboot
```

## 4. システム全体のcgroups委譲の設定

```bash
sudo mkdir -p /etc/systemd/system/user@.service.d/
echo -e "[Service]\nDelegate=yes" | sudo tee /etc/systemd/system/user@.service.d/delegate.conf > /dev/null
```

## 5. ユーザーレベルのsystemdサービスの設定

```bash
mkdir -p ~/.config/systemd/user/podman.service.d
echo -e "[Service]\nDelegate=yes" > ~/.config/systemd/user/podman.service.d/override.conf
```

## 6. Podmanソケットの有効化と起動

```bash
systemctl --user enable podman.socket
systemctl --user start podman.socket
systemctl --user status podman.socket
```

## 7. Podman APIサービスの作成と設定

### サービスファイルの作成：

```bash
mkdir -p ~/.config/systemd/user
touch ~/.config/systemd/user/podman-api.service
vi ~/.config/systemd/user/podman-api.service
```

### 以下の内容を追加：

```text
[Unit]
Description=Podman API Service
After=default.target

[Service]
Type=simple
ExecStart=/usr/bin/podman system service -t 0 tcp:0.0.0.0:8000
Restart=on-failure

[Install]
WantedBy=default.target
```

## 8. Podman APIサービスの有効化と起動

```bash
systemctl --user daemon-reload
systemctl --user enable podman-api.service
systemctl --user start podman-api.service
systemctl --user status podman-api.service
```

これらの手順でNew Relic Synthetics Job ManagerをPodmanで実行するための環境が整います。

# :three: Podman上でSynthetics Job Managerを起動

それでは、Podman上でSynthetics Job Managerを起動しましょう！
詳細は下記を参照ください。

 https://docs.newrelic.com/docs/synthetics/synthetic-monitoring/private-locations/install-job-manager/#podman-update

## 1. プライベートロケーションのキーを取得

New Relicで one.newrelic.com > Synthetic monitoring > Private locations を開き、[Create private location]をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/227243/d5df1af1-7383-511a-497b-73f7afa56424.png)

プライベートロケーションの名称を入れて、[Generate key]をクリックして、

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/227243/0bea7838-6cb8-a084-a058-8f485670c09f.png" width="50%">

[View Private Location]をクリック。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/227243/9b7a9288-4eea-15a9-5b8d-a113a3e3fb85.png" width="50%">

さらに[Edit private location]をクリックすることで、Private location Keyを確認することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/227243/0d759e00-4df4-f32b-4e7a-8fa0f4259672.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/227243/3ccec015-97ca-2d59-e970-ba820bb73944.png)

## 2. Job Managerを起動

### Podを起動：
それぞれ適切な値を入れてください。
- **YOUR_POD_NAME**にはPodの名前を設定
- **IP_ADDRESS**はpodmanが動いているホストのIPアドレス

```bash
podman pod create --network slirp4netns --name YOUR_POD_NAME --add-host=podman.service:IP_ADDRESS
```

### Job Mangerを起動：
それぞれ適切な値を入れてください。
- **YOUR_PRIVATE_LOCATION_KEY**には先ほど取得したプライベートロケーションのキー
- **YOUR_CONTAINER_NAME**にはコンテナの名前を設定
- **YOUR_POD_NAME**は先程つけたPodの名前（2箇所あるので注意してください）

```bash
podman run \
--name YOUR_CONTAINER_NAME \
--pod YOUR_POD_NAME \
-e "PRIVATE_LOCATION_KEY=YOUR_PRIVATE_LOCATION_KEY" \
-e "CONTAINER_ENGINE=PODMAN" \
-e "PODMAN_API_SERVICE_PORT=YOUR_PODMAN_API_SERVICE_PORT" \
-e "PODMAN_POD_NAME=YOUR_POD_NAME" \
-d \
--restart unless-stopped \
newrelic/synthetics-job-manager:latest
```

### ログで起動を確認：

podman logs --follow YOUR_CONTAINER_NAME


# :four: Syntheticsの設定でプライベートロケーションを選択

それでは実際にpodmanで動いているJob Managerを使って外形監視をしてみます。
New Relicで one.newrelic.com > Synthetic monitoring > Monitors を開き、[Create monitor]をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/227243/19af5df8-a293-1fed-e7b8-2afb96cda901.png)

今回はPingを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/227243/3d0059b2-2f38-4f97-972a-f3c127e7c7ef.png)

このPing監視の名称と対象のURLをしていします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/227243/4d4a954f-425d-c74c-ddcf-a461cb91f045.png)

Select locationのPrivate locationにpodmanで動かしているJob Managerが表示されるのでコチラを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/227243/b7fbd1be-6387-7a64-6e60-ae92a3927f33.png)

最後に[save monitor]をクリックして設定完了です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/227243/df6111d8-d635-7053-bc1a-9f9a17a8d07a.png)



# その他
New Relicでは、**新しい機能やその活用方法**について、QiitaやXで発信しています！
**無料でアカウント作成**も可能なのでぜひお試しください！

:::note info
New Relic株式会社の[X(旧Twitter)](https://x.com/NewRelicJapan) や [Qiita OrganizationOrganization](https://qiita.com/organizations/newrelic)では、
新機能を含む活用方法を公開していますので、ぜひフォローをお願いします。
:::

:::note info
無料のアカウントで試してみよう！
[New Relic フリープランで始めるオブザーバビリティ！](https://qiita.com/ktst79/items/5ee74b34e6adb8a7a6fa)
:::