Statistiques/HOW-Yunohost.md
2023-03-11 23:00:01 +01:00

11 KiB
Raw Blame History

Installation sur Yunohost

Cela consiste simplement à exposer sur le web 3 types de fichiers properties (contenant une liste de clés/valeurs) :

1 fichier properties pour décrire le chaton (modèle);
1 fichier properties par service (modèles);
1 fichier properties de metrics par service (modèle).

Les deux premiers fichiers sont à faire à la main. Le troisième peut être généré par export ou par une moulinette danalyse fournie et quil faut faire tourner 1 ou 2 fois par jour.

Dossier accessible pour les metrics

Il faut un dossier ou les fichiers soient accessibles, comme Yunohost a des configurations .well_know pour tous ces noms de domaines dans /var/www/.well_know avec un dossier autoconfig, un dossier /var/www/.well_know/www.linux07.fr/chatonsinfos/ a été créé.

Puis on a ajouté un fichier de configuration /etc/nginx/conf.d/www.linux07.d/chatonsinfos.conf avec ces paramètres

location ^~ '/.well-known/chatonsinfos/' {
        alias /var/www/.well-known/www.linux07.fr/chatonsinfos/;
    }

Le nom de domaine www.linux07.fr est une une redirection vers linux07.fr, il est redirigé par l'application Redirect et sa configuration nginx est donnée par le fichier /etc/nginx/conf.d/www.linux07.d/redirect.conf

location / {
  return 302 https://linux07.fr$request_uri;
}

On a vérifié si en ajoutant un fichier dans ce dossier il était accessible (en tapant tout le chemin du fichier).

C'est dans ce dossier que vont être créés les fichiers metrics.properties qui vont pouvoir être lus...

organisation.properties

Le fichier organisation.properties est déclaré sur le git après un PR : https://framagit.org/chatons/chatonsinfos/-/blob/master/StatoolInfos/chatons.properties#L138

Depuis ce fichier sont délarés les différents fichiers service-nom_du_service-properties

Ajout de statoolinfos

Installation de statoolinfos, voir https://forge.devinsy.fr/devinsy/statoolinfos/src/branch/master/README.md#install

apt-get install openjdk-11-jre-headless

Créer les dossiers /srv/statoolinfos/conf, /srv/statoolinfos/tmp et /srv/statoolinfos/bin

Télécharger la dernière release : https://forge.devinsy.fr/devinsy/statoolinfos/releases dans le dossier /srv/statoolinfos/tmp

Dézipper le package et and déplacer les fichiers statoolinfos.jar and statoolinfo.sh dans le dossier /srv/statoolinfos/bin/

On fait un lien symbolique du fichier statoolinfos.sh

cd /srv/statoolsinfos/bin/
ln -s statoolinfos.sh statoolinfos

Aussi un lien symbolique well-know pour que le dossier accessible .well_know/www.rodinux.fr/chatonsinfos/ soit visible pour nous depuis /srv/statoolinfos

cd /srv/statoolsinfos
ln -s /var/www/.well-known/www.linux07.fr/chatonsinfos/ well-know

Créer les dossiers /srv/statoolinfos/conf/, /srv/statoolinfos/tmp/

Dans le dossier /srv/statoolinfos/conf/ on met en place des configurations properties pour chaque service Par exemple pour Etherpad

/srv/statoolinfos/conf/pad.linux07.conf

conf.probe.types=HttpAccessLog, HttpErrorLog, Etherpad
conf.probe.httpaccesslog.file=/var/log/nginx/pad.linux07.fr-access.log*
conf.probe.httperrorlog.file=/var/log/nginx/pad.linux07.fr-error.log*
conf.probe.httpaccesslog.pattern=
conf.probe.etherpad.logs=/var/log/etherpad_mypads/etherpad.log
conf.probe.etherpad.database.url=jdbc:mariadb://localhost/etherpad_mypads
conf.probe.etherpad.database.user=User_DB
conf.probe.etherpad.database.password=DB_PASSWORD
conf.probe.target=/var/www/.well-known/www.linux07.fr/chatonsinfos/service-etherpad-metrics.properties

# Custom access log pattern with Java regex.
# Default: "^(?<remoteAddress>[a-zA-F0-9\\\\:\\\\.]+) - (?<remoteUser>[^\\[]+) \\[(?<time>[^\\]]+)\\] \"(?<request>.*)\" (?<status>\\d+) (?<bodyBytesSent>\\d+) \"(?<referer>.*)\" \"(?<userAgent>[^\"]*)\".*$"
#conf.probe.httpaccesslog.pattern=

La commande pour tester les configurations:

/srv/statoolinfos/bin/statoolinfos probe -full /srv/statoolinfos/conf/pad.linux07.conf

Usage

Usage:
    statoolinfos [ -h | -help | --help ]
    statoolinfos [ -v | -version | --version ]

    statoolinfos build                       <configurationfile>     build property files from conf and input
    statoolinfos clear                       <configurationfile>     remove property files from conf
    statoolinfos crawl                       <configurationfile>     crawl all file from conf and input
    statoolinfos htmlize                     <configurationfile>     generate web pages from conf
    statoolinfos probe   OPTION [<directory>|<configurationfile>]    generate metrics files from conf
           OPTION = [-full|-today|-previousday|-NN] with NN a day count
    statoolinfos uptime                      <configurationfile>     update uptime journal

    statoolinfos format                      <fileordirectory>       format property files in tiny way
    statoolinfos list ip       [-bot|-nobot] <fileordirectory>       generate ip list from log file
    statoolinfos list ua       [-bot|-nobot] <fileordirectory>       generate user agent list from log file
    statoolinfos list visitors [-bot|-nobot] <fileordirectory>       generate visitors (ip+ua) list from log file
    statoolinfos stat ip       [-bot|-nobot] <fileordirectory>       generate stats about ip from log file
    statoolinfos stat ua       [-bot|-nobot] <fileordirectory>       generate stats about user agent from log file
    statoolinfos stat visitors [-bot|-nobot] <fileordirectory>       generate stats about visitors (ip+ua) from log file
    statoolinfos tagdate                     <fileordirectory>       update the file.datetime file

