Fonte de dados: InfluxDB, potencialmente PostgreSQL para dados alterados com pouca frequência.
Esta solicitação de recurso é uma extensão geral das discussões que acontecem em:
Ele é baseado no slack post: Grafana Cloud Hosting Best Practices que criei em 20/04/2016 no canal grafana
em raintank.slack.com
.
Para os curiosos:
Para descobrir o que é um sistema fora da rede ou híbrido, verifique este documento bastante acessível:
Sistemas híbridos de energia baseados em energias renováveis (fonte: Alliance for Rural Electrification )
O desafio
Abaixo está um exemplo de um dos meus casos de uso mais complexos do Grafana.
├── Off-Grid manufacturer 1
│ └── Technical staff
│ └── Finance staff
│ └── Investors
│ └── Public (i.e. demo dashboards)
│ │
│ └── Plant hire company 1.1
│ │ ├── Finance staff
│ │ ├── Technical staff
│ │ └── Investors
│ │ └── Public (i.e. demo dashboards)
│ │ │
│ │ └── Building company 1.1.1
│ │ │ ├── Technical staff
│ │ │ ├── Finance staff
│ │ │ └── Investors
│ │ │ └── Public (i.e. demo dashboards)
│ │ .
│ │ .
│ │ └── Building company 1.1.n
│ .
│ .
│ └── Plant hire company 1.n
.
.
└── Off-Grid manufacturer n
Observe que preciso lidar não apenas com várias organizações, mas também com várias organizações com algumas camadas de profundidade.
Dentro de Off-Grid manufacturer 1
existem 5 grupos diferentes de usuários, a saber:
• Equipe técnica
• Equipe de finanças
• Investidores
• Público
• Clientes (ou seja, empresas de aluguel de plantas; essencialmente, uma suborganização)
Cada um desses grupos tem necessidades muito diferentes em termos de visualização de dados e seria fantástico poder configurar painéis padrão aplicáveis a cada grupo. Alguns grupos, como o pessoal da tecnologia, quero conceder acesso total para criar seus próprios painéis e poder representar graficamente qualquer coisa. O grupo público que quero bloquear completamente, enquanto todos os outros grupos estão em algum lugar entre esses dois extremos. Não quero que os grupos se intrometam ou tenham acesso aos painéis ou fontes de dados uns dos outros.
Off-Grid manufacturer 1
precisa ser capaz de acessar todos os dados de todas as empresas abaixo dele, enquanto Plant hire company 1.1
precisa ser capaz de acessar todas as empresas abaixo dele, mas não ser capaz de acessar os dados de outras empresas contratadas empresas no mesmo nível que ela ou quaisquer organizações acima dela.
Um exemplo um tanto extremo eu sei, mas essa é a minha realidade!
Para simplificar o acesso ao painel, seria ótimo ter grupos de usuários e grupos de painel dentro das organizações e ser capaz de conceder direitos de visualização / edição aos painéis para cada usuário ou grupo de usuários. Subgrupos (ou suborganizações) com a capacidade de atribuir funções de administrador a determinados usuários dentro de um determinado grupo, com os direitos de administrador limitados a esse subgrupo (ou suborganização), também seriam úteis 😈
Se você tivesse que desenhar uma única organização, seria algo assim:
users : u1 u2 u3 u4 u5 |
\ / \ / / / |
| | / / |
user : ug1 ug2 / / |
groups : | / | / / |
| / | / / |>- organisation
| / | / / |
dashboard : dg1 dg2 / |
groups : | | / |
/ \ / \ / |
dashboards: d1 d2 d3 d4 |
--
Observação:
u1
), por meio do grupo de usuários 1 ( ug1
), só tem acesso aos painéis 1 e 2 ( d1
& d2
).u2
) pertence a ambos os grupos de usuários e, portanto, tem acesso a todos os 4 painéis.ug2
) tem acesso a ambos os grupos do painel e, portanto, também tem acesso a todos os 4 painéis.u4
) pertence diretamente ao grupo de painel 2 ( dg2
), não por meio de um grupo de usuários.u5
) só tem permissão para visualizar o painel 4 ( d4
). Pelo que entendi, este é o modelo de permissão atual em vigor nas organizações?Uma organização com várias suborganizações seria mais ou menos assim:
| sub-users : su1 su2 su3 su4
| \ / \ /
| | |
sub-organisation 1 -<| sub-user : sug1 sug2
/ | groups : | \ |
organisation | | \ |
\ | | \ |
sub-organisation 2 | sub-dashboard : sdg1 sdg2
| groups : | |
| / \ / \
| sub-dashboards: sd1 sd2 sd3
--
Observação:
sd2
) pertence a ambos os grupos do subpainel e, portanto, está acessível a todos os 4 usuários.sub-organisation 1
não tem acesso a nenhum dado pertencente a sub-organisation 2
ou a dados pertencentes a organisation
, exceto seus próprios.Aqui está um cenário de uso para pintar um quadro de como eu vejo isso funcionando na realidade:
Tenho um cliente, Off-Grid manufacturer 1
, que constrói e vende sistemas fora da rede para empresas de aluguel de plantas, que por sua vez os contratam para empresas de construção que precisam de eletricidade em seus locais de construção (nota: 4 níveis de organização).
Off-Grid manufacturer 1
adquire um novo cliente, Plant hire company 1.2
, que deseja monitorar todos os sistemas fora da rede que compram de Off-Grid manufacturer 1
. Plant hire company 1.2
tem dois clientes, Building companies 1.2.1 & 1.2.2
, que desejam gerenciar seus próprios direitos de acesso de usuário.
Off-Grid manufacturer 1
criou um conjunto padrão de painéis para cada sistema fora da rede ao qual eles desejam dar acesso a todos os seus clientes.
Off-Grid manufacturer 1
Eu crio um único usuário dentro desta organização e concedo a ele direitos de administrador.
O usuário administrador da organização Off-Grid manufacturer 1
cria 2 painéis.
O usuário administrador cria um novo grupo denominado "Técnicos" e concede a ele acesso ao painel 2.
O usuário administrador da organização Off-Grid manufacturer 1
cria um novo usuário (por exemplo, finance_user_1
).
finance_user_1
é adicionado ao grupo "Finanças" (eles têm acesso imediato ao painel 1)
O usuário administrador da organização Off-Grid manufacturer 1
cria um novo grupo ou suborganização (por exemplo, hire_company_1.2
).
hire_company_1.2_admin
.hire_company_1.2_admin
pode:hire_company_1.2
.Eu sugeriria isolar as fontes de dados também e permitir que os administradores dos grupos gerenciem as suas próprias com segurança.
Proposta para grupos de painel e um modelo de permissões: https://github.com/grafana/grafana/issues/1611#issuecomment -287742633
feito na v5 por meio das pastas Equipes e Painel
Comentários muito úteis
Eu sugeriria isolar as fontes de dados também e permitir que os administradores dos grupos gerenciem as suas próprias com segurança.