Skip to content

Instantly share code, notes, and snippets.

@DaffyDuke
Created March 5, 2017 14:18
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save DaffyDuke/5d1ae48044f5b9d36c6377677014e072 to your computer and use it in GitHub Desktop.
Notes Sysadmin Days #6 - Paris

on est pas là pour vendre de la magie, 8 ans de conf

sysadmin de combat (FRED DE VILLAMIL)

attention au budget divergence de priorité => "redonner confiance dans l'infrastructure" 50/50 scrum+run, planif ve pm, daily standup mach. café astreinte tournante, toujours donner une date pour le delivery les dev font la MEP via jenkins+ansible (=> java / go) monte une équipe sénior (pour ne pas faire de micromanagement, montée en compétence rapide) profil cher entre 50/90 attention communication => slack incidents (uniqt chef du support, transparence, sans alaramant, ETA précis si possible) reporting hebdo de 3/4 slides (contexte d'une période de crise d'un an pour remonter un cluster galera), nb incidents, heures d'inter, .... et ETA projets découverte : monitoring, nmap+ssh+facter "pour voir" dans un CSV / tcpdump sur des fw/ansible , attention puppet/ansible début: rester humble, laisser ce qui marche et ceux qui savent faire, test de redémarrage de services "pour voir", "se concerter sur ce qu'on ne connait pas et qui marche plutôt que sur ce qu'on connait mais qui ne marche pas" Documentation (interne Zabbix) Attention aux env. non maîtrisés Dificulté de reprises d'unfra montée par des dev qui "pensent" différemment : un mach/un service pas de vhost/ ....

questions

confluence, gitlab (markdown) essayer de déléguer SAS au possible "tu bosses le week-end" pour tenir tes ETA besoin d'être capable de dire "non plus tard" jira pour sprints (redmine abandonné), "pager duty" à venir Gandi => Trello pour daily meeting revue de doc/code review par gitflow troll AWS : utilisation d'autoscaling pour les machines qui tombent toute seule troll OVH : couche ethernet revue et corrigée

Grid 5000, Lucas Nussbaum, a hpc, big data, INRIA, université de Lorraine

Debian Project Leader de 2013,15 Licence Pro Adm. Sys Réseaux App. Logiciels Libres Recherche sur expérimentation scientifiques essaie de fournir une infra de qualité comparable aux autres composants de recherche (biologie, physique, ....) renater 10g 10 sites, 25 cluster, 1000 nodes, 8000 cores 550 personnes difficulté de cloud public (difficulté de monitoring, placement, perf) utilisation de BonFIRE (infra dedié observation) bare metal as a service, reconfigurable à la demande desc. env. en json avec archivage de conf utilisation outil maison g5-checks pour comparer desc stockée avec desc générée (appel OHAO, ethtool, ....) besoin GPU, wattmetter, software, garder stable création de kadeploy (bare metal, hardware as a service), boot en PXE, 200 nodes en 5 min(car deux reboots hardw) KaVLAN pour tagguer les réseaux sur les équipements réseau http://kamaleon.imag.fr : generation d'appliance (avec utilisation de cache des images étalonné / archivées) http://distem.gforge.nria.fr : utilisation de LXC pour quotas de CPU/Core Utilisation Charm++ lb HPC avec distem "Ralentir le temps pour que le CPU et le réseau aille plus vite" : Time Keeper (facteur de dilatation du temps de LXC) sous Linux ou dilatation du temps (DieCast sous Xen) time shifting en roadmap monitoring en mode découverte avec Ganglia + sondes réseau/DPU/... utilisateurs = doctorants, étudiants M2, ...., => shell => création d'une API d'orchestration XPFLOW env. unique au monde de support d'expérimentations

questions

pas de pb sur mesure 1/sec sur switchs Ironic (OpenStack) vs Kadeploy (plus vieux, plus de fonctions) criu.org => checkpointing de jobs => appeler Master I2L pour reorienter AsminSys si possible

