Grafana: Добавление источника данных без использования веб-интерфейса

Созданный на 15 апр. 2015  ·  40Комментарии  ·  Источник: grafana/grafana

Привет,
Мне просто интересно, можно ли добавить источники данных «из командной строки или файла конфигурации» вместо использования опции «Добавить источник» в веб-интерфейсе ...
Я хотел бы сделать процесс установки, который автоматизирует установку InfxDB + установку Grafana и автоматически создает источник данных infxdb 'localhost' внутри Grafana. Возможно ли это?
Спасибо

Самый полезный комментарий

Можно ли снова открыть этот вопрос?
Я бы очень хотел, чтобы вариант, аналогичный dashboards.json имел каталог, в котором можно было бы определить желаемые источники данных.

Все 40 Комментарий

Это через веб-api:

curl ' http: // localhost : 3000 / api / datasources' -X PUT --data-binary '{"name": "test", "type": "Infxdb_08", "url": " http: // localhost : 8086 "," доступ ":" прокси "," isDefault ": true," база данных ":" asd "," пользователь ":" asd "," пароль ":" asd "} '

Проблема в том, что для работы выше вам нужен ключ API, а для создания ключа api вам нужен пользовательский интерфейс. Решение состоит в том, чтобы иметь возможность использовать api с именем пользователя / паролем (например, с именем пользователя / паролем администратора)

Спасибо, попробую и посмотрю :-)
Основная проблема в том, что я не могу найти никаких документов о веб-API ... может быть, я что-то упускаю.

Вот код 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'})

Спасибо,
Поскольку это будет частью установки, я думаю, что способ Curl сделает удар. Но я также попробую материал Python, так как он тоже может быть полезен. Еще раз спасибо, дам знать :-)
Христианин

Я постараюсь упростить это в версии 2.1, а также сделаю инструмент командной строки, который упрощает взаимодействие с веб-API.

Привет снова торкедо,
Вы сказали: «Проблема в том, чтобы все вышесказанное работало, вам нужен ключ API, а для создания ключа API нужен пользовательский интерфейс».
и эффективно, когда я пытаюсь отправить такую ​​команду curl, я получаю {"message": "Доступ запрещен"}
Не могли бы вы объяснить, что вы имеете в виду под «Решение состоит в том, чтобы иметь возможность использовать API с именем пользователя и паролем (например, с именем пользователя и паролем администратора)»
Спасибо...

Всем привет,
Решение Python от PRI-mcallen у меня сработало :-) Я буду продолжать в том же духе.
Закрываю тему.
Спасибо!!

@ PRI-mcallen Спасибо за скрипт python, на основе которого я придумал следующее (в основном Bash около curl с cookies / cookie-jar), поскольку у меня нет интерпретатора python в моем env, где я нужно запустить это, может быть, это полезно для кого-то.

Это настоящая проблема для запуска графаны в докере. Мы используем инструмент оркестровки докеров (maestro-ng). У нас есть образ докера для графаны, и мы хотели бы иметь возможность автоматически настраивать источник данных графита. Инструмент оркестровки создает графитовый контейнер, а затем зависящий от него контейнер графана. Инструмент вводит адрес графитового контейнера как переменные env в контейнер grafana. Мы хотим, чтобы сценарий запуска, который запускается в контейнере grafana, автоматически настраивал источник данных graphite. Раньше мы могли делать это с помощью config.js в grafana 1.9, но теперь для этого есть только HTTP API (который не документирован).

@iangkent , см. фрагмент Python, который я опубликовал выше, чтобы увидеть, как использовать HTTP API (реконструированный на основе наблюдения за транзакциями).

Привет

Я тестирую фрагмент Python, который @ PRI-mcallen опубликовал в 2.1.0-pre1, и кажется, что что-то сломано (потому что в 2.0.2 и 2.0.3-pre1 он работает)

Ответ, который я получаю при добавлении источника данных:

datasources_put.json ()
{u'message ': u'Не найдено'}

И из логов графана:

2015/07/13 11:27:49 [I] Completed / api / datasources 404 Not Found in 1.169711ms

Я пробовал использовать curl напрямую и с таким же поведением (с использованием аутентификации cookie или пользователя / прохода)

curl --user admin: admin \
-X PUT \
-H 'Content-Type: application / json; charset = UTF-8' \
--data-binary "{\" имя \ ": \" test4 \ ", \" isDefault \ ": \" true \ ", \" type \ ": \" Infxdb_08 \ ", \" url \ ": \ " http: // localhost : 8086 \", \ "доступ \": \ "прокси \", \ "база данных \": \ "test4 \", \ "пользователь \": \ "test4 \", \ "пароль \ ": \" test4 \ "}" \
" http://172.16.149.149 : 3000 / api / datasources".

