Grafana: Ajouter une source de données sans utiliser l'interface graphique Web

Créé le 15 avr. 2015  ·  40Commentaires  ·  Source: grafana/grafana

Bonjour,
Je me demande juste s'il est possible d'ajouter des sources de données "à partir de la ligne de commande ou du fichier de configuration" au lieu d'utiliser l'option "Ajouter une source" de l'interface Web...
Je voudrais créer un processus d'installation qui automatise l'installation influxdb + l'installation grafana et crée automatiquement la source de données influxdb 'localhost' dans grafana. Est-ce faisable ?
Merci

Commentaire le plus utile

Ce problème peut-il être rouvert ?
J'aimerais beaucoup une option similaire à dashboards.json pour avoir un répertoire où les sources de données souhaitées peuvent être définies

Tous les 40 commentaires

Il s'agit, via l'API Web :

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"}'

Le problème est que pour que ce qui précède fonctionne, vous avez besoin d'une clé API et pour créer une clé API, vous avez besoin d'une interface utilisateur. La solution est de pouvoir utiliser l'api avec nom d'utilisateur/mot de passe (par exemple avec le nom d'utilisateur/mot de passe de l'utilisateur admin)

Merci, je vais essayer et voir :-)
Le problème principal est que je ne trouve aucun document sur l'API Web... peut-être que j'ai raté quelque chose.

Voici du code python pour ce faire que j'ai dérivé en regardant les requêtes 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'})

Merci,
Comme cela fera partie de l'installation, je pense que la méthode "Curl" fera le jab. Mais je vais aussi essayer les trucs python car cela pourrait aussi être utile. Merci encore, je vous tiens au courant :-)
Christian

Je vais essayer de rendre cela plus facile dans 2.1 et également de créer un outil CLI qui facilite l'interaction avec l'API Web

Re-bonjour torkedo,
Vous avez dit "Le problème est que pour que ce qui précède fonctionne, vous avez besoin d'une clé API, et pour créer une clé API, vous avez besoin d'une interface utilisateur."
et effectivement, lorsque j'essaie d'envoyer une telle commande curl, j'obtiens {"message":"Accès refusé"}
Pourriez-vous expliquer ce que vous entendez par "La solution est de pouvoir utiliser l'api avec le nom d'utilisateur/mot de passe (par exemple avec le nom d'utilisateur/mot de passe de l'utilisateur admin)"
Merci...

Salut tout le monde,
La solution Python de PRI-mcallen a bien fonctionné pour moi :-) Je vais continuer comme ça.
Je ferme le sujet.
Merci!!

@PRI-mcallen Merci pour le script python, sur cette base, j'ai trouvé ce qui suit (principalement Bash autour de curl avec cookies/cookie-jar) car je n'ai pas d'interpréteur python dans mon environnement où je besoin de l'exécuter, c'est peut-être utile pour quelqu'un d'autre.

C'est un vrai problème pour exécuter grafana dans docker. Nous utilisons un outil d'orchestration docker (maestro-ng). Nous avons une image docker pour grafana et nous aimerions pouvoir configurer automatiquement la source de données graphite. L'outil d'orchestration crée un conteneur de graphite, puis un conteneur de grafana qui en dépend. L'outil injecte l'adresse du conteneur graphite en tant que variables d'environnement dans le conteneur grafana. Nous voulons que le script de démarrage qui s'exécute dans le conteneur grafana configure automatiquement la source de données graphite. Auparavant, nous pouvions le faire en utilisant config.js dans grafana 1.9, mais maintenant il n'y a que l'API HTTP (qui n'est pas documentée) pour le faire.

@iangkent , voir l'extrait de

salut

Je teste l'extrait de code python que @PRI-mcallen a publié dans 2.1.0-pre1, et il semble que quelque chose ne fonctionne pas (car dans 2.0.2 et 2.0.3-pre1, cela fonctionne)

La réponse que je reçois en ajoutant la source de données est

datasources_put.json()
{u'message' : u'Introuvable'}

Et à partir des journaux grafana :

2015/07/13 11:27:49 [I] Terminé /api/datasources 404 Non trouvé dans 1.169711ms

J'ai essayé d'utiliser curl directement et le même comportement (en utilisant l'authentification par cookie ou l'utilisateur/passe)

curl --user admin:admin \
-X METTRE \
-H 'Type de contenu : application/json;charset=UTF-8' \
--data-binary "{\"name\":\"test4\",\"isDefault\":\"true\",\"type\":\"influxdb_08\",\"url\":\ " http://localhost :8086\",\"access\":\"proxy\",\"database\":\"test4\",\"user\":\"test4\",\"mot de passe \":\"test4\"}" \
" http://172.16.149.149 :3000/api/datasources".

{"message non trouvé"}

Est-ce que quelqu'un a une idée sur la façon de le dépanner ou de le réparer?

Merci d'avance
Efrain

@3fr61n il y a un petit changement dans l'API HTTP en 2.1 (c'est dans le changelog)

Changement de rupture de l'api HTTP de la source de données, AJOUTER la source de données est maintenant POST /api/datasources/, la mise à jour est maintenant PUT /api/datasources/:id

