Grafana: WebGUIを使用せずにデータソースを追加する

作成日 2015年04月15日  ·  40コメント  ·  ソース: grafana/grafana

こんにちは、
Webインターフェイスの「ソースの追加」オプションを使用する代わりに、「コマンドラインまたは構成ファイルから」データソースを追加できるかどうか疑問に思います。
influxdbのインストールとgrafanaのインストールを自動化し、grafana内に「localhost」のinfluxdbデータソースを自動的に作成するインストールプロセスを作成したいと思います。 これは実行可能ですか?
ありがとう

最も参考になるコメント

この問題を再開できますか?
dashboards.jsonに似たオプションで、目的のデータソースを定義できるディレクトリを作成したいのですが。

全てのコメント40件

これは、WebAPIを介して:

curl'http :// localhost :3000 / api / datasources '-X PUT --data-binary' {"name": "test"、 "type": "influxdb_08"、 "url": " http:// localhost :8086 "、" access ":" proxy "、" isDefault ":true、" database ":" asd "、" user ":" asd "、" password ":" asd "} '

問題は、上記が機能するためにはAPIキーが必要であり、APIキーを作成するにはUIが必要です。 解決策は、ユーザー名/パスワード(たとえば、管理者ユーザーのユーザー名/パスワード)でAPIを使用できるようにすることです。

ありがとう、私はこれを試してみます:-)
主な問題は、WebAPIに関するドキュメントが見つからないことです...何かが足りない可能性があります。

これを行うためのPythonコードは、httpリクエストを監視して得たものです。

import requests

[ provide credential variables etc ]

grafana_url = os.path.join('http://', '%s:%u' % (grafana_host, grafana_port))
session = requests.Session()
login_post = session.post(
   os.path.join(grafana_url, 'login'),
   data=json.dumps({
      'user': grafana_user,
      'email': '',
      'password': grafana_password }),
   headers={'content-type': 'application/json'})

# Get list of datasources
datasources_get = session.get(os.path.join(grafana_url, 'api', 'datasources'))
datasources = datasources_get.json()

# Add new datasource
datasources_put = session.put(
   os.path.join(grafana_url, 'api', 'datasources'),
   data=json.dumps({
      'access': 'direct',
      'database': ifdb_database,
      'name': datasource_name,
      'password': ifdb_password,
      'type': 'influxdb_08',
      'url': 'http://%s:%u' % (ifdb_host, ifdb_port),
      'user': ifdb_user}),
      headers={'content-type': 'application/json'})

ありがとう、
インストールの一部になるので、「カール」の方法でジャブが作れると思います。 しかし、Pythonのものも役立つ可能性があるので試してみます。 もう一度ありがとう、私はあなたに知らせます:-)
キリスト教徒

2.1でこれを簡単にし、WebAPIとの対話を簡単にするCLIツールも作成します。

こんにちはまたtorkedo、
「問題は、上記が機能するためにはAPIキーが必要であり、APIキーを作成するにはUIが必要です」とおっしゃいました。
そして、効果的にそのようなcurlコマンドを送信しようとすると、{"message": "Accessdenied"}が表示されます。
「解決策は、ユーザー名/パスワード(たとえば、管理者ユーザーのユーザー名/パスワード)でAPIを使用できるようにすることです」の意味を説明してください。
ありがとう...

こんにちは、みんな、
PRI-mcallenのPythonソリューションは私にとってはうまく機能しました:-)私はその道を進みます。
トピックを閉じます。
ありがとう!!

@ PRI-mcallen pythonスクリプトに感謝します。これに基づいて、次のことを思いつきました(ほとんどの場合、cookies / cookie-jarでcurl前後のBash)。これを実行する必要があります、多分それは他の誰かのために役立ちます。

