OCI HPC Cluster: 監視 - ジョブキューの監視

:::note info
本ページは [OCI: HPC Cluster](https://qiita.com/itokazu/items/63d2e3cebdcdda5afce0) のサブページになります。
:::

SLURM ジョブスケジューラの Job Queue を定期的に監視する方法として、OCI の Notification を利用して`squeue`コマンドの出力結果をメールで送信する手順を記載します。

#### 必要な条件
- OCI の admin または Notification を利用できる権限
- bastion ノードに opc ユーザで ssh でログインできること
- bastion ノードに oci cli がインストールされていること。インストールがされていることの確認は`oci --version` で確認可能です。(oci cli のインストールについてはこちらを参照してください→ https://docs.oracle.com/ja-jp/iaas/Content/API/SDKDocs/cliinstall.htm)


#### 手順
1. OCI コンソールにログインし、自身の User OCID と Tenancy OCID を確認します
1. Tenancy OCID は画面右上の人のアイコンをクリックし、 【テナンシ: 〜〜〜】で始まるリンクをクリックし、テナンシ情報のしたにある OCID をコピーしメモ帳などに残します
1. User OCID も画面右上の人のアイコンをクリックし、【自分のプロファイル】をクリックし、ユーザ情報の下にある OCID をコピーしメモ帳などに残します
1. メニューから開発者サービス → アプリケーション統合 → 通知をクリックします
2. 画面左のコンパートメントが HPC Cluster をデプロイしたコンパートメントが指定されていることを確認します
2. 【トピックの作成】をクリックする
2. 【名前】にわかりやすいトピック名を指定します。(例:SLURM-Job-Queue-Notification など
2. 作成されたトピックをクリックし、ACTIVE になるのを待ちます
2. ACTIVE になったら【サブスクリプションの作成】をクリックします
2. 【プロトコル】に【電子メール】を選択し、電子メールに通知先のメールアドレスを入力し、【作成】をクリックします
2. 指定したメールアドレス宛に件名が【Oracle Cloud Infrastructure Notifications Service Subscription Confirmation】 という確認メールが送信されるので、開いて【Confirm subscription】をクリックする
2. ブラウザーが開き、【Subscription confirmed】 と表示されます
2. OCI コンソールの【トピックの詳細】画面に戻り、OCID をコピーしてメモ帳などに残します
2. bastion ノードに SSH でログインし、設定をするために `oci os ns get` を実行します。設定ファイルが存在しないので作成を進めます。
```
ERROR: Could not find config file at /home/opc/.oci/config
Do you want to create a new config file? [Y/n]: y ##新たに設定ファイルを作成するので y を入力
Do you want to create your config file by logging in through a browser? [Y/n]: n ##nを入力
    This command provides a walkthrough of creating a valid CLI config file.

    The following links explain where to find the information required by this
    script:

    User API Signing Key, OCID and Tenancy OCID:

        https://docs.cloud.oracle.com/Content/API/Concepts/apisigningkey.htm#Other

    Region:

        https://docs.cloud.oracle.com/Content/General/Concepts/regions.htm

    General config documentation:

        https://docs.cloud.oracle.com/Content/API/Concepts/sdkconfig.htm


Enter a location for your config [/home/opc/.oci/config]: ##そのままエンターを入力
Enter a user OCID:  ##事前にメモした user OCID を入力
Enter a tenancy OCID: ##事前にメモした tenancy OCID を入力
Enter a region by index or name(e.g.
1: af-johannesburg-1, 2: ap-chiyoda-1, 3: ap-chuncheon-1, 4: ap-dcc-canberra-1, 5: ap-hyderabad-1,
6: ap-ibaraki-1, 7: ap-melbourne-1, 8: ap-mumbai-1, 9: ap-osaka-1, 10: ap-seoul-1,
11: ap-singapore-1, 12: ap-sydney-1, 13: ap-tokyo-1, 14: ca-montreal-1, 15: ca-toronto-1,
16: eu-amsterdam-1, 17: eu-dcc-dublin-1, 18: eu-dcc-dublin-2, 19: eu-dcc-milan-1, 20: eu-dcc-milan-2,
21: eu-dcc-rating-1, 22: eu-dcc-rating-2, 23: eu-frankfurt-1, 24: eu-madrid-1, 25: eu-marseille-1,
26: eu-milan-1, 27: eu-paris-1, 28: eu-stockholm-1, 29: eu-zurich-1, 30: il-jerusalem-1,
31: me-abudhabi-1, 32: me-dcc-muscat-1, 33: me-dubai-1, 34: me-jeddah-1, 35: mx-queretaro-1,
36: sa-santiago-1, 37: sa-saopaulo-1, 38: sa-vinhedo-1, 39: uk-cardiff-1, 40: uk-gov-cardiff-1,
41: uk-gov-london-1, 42: uk-london-1, 43: us-ashburn-1, 44: us-chicago-1, 45: us-gov-ashburn-1,
46: us-gov-chicago-1, 47: us-gov-phoenix-1, 48: us-langley-1, 49: us-luke-1, 50: us-phoenix-1,
51: us-sanjose-1): 13 ##東京リージョンは13、大阪リージョンは9を入力
Do you want to generate a new API Signing RSA key pair? (If you decline you will be asked to supply the path to an existing key.) [Y/n]: y ##yを入力
Enter a directory for your keys to be created [/home/opc/.oci]: ##そのままエンターを入力
Enter a name for your key [oci_api_key]: ##そのままエンターを入力
Public key written to: /home/opc/.oci/oci_api_key_public.pem
Enter a passphrase for your private key (empty for no passphrase): ##そのままエンターを入力
Private key written to: /home/opc/.oci/oci_api_key.pem
Fingerprint: 6b:83:55:2a:83:b0:f2:f0:06:3c:19:bc:2e:c4:7a:10
Config written to /home/opc/.oci/config


    If you haven't already uploaded your API Signing public key through the
    console, follow the instructions on the page linked below in the section
    'How to upload the public key':

        https://docs.cloud.oracle.com/Content/API/Concepts/apisigningkey.htm#How2


Successfully created config file with your new CLI user profile
Once your public key is uploaded in the console, you can re-run your command to use your new config file and user profile
```
15.上記で作成された公開鍵を`cat /home/opc/.oci/oci_api_key_public.pem`で確認します。
16.以下のように表示されるので、これをコピーします
```
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsUnYjlk/vnAdq2TxPM6V
s7kzgKrVeIUcV0Yo3v64H5Bl8DQCXrMoRWVQp56oYO79tj1buvCEviOUzf1Ng3wI
3f/cTaKTF08L/BrEKA8snkFdn4DcbMsegCuWp1zj9Sq8qrzZ9Q+bbHGt2+fllvcX
q9EuHRsF9EQ1cXSKfYRIVtocOtPCEJ1l7OzfZsXyPo0+7A/KyR7xwVMSTmTGOJEP
kGbyH7YHUaKDizZbY+N/6lCaDiHcE/NzOn6ndemNojjBa5QHDPT885+8LKAD5zkl
nlqu1YX+qzfEjJuP3OIBFHr9kx3C2ADoZ5UsclMjiL3eor8uOJO7VHvKNQOux4ed
CQIDAQAB
-----END PUBLIC KEY-----
```
17.OCIコンソールに戻り、画面右上の人のアイコンをクリックし、【自分のプロファイル】をクリックする
18.画面左側のリソースから【APIキー】をクリックし、【APIキーの追加】をクリックする
19.ラジオボタンで【公開キーの貼り付け】にチェックし、公開キーのテキストボックスに 16. でコピーした文字列を貼り付けて【追加】をクリックします 
20.bastion の SSH に戻り、以下のコマンドを実行し、登録したメールアドレスに squeue コマンドの内容のメールが届くことを確認します
```
oci ons message publish --topic-id 【13. でコピーした topic OCID の文字列】 --title "SLURM job queue notification" --body "$(squeue)"
```

送信されるメールサンプル:
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108605/aa12ae66-f773-a067-b1c8-4befc16b301a.png)


21.無事に届いたら crontab コマンドに定期的にメールを送るようにコマンドを登録します。
```
export EDITOR=vim
または
export EDITOR=nano
など使い慣れたエディターを指定。
```

cron を編集します
```
crontab -e
```

デフォルトで Ansible: という内容が記載されているので、一番下に 20 で確認したコマンドと何時に実行するかを記載します。以下の例では毎日 17:00 としています。
```
#Ansible: slurm autoscaling
* * * * * /opt/oci-hpc/autoscaling/crontab/autoscale_slurm.sh >> /opt/oci-hpc/logs/crontab_slurm_`date '+\%Y\%m\%d'`.log 2>&1
#Ansible: slurm monitoring
* * * * * #source /opt/oci-hpc/monitoring/env; /opt/oci-hpc/monitoring/monitor_slurm.sh >> /opt/oci-hpc/monitoring/monitor_slurm_`date '+\%Y\%m\%d'`.log 2>&1
#Ansible: OCI monitoring
* * * * * #source /opt/oci-hpc/monitoring/env; /opt/oci-hpc/monitoring/monitor_oci.sh >> /opt/oci-hpc/monitoring/monitor_oci_`date '+\%Y\%m\%d'`.log 2>&1

# Notification
0 17 * * * oci ons message publish --topic-id ocid1.onstopic.oc1.ap-tokyo-1.aaaaaaaa.... --title "SLURM job queue notification" --body "$(squeue)"
```
保存して、指定したタイミングでメールが飛ぶことを確認してください。