ElasticSearch chez Synthesio par Fred De Villamil

Synthesio: parcours de site social, enrichissement de données 271To de cluster, 7 To de RAM, 3 cluster, 116 serveurs, 60 milliards de doc indexés Elasticsearch : moteur de rechcerche distribué basé sur Lucene, base sur "Solr on steroid", ancien nom Comment : 1 index, 512 chards avec un routage au mois (au lieu de la semaine nitialement), 47 deian en java 1.8 => dashboard1GC / GCPausIntervalMillis=1000 / InitiatingHeapOccupancyPercent=35 => plus d'out of the world => tuning field data : limit ) 80% sur breaker, 30% de cache size sur la heap, expire 1 minute : options deprecated dans le futur Déconseillé par la doc ES, pas vu de pb de perf, plus de perte du cluster step2, 1 index par dashbpoard pour 10 milliards de documents 2 clusters iso en ES 1.7.5 (1.7.4 bug de memoire grave) 2 VM ) 64 G de RAM 3 master, 3 de RAM 0 nodesà 32 G RAM 1 inde par dashboard, 1 shared => versionning du mapping possible grace à Baldur Baldur = proxy nginx en LUA (récup cluster + id de mapping en base MySQL) => modification de mapping se fait dans la base mysql alors que les data sont en cours de traitement coté cluster et donc création de milliers de segments lucene création de plus de seglents que de suppression, donc les index peinaient à être construit => otpim en continu sur ordre deleted + sur index x-1 => utilisation de "rack awareness" ES : blocage d'allocation pendant un A/R par rack Nouveau cluster : 70 serveurs 36 index 50 milliards de documents 120 T de données, 160 T de capa, 1 idx/mois, 30 shards 2 query nodes 31 G 62 data node en Xeo D, 64 G RAM, 3,2 T RAM 3 cluster galera et un cluster ES dans un kafka indexer en Go sur 8 machine et doit récupérer une queue par an sur le data node pour l'idexation sans passer par le query pas de replicat pendant l'indexation pour diminuer les ressources ES tente de mettre les requetes en cace sur les requettes en lectures (pb de cache si range , utilisation de YourKit pour debugger la heap au crash dump (à cette epoque 1.7.4 => passer en 1.7.5 !) => désactivation des caches + parallélisation des requetes par index next : 50 millions de doc/jour (plus de sphynx, maintenant utilisation de percolation = indexation inversée dans ES) 35000 rq à tester, en percolation on a une estimation de 1700 milliards de req => routage sur la langue des documents , objectif 100 000 req/sec

questions

ES en 2 ? pb de réécriture de query (DSL de sphynx vers ES déjà fait, à refaire pour passer en ES2) pas d'étude d'autre soft par compétence monotiring ; marvelpour le temps réel (marvel pour monitorer + cluster de monitoring de marvel lui-même) ; le reste est graffé par Zabbix sauvegarde / archivage ? non car toute la donnée brute est dans mysql (25 To dans un Galera), ES n'est pas prévu pour stocker, ce n'est pas MongoDB snapshot ? S3 ou N/Z/.../FS : 10 To trop gros pour gérer des snapshots Utilisation de plugin d'analyse linguistique tels stemmer chiffrement inter noeud : non => étude FS chiffré pas d'ACL sur ES unicast conso de disques SSD de plu sen plus importante OVH ; coupure électrique ou réseau : systeme de maitre / quorum => donc pas de soucis sur ES. plus de corruptions de données depuis la 1.0

Puppet at Gandi, Aurélien Rouhemont, Arthur Gautier

Equipe de 15 personnes puppet = QUE un gest de conf = framework, pas grand chose out of the box pas un orchestrateur, pas la "silver bullet", ce n'est pas léger Gandi, pourquoi ? pull model (se fait pas violé par un SSH de l'externe) ; promise theory (mark de cfengine), en 2009 pas grand chose, utilisation master , DSL simple, pas besoin de connaître le ruby, descriptif pour aller vers un état final (si déclaration de dépendances), populaire

