Grafana: Agregar fuente de datos sin usar la interfaz gráfica de usuario web

Creado en 15 abr. 2015  ·  40Comentarios  ·  Fuente: grafana/grafana

Hola,
Me pregunto si es posible agregar fuentes de datos 'desde la línea de comando o el archivo de configuración' en lugar de usar la opción 'Agregar fuente' de la interfaz web ...
Me gustaría hacer un proceso de instalación que automatice la instalación de influxdb + la instalación de grafana y cree automáticamente la fuente de datos de influxdb 'localhost' dentro de grafana. ¿Es esto factible?
Gracias

Comentario más útil

¿Se puede reabrir este problema?
Me gustaría mucho una opción similar a dashboards.json para tener un directorio donde se pueden definir las fuentes de datos deseadas

Todos 40 comentarios

Es, a través de la api web:

curl ' http: // localhost : 3000 / api / datasources' -X PUT --data-binary '{"name": "test", "type": "influxdb_08", "url": " http: // localhost : 8086 "," acceso ":" proxy "," isDefault ": verdadero," base de datos ":" asd "," usuario ":" asd "," contraseña ":" asd "} '

El problema es que para que lo anterior funcione, necesita una clave de API, y para crear una clave de API, necesita una interfaz de usuario. La solución es poder usar la API con nombre de usuario / contraseña (por ejemplo, con el nombre de usuario / contraseña del usuario administrador)

Gracias, intentaré esto y veré :-)
El problema principal es que no puedo encontrar ningún documento sobre la API web ... tal vez me esté perdiendo algo.

Aquí hay un código de Python para hacer esto que obtuve al ver las solicitudes 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'})

Gracias,
Como será parte de la instalación, creo que la forma 'Curl' hará el jab. Pero también probaré las cosas de Python, ya que también podrían ser útiles. Gracias de nuevo, te lo haré saber :-)
cristiano

Intentaré facilitar esto en 2.1 y también crear una herramienta CLI que facilite la interacción con la API web.

Hola de nuevo torkedo,
Dijiste "El problema es que para que funcione lo anterior necesitas una clave API y para crear una clave api necesitas una interfaz de usuario".
y efectivamente cuando intento enviar dicho comando curl, obtengo {"message": "Acceso denegado"}
¿Podría explicar lo que quiere decir con "La solución es poder usar la API con nombre de usuario / contraseña (por ejemplo, con el nombre de usuario / contraseña del usuario administrador)"?
Gracias...

Hola a todos,
La solución Python de PRI-mcallen funcionó bien para mí :-) Seguiré así.
Cierro el tema.
¡¡Gracias!!

@ PRI-mcallen Gracias por el script de Python, en base a eso se me ocurrió lo siguiente (principalmente Bash alrededor de curl con cookies / cookie-jar) ya que no tengo un intérprete de Python en mi entorno donde necesita ejecutar esto, tal vez sea útil para otra persona.

Esta es una verdadera molestia para ejecutar grafana en la ventana acoplable. Usamos una herramienta de orquestación de Docker (maestro-ng). Tenemos una imagen de la ventana acoplable para grafana y nos gustaría poder configurar automáticamente la fuente de datos de grafito. La herramienta de orquestación crea un contenedor de grafito y luego un contenedor de grafana que depende de él. La herramienta inyecta la dirección del contenedor de grafito como variables env en el contenedor grafana. Queremos que el script de inicio que se ejecuta en el contenedor grafana configure automáticamente la fuente de datos de grafito. Solíamos poder hacer esto usando config.js en grafana 1.9, pero ahora solo existe la API HTTP (que no está documentada) para hacer esto.

@iangkent , vea el fragmento de Python que

Hola

Estoy probando el fragmento de python que @ PRI-mcallen publicó en 2.1.0-pre1, y parece que algo está roto (porque en 2.0.2 y 2.0.3-pre1 funciona)

La respuesta que obtengo al agregar la fuente de datos es

datasources_put.json ()
{u'message ': u'Not found'}

Y de los registros de grafana:

2015/07/13 11:27:49 [I] Completado / api / datasources 404 No encontrado en 1.169711ms

