Splunk Observability Cloud の API 利用の第一歩

# はじめに
システム管理者として Splunk Observability Cloud の設定を担当するかた向けに、API で作業を効率化する方法をまとめておきたいと思います。
この記事では、はじめの一歩として「認証トークンの取得手順」をまとめておきます。

# 記事の内容
* コマンドで自分の認証トークンを取得する準備とサンプル
（ブラウザで管理画面にログインせず取得する方法）

今後の設定作業では本記事の手順で取得したトークンを利用します。

# 参考にしたドキュメント
ドキュメントが分散していますが、認証トークンについては下記3つのページが参考になります。
* [デベロッパーガイド > Authenticate API Requests](https://dev.splunk.com/observability/docs/apibasics/authentication_basics "Developer Guide")
* [API リファレンス > Session Tokens](https://dev.splunk.com/observability/reference/api/sessiontokens/latest#endpoint-create-session-token "Session Tokens")
* [製品ドキュメント > Retrieve and manage user API access tokens using Splunk Observability Cloud](https://docs.splunk.com/observability/en/admin/authentication/authentication-tokens/api-access-tokens.html#admin-api-access-tokens "Retrieve and manage user API access tokens using Splunk Observability Cloud")

# 設定作業用トークンについて
下記3種類のトークンがありますが、ブラウザ操作不要な「セッショントークン」を利用することにします。
<dl>
  <dt>ユーザーAPIアクセストークン (User API Access Token)</dt>
    <dd>ブラウザでログインして自分のプロファイル画面（下図）から取得</dd>
    <dd><img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197953/96bc57e0-1926-f675-0d9f-9c060b76703f.png"></dd>
    <dd>※ログアウトすると使えなくなる</dd>
  <dt>セッショントークン (session token)</dt>
    <dd>コマンドでログインして取得</dd>
  <dt>組織トークン (org token)</dt>
    <dd>管理者が事前に作成しておくもの</dd>
    <dd></dd>
</dl>
    
管理者ユーザーのユーザーAPIアクセストークン／セッショントークンが必要な設定項目も存在します。該当する項目は [こちらのドキュメント](https://docs.splunk.com/observability/en/admin/authentication/authentication-tokens/api-access-tokens.html#api-requests-that-require-a-user-api-access-token-created-by-an-administrator) に記載されています。

# 準備
環境に合わせて事前に以下の項目を用意しておきます。
|項目|値|
|:-|:-|
|ユーザー名|ログインに使うメールアドレス|
|レルム (Realm)|日本リージョンの場合は jp0|
|組織ID (ORG ID)|組織に紐付くID|

Realm と ORG ID はプロファイル画面の Organizations タブを開くと確認できます。
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197953/6ed85d1d-c6fc-b3a1-c06d-b27119ff120e.png">

# トークン取得コマンド
curl コマンドのサンプルです。
（レルムが異なる場合は jp0 部分を置き換えてください）
```
curl -X POST "https://api.jp0.signalfx.com/v2/session" \
  -H "Content-Type: application/json" \
  -d '{
  "email": "（ユーザー名）",
  "organizationId": "（組織ID）",
  "password": "（パスワード）"
  }'
```

出力結果の例です。「accessToken」の値がセッショントークンで使う文字列になります。
~~~
{
  "accessToken" : "XXXXXXXXXXXXXXXXXXXX",
  "authMethod" : "UNDEFINED",
  "capabilities" : null,
  "createdBy" : "xxxxxxxxxxx",
  "createdMs" : 1714483820334,
  "disabled" : false,
  "email" : "（ユーザー名）",
  "expiryMs" : 1717075820334,
  "id" : "xxxxxxxxxxx",
  "organizationId" : "（組織ID）",
  "personaId" : "xxxxxxxxxxx",
  "readOnly" : false,
  "sessionType" : "ORG_USER",
  "updatedBy" : null,
  "updatedMs" : 1714483820334,
  "userId" : "xxxxxxxxxx",
  "userName" : null
}
~~~
※ID情報などは xxx で伏せ字に変更してます。

expiryMs はトークンの有効期限です。ミリ秒単位のUNIX時間表記なので、末尾3桁を削除して日付に変換してみると、トークン作成から30日間有効であることがわかると思います。

# トークンの削除
作業完了後、しばらくトークンを使わない場合は削除しておくと安全です。
以下、トークンを削除する curl コマンドのサンプルです。
```
curl -X DELETE "https://api.jp0.signalfx.com/v2/session" \
  -H "Content-Type: application/json" \
  -H "X-SF-TOKEN: （先ほど取得したaccessTokenの値）"
```

コマンド実行が成功した場合、何も画面に出力されないので、？？と思うかもしれませんが、トークンは削除され再利用できなくなってます。

# おわりに

自分が引っかかったポイントもあったので、以降の作業をスムーズに進めるための最初の一歩目として情報を整理しました。この後はチャートやダッシュボード、ディテクターといった設定作業を進めていきたいと思います。