仕事でDatadogを使用しているのだが、Dashboard上でクライアントから取得した文字列(プログラムのバージョンとか)を表示させたいので少し調べてみた。
で、以下のようなアドバイスを頂いたので実際にやってみる事にした。
なお、DatadogではすでにApplicationKeyを発行済みとする。
@blacknon_ なるほど〜。「DDのAPI経由で、ScreenboardのFree Textのウイジェットの内容の部分を書き換える。」とかいうと、
大げさすぎると笑われちゃいますかね。そんなことぐらいしか、思いつきません。申し訳ありません。— Naotaka Jay Hotta (@jhotta) 2016年4月15日
@blacknon_ これを入れると、コマンドラインにdogコマンドが出てきます。それで、ダッシュボードの設定を抜いてこれます。https://t.co/weXVuYD157 その設定ファイルをshell scriptで編集して戻すって感じか、pythonで書くかって感じです。 — Naotaka Jay Hotta (@jhotta) 2016年4月15日
ふむぅ…まず、Datadogpyというパッケージを使用する必要があると。
じゃあ、これをpipからインストールしてみよう。
yum install python-pip
pip install datadog
パッケージインストール後、まず以下のコマンドでDashboardの設定ファイルをダウンロードする。
dog --api-key API_KEY --application-key APP_KEY screenboard pull DashboardID(ダッシュボードのURLに記載) 出力先PATH(JSONファイル)
[root@test-node ~]# dog --api-key b93XXXX1c7e3cd9eXXXXcad04XXX3689 --application-key XXXXfe9f0c9XXXXc10bfbXXXXc6fc6XXXX446791 screenboard pull XXXXX test.jq
hostname: Name or service not known
XXXXX test.jq
[root@test-node ~]# cat test.jq
{
"board_title": "test",
"read_only": false,
"board_bgtype": "board_graph",
"created": "2016-04-17T05:11:07.544282+00:00",
"original_title": "",
"modified": "2016-04-17T05:50:00.013083+00:00",
"height": 80,
"width": "100%",
"template_variables": [],
"widgets": [
{
"board_id": XXXXX,
"title_size": 16,
"title": true,
"color": "#4d4d4d",
"text": "test-2",
"title_align": "left",
"text_align": "left",
"title_text": "",
"height": 7,
"width": 30,
"y": 1,
"x": 2,
"font_size": "auto",
"type": "free_text"
},
{
"board_id": XXXXX,
"title_size": 16,
"title": true,
"title_align": "left",
"title_text": "",
"height": 13,
"tile_def": {
"viz": "timeseries",
"requests": [
{
"q": "avg:system.cpu.user{host:test-node}",
"conditional_formats": [],
"type": "line"
}
]
},
"width": 47,
"timeframe": "1h",
"y": 9,
"x": 2,
"legend_size": "0",
"type": "timeseries",
"legend": false
}
],
"shared": false,
"id": XXXXX,
"title_edited": false
で、書き換えたいテキストファイルの中身(上の場合、「test-2」となっている箇所)をjqやsedなどで書き換え、以下のコマンドで再度設定ファイルをアップロードする。
※widgetsの配列番号は環境ファイルに合わせる事
jq '.widgets[0].text = "書き換え後の文字列"' <<< $(cat JSONファイル) > JSONファイル
dog --api-key API_KEY --application-key APP_KEY screenboard push JSONファイル
これで、Dashboardのテキストオブジェクトの値が書き換わっているはずだ。
できればdd-agent側で文字列も送信させたいのだけど、現状はこの方法が一番良いのではなかろうか。