Dernières étapes

Maintenant on peut ajouter les liens dans les fichiers service-application.properties, par exemple pour service-etherpad.properties tout en bas

# [Subs]
# Un lien vers un fichier properties complémentaire (type URL, optionnel). Exemple : https://
subs.foo = https://www.linux07.fr/.well-known/chatonsinfos/service-etherpad-metrics.properties

Mettre en place un crontab, ici 1 fois par jour en précsiant lheure, par exemple 00h01

1 0 * * * /srv/statoolinfos/bin/statoolinfos probe -previousday /srv/statoolinfos/conf/ >> /srv/statoolinfos/cron.log

Mise à jour

Pour les mises à jour de statoolinfos, il suffit juste de récuper la dernière release du statoolinfos.jar et de le remplacer, lien : https://forge.devinsy.fr/devinsy/statoolinfos/releases

Corrections bugs php pour l'application Libreto

Sinon, on a constaté beaucoup de lignes d'erreurs dans les logs de libreto avec LINE IS NOT MATCHING. On a changé la ligne 466 dans le fichier /etc/php/7.4/fpm/php.ini en rajoutant & ~E_NOTICE au bout da ligne 466.

error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE

explication au-dessus de la ligne:

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Error handling and logging ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

; This directive informs PHP of which errors, warnings and notices you would like
; it to take action for. The recommended way of setting values for this
; directive is through the use of the error level constants and bitwise
; operators. The error level constants are below here for convenience as well as
; some common settings and their meanings.
; By default, PHP is set to take action on all errors, notices and warnings EXCEPT
; those related to E_NOTICE and E_STRICT, which together cover best practices and
; recommended coding standards in PHP. For performance reasons, this is the
; recommend error reporting setting. Your production server shouldn't be wasting
; resources complaining about best practices and coding standards. That's what
; development servers and development settings are for.
; Note: The php.ini-development file has this setting as E_ALL. This
; means it pretty much reports everything which is exactly what you want during
; development and early testing.
;
; Error Level Constants:
; E_ALL             - All errors and warnings (includes E_STRICT as of PHP 5.4.0)
; E_ERROR           - fatal run-time errors
; E_RECOVERABLE_ERROR  - almost fatal run-time errors
; E_WARNING         - run-time warnings (non-fatal errors)
; E_PARSE           - compile-time parse errors
; E_NOTICE          - run-time notices (these are warnings which often result
;                     from a bug in your code, but it's possible that it was
;                     intentional (e.g., using an uninitialized variable and
;                     relying on the fact it is automatically initialized to an
;                     empty string)
; E_STRICT          - run-time notices, enable to have PHP suggest changes
;                     to your code which will ensure the best interoperability
;                     and forward compatibility of your code
; E_CORE_ERROR      - fatal errors that occur during PHP's initial startup
; E_CORE_WARNING    - warnings (non-fatal errors) that occur during PHP's
;                     initial startup
; E_COMPILE_ERROR   - fatal compile-time errors
; E_COMPILE_WARNING - compile-time warnings (non-fatal errors)
; E_USER_ERROR      - user-generated error message
; E_USER_WARNING    - user-generated warning message
; E_USER_NOTICE     - user-generated notice message
; E_DEPRECATED      - warn about code that will not work in future versions
;                     of PHP
; E_USER_DEPRECATED - user-generated deprecation warnings
;
; Common Values:
;   E_ALL (Show all errors, warnings and notices including coding standards.)
;   E_ALL & ~E_NOTICE  (Show all errors, except for notices)
;   E_ALL & ~E_NOTICE & ~E_STRICT  (Show all errors, except for notices and coding standards warnings.)
;   E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR  (Show only errors)
; Default Value: E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
; Development Value: E_ALL
; Production Value: E_ALL & ~E_DEPRECATED & ~E_STRICT
; http://php.net/error-reporting
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE

J'essaie aussi de voir après avoir lu les logs d'ignorer un erreur recurrente de php

LINE IS NOT MATCHING [ in /var/www/libreto/libreto/pad.php on line 148" while reading response header from upstream, client: 89.234.140.172, server: libreto.linux07.fr, request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/var/run/php/php7.4-fpm-libreto.sock:", host: "libreto.linux07.fr"]

La ligne 148 en question de /var/www/libreto/libreto/pad.php

$txt = file_get_contents($this->url('txt'));

est dans cette portion de fonction

   public function txt() {
146     if (!$this->url('txt')) { return; }
147
148     $txt = file_get_contents($this->url('txt'));
149     return $txt;
150   }

En cherchant, j'essaie d'ignorer l'erreur avec un @

$txt = @file_get_contents($this->url('txt'));

sources :

https://www.php.net/manual/fr/language.operators.errorcontrol.php

et cette discussion:

https://stackoverflow.com/questions/272361/how-can-i-handle-the-warning-of-file-get-contents-function-in-php