Intenté usar curl directamente y el mismo comportamiento (usando autenticación de cookies o usuario / contraseña)

curl - administrador de usuario
-X PUT \
-H 'Tipo de contenido: aplicación / json; juego de caracteres = UTF-8' \
--data-binary "{\" nombre \ ": \" test4 \ ", \" isDefault \ ": \" true \ ", \" type \ ": \" influxdb_08 \ ", \" url \ ": \ " http: // localhost : 8086 \", \ "acceso \": \ "proxy \", \ "base de datos \": \ "prueba4 \", \ "usuario \": \ "prueba4 \", \ "contraseña \ ": \" prueba4 \ "}" \
" http://172.16.149.149 : 3000 / api / datasources".

{"mensaje no encontrado"}

¿Alguien tiene una idea sobre cómo solucionar problemas o solucionarlo?

Gracias por adelantado
Efraín

@ 3fr61n hay un pequeño cambio importante en la API HTTP en 2.1 (está en el registro de cambios)

Cambio de ruptura de la API HTTP de la fuente de datos, AGREGAR la fuente de datos ahora es POST / api / datasources /, la actualización ahora es PUT / api / datasources /: id

¡¡¡Gracias!!! Está funcionando ahora

En grafana 2.1 ahora puede autenticarse contra la API usando autenticación básica, por lo que no necesita iniciar sesión y usar cookies para crear una clave de API (o para agregar las fuentes de datos)
https://github.com/grafana/grafana/issues/2218#issuecomment -117041541

curl -i -XPOST ' http: // admin: admin @ nombre de host : 3000 / api / datasources' --data-binary '{\ "nombre \": \ "influxdb_09x \", \ "tipo \": \ "influxdb \ ", \" acceso \ ": \" proxy \ ", \" url \ ": \" http: // nombre de host : 8086 \ ", \" contraseña \ ": \" root \ ", \" usuario \ " : \ "root \", \ "database \": \ "ca went \", \ "basicAuth \": true, \ "basicAuthUser \": \ "admin \", \ "basicAuthPassword \": \ "admin \" , \ "isDefault \": true, \ "jsonData \": null} '

Recibo "[{" fieldNames ": [" Nombre "]," clasificación ":" RequiredError "," mensaje ":" Obligatorio "}, {" fieldNames ": [" Tipo "]," clasificación ":" RequiredError "," mensaje ":" Obligatorio "}, {" fieldNames ": [" Acceso "]," clasificación ":" RequiredError "," mensaje ":" Obligatorio "}]"

Necesita la aplicación ContentType de encabezado / json

curl -i -XPOST ' http: // admin: admin @ hostname : 3000 / api / datasources' --header "ContentType application / json" --data-binary '{\ "name \": \ "influxdb2 \", \ "tipo \": \ "influxdb_09x \", \ "acceso \": \ "proxy \", \ "url \": \ " http: // nombre de host : 8086 \", \ "contraseña \": \ " root \ ", \" usuario \ ": \" root \ ", \" base de datos \ ": \" ca went \ ", \" basicAuth \ ": true, \" basicAuthUser \ ": \" admin \ ", \" basicAuthPassword \ ": \" admin \ ", \" isDefault \ ": true, \" jsonData \ ": null} '

Todavía devolviendo el error anterior: /

Eso no se ve bien, faltan dos puntos, -H 'Content-Type: application / json; charset = UTF-8' \

Estoy usando las imágenes oficiales de grafito docker (hopsoft / graphite-statsd) y grafana (grafana / grafana) y el siguiente comando funcionó para mí:

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

En grafana 2.6 y influxdb 0.10, el siguiente rizo funciona correctamente:

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

puede verificar la configuración de las fuentes de datos con:
curl 'http://admin:[email protected]:3000/api/datasources'

Este problema se cerró en marzo, pero ¿hay alguna forma de automatizarlo de una manera más limpia para su uso en Docker?

Este problema se cerró en marzo, pero ¿hay alguna forma de automatizarlo de una manera más limpia para su uso en Docker?