{"Сообщение не найдено"}

У кого-нибудь есть идеи, как устранить или исправить?

заранее спасибо
Эфраин

@ 3fr61n есть небольшое

Критическое изменение HTTP api источника данных, источник данных 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 \": \ "Infxdb_09x \", \ "type \": \ "Infxdb \ ", \" доступ \ ": \" прокси \ ", \" url \ ": \" http: // имя хоста : 8086 \ ", \" пароль \ ": \" root \ ", \" user \ " : \ "корень \", \ "база данных \": \ "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 "}]"

Вам нужен заголовок ContentType application / json

curl -i -XPOST ' http: // admin: admin @ hostname : 3000 / api / datasources' --header "ContentType application / json" --data-binary '{\ "name \": \ "Infxdb2 \", \ "тип \": \ "Infxdb_09x \", \ "доступ \": \ "прокси \", \ "url \": \ " http: // имя хоста : 8086 \", \ "пароль \": \ " root \ ", \" user \ ": \" root \ ", \" database \ ": \" cadvisor \ ", \" basicAuth \ ": true, \" basicAuthUser \ ": \" admin \ ", \" basicAuthPassword \ ": \" admin \ ", \" isDefault \ ": true, \" jsonData \ ": null} '

По-прежнему возвращает ошибку выше: /

Это выглядит неправильно, отсутствует двоеточие, -H 'Content-Type: application / json; charset = UTF-8' \

Я использую официальные изображения docker graphite (hopsoft / graphite-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"}'

В grafana 2.6 и Influxdb 0.10 следующий curl работает правильно:

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'

Эта проблема была закрыта в марте, но есть ли способ автоматизировать ее более чистым способом для использования в Docker?

Эта проблема была закрыта в марте, но есть ли способ автоматизировать ее более чистым способом для использования в Docker?

Что мы делаем в Docker в run2.shgrafana/grafana уже есть run.sh 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

Но согласен, это очень печальный дизайн. Любое другое приложение можно настроить перед его запуском. Grafana нужно сначала запустить, а потом настроить. Странный.

Привет, @torkelo , отличная работа с инструментом Grafana!
Я получаю сообщение об ошибке «пользователь не найден», когда пытаюсь добавить пользователя в организацию с помощью Grafana API с помощью команды:

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

Я ввел правильные учетные данные Basic Auth. Какие решения этой проблемы?
Спасибо!

пользователь должен существовать с этим вызовом API, вы можете создать приглашение пользователя с помощью API приглашения

Или через анзибль:

# 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

Другой возможный вариант действий - запись непосредственно в базу данных 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

Я делаю это с помощью интерфейса командной строки. инструмент, который я написал для Grafana - wizzy https://github.com/utkarshcmu/wizzy

Можно ли снова открыть этот вопрос?
Я бы очень хотел, чтобы вариант, аналогичный dashboards.json имел каталог, в котором можно было бы определить желаемые источники данных.

Вот фрагмент состояния солончака для него (очень похоже на код 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 для автоматической настройки grafana с использованием источника данных Infxdb)

+1 с файлом json мы могли бы легко сгенерировать источник данных для каждого индекса ES прямо из марионетки, вместо того, чтобы запускать побочные скрипты

+1

25 мая 2017 г. в 17:36 Антон Тимофеев [email protected]
написал:

+1 с файлом json мы могли бы легко сгенерировать источник данных для каждого индекса ES
прямо из марионетки, вместо запуска побочных скриптов

-
Вы получаете это, потому что подписаны на эту беседу.
Ответьте на это письмо напрямую, просмотрите его на GitHub
https://github.com/grafana/grafana/issues/1789#issuecomment-304026003 ,
или отключить поток
https://github.com/notifications/unsubscribe-auth/AFrnv_CDln7rDTlqZK6r_stAFiek7jaHks5r9ZHfgaJpZM4EBJaL
.

👍 с возможностью запрашивать у консула источник данных (это уже json)

Интересно, как мне настроить детали эластичного поиска (такие как имя индекса, имя поля времени и версия) через HTTP API или файл conf. Я просто не могу найти ключ для этих конфигураций. Какое поведение по умолчанию? Создает ли он источник данных для каждого индекса, как сказал

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

"isDefault": истина, если вы хотите сделать источник данных по умолчанию

Вот как я добавляю источник данных 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} '

Могу ли я добавить источник данных из файла конфигурации для всех организаций?
Было бы очень удобно.

Хорошо, я знаю, что это уже закрыто, но я просто хотел поделиться тем, что Grafana 5 позволяет определять Dashboard из кода. Подробнее здесь: http://docs.grafana.org/administration/provisioning/#datasources

Была ли эта страница полезной?
0 / 5 - 0 рейтинги