Merci!!! ça marche maintenant

Dans grafana 2.1, vous pouvez maintenant vous authentifier auprès de l'API en utilisant l'authentification de base, vous n'avez donc pas besoin de vous connecter et d'utiliser des cookies pour créer une clé API (ou pour ajouter les sources de données)
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}'

Je reçois "[{"fieldNames":["Name"],"classification":"RequiredError","message":"Required"},{"fieldNames":["Type"],"classification":" RequiredError","message":"Required"},{"fieldNames":["Access"],"classification":"RequiredError","message":"Required"}]"

Vous avez besoin de l'en-tête ContentType application/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}'

Retourne toujours l'erreur ci-dessus :/

Cela ne semble pas correct, deux-points manquants ,-H 'Content-Type: application/json;charset=UTF-8' \

J'utilise les images officielles docker graphite (hopsoft/graphite-statsd) et grafana (grafana/grafana) et la commande suivante a fonctionné pour moi :

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"}'

Dans grafana 2.6 et influxdb 0.10, la boucle suivante fonctionne correctement :

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"}'

vous pouvez vérifier la configuration des sources de données avec :
curl 'http://admin:[email protected]:3000/api/datasources'

Ce problème a été clos en mars, mais existe-t-il un moyen d'automatiser cela de manière plus propre pour une utilisation dans Docker ?

Ce problème a été clos en mars, mais existe-t-il un moyen d'automatiser cela de manière plus propre pour une utilisation dans Docker ?

Ce que nous faisons dans Docker dans run2.sh (il y a déjà un run.sh dans grafana/grafana ):

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

Mais je suis d'accord que c'est une conception très triste. Toute autre application peut être configurée avant de la démarrer. Grafana, vous devez d'abord démarrer puis configurer. Bizarre.

Salut @torkelo , super travail avec l'outil Grafana !
J'obtiens l'erreur "utilisateur non trouvé" lorsque j'essaie d'ajouter un utilisateur dans une organisation à l'aide de l'API Grafana à l'aide de la commande-

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

J'ai entré les informations d'identification de base correctes. Des solutions à ce problème ?
Merci!

l'utilisateur doit exister avec cet appel d'API, vous pouvez créer une invitation d'utilisateur avec l'API d'invitation

Ou via 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

Une autre solution possible consiste à écrire directement dans la base de données de Grafana. Je démarre généralement Grafana afin de créer sa base de données, l'arrête et utilise sqlite pour ajouter la source à la base de données.

Pour Grafana 4.0.2, ce serait quelque chose comme :

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

Je le fais en utilisant une CLI. outil que j'ai écrit pour Grafana - wizzy https://github.com/utkarshcmu/wizzy

Ce problème peut-il être rouvert ?
J'aimerais beaucoup une option similaire à dashboards.json pour avoir un répertoire où les sources de données souhaitées peuvent être définies

Voici également un morceau de l'état de la pile de sel (très similaire au code ansible ci-dessus). C'est assez moche, mais semble faire le travail :

  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

Veuillez rouvrir ceci, jouer avec curl et sqlite est plus qu'ennuyeux avec docker. Juste une solution propre comme avec dashboard.json serait génial !

+1, nous avons besoin que cela soit configurable dans une configuration statique (par exemple lors de l'utilisation de docker-compose pour configurer automatiquement grafana à l'aide d'une source de données influxdb)

+1 avec le fichier json, nous pourrions facilement générer une source de données pour chaque index ES directement à partir de Puppet, au lieu d'exécuter des scripts secondaires

+1

Le jeu. 25 mai 2017 à 17:36, Anton Timofieiev [email protected]
a écrit:

+1 avec le fichier json, nous pourrions facilement générer une source de données pour chaque index ES
directement à partir de marionnette, au lieu d'exécuter des scripts secondaires

-
Vous recevez ceci parce que vous êtes abonné à ce fil.
Répondez directement à cet e-mail, consultez-le sur GitHub
https://github.com/grafana/grafana/issues/1789#issuecomment-304026003 ,
ou couper le fil
https://github.com/notifications/unsubscribe-auth/AFrnv_CDln7rDTlqZK6r_stAFiek7jaHks5r9ZHfgaJpZM4EBJaL
.

👍 avec la possibilité d'interroger consul pour la source de données (c'est déjà json)

Je me demande comment configurer les détails de la recherche élastique (tels que le nom de l'index, le nom du champ d'heure et la version) que ce soit via l'API HTTP ou le fichier de configuration. Je ne trouve tout simplement pas la clé de ces configurations. Quel est le comportement par défaut ? Cela crée-t-il une source de données pour chaque index comme l' a dit

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 si vous souhaitez définir la source de données par défaut

Voici comment j'ajoute une source de données prometheus :
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}'

Puis-je ajouter une source de données du fichier de configuration à toutes les organisations ?
Ce serait très pratique.

Ok, je sais que c'est déjà fermé, mais je voulais juste partager que Grafana 5 permet de définir le tableau de bord à partir du code. Plus d'infos ici : http://docs.grafana.org/administration/provisioning/#datasources

Cette page vous a été utile?
0 / 5 - 0 notes