Lo que hacemos en Docker en run2.sh (ya hay un run.sh en 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

Pero estoy de acuerdo en que este es un diseño muy triste. Cualquier otra aplicación se puede configurar antes de iniciarla. Grafana tienes que empezar primero y luego configurar. Extraño.

Hola @torkelo , ¡excelente trabajo con la herramienta Grafana!
Aparece el error "usuario no encontrado" cuando intento agregar un usuario en una organización usando la API de Grafana usando el comando-

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

Ingresé las credenciales de autenticación básica correctas. ¿Alguna solución a este problema?
¡Gracias!

el usuario tiene que existir con esa llamada API, puede crear una invitación de usuario con la API de invitación

O vía 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

Otro posible curso de acción es escribir directamente en la base de datos de Grafana. Por lo general, inicio Grafana para crear su base de datos, la detengo y uso sqlite para agregar la fuente a la base de datos.

Para Grafana 4.0.2 sería algo como:

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

Hago esto usando una CLI. herramienta que escribí para Grafana - wizzy https://github.com/utkarshcmu/wizzy

¿Se puede reabrir este problema?
Me gustaría mucho una opción similar a dashboards.json para tener un directorio donde se pueden definir las fuentes de datos deseadas

Aquí también hay un fragmento del estado de la pila de sal (muy similar al código ansible anterior). Es bastante feo, pero parece funcionar:

  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

Vuelva a abrir esto, jugar con curl y sqlite es más molesto con la ventana acoplable. ¡Solo una solución limpia como con dashboard.json sería increíble!

+1 necesitamos que esto sea configurable en una configuración estática (por ejemplo, cuando se usa docker-compose para configurar grafana automáticamente usando una fuente de datos influxdb)

+1 con el archivo json, podríamos generar fácilmente una fuente de datos para cada índice ES directamente desde la marioneta, en lugar de ejecutar scripts laterales

+1

El jueves 25 de mayo de 2017 a las 5:36 p. M., Anton Timofieiev [email protected]
escribió:

+1 con el archivo json, podríamos generar fácilmente una fuente de datos para cada índice ES
directamente desde la marioneta, en lugar de ejecutar scripts paralelos

-
Estás recibiendo esto porque estás suscrito a este hilo.
Responda a este correo electrónico directamente, véalo en GitHub
https://github.com/grafana/grafana/issues/1789#issuecomment-304026003 ,
o silenciar el hilo
https://github.com/notifications/unsubscribe-auth/AFrnv_CDln7rDTlqZK6r_stAFiek7jaHks5r9ZHfgaJpZM4EBJaL
.

👍 con poder consultar la fuente de datos del cónsul (ya es json)

Me pregunto cómo configuro los detalles de búsqueda elástica (como el nombre del índice, el nombre del campo de tiempo y la versión) ya sea a través de la API HTTP o el archivo conf. Simplemente no puedo encontrar la clave para esas configuraciones. ¿Cuál es el comportamiento predeterminado? ¿Crea una fuente de datos para cada índice como dijo @timtofan ?

curl --user admin: admin ' http: // IPADDR : 3000 / api / datasources' -X POST -H 'Content-Type: application / json; charset = UTF-8' --data-binary '{"nombre" : "prueba", "tipo": "prometheus", "url": " http: // localhost : 9090", "acceso": "proxy", "basicAuth": falso} '

"isDefault": verdadero si desea que la fuente de datos sea predeterminada

Esta es la forma en que agrego una fuente de datos de prometheus:
curl --user admin: admin ' http: // IPADDR : 3000 / api / datasources' -X POST -H 'Content-Type: application / json; charset = UTF-8' --data-binary '{"nombre" : "test", "isDefault": true, "type": "prometheus", "url": " http: // localhost : 9090", "access": "proxy", "basicAuth": false} '

¿Puedo agregar una fuente de datos del archivo de configuración a todas las organizaciones?
Sería muy conveniente.

Ok, sé que esto ya está cerrado, pero solo quería compartir que Grafana 5 permite definir Dashboard desde el código. Más información aquí: http://docs.grafana.org/administration/provisioning/#datasources

¿Fue útil esta página
0 / 5 - 0 calificaciones