PROJET AUTOBLOG


Le Blog de Genma

source: Le Blog de Genma

⇐ retour index

Yunohost - Goaccess - Rapport HTML depuis des logs d'un serveur web

jeudi 1 janvier 1970 à 01:00

Présentation de GoAcess

GoAccess présente des statistiques en lisant les logs de votre serveur Web, non pas en exécutant du code côté utilisateur.

Site : https://goaccess.io/

GoAccess fonctionne en ligne de commande et présente par défaut ses résultats dans la console, en temps réel. Une série de panels (que l'on peut étendre individuellement) présentent les différents types de données : nombres de visiteurs uniques, URL non trouvées, OS, etc. Classique. Il est également possible de générer une − plutôt jolie − page html

Le site GoAccess : analyse simple et efficace des logs d'un serveur Web - https://hal-9000.fr/?s11R3Q a fait un tutoriel qui montre qu'il est assez simple d'installer et d'utiliser GoAccess.

Autres tutoriels présentant des astuces complémentaires :
- Goaccess : un autre outil de Web Analytics par Denis Szalkowski
- GoAccess – Des logs web en temps réel et en cli

GoAccess répond à mon besoin

J'ai étudié différents systèmes permettant de générer des rapports à partir de logs, je connais un peu ELK (ElasticSearch, LogStash, Kibana), mais ça reste très complexe et un peu usine à gaz pour mon besoin qui est de tout simplement superviser / avoir des rapports issus des logs de mon serveur Yunohost. Donc GoAcess correspond bien à mon besoin.

Par défaut, Yunohost conserve les logs du serveur Nginx un certain temps (il faudra que je regarde en détail la configuration de logrotate), cela convient

Automatisons un peu tout ça...

L'objectif est d'avoir des rapports réguliers en HTML. Pour ça, j'ai mis en place une tâche CROn qui va faire une concatènation des différents fichiers de logs et générer un seul et même rapport HTML via GoAccess qui contient donc une visualisation graphique de l'ensemble des données issues de ces logs. Je peux ensuite m'envoyer le rapport par mail, le récupérer, le mettre à disposition dans un espace dédié du serveur web...

#/bin/bash

# On fait le cat dans /tmp pour que ce soit effacer ensuite
cat /var/log/nginx/blog.genma.fr-access.log* > /tmp/blog.genma.fr-access.full.log
echo "Goacess - Lancement de la generation des rapports HTML"
goaccess --log-format=COMBINED -f /tmp/blog.genma.fr-access.full.log -a -o BlogFullReport.html
# Le fichier BlogFullReport.html contient un beau rapport HTML complet généré par Goaccess.
echo "Goacess - Fini"

Yunohost ?

Yunohost propose la création de coquille vide pour des applications, via les Multi Custom Webapp, une version forkée des Custom Webapp qui permettent d'en créer plusieurs.

J'installe l'application en indiquant comme paramétrage :
- Nom de l'application : GoAccess
- Adresse et chemin : moninstanceyunohost.fr et /goacess comme sous répertoire
- Utilisateur : genma

Ca mouline (il y a la création et modification de la configuration nginx qui se fait) et ensuite j'ai bien une tuile "GoAccess" dans la liste des applications et un dossier "/var/www/webapp_genma/GoAccess" dans lequel j'ai par défaut le fichier "index.html".

Il ne reste qu'à ajouter au script ci-dessus une ligne du type

mv /tmp/BlogFullReport.html /var/www/webapp_genma/GoAccess

et depuis un navigateur web, en étant connecté à Yunohost d'aller sur
https://moninstanceyunohost.org/goacess/BlogFullReport.html

pour avoir le beau rapport généré par GoAccess !

Aller plus loin ?

Il suffit de faire un script un peu plus avancé, de le mettre en tâche planifiée (cron) et de créer par exemple un fichier index.html qui contiendra par exemple une série de liens :
- BlogFullReport_Jour1.html
- BlogFullReport_Jour2.html
- BlogFullReport_Jour3.html
- InstanceFullReport_Jour1.html
- InstanceFullReport_Jour2.html
- InstanceFullReport_Jour3.html

Ici les fichers InstanceFullReport_JourX.html étant généré par une ligne faisant appel à GoAcess mais pour un cumul de logs de fichiers Nginx pour l'instance (cumul des fichiers de log nginx pour monistanceyunohost.fr).

Il y a un an - Ma lettre de motivation

jeudi 1 janvier 1970 à 01:00

Dans le cadre des entretiens que je suis amené à faire passé et c'est la plupart du temps du très classique et conventionnel, parfois même minimaliste. Il manque le petit plus, le côté qui apporte quelque chose. J'avais d'ailleurs fait un billet sur le sujet Où sont les passionné.e.s ? (qui m'a permit de faire de belles rencontres dont deux ont abouties sur des embauches de personnes qui travailleront dans mon équipe).