Configuration Management chez Gandi : avant 2009 : Makefile, package, Awk, 2009 : premier repo puppet SVN alors que personne ne faisait de ruby 2010 : pas de module, un site.pp 2011 : réflexions hiera et template (module + conf. extérieure) 2013 : pas d'upgrade puppet 3.x possible 2014 : génération de monitoring dans puppet (il génère la conf pour la pf de monitoring : nagios, thrunk) 2015 : en 10 jours, réécriture de 250 modules puppet en 3.7 2016 : orchestration Ouverture aux développeurs, merge request, depuis 2013

Comment ENC : MySQL + insertions + Perl => utilisation d'un YAML à partir de 2015 Facts Matters : meta comm eun autre pour définir des groupes de serveurs, ce n'est pas natif, il faut penser à la faire, ,notion de flavor = sous groupe de farm savoir si un module est utilisé => au début pas de forge puppet (coup d'entrée assez cher pour du non ruby fluent), exemple42 pas dispoi à l'époque, création d'un templae de module : init.pp, install.pp (packages uniq), config.pp, files.pp, cron.pp, service.pp : conv. de nommage de variable depuis hiera dans l'init.pp (cron.pp : gestion de cron au lien symbolique) un rep temlate par flavor

coding style human readable !, code portable, utilisation de best practices, ex files = collection d'object, pas un objet 20 à 60% de perf mieux sur gros catalogues de file sjusqu'en 2.7 hiera as datasource nodes / farm, datasource, room, etc ... puppet vanishment history à voir sur puppetlabas dynamic variaable scoping sad panda => tig (arbre git) => 250 branches git : taken.owner, taken.done pour ne pas se marcher dessus datatypes mieux codées avec stdlib hiera merging policy => le change est devenu merge (ex sur acl) gitlab pour repo couplé à un jenkins puppet linting + rule du gandi module layout + syntax validation + yaml validation + erb syntax validation passage 3.7 a uniformisé le niveau d'admin puppet puppet environment="mergerequest" utilisation d'un git merge --no-comit jenkins appelle le puppet-lint erb -P -x -T file.rb pupeet-db => json => jinja => nagios mcollective fait le puppet run mcollective joli mais fragile version web de hiera => hieraviz pour lire la base hiera : idée écrire depuis hieraviz https://github.com/gandi/hieracles Etude d'impact en cours alias puppet status, puppet lock + motif +

Conclusion puppet n'est pas un orchestrateur => ansible ? abandonner le tas de yaml avec une API / CMDB

question

reporting : foreman, mais pas plus que çà envisagé : consul ? hitop (en php) ? modules fait maison uniquement pour l'instant puppet4 : pb des modules tout fait puppet enterprise : idem, pas de forge dump d'inventaire à partir du DNS, attention aux alias itop trop gros par rapport aux besoins un puppet master de production, utilisation des environnements plusieurs run pour passage OK parfois et toléré => voir le "puppet virtual nodes" pour le test de code puppet

Blocage dynamique de pages web (Frédéric Vannière, planet-work.com)

NGINX/LUA 400 machines, virtu, Freebsd pour les backup 10000 sites, 30% wordpress => spam, phishing stockage sur Netapp en NFSv3 Archi NGINX en front reverse proxy (apache tient peu la charge sur ce besoin), statiques hébergées en front Solution OpenResty = module NGINX + LUA Clé valeur de blacklist via DNSBL blaclist.conf : conf dnsbl gère le blocage + deblocage par mot de passe pour l'accès client Détection : gestion des logs via rsyslog centralisé (en rfs5424)

  • stack ELK : (logstash 1.4 fragile aux caractères mal encodés)
  • tests HekaD (projet Mozilla, en go, multithreads, sandbox LUA) (écrit dans un elasticsearch) : attention une fois le msg traité, plus d'altération possible. Prévu pour la métrologie : collectd->aggreg->influxd => création d'un flitre sandbox LUA => openresty < 3 avec validation auto Let's Encrypt : script python tiers (cloudflare) pour vérifier les expiation http://pw.fr recrute sur Paris / Rennes (l'an prochain) 5 techos "on est pas là pour vendre de la magie, 8 ans de conf"

