Привет,
Мне просто интересно, можно ли добавить источники данных «из командной строки или файла конфигурации» вместо использования опции «Добавить источник» в веб-интерфейсе ...
Я хотел бы сделать процесс установки, который автоматизирует установку InfxDB + установку Grafana и автоматически создает источник данных infxdb 'localhost' внутри Grafana. Возможно ли это?
Спасибо
Это через веб-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.sh
(в grafana/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
Самый полезный комментарий
Можно ли снова открыть этот вопрос?
Я бы очень хотел, чтобы вариант, аналогичный
dashboards.json
имел каталог, в котором можно было бы определить желаемые источники данных.