[MySQL Master-Slave Verbindungsfehler] Grafana-Panel über VServer in Webseite einbinen

  • Hast du einmal versucht Grafana direkt aufzurufen ?
    Also http://deine_vserver_url/grafana

    Offizieller Schmier und Schmutzfink des Forum.
    Warum einfach wenn's auch schwer geht ?

    Kein Support per PN !
    Fragen bitte hier im Forum stellen. So hat jeder etwas davon.

  • [MySQL Master-Slave Verbindungsfehler] Grafana-Panel über VServer in Webseite einbinen? Schau mal ob du hier fündig wirst!

  • Hallo,

    dann stimmt die Konfiguration nicht, also die vorgeschlagene ProxyPass Konfig.

    IMHO reicht die Konfig auch so nicht, weil die GET-Parameter und die anderen Teile der URL nicht weitergegeben sondern abgeschnitten werden (also das `d-solo/jsed0Ukgz/temperatur?orgId=1&refresh=1m&theme=light&panelId=2" frameborder="0"`.

    IMHO musst du noch eine Rewrite-Rule definieren, damit das durch geht.

    100% sicher bin ich da aber nichts, weil ich a) das noch nie gemacht habe und b) nginx als ReverseProxy für meine Python-Apps nutze.

    Gruß, noisefloor

  • Hallo noisefloor , Danke für deine Antwort.

    Hatte bis jetzt noch nicht viel Zeit und bin erst dazu gekommen die Google-Ergebnisse nach "Rewrite-Rule Apache" zu überfliegen. Auf den ersten Blick war bin ich noch total überfordert. Vorallem nach dem ich die Überschrift "Rewrite oder Proxy" fand.

    Ich werde mich mal versuchen in die Richtung weiter schlau zu machen und dass dann auch versuchen.

    Wäre schade, wenn das Projekt jetzt daran scheitert.

    Grüße

    Dennis

    🎧 With the music execution and the talk of revolution, it bleeds in me and it goes 🎧

  • Hallo,

    Zitat

    Auf den ersten Blick war bin ich noch total überfordert.

    Ja, ich auch ;) Wobei es glaube ich gar nicht so kompliziert ist, wie es ausschaut, weil du die URL ja "nur" an einer Stelle teilen musst und dann alles "rechts" davon brauchst.

    Plan B: die Parameter nicht als GET-Parameter in die URL packen, sondern in den Body des Requests. Sofern Grafana damit umgehen kann.

    Gruß, noisefloor

  • Guten Abend,

    puh mir qualmt der Kopf und ich bin eigentlich kein Schritt weiter.

    Diese Anleitung beschreibt die Rewrite-Regel zwar und ich kann das beschriebene Beispiel auch einigermaßen nachvollziehen. Ich habe aber keinen Ansatz wie ich das auf mein Problem umsetzen soll. Also so wirklich gar keinen, so das ich auch nichts zeigen kann.

    noisefloor Ich danke dir, dass du sogar einen Plan B parat hast. Ich weis nur nicht ganz, ob ich das richtig verstehe. Ich soll den GET-Parameter nicht mehr im 'src' angeben, aber wo finde ich den Body der Anfrage? :conf:

    Wäre es sinnvoller Grafana und phpmyAdmin auf dem VServer zu installieren und die Sensordaten dann über den VPN-Tunnel zum VServer zu schicken?

    Am liebsten würde ich meine Daten aber gerne hier auf dem Pi lassen und den VServer nur als öffentlichen Zugang nutzen.


    Schönen Rest-Sonntag noch und Grüße

    Dennis

    🎧 With the music execution and the talk of revolution, it bleeds in me and it goes 🎧

  • Hallo,

    Zitat

    aber wo finde ich den Body der Anfrage?

    Den müsstest du generieren. Wobei ich glaube ich zu schnell war: im `scr` Attribut geht das ja gar nicht, da kann "nur" eine URL stehen.

    Plan C: du nutzt ja scheinbar MariaDB oder MySQL. Du könntest noch eine Master-Slave Replikation für die DB bauen, wobei dein Pi der Master und der VServer der Slave der DB ist. Und dann Grafana auch auf dem VServer installieren.

    Gruß, noisefloor

  • Hallo,

    ich melde mich mal wieder zu Wort. Plan C habe ich nach dieser Anleitung durchgeführt bzw. durchführen wollen.

    Diesen Schritt habe ich übersprungen, da ich keinen Pfad zum Master habe :conf:

    Ansonsten bin ich Schritt für Schritt der Anleitung gefolgt, allerdings kann mein Slave keine Verbindung mit dem Master herstellen:

    Spoiler anzeigen

    mysql> show slave status\G

    *************************** 1. row ***************************

    Slave_IO_State: Connecting to master

    Master_Host: *Hier steht die IP mit der ich vom Server den Pi anpingen kann*

    Master_User: Willy

    Master_Port: 3306

    Connect_Retry: 60

    Master_Log_File: mysql-bin.000002

    Read_Master_Log_Pos: 648

    Relay_Log_File: mysql-relay-bin.000001

    Relay_Log_Pos: 4

    Relay_Master_Log_File: mysql-bin.000002

    Slave_IO_Running: Connecting

    Slave_SQL_Running: Yes

    Replicate_Do_DB:

    Replicate_Ignore_DB:

    Replicate_Do_Table:

    Replicate_Ignore_Table:

    Replicate_Wild_Do_Table:

    Replicate_Wild_Ignore_Table:

    Last_Errno: 0

    Last_Error:

    Skip_Counter: 1

    Exec_Master_Log_Pos: 648

    Relay_Log_Space: 156

    Until_Condition: None

    Until_Log_File:

    Until_Log_Pos: 0

    Master_SSL_Allowed: No

    Master_SSL_CA_File:

    Master_SSL_CA_Path:

    Master_SSL_Cert:

    Master_SSL_Cipher:

    Master_SSL_Key:

    Seconds_Behind_Master: NULL

    Master_SSL_Verify_Server_Cert: No

    Last_IO_Errno: 2003

    Last_IO_Error: error connecting to master 'Willy@IP-ADRESSE.1:3306' - retry-time: 60 retries: 1 message: Can't connect to MySQL server on '192.168.200.1:3306' (111)

    Last_SQL_Errno: 0

    Last_SQL_Error:

    Replicate_Ignore_Server_Ids:

    Master_Server_Id: 0

    Master_UUID:

    Master_Info_File: mysql.slave_master_info

    SQL_Delay: 0

    SQL_Remaining_Delay: NULL

    Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates

    Master_Retry_Count: 86400

    Master_Bind:

    Last_IO_Error_Timestamp: 210717 15:50:45

    Last_SQL_Error_Timestamp:

    Master_SSL_Crl:

    Master_SSL_Crlpath:

    Retrieved_Gtid_Set:

    Executed_Gtid_Set:

    Auto_Position: 0

    Replicate_Rewrite_DB:

    Channel_Name:

    Master_TLS_Version:

    Master_public_key_path:

    Get_master_public_key: 0

    Network_Namespace:

    1 row in set, 1 warning (0.01 sec)


    Die IP-Adresse habe ich mal entfernt, obwohl eigentlich niemand was damit anfangen könnte. Aber ich kann vom Server den Pi mit der Adresse erfolgreich anpingen.

    Ich weis jetzt leider mal wieder gar nicht, wie ich das Problem eingrenzen könnte.

    Auf dem Pi die 'my.cnf':

    Die '50-server.cnf' des Pi's:

    Die 'my.cnf' auf dem Server:

    Code
    !includedir /etc/mysql/conf.d/
    !includedir /etc/mysql/mysql.conf.d/
    [mysqld]
    server-id=2
    relay_log=mysql-relay-bin
    log_bin = mysql-bin
    binlog_do_db = messstation_slave

    Auf dem Server gibt es keine '50-server.cnf' Dafür eine 'mysqld.cnf':

    Vielen Dank vorab und Grüße

    Dennis

    🎧 With the music execution and the talk of revolution, it bleeds in me and it goes 🎧

  • Hallo zusammen,

    ich melde mich wieder zurück. Leider mit schlechten Nachrichten. Für die Verbindung der Master-Slave-Konfiguration fehlt meinem User irgendwie die Berechtigung. Habe es nicht geschafft das Problem zu lösen.

    Ich bin folgendermaßen vorgegangen:

    Auf dem Raspberry Pi habe ich in die Datei /etc/mysql/my.cnf folgendes hinzugefügt:

    Code
    [mysqld]
    server-id=1
    binlog_do_db = messstation
    relay-log = /var/lib/mysql/mysql-relay-bin
    log-bin = /var/lib/mysql/mysql-bin
    #skip-networking
    #bind-adress = 127.0.0.1

    Dann 'mysql' neugestartet mit sudo systemctl restart mysql

    Weiter gehts in der mysql-Konsole mit sudo mysql -u root -p

    Code
    MariaDB [(none)]> CREATE USER 'testuser'@'%' IDENTIFIED BY 'password';
    Query OK, 0 rows affected (0.003 sec)
    
    MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO 'testuser'@'%' IDENTIFIED BY 'password';
    Query OK, 0 rows affected (0.004 sec)
    
    MariaDB [(none)]> FLUSH PRIVILEGES;
    Query OK, 0 rows affected (0.003 sec)

    Den Master-Status lesen und merken:

    Code
    MariaDB [(none)]> show master status;
    +------------------+----------+--------------+------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +------------------+----------+--------------+------------------+
    | mysql-bin.000003 |      813 | messstation  |                  |
    +------------------+----------+--------------+------------------+
    1 row in set (0.002 sec)

    Weiter gehts auf dem VServer:

    In die Datei /etc/mysql/my.cnf habe ich folgendes eingefügt:

    Code
    [mysqld]
    server-id=2
    replicate-do-db=messstation
    relay-log = /var/lib/mysql/mysql-relay-bin
    log-bin = /var/lib/mysql/mysql-bin
    # bind-adress = 127.0.0.1

    Mit sudo mysql -u root -p in die mysql-Konsole:

    Im nächsten Befehl den vorher gemerkten Dateiname und die Position integrieren.

    Code
    mysql> stop slave;
    Query OK, 0 rows affected, 1 warning (0.13 sec)
    
    mysql> CHANGE MASTER TO MASTER_HOST='192.168.200.1',MASTER_USER='testuser', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=  813;
    Query OK, 0 rows affected, 8 warnings (0.02 sec)
    
    mysql> start slave;
    Query OK, 0 rows affected, 1 warning (0.01 sec)

    Jetzt sollte die Verbindung stehen, den Status kann man mit show slave status\G abfragen und dabei kommt folgendes raus:

    Die Rechte von 'testuser' sehen so aus:

    Code
    MariaDB [(none)]> show grants for 'testuser'@'%';
    +---------------------------------------------------------------------------------------------------------------------+
    | Grants for testuser@%                                                                                               |
    +---------------------------------------------------------------------------------------------------------------------+
    | GRANT REPLICATION SLAVE ON *.* TO `testuser`@`%` IDENTIFIED BY PASSWORD '*2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19' |
    +---------------------------------------------------------------------------------------------------------------------+
    1 row in set (0.001 sec)

    Das sieht für mich richtig aus.

    Dann habe ich gelesen, dass man das Plugin 'mysql_native_password' "aktivieren" soll. Erst sieht es so aus:

    Code
    MariaDB [(none)]> SELECT user,authentication_string,plugin,host FROM mysql.user;
    
    +----------+-------------------------------------------+-----------------------+-----------+
    | user     | authentication_string                     | plugin                | host      |
    +----------+-------------------------------------------+-----------------------+-----------+
    | root     |                                           | unix_socket           | localhost | |
    | testuser |                                           |                       | %         |
    +----------+-------------------------------------------+-----------------------+-----------+

    Mit MariaDB [(none)]> set password for 'testuser'@'%' = password('manager'); und FLUSH PRIVILEGES; wird das Plugin wie folgt geändert:

    Code
    MariaDB [(none)]> SELECT user,authentication_string,plugin,host FROM mysql.user;
    +----------+-------------------------------------------+-----------------------+-----------+
    | user     | authentication_string                     | plugin                | host      |
    +----------+-------------------------------------------+-----------------------+-----------+
    | root     |                                           | unix_socket           | localhost |
    | testuser | *7D2ABFF56C15D67445082FBB4ACD2DCD26C0ED57 | mysql_native_password | %         |
    +----------+-------------------------------------------+-----------------------+-----------+

    Auf dem VServer stop slave; , dann start slave; und wieder den Status der Verbindung anzeigen:

    Es fehlen leider immer noch die Berechtigungen.

    Den Port 3306, den MySQL benötigt habe ich in der Firewall des Pi's geöffnet:

    Code
    Starting Nmap 7.70 ( https://nmap.org ) at 2021-07-25 21:11 BST
    Nmap scan report for 192.168.200.1
    Host is up (0.073s latency).
    Not shown: 996 closed ports
    PORT     STATE SERVICE
    22/tcp   open  ssh
    80/tcp   open  http
    443/tcp  open  https
    3306/tcp open  mysql

    Zugriff vom VServer auf den Pi ist mit Ping möglich:

    Code
    dennis@localhost:~$ ping -c 3 192.168.200.1
    PING 192.168.200.1 (192.168.200.1) 56(84) bytes of data.
    64 bytes from 192.168.200.1: icmp_seq=1 ttl=64 time=0.048 ms
    64 bytes from 192.168.200.1: icmp_seq=2 ttl=64 time=0.049 ms
    64 bytes from 192.168.200.1: icmp_seq=3 ttl=64 time=0.055 ms
    
    --- 192.168.200.1 ping statistics ---
    3 packets transmitted, 3 received, 0% packet loss, time 2043ms
    rtt min/avg/max/mdev = 0.048/0.050/0.055/0.003 ms

    Die Verbindung zwischen Pi und VServer läuft über einen VPN-Tunnel, den ich mit WireGuard aufgesetzt habe.

    Ich weis absolut nicht wieter, habe viele Anleitungen durch probiert und auch viel nach dem Problem gegooglt, es hat aber nichts geholfen.

    Denn oben gezeigten Stand ist der aktuelle Stand. Damit wir auf dem gleichen Nenner sind.

    Ich wäre sehr dankbar, wenn mir jemand weiter helfen könnte. :)

    Schönen Abend noch und Grüße

    Dennis

    🎧 With the music execution and the talk of revolution, it bleeds in me and it goes 🎧

  • Den Port 3306, den MySQL benötigt habe ich in der Firewall des Pi's geöffnet:

    Kurze Frage :

    Warum die Replikation der DB ?
    Warum greifst du nicht einfach auf die DB auf dem PI zu ?

    Offizieller Schmier und Schmutzfink des Forum.
    Warum einfach wenn's auch schwer geht ?

    Kein Support per PN !
    Fragen bitte hier im Forum stellen. So hat jeder etwas davon.

  • Hallo und danke für die Antwort.

    Das wurde mir in Beitrag 27 empfohlen.

    Du meinst, das ich Grafana auf dem VServer installiere und als Quelle den Pi angebe? Das kann ich später mal versuchen ??

    Danke und Grüße

    Dennis

    🎧 With the music execution and the talk of revolution, it bleeds in me and it goes 🎧

  • Guten Abend,

    ich habe jetzt Grafana auf dem VServer installiert. Bei der Einrichtung der "Data-Sources" bekomme ich aber eine Fehlermeldung. Wieder stimmt wohl etwas mit der Berechtigung nicht. Im Error-Log von Grafana steht:

    Code
    t=2021-07-26T19:54:35+0000 lvl=warn msg="Request Origin is not authorized" logger=live origin=http://XXX.XXX.XXX.XXX:3000 appUrl=http://localhost:3000/ allowedOrigins=
    t=2021-07-26T19:54:35+0000 lvl=info msg="Request Completed" logger=context userId=1 orgId=1 uname=admin method=GET path=/api/live/ws status=403 remote_addr=37.201.7.84 time_ms=6 size=10 referer=

    Die IP meines VServers habe ich mal rausgenommen.

    Kann mir jemand was zu der Fehlermeldung sagen?

    Auf der Grafana-Webbrowser-Seite bekomme ich diese Fehlermeldung dazu:

    Code
    db query error: query failed - please inspect Grafana server log for details

    Ich habe zu Testzwecken eine falsche IP eingegeben, dann bekomme ich die Meldung, dass der Server nicht erreichbar ist. Daher gehe ich davon aus, dass Grafana auf meine Datenbank zugreifen kann.

    Alle User die ich angelegt habe und mit denen ich mich auch anmelde dürfen sich von überall aus anmelden, nur 'root' nicht:

    Code
    +----------+-----------+
    | user     | host      |
    +----------+-----------+
    | Rosi     | %         |
    | Willy    | %         |
    | demouser | %         |
    | dht22    | %         |
    | testuser | %         |
    | root     | localhost |
    +----------+-----------+

    Und sie haben auch alle "ALL PRIVILEGES"

    Kann mit der Fehlermeldung irgendjemand etwas anfangen?

    Danke und Grüße

    Dennis

    🎧 With the music execution and the talk of revolution, it bleeds in me and it goes 🎧

  • Das hab ich gefunden :
    Syslog filling up with warnings · Issue #36443 · grafana/grafana · GitHub

    Liest sich als wenn du in der Grafana Ini den Wert

    root_url=http://XXX.XXX.XXX.XXX:3000

    setzen müsstest.

    EDIT :

    domain = XXX.XXX.XXX.XXX
    sollte auch gehen da sich root_url aus den Variablen zusammen setzt.

    Offizieller Schmier und Schmutzfink des Forum.
    Warum einfach wenn's auch schwer geht ?

    Kein Support per PN !
    Fragen bitte hier im Forum stellen. So hat jeder etwas davon.

  • Guten Abend und Danke für die Antwort.

    Nach ewigem probieren, googln und immer mal wiever "von vorne anfangen" habe ich jetzt Grafana auf dem VServer und visualisiere damit die Daten, die in der MySQL-Datenbank auf den Raspberry sind. :bravo2:

    Beim einbetten in die Webseite habe ich die IP-Adresse durch die erstellte IP (WireGuard) ersetzt. Wenn ich die Webseite jetzt im Netzwerk, in dem sich der Pi befindert, über die IP-Adresse des Pis aufrufe, dann funktioniert es :thumbup:

    An dieser Stelle vielen Dank für eure Bemühungen! :)

    Aus dem öffentlichen Netz erreiche ich meine Webseite zwar noch, aber es wird nur noch der Inhalt von "alt", der in meiner *.php - Datei steht, angezeigt.

    Also dort wo normal ein Begrüßungsbild sein sollte, ist jetzt nur ein Text "Begrüßung".

    Irgendwas habe ich bei der ganzen Probiererei wohl verstellt. Darum kümmere ich mich morgen dann.

    Was etwas nervig ist, ist das Grafana sehr lange Ladezeiten hat, wenn die Datenbank viele Daten enthält. Eventuell muss ich noch dafür sorgen, dass die Datenbank eine gewisse Größe nicht überschreiten darf :/

    Naja das eigentliche Problem dieses Themas ist erledigt.

    Grüße und gute Nacht

    Dennis

    🎧 With the music execution and the talk of revolution, it bleeds in me and it goes 🎧

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!