questions

Quid de la rotation : perte possible mais NGNINX, permi Pas de pb de perf sauf sur ES

Gestion des services par Gandi (Fabrice Daroussin)

présentation,attention aux mélanges watchman launchd systemd openrc upstart (tous vivant) init historique : petit, process pere de tous les processus, ne gere pas la gestion des services (inittab ou ttys de freebsd) puis délègue à sysvinit, rcng (freebsd), rc (openbsd) Mais pas de cycle de vie, pas de moyen que le service est rendu, difficile d'assurer la cohérence entre les scripts d'init, pas de gestion de ressources (RAM, CPU, sandbox de l'OS, ....) supervision par un pid uniquement (souvent loupé pour lemonitoring si double fork) gestion des dépendances faibles framework, souvent en shell (posix, bash, zsh) ex: Dabian Dash gestion d'erreur en shell pas simple car trap etc .... complexe à isoler (/etc/init.d/truc start) (mais pb sur les variables d'enrionnement) => comman de service pour contrôler variables d'environnement (présente sous Linux, FreeBSD, systemd) complexe pour cohérence multi OS (même multi Linux) pas de gestion de performances ni de surveillance de processus fiabilité aléatoire du status (souvent que le père) pas de gestion d'évènementielle (ex cupsd uniquement si printer) ex : inetd evenement => udev => script de service => latence pas de fault management (ex les workers apaches en failed) difficile de faire un démon : user non privilégié, attention au chroot sans chdir, refaire un setrlimit (mais chacun veut le faire) (s attention aux parents laxistes qui abandonnent leurs enfants (apache et fiston) peu de parallèle de service, trous dans les logs Solutions : PID via process descriptor FreeBSD 10.0, Linux 4.1 : polling de race reapers (garder les trace des fils) : Linux 3.4 (dbus), Solaris 10 (contracts), FreeBSD10.2, Dragonfly 4.0 : un service pour démarrer les services apache Services : Génerer les services via sandboxing Réactivité : devd envoi sans parser tous les scripts Format pas important ; description yaml, json, ini, ....mais la description est importante Gestion des sockets pour séparation de privilèges, ex bufferisation de logs si syslog cassé Utiliser un IPC (séparer les taches)

=> remplacer init ? pas utile, aucun service actuel ne gère toutes les demandes vues ici ? SMF (Solaris) gère le monitoring (mais Over engineer) a conservé init, cron, ...., fault management Références : do_command.c de Paul Vixie Solaris Service Management Facility Modern System Startup

questions

systemd : approche, manquant à SMF : le pid pere est encore crucial, pas encore de tracabilité de fils car utilise les cgroups

Linux Crashdump analysis - Adrien Mahieux, github.com/Saruspete

Kernel Recipes 2015

crashdump / kdump : snapshot de la mémoire en cours, principalement Linux, sysadmin se fait via kexec & panic 64 à 512 M de RAM vmware : suspend , vmss2core libvirt : virsh dump guest Get : kernel config KEXEC=y .... bootoption : crashlernel=auto (auto = X@Y réécri) indiquer un masque sur pages privées, userland, .... dump entre 100M et 2G si utilisation intensive impi power diag (NMI via IPMI) virsh inject-nmi guest attention au kernel.unknown_nmi_panic=1 => car le code NMI n'est pas le même pour tous les constructeurs mais peut etre en conflit avec ooprofile OOM : vm.panic_on_oom=1 Analysis : crash via Dave Anderson de RedHat (gdb) RedHat : debuginfo-install kernel Debian : apt-get install linux-image-$'uname -r)_dbg même commandes que dans gdb (bt ....) Live kretprobes : CONFIG_STRICT_DEVMEM savoir si on sait lie sur /dev/mem OpenGrok fast code source browser voir makedumpfile sur chitranshi fence kdump sur ovirt.org

questions

un redémarrage via kexec, puis un redémarrage normal

Performance Analysis, fro msilicon to algorithm (microsecund hunter)

sysadmin : utiliser des algo pour contourner des pb hardware, tuning d'appli, .... besoin de bien connaître le client, protocoles, .... attention au ratio gain / coût Souvent regarder côté application pour optim' Comment ça marche ? balance d'éléments storage lent : ajout redahead ou RAM network : offload, DMA RAM slower than CPU, add L1/L2/L3 cache video : utilisation GPU .... memory management : méchanismes de segmentation MMU : @locique : segmentation => virtual pagination => physical allocation kernel linux overcommit (resident 100m versus allocation 17 Go) => overcommit attention OOMKiller qui libère dec RAM (algo plu sou moins heureux), score tunable via /proc//oom_score/adj

buddy allocator : ex plusieurs giga lobres mais mem fragmentée, car meme pas utilisable si pas contigue => utilisation du SLAB cache pour limite la fragmentation : CPU : kernel scheduler, via la variable HZ ticks geneère les jobs : context switch userland => syscall => libc (wrappers) open,malloc,mmap => gates : possible d'accéléer via VDSO (gettimeofday, ....) Réseau : ethtool -g : taille du ring buffer (DMA) en RAM et gnère une interruotion optim harware (plusieurs queue sur carte 10 G), voir le blog de Claude Feder

Storage IO sont en syscall, scheduler d'IO à observer coherence en terme de cohrence ZFS et BTRFS pas de VFS, ext/xfs/ oui ....

puis elevator donne request queue : cfq defaut), deadline : garanti le wait (databases) , noop (SSD) mmap : bcp overhead mais rapide

