Olá,
Só me pergunto se é possível adicionar fontes de dados 'da linha de comando ou arquivo de configuração' em vez de usar a opção 'Adicionar fonte' da interface da web ...
Eu gostaria de fazer um processo de instalação que automatiza a instalação do influxdb + instalação do grafana e cria automaticamente a fonte de dados do influxdb 'localhost' dentro do grafana. Isso é viável?
Obrigado
É, por meio da API da web:
curl ' http: // localhost : 3000 / api / datasources' -X PUT --data-binary '{"nome": "teste", "tipo": "influxdb_08", "url": " http: // localhost : 8086 "," access ":" proxy "," isDefault ": true," database ":" asd "," user ":" asd "," password ":" asd "} '
O problema é que para o funcionamento acima você precisa de uma chave de API, e para criar uma chave de API, você precisa de uma IU. A solução é ser capaz de usar a api com nome de usuário / senha (por exemplo, com nome de usuário / senha de administrador)
Obrigado, vou tentar isso e ver :-)
O principal problema é que não consigo encontrar nenhum documento sobre a API da web ... talvez esteja faltando alguma coisa.
Aqui está um código Python para fazer isso, derivado da observação das solicitações 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'})
Obrigado,
Como vai fazer parte da instalação, acho que o jeito 'Curl' vai dar o jab. Mas também tentarei as coisas do python, pois podem ser úteis também. Obrigado mais uma vez, vou informá-lo :-)
cristão
Vou tentar tornar isso mais fácil no 2.1 e também fazer uma ferramenta CLI que torna a interação com a API da Web mais fácil
Olá de novo, torkedo,
Você disse "O problema é que para o funcionamento acima você precisa de uma chave de API, e para criar uma chave de API, você precisa de uma IU".
e, efetivamente, quando tento enviar esse comando curl, recebo {"message": "Access denied"}
Você poderia explicar o que quer dizer com "A solução é poder usar a api com nome de usuário / senha (por exemplo, com nome de usuário / senha de administrador)"
Obrigado...
Olá a todos,
A solução Python do PRI-mcallen funcionou bem para mim :-) Vou continuar assim.
Eu fecho o tópico.
Obrigado!!
@ PRI-mcallen Obrigado pelo script python, com base nisso eu vim com o seguinte (principalmente Bash em torno de curl
com cookies / cookie-jar), pois não tenho um interpretador python em meu ambiente, onde eu precisa executar isso, talvez seja útil para outra pessoa.
Este é um verdadeiro incômodo para executar o grafana no docker. Usamos uma ferramenta de orquestração docker (maestro-ng). Temos uma imagem docker para grafana e gostaríamos de poder configurar automaticamente a fonte de dados de grafite. A ferramenta de orquestração cria um contêiner de grafite e depois um contêiner de grafana que depende dele. A ferramenta injeta o endereço do contêiner de grafite como variáveis env no contêiner grafana. Queremos que o script de inicialização que é executado no contêiner grafana configure automaticamente a fonte de dados do Graphite. Costumávamos ser capazes de fazer isso usando config.js no grafana 1.9, mas agora há apenas a API HTTP (que não está documentada) para fazer isso.
@iangkent , veja o snippet python que postei acima para um exemplo de como usar a API HTTP (engenharia reversa a partir da observação das transações).
Oi
Estou testando o snippet python que @ PRI-mcallen postou em 2.1.0-pre1 e parece que algo está quebrado (porque em 2.0.2 e 2.0.3-pre1 funciona)
A resposta que estou obtendo ao adicionar a fonte de dados é
datasources_put.json ()
{u'mensagem ': u'Não encontrada'}
E a partir de toras de grafana:
2015/07/13 11:27:49 [I] Concluído / api / datasources 404 não encontrado em 1.169711ms
Tentei usar curl diretamente e mesmo comportamento (usando autenticação de cookie ou usuário / senha)
curl - usuário admin: admin \
-X PUT \
-H 'Content-Type: application / json; charset = UTF-8' \
--data-binary "{\" nome \ ": \" test4 \ ", \" isDefault \ ": \" true \ ", \" type \ ": \" influxdb_08 \ ", \" url \ ": \ " http: // localhost : 8086 \", \ "access \": \ "proxy \", \ "banco de dados \": \ "test4 \", \ "usuário \": \ "test4 \", \ "senha \ ": \" test4 \ "}" \
" http://172.16.149.149 : 3000 / api / datasources".
{"mensagem não encontrada"}
Alguém tem uma ideia sobre como solucionar ou consertar?
desde já, obrigado
Efrain
@ 3fr61n, há uma pequena alteração interrompida na API HTTP no 2.1 (está no changelog)
Fonte de dados HTTP api alteração de última hora, fonte de dados ADD agora é POST / api / datasources /, atualização agora é PUT / api / datasources /: id
Obrigado!!! está funcionando agora
No grafana 2.1 agora você pode autenticar contra a API usando autenticação básica, então você não precisa fazer o login e usar cookies para criar uma chave de API (ou para adicionar as fontes de dados)
https://github.com/grafana/grafana/issues/2218#issuecomment -117041541
curl -i -XPOST ' http: // admin: admin @ hostname : 3000 / api / datasources' --data-binary '{\ "nome \": \ "influxdb_09x \", \ "type \": \ "influxdb \ ", \" acesso \ ": \" proxy \ ", \" url \ ": \" http: // hostname : 8086 \ ", \" senha \ ": \" root \ ", \" usuário \ " : \ "root \", \ "database \": \ "cadvisor \", \ "basicAuth \": true, \ "basicAuthUser \": \ "admin \", \ "basicAuthPassword \": \ "admin \" , \ "isDefault \": true, \ "jsonData \": null} '
Estou recebendo "[{" fieldNames ": [" Nome "]," classificação ":" RequiredError "," mensagem ":" Obrigatório "}, {" fieldNames ": [" Tipo "]," classificação ":" RequeridoError "," mensagem ":" Requerido "}, {" fieldNames ": [" Acesso "]," classificação ":" RequeridoError "," mensagem ":" Requerido "}]"
Você precisa do cabeçalho ContentType application / json
curl -i -XPOST ' http: // admin: admin @ hostname : 3000 / api / datasources' --header "ContentType application / json" --data-binary '{\ "name \": \ "influxdb2 \", \ "digite \": \ "influxdb_09x \", \ "acesso \": \ "proxy \", \ "url \": \ " http: // hostname : 8086 \", \ "senha \": \ " root \ ", \" usuário \ ": \" root \ ", \" banco de dados \ ": \" cadvisor \ ", \" basicAuth \ ": true, \" basicAuthUser \ ": \" admin \ ", \" basicAuthPassword \ ": \" admin \ ", \" isDefault \ ": true, \" jsonData \ ": null} '
Ainda retornando o erro acima: /
Isso não parece certo, dois pontos faltando, -H 'Content-Type: application / json; charset = UTF-8' \
Estou usando as imagens oficiais docker graphite (hopsoft / graphite-statsd) e grafana (grafana / grafana) e o seguinte comando funcionou para mim:
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"}'
No grafana 2.6 e no influxdb 0.10, o seguinte curl está funcionando corretamente:
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"}'
você pode verificar a configuração das fontes de dados com:
curl 'http://admin:[email protected]:3000/api/datasources'
Este problema foi resolvido em março, mas existe alguma maneira de automatizar isso de uma forma mais limpa para uso no Docker?
Este problema foi resolvido em março, mas existe alguma maneira de automatizar isso de uma forma mais limpa para uso no Docker?
O que fazemos no Docker em run2.sh
(já existe um run.sh
em 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
Mas concordo que é um design muito triste. Qualquer outro aplicativo pode ser configurado antes de iniciá-lo. Grafana você tem que começar primeiro e depois configurar. Esquisito.
Olá @torkelo , ótimo trabalho com a ferramenta Grafana!
Recebo o erro "usuário não encontrado" quando tento adicionar um usuário em uma organização usando a API Grafana usando o comando-
curl 'http: //: @: 3000 / api / orgs / 6 / users' -X POST -H 'Content-Type: application / json; charset = UTF-8' --data-binary '{"loginOrEmail": "user1", "role": "Viewer"} '
Eu inseri as credenciais de autenticação básica corretas. Alguma solução para este problema?
Obrigado!
o usuário deve existir com essa chamada de API, você pode criar um convite de usuário com a API de convite
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
Outro curso de ação possível é escrever diretamente no banco de dados do Grafana. Normalmente inicio o Grafana para criar seu banco de dados, interrompo-o e uso o sqlite para adicionar a fonte ao banco de dados.
Para o Grafana 4.0.2, seria 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
Eu faço isso usando uma CLI. ferramenta que escrevi para Grafana - wizzy https://github.com/utkarshcmu/wizzy
Este problema pode ser reaberto?
Eu gostaria muito de uma opção semelhante a dashboards.json
para ter um diretório onde as fontes de dados desejadas podem ser definidas
Aqui está um pedaço do estado saltstack para ele também (muito semelhante ao código ansible acima). É muito feio, mas 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
Por favor, reabra isso, mexer com curl e sqlite é mais chato com o docker. Apenas uma solução limpa, como o dashboard.json, seria incrível!
+1, precisamos que isso seja configurável em uma configuração estática (por exemplo, ao usar docker-compose para configurar grafana automaticamente usando uma fonte de dados influxdb)
+1 com o arquivo json, poderíamos facilmente gerar uma fonte de dados para cada índice ES direto do fantoche, em vez de executar scripts paralelos
+1
Em quinta-feira, 25 de maio de 2017 às 17:36, Anton Timofieiev [email protected]
escreveu:
+1 com o arquivo json, poderíamos facilmente gerar uma fonte de dados para cada índice ES
direto do fantoche, em vez de executar scripts paralelos-
Você está recebendo isto porque está inscrito neste tópico.
Responda a este e-mail diretamente, visualize-o no GitHub
https://github.com/grafana/grafana/issues/1789#issuecomment-304026003 ,
ou silenciar o tópico
https://github.com/notifications/unsubscribe-auth/AFrnv_CDln7rDTlqZK6r_stAFiek7jaHks5r9ZHfgaJpZM4EBJaL
.
👍 com a possibilidade de consultar o cônsul para a fonte de dados (já é json)
Fechado por https://github.com/grafana/grafana/pull/9504
Gostaria de saber como configuro os detalhes da pesquisa elástica (como nome do índice, nome do campo de tempo e versão) via API HTTP ou arquivo conf. Simplesmente não consigo encontrar a chave para essas configurações. Qual é o comportamento padrão? Ele cria uma fonte de dados para cada índice como @timtofan disse?
curl --user admin: admin ' http: // IPADDR : 3000 / api / datasources' -X POST -H 'Content-Type: application / json; charset = UTF-8' --data-binary '{"nome" : "test", "type": "prometheus", "url": " http: // localhost : 9090", "access": "proxy", "basicAuth": false} '
"isDefault": verdadeiro se você quiser tornar a fonte de dados padrão
Aqui está a maneira de adicionar uma fonte de dados prometheus:
curl --user admin: admin ' http: // IPADDR : 3000 / api / datasources' -X POST -H 'Content-Type: application / json; charset = UTF-8' --data-binary '{"nome" : "test", "isDefault": true, "type": "prometheus", "url": " http: // localhost : 9090", "access": "proxy", "basicAuth": false} '
Posso adicionar uma fonte de dados do arquivo de configuração para todas as organizações?
Seria muito conveniente.
Ok, eu sei que isso já está fechado, mas eu só queria compartilhar que o Grafana 5 permite definir o Dashboard a partir do código. Mais informações aqui: http://docs.grafana.org/administration/provisioning/#datasources
Comentários muito úteis
Este problema pode ser reaberto?
Eu gostaria muito de uma opção semelhante a
dashboards.json
para ter um diretório onde as fontes de dados desejadas podem ser definidas