NewRelicのLookupTableという機能を使ってみました。
LookupTableとは
- メトリックとは別でCSVをテーブルとして保持できる機能
- 上記をNRQL上でも表現可
- メトリックと組み合わせることで、管理しやすくなる。
- ホスト名に日本語名称を付与
- 「〇〇システム」という文言とホストやサービスを紐づけが出来る。
参考:公式サイトより
https://docs.newrelic.com/jp/docs/logs/ui-data/lookup-tables-ui/
アップロード方法
ブラウザ(NewRelicのコンソール)からアップロードする方法とRESTAPIを使った方法の2つがあります。
インプットとなるCSVの値がそんなに変動しない場合は、手動アップロードで良いですが、そこそこの頻度で値が変わったり定期的にアップロードする仕組みの場合は後者のAPIを使った方法が良いです。
ということで後者のやり方を確認してみます。
※手動アップロードについては画面をポチポチ押すだけです。
環境
- Windows11(ただのPC
- Python(Ver3.11
準備
- Pythonのインストール
- API連携に必要な以下の情報の取得 ※APIキーはNewRelicのコンソールで作成・取得可
- アカウントID
- APIキー
- アップロードするCSVファイル
スクリプト作成
- 以下サンプルです。CSVファイルをJSON変換して、CurlコマンドでLookupTableへPOSTしています。
- 文字コードですが、SJISだと文字化けしてしまうので注意しましょう(UTF-8なら日本語でも大丈夫
- エラーハンドリングとかはガン無視
Try_NR-csvdataUpload-api.py
import subprocess
import json
import csv
# アカウントIDなど
endpoint = 'https://nrql-lookup.service.newrelic.com/v1/accounts'
account_id = '<NewRelicアカウントID>'
table_name = '<任意のテーブル名>'
api_key = '<APIキー>'
# CSVファイルのパス ↓対象のCSVファイルを指定
csv_file = r'C:\temp\fictional_systems_and_servers_japanese.csv'
# CSVファイルからデータを読み取ってJSON形式に変換する
def csv_to_json(csv_file):
data = {
"table": {
"headers": [],
"rows": []
},
"description": "CSV data upload"
}
with open(csv_file, 'r', newline='', encoding='utf-8') as file:
reader = csv.reader(file)
data["table"]["headers"] = next(reader) # ヘッダーを取得
for row in reader:
data["table"]["rows"].append(row)
return data
# CSVからデータを読み取ってJSONに変換
data = csv_to_json(csv_file)
# Curlコマンドを構築
curl_command = [
'curl',
'-X', 'POST',
'-H', 'Content-Type: application/json',
'-H', f'Api-Key: {api_key}',
'-d', f'{json.dumps(data)}',
f'{endpoint}/{account_id}/{table_name}'
]
# Curlコマンドを実行
subprocess.run(curl_command)
結果
-
上記スクリプトを実行してみました。(モザイク多めですいません・・
テーブル名は「Testupload」という名前にしてみました。
-
NewRelicにサインインして、確認します。LookupTableは「Logs」の中にあります。
「testupload」というテーブルがいますね。
- NRQLで「testupload」の内容を確認してみます。Lookuptableを参照する場合は、「lookup」を使用します。
FROM lookup(testupload) SELECT *
CSVの内容が連携されていることが確認出来ました!
参考:NRQLで使ってみる。
- 検証用で連携させていたEC2(nr-test)の情報とCSVの情報と紐づけてみました。
- JOINを使ってサブクエリとして使うと、上手い事表示されます。
https://docs.newrelic.com/jp/docs/nrql/using-nrql/lookups/