Mesurer 'Use method) : Brendan Gregg Netflix (auteur de netflix) utilization actuelle, quelle est la saturation, quelles sont les erreur sampling : ps, top, perf tracing : auditd, ktrace, systemtap, gdb conter : intel pcm, numastat, user feedback

rappel des slides netflix

Quoi faire rapide, robuste, pas cher, jamais possible d'avoir les 3

  • latence : tps de traitement de signal : isolcpu, ou nohz_full (desactiv les tick, attention à irqbalance => attention à la dacdrer ou le désactiver , / désactiver le coalescing / attention au readahead, penser à le désactiver, compression (ZFS: cout een CPU mais économise en stockage) fibre optique c'est lent : sniperinmahwah.wordpress.com (hyperthreading haute fréquence) => la lumière est rapid dans le vide uniquement
  • débit : difficile car lié à chaque comppsant disk, réseau, aute (ex: chunk size, jumbo fram, en gros plus il y a de RAM, mieux ça marche)
  • jitter : industriel, realtime, moteur carburant / air, précis et fiable, ex un thread kernel au lieu d'un thread kernel par CPU : isolcpu, nohz_full, ...

A la recherche des problèmes perf et les flamegraph version de pagefault ou diff flamegraph systemtap : utilise les debuginfo comme crashdump : génère du code C et injecte dans le kernel

Et le hardware

  • CPU Interl PCM (performance counter monitor) intel.com/ peformance ... MSR : Model Specific Register: module msr pour la RAM, trop tard, maintenant c'est le CPU qu igère on peut avoir les erreurs ECC avec dmidecode
  • NIC : DPDK OpenFabric : kernel bypass; Infinibands écrit dans la RAM des voisins

questions

moyen de voir si c-state activé ou pas : cpufreq (cpupower monitor) i7z : lit les données relatives à la freq du CPU powertop : applis qui généré interruptions, wakeup tuned : fait le job, mais fait trop de chose qu'o ne veut pas forcément si processeur change de socket, pas forcément besoin de RAM en RAID, mais pb sur mémorie cache CPU, donc intérêt à garder les proces sur le même coeur (isolcpu) FreeBSD : équivalences ? voir la map de Brendan Greg existe aussi pour Solaris

Retour d'expérience sur un scan de détection de malware sur une infrastructure hébergeur, par Julien Reveret, NBS Systems

Projet d'actualité : nettoyage du canal saint-martin (pneus, matelas, ....), => machines clients idem Dev. internes : Julien Voisin, PHP-malware-finder basé sur yara (détecter les malwares les plus courants uniquement) ex. beaucoup de bruit, puis analyse par un humain, un seul fichier avec malware autres faux positifs => identification par hash cryptographique : liste blanche à partir des faux positifs => poussé sur github.com/nbs-system/php-malware-finder Résultats : machines avec infections dormantes (une dizaine), des faux positifs ; du faux positif, de la whitelist et finalement trouvé un webshell alors qu'il était PCI-DSS ! ; un module tiers magento ressemblant à un malware ; divers webshell Beaucoup de craptographie chez les développeurs PHP :-) Temps de traitement : 7 heures pour 100 machines en NFS