Dans le présent billet je voudrais tout simplement copier coller le contenu de ma lettre de motivation que j'avais envoyé à la mi-septembre 2016 et qui avait conduit à mon entretien et à mon changement de vie.

Cette lettre, elle avait été travaillée et retravaillée un certain nombre de fois, depuis des mois, car je cherchais un nouvel emploi depuis le début de l'année et j'avais eu quelques retours et entretiens ; j'en profitais alors pour la remanier.

Pour moi, cette lettre se voulait complémentaire de mon CV complet (que je fournissais). Avec CV (de deux pages) et cette lettre de motivation (qui fait un format A4), je joignais aussi un résumé de carrière, complémentaire du CV qui expliquait en une page A4 le parcours, la cohérence entre les différentes missions de ma carrière et mon parcours personnel. Ce résumé (qu'on retrouvera ci-dessous) présentais donc à la fois mon parcours professionnel et mon parcours personnel sous pseudonyme. Je liais alors définitivement les deux comme je l'ai expliqué dans mon billet Du pseudonymat au pseudonyme.

Avec ces trois documents, j'estimais donner ainsi toutes les informations nécessaires aux recruteurs, ce qui permettait d'avoir un entretien où on savait déjà qui j'étais, ce que je prétendais savoir faire, mon parcours.. Cela a permis une discussion plus directe et me semble donc avoir été bénéfique.

Voici donc ma lettre

Par la présente lettre, je vous présenterai mes motivations et aspirations quand à ma candidature que je présente à Linagora.

Ce que je recherche ?
Je suis arrivé à un moment de ma vie où j'ai besoin de travailler et mobiliser mes compétences pour des valeurs qui me sont chères, pour m'épanouir au sein de mon travail, dans un cadre motivant et avec une équipe qui me tire vers le haut et me permet d'exploiter mon plein potentiel. Je souhaite en particulier pouvoir travailler avec le système d'exploitation de mon choix (Debian ou Ubuntu) sur des technologies à base de logiciel libre - open-source. Et je pense que Linagora répond à ces différents critères.

Pour moi, l'informatique est un outil destiné à répondre aux besoins "métiers" du client. Le cœur de son métier n'étant pas l'informatique, nous pouvons l'accompagner dans la mise en place des meilleures solutions afin de satisfaire ses impératifs tout en respectant ses contraintes. Je considère que l'informaticien doit être l'interface entre le client et les architectes, développeurs et autres équipes techniques spécialisées, en leur donnant des directives précises, ciblées et faisant appel à leur meilleur niveau de technicité.
Je recherche donc un poste dans de la MOA, avec à la fois du relationnel et de l'accompagnement client, et de la gestion d'équipe technique et développeur.

Ce que je peux apporter à Linagora ?

Mon expérience. Mes parcours professionnel et personnel sont présentés dans le document ci-joint et mon CV, mais en quelques mots, il y a mon expérience de consultant et la maturité acquise au cours de mes 11 années passées au sein de Capgemini. Et mon expérience du monde du logiciel libre et de l'open-source, étant donné que je suis un utilisateur, autodidacte, depuis plus de 12 ans, impliqué au sein de différentes communautés du logiciel libre.

Mon expérience de consultant et ma maturité dans ce domaine, tout comme mon expérience personnelle riche dans le monde du logiciel libre, ma capacité de communication écrite et mon aisance orale, seront des atouts pour Linagora. Avoir quelqu'un qui puisse comprendre les besoins du client, les exprimer en spécifications fonctionnelles et techniques, qui sachent présenter aux clients les avantages et spécificités des produits open-source et plus particulièrement ceux de Linagora, la plus value qu'à Linagora pour mener à bien les projets informatiques des clients, les accompagner dans leur transition informatique. Cette personne, c'est moi.

De plus j'ai une très forte capacité d'adaptabilité. Selon les besoins du moment, les temps forts, je pourrais également intervenir pour faire de la revue de code, tester des applications, rédiger des cahiers des charges. Je pourrais contribuer à de la localisation d'applications, valider l'accessibilité des tutoriaux d'installation, aider à leur amélioration. Je pourrais aider à la gestion et aux interactions avec les différentes communautés de l'open-source et du logiciel libre...

Me contacter ?

Je vois, de mon point de vue, plein de choses diverses et variées au sein desquelles je pourrais m'épanouir pleinement, contribuant au déploiement et au rayonnement de Linagora... Si ma présentation et mon profil vous intéressent, je me tiens disponible pour répondre aux questions éventuelles, donner des informations complémentaires et m'entretenir avec des membres de Linagora.
Jérôme « Genma »

Résumé de carrière

Résumé de carrière

Voici un résumé de carrière qui apporte quelques précisions sur mon parcours. J'ai donc commencé ma carrière en 2005 chez Capgemini en tant que consultant AMOA. Le client était l'Etablissement Français du Sang et ma mission a consisté à assurer le suivi de la migration (du lancement du projet au suivi en garantie en passant par la mise en production) de leur logiciel métier au sein de différentes régions. J'ai travaillé sur l'accompagnement et la conduite du changement, les reprises des données, le suivi du projet... J'ai en particulier été sensibilisé aux problématiques des données personnelles médicales et à l'importance de la cohérence et de l'intégrité de ces dernières.

De 2008 à 2011, j'ai été développeur junior sur les technologies Java/J2EE, dans le cadre d'un grand projet pour la Direction générale des Finances publiques (DGFiP) puis le Ministère de l'Education Nationale.

Entre 2011 et 2013, j'ai travaillé sur un petit projet d'évolution d'un logiciel métier pour la société Sécuritas. Ce travail consistait en l'accompagnement du client dans la rédaction des spécifications en langue anglaise, le développement de ces dernières en .NET/C# ou la gestion du développement en offshore (au Vietnam) avec revue de code et recettes, la tenue et le suivi des réunions parfois en anglais. Le tout en méthodologie AGIL.

Depuis mars 2013, je suis sur une TMA d'un projet aux technologies obsolètes (.NET 1.1, PL/SQL, VBS). Sur ce projet, j'ai effectué la rédaction des spécifications et des évolutions fonctionnelles. Pour palier les problématiques des pannes matérielles, j'ai participé à la virtualisation des serveurs (Windows Server 2003) sous VMWare ESX.

Résumé du parcours personnel

A titre personnel, depuis plus de 12 ans, je suis intéressé par les nouvelles technologies (je fais beaucoup de veille sur ces sujets) et l'open-source. J'utilise GNU/Linux comme système d'exploitation pour mon serveur (Debian) et mon desktop (Ubuntu). Je suis impliqué au sein de différentes communautés (Mozilla, CozyCloud, Yunohost, Debian, Framasoft). Je participe à des install-party, je fais de l'auto-hébergement (administration système et devops), du support, je donne régulièrement des conférences (Ubuntu-Party, JDLL de Lyon, Capitole du Libre de Toulouse, ou encore en médiathèque parisienne) Je rédige des tutoriels, un peu de documentation et surtout un blog, depuis plus de 12 ans sur lequel je synthétise et partage toutes mes connaissances nouvellement acquises : https://blog.genma.fr.

Je m'intéresse également aux technologies liées au chiffrement, à la virtualisation, au Cloud, ainsi qu'aux problématiques concernant les données personnelles et la vie privée (par exemple, je suis un utilisateur de Tor dont je suis les développements et évolutions, j'utilise TrueCrypt - maintenant Veracrypt - depuis 2008, je chiffre mes mails avec GPG, je chiffre mes disques durs (Luks), pour ne citer que ces technologies). Je suis sensible aux problématiques des fuites de données, de pentest, de hacking, de failles de sécurité, d'injection SQL et autres techniques utilisées par les attaquants potentiels. Je coanime des café vie privée / cryptoparty, et je donne à ce titre des cours et des conférences dans des domaines qui vont de l'hygiène numérique (pour le grand public, sensibilisation à différentes problématiques autour des données personnelles..) à l'autodéfense numérique (formation de journalistes aux techniques de chiffrement, par exemple).

Yunohost et les applications Framasoft

jeudi 1 janvier 1970 à 01:00

Comme je le disais dans mon billet et ma conférence De Framasoft à Yunohost, réapproprions nous le cloud un partenariat avait été mis en place entre Framasoft et Yunohost avec du temps d'un salarié de Framasoft consacré au packaging d'application Framasoft pour Yunohost.

Quelques mois après, où en est-on ?

L'idée n'est pas de parler au nom de Framasoft mais plus de remettre en avant cette collaboration et de faire un petit suivi de l'avancement. Une image valant mieux qu'un long discours :

On peut donc voir qu'il reste donc encore des applications à packagées, il faut maintenir les packages existant (en les faisant évoluer pour que les applications installées sur une instance Yunohost soient mises à jour ou qu'une installation fraîche installe la dernière version de l'application...)

Si vous souhaitez aider, si vous avez un peu de temps ou tout simplement des retours d'expérience à faire, il y a un topic dédié dans le forum Yunohost sur le sujet.

Contribuez à Yunohost

D'une façon plus générale, Yunohost a besoin de contributeurs pour tous les aspects du projet. A savoir :
- backend : python (simple), bash (lua)
- frontend : html/js (sammy.js)
- packging des apps : full bash, et des connaissance en sysadmin sont nécessaires (configuration nginx)
- sécurité : revue de code
- infrastructure du projet : debian, deb toolchain, ruby
- relation avec la communauté : communication, support via le forum, dans les issues de Git...
- aide à la traduction et à la documentation
- testing (les versions beta) avec rapport de bugs
- ...

Debian - Rester sur une version ; passer de stable en stable

jeudi 1 janvier 1970 à 01:00

Yunohost n'est pas compatible avec Stretch

Debian Stretch est sortie en version stable au début de l'été. Pour le détail, voir la dépêche Linuxfr Debian 9 : Stretch déploie ses tentacules.

Les changements apportés par cette version sont suffisamment importantes pour que Yunohost ne soit pas encore compatible. Pour rappel, Yunohost repose sur Debian en n'étant qu'une surcouche (les manipulations spécifiques à Debian restent possibles, même si il faut savoir ce que l'on fait pour ne pas casser la compatibilité avec Yunohost).

Pour en savoir plus, voir le sujet dans le forum : Debian Stretch | YunoHost is NOT YET compatible | YunoHost N'EST PAS ENCORE compatible

Comment rester sur une version de Debian

Comme indiqué dans le message du forum, il faut donc conserver la mention "jessie" comme version dans le fichier sources.list et autres.

$ cat /etc/apt/sources.list
deb http://url_du_depot.fr jessie main
deb-src http://url_du_depot.fr jessie main
deb http://security.debian.org/ jessie/updates main
deb-src http://security.debian.org/ jessie/updates main

Autre façon de faire, avec la commande sed, pour remplacer "main" par "jessie".
Dans le fichier "install" de l'application non officielle (à utiliser en connaissance de cause)
no_stretch_ynh

# Backup old sources.list
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak

sudo cp -R /etc/apt/sources.list.d /etc/apt/sources.list.d.bak

# Change sources.list with "stable" as distribution
sudo sed -i "s@ stable \+main@ jessie main@g" /etc/apt/sources.list
sudo sed -i "s@ stable-updates @ jessie-updates @g" /etc/apt/sources.list
sudo sed -i "s@ stable/updates @ jessie/updates @g" /etc/apt/sources.list

# Idem for sources.list.d/*.list
sudo sed -i "s@ stable \+main@ jessie main@g" /etc/apt/sources.list.d/*.list
sudo sed -i "s@ stable-updates @ jessie-updates @g" /etc/apt/sources.list.d/*.list
sudo sed -i "s@ stable/updates @ jessie/updates @g" /etc/apt/sources.list.d/*.list

Ou au contraire, comment migrer d'une version stable à une autre

Si on souhaite faire des montées de version stable en version stable pour suivre les évolutions de Debian (pour un serveur ou un poste bureautique sur lequel cela est possible), au contraire, on aura un fichier sources.list du type :

$ cat /etc/apt/sources.list
deb http://url_du_depot.fr stable main
deb-src http://url_du_depot.fr stable main
deb http://security.debian.org/ stable/updates main
deb-src http://security.debian.org/ stable/updates main

Et si c'est en version testing de Debian que l'on veut être (pourquoi pas), ce sera donc :

$ cat /etc/apt/sources.list
deb http://url_du_depot.fr testing main
deb-src http://url_du_depot.fr testing main
deb http://security.debian.org/ testing/updates main
deb-src http://security.debian.org/ testing/updates main

Jouons avec Ansible et Virtualbox

jeudi 1 janvier 1970 à 01:00

Prérequis : ce billet nécessite de connaître Virtualbox, savoir installer et connaître les commandes de base de Debian et avoir des bases en Ansible.

Virtualbox

Virtualbox est là pour me permettre d'avoir différentes machines Debian. J'en ai créer une par défaut, avec une installation minimale de Debian, j'ai ajouté SSH et y ai ajouté ma clef SSH de mon utilisateur de ma machine hôte.

J'ai deux machines virtuelles,
- debianAnsible01
- debianAnsible02

Chacune de ces machines a deux cartes réseaux :
- une carte eth0 en mode NAT : l'accès Internet de la machine hôte est alors partagé, je peux faire des mises à jour etc. La machine virtuelle voit Internet mais n'est pas vu du réseau local (elle est derrière un NAT qui est géré par VirtualBox). Retour ligne manuel
- une carte eth1 en mode Réseau Privé hôte sur vbonet0 : la machine est visible et voit la machine hôte et réciproquement. Cette interface réseau me sert pour me connecter en SSH depuis ma machine hôte sur la machine virtuelle.

Les IP des machines sur l'interface eth1 (qui sera utilisée par Ansible) sont donc :
- 192.168.56.102 Debian_Ansible01
- 192.168.56.103 Debian_Ansible02

On liste les machines de VirtualBox

$ VBoxManage list vms |grep Debian
"Debian_Ansible01" {f7e91481-b0db-4583-a2de-c3d04e81e4e3}
"Debian_Ansible02" {e0449d42-682f-41d0-be73-1816c0b8f334}

Ansible

Pour avoir une présentation détaillée et comprendre Ansible, je vous invite à lire le journal de Skhaen sur LinuxFr : Journal Déploiement et automatisation avec Ansible - partie 1

Je pars de l'étape où Ansible est installé sur ma machine hôte (qui fait tourner VirtualBox).

J'ai créé un fichier /etc/ansible/hosts

[virtualboxDebian]
Debian_Ansible01
Debian_Ansible02

Et dans mon fichier /etc/hosts j'ai les lignes

192.168.56.102 Debian_Ansible01
192.168.56.103 Debian_Ansible02

Jouons un peu

Démarrage des machines depuis la ligne de commande

VBoxManage startvm Debian_Ansible01
VBoxManage startvm Debian_Ansible02

Ping des différentes machines

$ ansible -m ping all --one-line
Debian_Ansible01 | SUCCESS => {"changed": false, "ping": "pong"}
Debian_Ansible02 | SUCCESS => {"changed": false, "ping": "pong"}

Pour avoir l'uptime des machines

$ ansible all -m command -u genma --args "uptime" --one-line
Debian_Ansible01 | SUCCESS | rc=0 | (stdout) 10:50:16 up 29 min, 1 users, load average: 0,00, 0,01, 0,03
Debian_Ansible02 | SUCCESS | rc=0 | (stdout) 10:50:16 up 25 min, 1 users, load average: 0,00, 0,01, 0,05

Remarque : l'option —one-line permet d'avoir le retour json sur une seule ligne et non sur plusieurs.

Ajout des paquets aux VM

Pour avoir des paquets d'installer sur tout les serveurs, Ansible me permet de l'automatiser facilement.
On commence par éditer un fichier /etc/ansible/roles/debian_complete_installation.yml pour y mettre le bloc suivant :

---
- hosts: all
remote_user: root

tasks:
- name: install common packages for all servers
apt:
update_cache=yes
state=latest
name={{item}}
with_items:
- curl
- htop
- sudo
- tar
- unzip
- vim
- wget
- whois
- screen

Après l'avoir enregistré, il suffit de lancer la commande suivante pour installer cette liste de paquets sur tout les serveurs :

ansible-playbook -i hosts /etc/ansible/roles/debian_complete_installation.yml

Mises à jour des VM via Ansible

Pour mettre à jour les VM via Ansible, on créer un fichier de template
/etc/ansible/roles/genma_apt_update.yml

---
- hosts: all
remote_user: root

tasks:
- name: update and upgrade apt packages
apt:
update_cache=yes
state=latest
upgrade=yes

Mise à jour des VM via Ansible
Après l'avoir enregistré, il suffira de lancer la commande suivante pour installer cette liste de paquets sur tout les serveurs :

ansible-playbook -i hosts /etc/ansible/roles/genma_apt_update.yml

Rappel : mon ficher hosts ne contient que mes machines Ansible pour l'instant.

Si on se connecte dans la VM, on voit bien que le apt-get update et upgrade a été lancé (on a les processus correspondant qui tournent).

Ansible renvoit sur la ligne de commande :

ansible-playbook -i hosts /etc/ansible/roles/genma_apt_update.yml
PLAY [all] *********************************************************

TASK [Gathering Facts] *********************************************
ok: [Debian_Ansible01]
ok: [Debian_Ansible02]

TASK [update and upgrade apt packages] ******************************
changed: [Debian_Ansible01]
changed: [Debian_Ansible02]

PLAY RECAP **********************************************************
Debian_Ansible01 : ok=2 changed=1 unreachable=0 failed=0
Debian_Ansible02 : ok=2 changed=1 unreachable=0 failed=0

Ansible et plusieurs groupes dans le hosts

Si mon fichier /etc/ansible/hosts contient plusieurs groupes et que je ne veux lancer un playbook que sur un groupe dédié, l'option est de la forme

--extra-vars="hosts=virtualboxDebian"

La commande pour lancer les mises à jour sera donc

{{Eteindre les machines}}

Pour éteindre les machines, là encore, on passe par un playbook Ansible
/etc/ansible/roles/genma_shutdown.yml

---
- hosts: all
remote_user: root

tasks:
- name: shutdown
command: /sbin/shutdown -h now

- name: wait go down
local_action: wait_for host={{ ansible_ssh_host }} port=22 state=stopped

Et quand on le lance :

ansible-playbook -i hosts /etc/ansible/roles/genma_shutdown.yml

PLAY [all] *********************************************************

TASK [Gathering Facts] *********************************************************
ok: [Debian_Ansible02]
ok: [Debian_Ansible01]

TASK [shutdown] *********************************************************

Sauvegarde de l'état des machines via un Snapshot Virtualbox

Prise de snapshot

VBoxManage snapshot Debian_Ansible01 take snapshot_VM_MAJ_par_Ansibe_OK
VBoxManage snapshot Debian_Ansible02 take snapshot_VM_MAJ_par_Ansibe_OK

Conclusion

Un premier tutoriel assez simple qui montre, je l'espère les possibilités d'Ansible, que personnellement je serai amené à utiliser de plus en plus régulièrement. D'autres tutoriaux seront donc amenés à être publier au fur et à mesure de mon apprentissage.