Grafana fonctionne à l'aide d'images publiées sur Docker Hub. (Voir docker-compose.yml ci-dessous)
docker-compose.yml(Extrait)
version: "2"
services:
prometheus:
#réduction
grafana:
image: grafana/grafana-arm64v8-linux
links:
- prometheus
volumes:
- grafana-data:/var/lib/grafana
volumes:
grafana-data:
Par exemple, si vous vérifiez l'état lorsque tar.gz [^ 1] du noyau Raspberry Pi est développé avec iostat, la valeur de% iowait sera proche de 50. Ce n'est pas si élevé en termes de performances de lecture / écriture sur la carte SD de Raspberry Pi, donc je pense que cela ne peut pas être aidé [^ 2].
[^ 1]: Il est distribué sur raspberrypi / linux [^ 2]: Ionice est peut-être capable de gérer cela, mais je n'utilise pas ionice parce que le planificateur IO que j'utilise est bfq et je ne peux pas l'utiliser, et cette fois il semble que la plage de verrouillage de SQLite soit trop large.
Cependant, lorsque la mise à jour automatique du tableau de bord de Grafana s'est déroulée au moment où la charge est devenue élevée, le phénomène suivant s'est produit.
docker-compose logs grafana
Erreur affichée
grafana_1 | t=2020-09-06T04:34:56+0000 lvl=eror msg="Failed to look up user based on cookie" logger=context error="database is locked"
Comme indiqué dans le journal, il semble que la base de données est verrouillée et que les informations utilisateur ne peuvent pas être obtenues et que l'utilisateur est déconnecté.
Grafana publié sur Docker Hub utilise SQLite3 pour la base de données si rien n'est défini. Étant donné que les verrous SQLite3 ne peuvent être appliqués que base de données par base de données, il a fallu beaucoup de temps entre le verrouillage et le déverrouillage lorsque la charge d'E / S était élevée, et je pensais que l'erreur ci-dessus s'était produite parce que les informations utilisateur étaient lues pendant ce temps.
Si le verrouillage est un problème, utilisez PostgreSQL en disant que d'autres SGBDR tels que PostgreSQL prennent en charge le verrouillage au niveau des lignes, ce qui réduira la possibilité que les données des lignes ne soient pas récupérées. J'ai décidé de mettre Grafana comme ça.
L'image Docker de Grafana peut remplacer le paramètre dans grafana.ini en définissant une variable d'environnement commençant par GF_
. Par conséquent, j'ai défini docker-compose.yml comme suit et l'ai configuré pour utiliser PostgreSQL.
docker-compose.yml(Extrait)
services:
grafana:
image: grafana/grafana-arm64v8-linux
ports:
- 3111:3000
links:
- prometheus
- postgres
environment:
- GF_DATABASE_TYPE=postgres
- GF_DATABASE_HOST=postgres
- GF_DATABASE_NAME=grafana
- GF_DATABASE_USER=grafana_user
- GF_DATABASE_PASSWORD=aoZ62dMb
postgres:
image: postgres:12.4
environment:
- POSTGRES_USER=grafana_user
- POSTGRES_PASSWORD=aoZ62dMb
- POSTGRES_DB=grafana
Avec ce paramètre, vous avez défini les paramètres suivants dans grafana.ini.
[database]
type=postgres
host=postgres
name=grafana
user=grafana_user
password=aoZ62dMb
Avec les paramètres ci-dessus, même si vous reproduisez la même situation que lorsque vous étiez déconnecté sans autorisation, vous ne serez plus déconnecté sans autorisation.
Cependant, comme mentionné ci-dessus, les performances de lecture / écriture de la carte SD du Raspberry Pi ne sont pas élevées, donc même avec cela, vous pouvez vous déconnecter en fonction de la charge du système. Cependant, je pense que cette probabilité sera considérablement réduite.
Recommended Posts