questions

A t'on le droit d'ouvrir les fichiers des clients => ici oui, audit de code déjà prévue Netapp : utilsation de fpolicy sur fichiers modifiés ? => à voir supervision ? pas encore

Nouveautés de FreeBSD 11

Baptsite Daroussin (probablement inclut en 10.3 beta) fin ia64, ajout arm64 et risc-V ; improve ARM : dtrace & more CloudABI = format binaire cross OS sandboxé mais dépendant de l'arch, enregistré au niveau de posix pour avoir le numéro elf associé, toolchain : lldb par défaut amd64 migration binutils vers Elftoolchain (sauf ld network : plus de support IPX et appletalk, new version netmap (émulation de n'importe quel driver réseau), modularisation stack TCP, et ajout de TCP fastpath (possibilité de swither) storage : améliorations perfs NFS et "cable control layer, iSCSI), améliorations ZFS, I/O throttling dans des jails maintenant possible + HA en iSCSI (actif-passif) ; module sendfile réécrit par Netflix Virtu : Xen dom0 (support domU) , bhyve (hyperviseur natif issus de Netapp) : peut booter du Linux et même Windows, Illumos ou Dragonfly via émulation UEFI ; HyperV guest très amélioré ; jails : ajout d'arg. CARP sur ip4/ip6.addr si vnet uniquement, top et ps émulé Nouveautés : fstyp, devctl, uefisign, sesutils (equiv sg3-utils), numactl, autofs (automontage d disque dans les VM BSD chez Gandi en cas d'ajout de volume), casperd (sandboxing capxicon), mprutils/mpsutils (utiliataires LSI equiv megacli) divers : support UEFI et GELI sur loader, support de Boot Environment dans le loader, groff remplacé par mandoc ; mêmes bases de locales que Linux ; maintenant linux64 ; ajout de Dragonfly Mail Agent (sendmail off) Kernel crash dump chiffrés package de la base Arrivée 27/07/2016

questions

support multi-écran : en court

Du système au réseau, histoire d'un coming-out

Pourquoi ? bankable datacenter L2 vlan firewall core (backbone, bgp) acess (collecte, CPE) monde network assez fermé => peu de doc, peu de partage de connaissance, beaucoup de matos proprio et os proprio évolutions parfois publiques plus de réseau humain (peering, opérateurs, aide DDOS, aller aux FRNOG) A venir automatisation : norme netconf => ansible, pyez, napalm SDN : pose questions de design L2less routeur opensource : DPDK, ou packet journey de Gandi , bird (un quagga like) switch open en cours de dev : OS open, chipset proprio (Broadcomm, Marvell, ....) JunOS ou pas => Cumulus (Debian modifiée), implem OpenSwitch à venir

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment