[DOCKER] S'il est automatiquement mis à jour sur le tableau de bord de Grafana, il se déconnectera sans autorisation lorsque la charge d'E / S du serveur devient élevée → Résolu en modifiant la base de données à utiliser à partir de SQLite3

environnement

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:

phénomène

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.

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"

une analyse

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.

Faire face

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.

Page de référence

Recommended Posts

S'il est automatiquement mis à jour sur le tableau de bord de Grafana, il se déconnectera sans autorisation lorsque la charge d'E / S du serveur devient élevée → Résolu en modifiant la base de données à utiliser à partir de SQLite3
S'il est automatiquement mis à jour sur le tableau de bord de Grafana, il se déconnectera sans autorisation lorsque la charge d'E / S du serveur devient élevée → Résolu en modifiant la base de données à utiliser à partir de SQLite3