これは、Dockerでgrafanaを実行するための本当に面倒です。 Dockerオーケストレーションツール(maestro-ng)を使用します。 grafanaのDockerイメージがあり、graphiteデータソースを自動的に構成できるようにしたいと考えています。 オーケストレーションツールは、グラファイトコンテナーを作成し、次にそれに依存するgrafanaコンテナーを作成します。 このツールは、グラファイトコンテナのアドレスをenv変数としてgrafanaコンテナに挿入します。 grafanaコンテナで実行される起動スクリプトで、graphiteデータソースを自動的に構成する必要があります。 以前はgrafana1.9でconfig.jsを使用してこれを行うことができましたが、現在はHTTP API(文書化されていません)のみがこれを行うことができます。

@ iangkent 、HTTP APIの使用方法の例については、上記で投稿したpythonスニペットを参照してください(トランザクションの監視からリバースエンジニアリングされています)。

こんにちは

@ PRI-mcallenが2.1.0-pre1に投稿したPythonスニペットをテストしていますが、何かが壊れているようです(2.0.2および2.0.3-pre1では機能するため)

データソースを追加することで得られる応答は次のとおりです。

datasources_put.json()
{u 'メッセージ':u '見つかりません'}

そして、grafanaログから:

2015/07/13 11:27:49 [I]完了/ api / datasources 4041.167911msで見つかりません

curlを直接使用して同じ動作を試みました(Cookie認証またはユーザー/パスを使用)

curl --user admin:admin \
-X PUT \
-H 'コンテンツタイプ:application / json; charset = UTF-8' \
--data-binary "{\" name \ ":\" test4 \ "、\" isDefault \ ":\" true \ "、\" type \ ":\" influxdb_08 \ "、\" url \ ":\ " http:// localhost :8086 \"、\ "access \":\ "proxy \"、\ "database \":\ "test4 \"、\ "user \":\ "test4 \"、\ "password \ ":\" test4 \ "}" \
http://172.16.149.149:3000/api/datasources 」。

{"メッセージが見つかりません"}

誰かがそれをトラブルシューティングまたは修正する方法についてのアイデアを持っていますか?

前もって感謝します
Efrain

@ 3fr61n2.1のHTTPAPIに小さな

データソースHTTPAPIの重大な変更、ADDデータソースはPOST / api / datasources /になり、更新はPUT / api / datasources /:idになりました

ありがとう!!! それは今働いています

grafana 2.1では、基本認証を使用してAPIに対して認証できるようになったため、ログインしてCookieを使用してAPIキーを作成する(またはデータソースを追加する)必要はありません。
https://github.com/grafana/grafana/issues/2218#issuecomment -117041541

curl -i -XPOST'http :// admin:admin @ hostname :3000 / api / datasources '--data-binary' {\ "name \":\ "influxdb_09x \"、\ "type \":\ "influxdb \ "、\" access \ ":\" proxy \ "、\" url \ ":\" http:// hostname :8086 \ "、\" password \ ":\" root \ "、\" user \ " :\ "root \"、\ "database \":\ "cadvisor \"、\ "basicAuth \":true、\ "basicAuthUser \":\ "admin \"、\ "basicAuthPassword \":\ "admin \" 、\ "isDefault \":true、\ "jsonData \":null} '

「[{"fieldNames":["Name"]、 "classification": "RequiredError"、 "message": "Required"}、{"fieldNames":["Type"]、 "classification":」を取得していますRequiredError "、" message ":" Required "}、{" fieldNames ":[" Access "]、" classification ":" RequiredError "、" message ":" Required "}]"

ヘッダーContentTypeapplication / jsonが必要です

curl -i -XPOST'http :// admin:admin @ hostname :3000 / api / datasources '--header "ContentType application / json" --data-binary' {\ "name \":\ "influxdb2 \"、 \ "type \":\ "influxdb_09x \"、\ "access \":\ "proxy \"、\ "url \":\ " http:// hostname :8086 \"、\ "password \":\ " root \ "、\" user \ ":\" root \ "、\" database \ ":\" cadvisor \ "、\" basicAuth \ ":true、\" basicAuthUser \ ":\" admin \ "、\" basicAuthPassword \ ":\" admin \ "、\" isDefault \ ":true、\" jsonData \ ":null} '

それでも上記のエラーを返します:/

正しく見えない、コロンがない、-H'Content-Type:application / json; charset = UTF-8 '\

公式のDockerグラファイト(hopsoft / grafite-statsd)とgrafana(grafana / grafana)の画像を使用していますが、次のコマンドが機能しました。

curl 'http://admin:[email protected]:3000/api/datasources' -X POST -H 'Content-Type: application/json;charset=UTF-8' --data-binary '{"name":"localGraphite","type":"graphite","url":"http://192.168.99.100","access":"proxy","isDefault":true,"database":"asd"}'

grafana2.6およびinfluxdb0.10では、次のカールが正しく機能しています。

curl 'http://admin:[email protected]:3000/api/datasources' -X POST -H 'Content-Type: application/json;charset=UTF-8' --data-binary '{"name":"influx","type":"influxdb","url":"http://localhost:8086","access":"proxy","isDefault":true,"database":"mydb","user":"admin","password":"admin"}'

次のコマンドでデータソースの構成を確認できます。
curl 'http://admin:[email protected]:3000/api/datasources'

この問題は3月にクローズされましたが、Dockerで使用するためにこれをよりクリーンな方法で自動化する方法はありますか?

この問題は3月にクローズされましたが、Dockerで使用するためにこれをよりクリーンな方法で自動化する方法はありますか?

Dockerでrun2.shgrafana/grafanaにはすでにrun.shがあります):

echo 'Starting Grafana...'
/run.sh "$@" &
AddDataSource() {
  curl 'http://localhost:3000/api/datasources' \
    -X POST \
    -H 'Content-Type: application/json;charset=UTF-8' \
    --data-binary \
    '{"name":"Prometheus","type":"prometheus","url":"http://prometheus:9090","access":"proxy","isDefault":true}'
}
until AddDataSource; do
  echo 'Configuring Grafana...'
  sleep 1
done
echo 'Done!'
wait

しかし、私はこれが非常に悲しいデザインであることに同意します。 他のアプリケーションは、起動する前に構成できます。 Grafanaは、最初に開始してから構成する必要があります。 変。

ねえ@ torkelo 、Grafanaツールで素晴らしい仕事をしました!
次のコマンドを使用してGrafanaAPIを使用して組織にユーザーを追加しようとすると、「ユーザーが見つかりません」というエラーが表示されます。

curl'http://:@:3000 / api / orgs / 6 / users '-X POST -H'Content-Type:application / json; charset = UTF-8' --data-binary '{"loginOrEmail": "user1"、 "role": "Viewer"} '

正しい基本認証のクレデンシャルを入力しました。 この問題の解決策はありますか?
ありがとう!

ユーザーはそのAPI呼び出しで存在する必要があり、招待APIを使用してユーザー招待を作成できます

またはansible経由:

# Check that a page returns a status 200 and fail if the word AWESOME is not
# in the page contents.
- uri:
    url: http://localhost:3000/api/datasources/name/Prometheus
    user: admin
    password: changeme
    force_basic_auth: yes
  register: grafana_prometheus
  failed_when: false
  changed_when: false

- name: Enable Prometheus Datasource
  uri:
    url: http://localhost:3000/api/datasources
    method: POST
    user: admin
    password: changeme
    body:
      name: "Prometheus"
      type: "prometheus"
      url: "http://prometheus:9090"
      access: "proxy"
      isDefault: true
    force_basic_auth: yes
    status_code: 201
    body_format: json
  when: grafana_prometheus.status == 404

もう1つの可能なアクションは、Grafanaのデータベースに直接書き込むことです。 私は通常、データベースを作成するためにGrafanaを起動し、停止し、sqliteを使用してソースをデータベースに追加します。

Grafana 4.0.2の場合、次のようになります。

cat <<EOF | sqlite3 grafana.db || echo "Failed to add data source."
INSERT INTO data_source VALUES (2,1,0,'prometheus','prometheus','proxy','http://address',NULL,NULL,NULL,0,NULL,NULL,0,'{}','2017-01-15 20:00:00','2017-01-15 20:00:00',0,'{}');
EOF

これは、CLIを使用して行います。 Grafana用に作成したツール-wizzyhttps ://github.com/utkarshcmu/wizzy

この問題を再開できますか?
dashboards.jsonに似たオプションで、目的のデータソースを定義できるディレクトリを作成したいのですが。

これもsaltstackの状態のチャンクです(上記のansibleコードと非常によく似ています)。 それはかなり醜いですが、仕事をしているようです:

  http.query:
    - name: http://localhost:3000/api/datasources
    - method: POST
    - username: admin
    - password: admin
    - data: |
        {"name": "Prometheus",
        "type": "prometheus",
        "url": "http://localhost:9090",
        "access": "proxy",
        "isDefault": true}
    - header_list:
      - 'Content-Type: application/json'
    - status: 200
    - unless:
      - curl -f http://admin:admin<strong i="6">@localhost</strong>:3000/api/datasources/name/Prometheus

これを再度開いてください。curlをいじると、sqliteはdockerをいじくりまわします。 Dashboard.jsonのようなクリーンなソリューションは素晴らしいでしょう!

+1これを静的構成で構成可能にする必要があります(たとえば、docker-composeを使用してinfluxdbデータソースを使用してgrafanaを自動的にセットアップする場合)

+1 jsonファイルを使用すると、サイドスクリプトを実行する代わりに、puppetから各ESインデックスのデータソースを簡単に生成できます。

+1

17:36の木、2017年5月25日には、アントンTimofieiev [email protected]
書きました:

+1 jsonファイルを使用すると、各ESインデックスのデータソースを簡単に生成できます
サイドスクリプトを実行する代わりに、puppetから直接


このスレッドにサブスクライブしているため、これを受け取っています。
このメールに直接返信し、GitHubで表示してください
https://github.com/grafana/grafana/issues/1789#issuecomment-304026003
またはスレッドをミュートします
https://github.com/notifications/unsubscribe-auth/AFrnv_CDln7rDTlqZK6r_stAFiek7jaHks5r9ZHfgaJpZM4EBJaL

👍領事にデータソースを照会できること(すでにjson)

https://github.com/grafana/grafana/pull/9504によって閉じられました

HTTP APIまたはconfファイルを介して、Elastic Searchの詳細(インデックス名、時間フィールド名、バージョンなど)をどのように構成すればよいのでしょうか。 これらの構成のキーが見つかりません。 デフォルトの動作は何ですか? @timtofanが言ったように、インデックスごとにデータソースを作成しますか?

curl --user admin: admin'http :// IPADDR :3000 / api / datasources '-X POST -H'Content-Type:application / json; charset = UTF-8' --data-binary '{"name" : "test"、 "type": "prometheus"、 "url": " http:// localhost :9090"、 "access": "proxy"、 "basicAuth":false} '

"isDefault":データソースをデフォルトにしたい場合はtrue

これが私がプロメテウスデータソースを追加する方法です:
curl --user admin: admin'http :// IPADDR :3000 / api / datasources '-X POST -H'Content-Type:application / json; charset = UTF-8' --data-binary '{"name" : "test"、 "isDefault":true、 "type": "prometheus"、 "url": " http:// localhost :9090"、 "access": "proxy"、 "basicAuth":false} '

構成ファイルからすべての組織にデータソースを追加できますか?
とても便利です。

わかりました。これはすでに終了していますが、Grafana5でコードからダッシュボードを定義できることを共有したいと思います。 詳細はこちら: http

このページは役に立ちましたか?
0 / 5 - 0 評価