{"id":16,"date":"2009-05-31T10:00:00","date_gmt":"2009-05-31T08:00:00","guid":{"rendered":"http:\/\/netexpertise\/fr\/?p=16"},"modified":"2021-10-06T21:49:11","modified_gmt":"2021-10-06T20:49:11","slug":"accounting-journalier","status":"publish","type":"post","link":"http:\/\/www.netexpertise.eu\/fr\/reseau\/freeradius\/accounting-journalier.html","title":{"rendered":"Accounting journalier avec Freeradius et Mysql"},"content":{"rendered":"\n<p>J&rsquo;ai d\u00e9j\u00e0 vu plusieurs posts sur la <a href=\"http:\/\/lists.cistron.nl\/mailman\/listinfo\/freeradius-users\">liste d&rsquo;utilisateurs<\/a> Freeradius et autres forums demandant comment r\u00e9cup\u00e9rer l&rsquo;accounting de chaque utilisateur \u00e0 intervalles r\u00e9guliers. Le protocole Radius fournit l&rsquo;accounting mais pas exactement de la fa\u00e7on d\u00e9sir\u00e9e. Voici une petite liste de choses que j&rsquo;aimerais modifier ou am\u00e9liorer:<\/p>\n\n\n\n<ul><li> <span style=\"font-size: inherit;\">Le traffic n&rsquo;est pas collect\u00e9 \u00e0 intervalles r\u00e9guliers<\/span><br>Il en r\u00e9sulte qu&rsquo;il est difficile de g\u00e9n\u00e9rer des graphiques journaliers des downloads\/uploads. Le trafic sera corrompu parce qu&rsquo;une fois de plus, il est impossible de calculer le trafic surr une p\u00e9riode donn\u00e9e avec exactitude<\/li><\/ul>\n\n\n\n<ul><li> <span style=\"font-size: inherit;\">La session active n&rsquo;appara\u00eet pas parce que la base de donn\u00e9es ne contient que des valeurs nulles, apr\u00e8s qu&rsquo;un enregistrement de type \u00ab\u00a0start\u00a0\u00bb n&rsquo;ait \u00e9t\u00e9 ins\u00e9r\u00e9<\/span> <\/li><\/ul>\n\n\n\n<ul><li> <span style=\"font-size: inherit;\">Des enregistrements peuvent \u00eatre perdus en route (entre le routeur et le serveur Radius). Le protocole Radius utilise UDP, qui ne supporte pas les acknowledgements.<\/span> <\/li><\/ul>\n\n\n\n<ul><li> <span style=\"font-size: inherit;\">La valeur du trafic est r\u00e9initialis\u00e9e \u00e0 0 si elle d\u00e9passe les 4GB et que la session n&rsquo;est pas interrompue avant. Le format du champ est une valeur 32 bits non sign\u00e9e comme d\u00e9finie dans la RFC.<\/span> <\/li><\/ul>\n\n\n\n<p>Un certain nombre de probl\u00e8mes se masnifestera pour ceux qui veulent extraire ces donn\u00e9es et les traiter. Aucune restriction ne peut \u00eatre appliqu\u00e9e par exemple. Les graphiques montrent des valeurs nulles si l&rsquo;utilisateur ne s&rsquo;est pas d\u00e9connect\u00e9 pendant une longue p\u00e9riode. M\u00eame s&rsquo;il existe des moyens d&rsquo;envoyer des updates depuis le Network Access Server, cette solution ne me satisfait pas puisque la date \u00ab\u00a0stop\u00a0\u00bb reste 00-00-00 et que la requ\u00eate devient compliqu\u00e9e et prend un certain temps notamment si de pr\u00e9c\u00e9dants stop-records ont \u00e9t\u00e9 perdus en chemin. Dans le meilleur scenario, le trafic peut \u00eatre collect\u00e9 (en incluant la session active), mais il reste impossible de conna\u00eetre le trafic journalier avec pr\u00e9cision par exemple.<\/p>\n\n\n\n<h3>M\u00e9thode<\/h3>\n\n\n\n<p>Certains pourront sugg\u00e9rer des r\u00e9initialiser toutes les connections \u00e0 intervalles r\u00e9guliers mais pourquoi les clients devraient \u00eatre d\u00e9connect\u00e9s juste pour calculer la valeur exacte de trafic consomm\u00e9? Comment pourrait-on le justifier pour des connexions 24\/24? De simples modifications peuvent palier \u00e0 ces petits probl\u00e8mes. V\u00e9rifions bri\u00e8vement ce qui peut \u00eatre fait:<br>Le trafic n&rsquo;est pas collect\u00e9 \u00e0 intervalles r\u00e9guliers. Nous pourrions envoyer des updates depuis le routeur, ce qui est un bon pas. Mais ce n&rsquo;est pas suffisant puisque les nouvelles valeurs \u00e9crasent les anciennes. Une autre mani\u00e8re de proc\u00e9der est de cr\u00e9er de nouveaux enregistrements stop et start au lieu d&rsquo;envoyer un update, ou simuler une nouvelle session pour \u00eatre plus clair. Ceci minimiserait l&rsquo;impact du dernier stop manquant, si la p\u00e9riode de temps est assez petite. Les donn\u00e9es perdues ne seraient plus un probl\u00e8me non plus comme l&rsquo;on compare la nouvelle valeur \u00e0 la derni\u00e8re re\u00e7ue.<br>Finallement, nous pouvons contourner la limite des 4GB avec les attributs Radius Acct-Input-Gigawords et Acct-Input-Gigawords si votre routeur le supporte (M\u00e9thode que nous allons utiliser ici). Si votre hardware ne le supporte pas, quelques modifications au code SQL ci-dessous sont n\u00e9cessaires. Ceci a \u00e9t\u00e9 test\u00e9 sur des plate-formes en production avec plus de 5000 clients.<\/p>\n\n\n\n<h3>Avant de commencer<\/h3>\n\n\n\n<p>J&rsquo;ai appliqu\u00e9 ces changements sur Fedora Core et Solaris avec <a href=\"http:\/\/www.freeradius.org\">Freeradius<\/a> 1.1.3. Le syst\u00e8me d&rsquo;exploitation n&rsquo;a pas vraiment d&rsquo;importance puisque la plupart des changements sont r\u00e9alis\u00e9s sur des requ\u00eates SQL. Nous partons d&rsquo;une installation Freeradius avec <a href=\"http:\/\/www.mysql.com\">Mysql<\/a>. Scott Barlett a \u00e9crit de pr\u00e9cieuses notes \u00e0 ce sujet, disponible \u00e0 <a href=\"http:\/\/www.frontios.com\/freeradius.html\">http:\/\/www.frontios.com\/freeradius.html<\/a>.<br><b>Mysql 5.0 ou plus<\/b> est absolument n\u00e9cessaire dans cette implementation. Les versions pr\u00e9c\u00e9dentes ne supportent pas les proc\u00e9dures stock\u00e9es. V\u00e9rifiez \u00e9galement que votre routeur (NAS) supporte les updates pour l&rsquo;accounting et les attributs Acct-Input-Gigawords (souvent le cas pour Cisco).<\/p>\n\n\n\n<h3>Ajouter le support pour les extensions Radius<\/h3>\n\n\n\n<p>Comme mentionn\u00e9 dans la <a href=\"http:\/\/www.ietf.org\/rfc\/rfc2869.txt\">RFC2869<\/a>, les attributs additionnels ont \u00e9t\u00e9 cr\u00e9\u00e9s pour r\u00e9pondre \u00e0 certains besoins \u00e0 travers des fonctions tr\u00e8s utiles. Les attributs Acct-Input-Gigawords et Acct-Output-Gigawords indiquent combien de fois les compteurs Acct-Input-Octets et Acct-Output-Octets ont \u00e9t\u00e9 r\u00e9initialis\u00e9s apr\u00e8s avoir atteint 2^32. Ils sont pr\u00e9sents dans les envois Stop et Interim-Update, juste ce que nous voulons.<br>Vous pouvez les activater sur un routeur Cisco en tapant<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">aaa accounting gigawords<\/code><\/pre>\n\n\n\n<p>Nous n&rsquo;avons pas besoin d&rsquo;ajouter des champs \u00e0 la base de donn\u00e9es Radius; Nous allons calculater le nouveau trafic \u00e0 la vol\u00e9e. Les b\u00e9n\u00e9fices sont de conserver la structure originelle de la base de donn\u00e9es et les scripts accounting que vous auriez pu avoir \u00e9crits. D&rsquo;un autre c\u00f4t\u00e9, cela sauve beaucoup d&rsquo;espace.<br>La seconde modification est faite dans la requ\u00eate SQL.<\/p>\n\n\n\n<p><i>Note<\/i> Vous devrez red\u00e9marrer le routeur pour appliquer les nouveaux param\u00e8tres. Fa\u00eetes cela au moment appropri\u00e9.<\/p>\n\n\n\n<h3>Configuration du NAS pour envoyer des updates accounting<\/h3>\n\n\n\n<p>Il existe 2 moyens d&rsquo;y parvenir. Soit vous reconfigurer votre routeur (NAS) pour envoyer des updates accounting au serveur Radius, soit vous ajouter un param\u00e8tre suppl\u00e9mentaire dans les d\u00e9tails du client. Je pr\u00e9f\u00e8re le faire sur le routeur comme il a la priorit\u00e9 sur les param\u00e8tres Radius. J&rsquo;utilise un routeur Cisco pour lequel la commande est:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">aaa accounting update periodic 180<\/code><\/pre>\n\n\n\n<p>Ceci envoie une update toutes les 3 heures. Je devrais mentionner que ceci s&rsquo;applique quand la connexion du client est \u00e9tablie, ce qui signifie que vous devez red\u00e9marrer les interfaces appropri\u00e9es.<\/p>\n\n\n\n<p><i>Attention<\/i> Utiliser la commande <i>aaa accounting update periodic<\/i> peut causer une congestion lorsque beaucoup d&rsquo;utilisateurs sont connect\u00e9s au r\u00e9seau.<\/p>\n\n\n\n<h3>Definir les nouvelles requ\u00eates Update et Stop<\/h3>\n\n\n\n<p>Le code SQL pour les requ\u00eates update et stop doivent \u00eatre remplac\u00e9es. J&rsquo;appelle des stored proc\u00c9dures parce qu&rsquo;il y a un peu de calcul \u00e0 effectuer et le client Mysql n&rsquo;accepte pas 2 commandes dans une seule requ\u00eate. Il existe peut-\u00eatre une m\u00e9thode mais je pense que c&rsquo;est plus flexible de cette mani\u00e8re. Aucun changement n&rsquo;est n\u00e9cessaire sur les serveurs Radius. Ins\u00e9rez dans la base Mysql les 2 proc\u00e9dures suivantes<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"sql\" class=\"language-sql\">DROP PROCEDURE IF EXISTS radius.acct_update;\ndelimiter \/\/\nCREATE PROCEDURE radius.acct_update(\n  IN S DATETIME,\n  IN Acct_Session_Time INT(12),\n  IN Acct_Input_Octets BIGINT(20),\n  IN Acct_Output_Octets BIGINT(20),\n  IN Acct_Terminate_Cause VARCHAR(32),\n  IN Acct_Session_Id varchar(64),\n  IN SQL_User_Name VARCHAR(64),\n  IN NAS_IP_Address VARCHAR(15),\n  IN Acct_Unique_Session_Id VARCHAR(32),\n  IN Realm VARCHAR(64),\n  IN NAS_Port VARCHAR(15),\n  IN NAS_Port_Type VARCHAR(32),\n  IN Acct_Authentic VARCHAR(32),\n  IN Called_Station_Id VARCHAR(50),\n  IN Calling_Station_Id VARCHAR(50),\n  IN Service_Type VARCHAR(32),\n  IN Framed_Protocol VARCHAR(32),\n  IN Framed_IP_Address VARCHAR(15)\n)\nBEGIN\n  DECLARE Prev_Acct_Input_Octets BIGINT(20);\n  DECLARE Prev_Acct_Output_Octets BIGINT(20);\n  DECLARE Prev_Acct_Session_Time INT(12);\n\n  <i># Collect traffic previous values<\/i>\n  SELECT SUM(AcctInputOctets), SUM(AcctOutputOctets), SUM(AcctSessionTime)\n    INTO Prev_Acct_Input_Octets, Prev_Acct_Output_Octets, Prev_Acct_Session_Time\n    FROM radacct\n    WHERE AcctSessionId = Acct_Session_Id\n    AND UserName = SQL_User_Name\n    AND NASIPAddress = NAS_IP_Address\n    AND ( AcctStopTime &gt; 0);\n\n  <i># Set values to 0 when no previous records<\/i>\n  IF (Prev_Acct_Session_Time IS NULL) THEN\n    SET Prev_Acct_Session_Time = 0;\n    SET Prev_Acct_Input_Octets = 0;\n    SET Prev_Acct_Output_Octets = 0;\n  END IF;\n\n  <i># Update record with new traffic<\/i>\n  UPDATE radacct SET AcctStopTime = S,\n    AcctSessionTime = (Acct_Session_Time - Prev_Acct_Session_Time),\n    AcctInputOctets = (Acct_Input_Octets - Prev_Acct_Input_Octets),\n    AcctOutputOctets = (Acct_Output_Octets - Prev_Acct_Output_Octets),\n    AcctTerminateCause = Acct_Terminate_Cause\n    WHERE AcctSessionId = Acct_Session_Id\n    AND UserName = SQL_User_Name\n    AND NASIPAddress = NAS_IP_Address\n    AND (AcctStopTime IS NULL OR AcctStopTime = 0);\n\n  <i># Create new record<\/i>\n  INSERT INTO radacct\n   (AcctSessionId, AcctUniqueId, UserName,\n    Realm, NASIPAddress, NASPortId, NASPortType,\n    AcctStartTime, AcctStopTime, AcctSessionTime,\n    AcctAuthentic, AcctInputOctets, AcctOutputOctets,\n    CalledStationId, CallingStationId, AcctTerminateCause,\n    ServiceType, FramedProtocol, FramedIPAddress,\n    AcctStartDelay, AcctStopDelay)\n  VALUES\n   (Acct_Session_Id, Acct_Unique_Session_Id, SQL_User_Name,\n    Realm, NAS_IP_Address, NAS_Port, NAS_Port_Type,\n    S, '0', '0',\n    Acct_Authentic, '0', '0',\n    Called_Station_Id, Calling_Station_Id, '',\n    Service_Type, Framed_Protocol, Framed_IP_Address,\n    '0', '0');\nEND;\n\/\/\ndelimiter ;<\/code><\/pre>\n\n\n\n<p><br><i>Note<\/i> Vous devez mettre \u00e0 jour les noms de tables s&rsquo;ils ont \u00e9t\u00e9 chang\u00e9s dans sql.conf. J&rsquo;utilise les valeurs par d\u00e9faut pr\u00e9sent dans le fichier et la structure de la base: \u00ab\u00a0Radacct\u00a0\u00bb.<br><i>Note<\/i> N&rsquo;oubliez pas de changer le d\u00e9limitateur avant et apr\u00e8s la proc\u00e9dure ou vous obtiendrez une erreur!<br>Nous devons r\u00e9cup\u00e9rer le trafic des updates pr\u00e9c\u00e9dentes parce que le routeur envoie un compteur et pas le trafic g\u00e9n\u00e9r\u00e9 sur la derni\u00e8re p\u00e9riode de temps. Un enregistrement stop est ajout\u00e9 avec la diff\u00e9rence de trafic. La requ\u00eate stop doit aussi \u00eatre modifi\u00e9e:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"sql\" class=\"language-sql\">DROP PROCEDURE IF EXISTS radius.acct_stop;\ndelimiter \/\/\nCREATE PROCEDURE radius.acct_stop(\n  IN S DATETIME,\n  IN Acct_Session_Time INT(12),\n  IN Acct_Input_Octets BIGINT(20),\n  IN Acct_Output_Octets BIGINT(20),\n  IN Acct_Terminate_Cause VARCHAR(32),\n  IN Acct_Delay_Time INT(12),\n  IN Connect_Info VARCHAR(32),\n  IN Acct_Session_Id varchar(64),\n  IN SQL_User_Name VARCHAR(64),\n  IN NAS_IP_Address VARCHAR(15)\n)\nBEGIN\n  DECLARE Prev_Acct_Input_Octets BIGINT(20);\n  DECLARE Prev_Acct_Output_Octets BIGINT(20);\n  DECLARE Prev_Acct_Session_Time INT(12);\n\n  <i># Collect traffic previous values<\/i>\n  SELECT SUM(AcctInputOctets), SUM(AcctOutputOctets), SUM(AcctSessionTime)\n    INTO Prev_Acct_Input_Octets, Prev_Acct_Output_Octets, Prev_Acct_Session_Time\n    FROM radacct\n    WHERE AcctSessionId = Acct_Session_Id\n    AND UserName = SQL_User_Name\n    AND NASIPAddress = NAS_IP_Address\n    AND ( AcctStopTime &gt; 0);\n\n  <i># Set values to 0 when no previous records<\/i>\n  IF (Prev_Acct_Session_Time IS NULL) THEN\n    SET Prev_Acct_Session_Time = 0;\n    SET Prev_Acct_Input_Octets = 0;\n    SET Prev_Acct_Output_Octets = 0;\n  END IF;\n\n  <i># Update record with new traffic<\/i>\n  UPDATE radacct SET AcctStopTime = S,\n    AcctSessionTime = (Acct_Session_Time - Prev_Acct_Session_Time),\n    AcctInputOctets = (Acct_Input_Octets - Prev_Acct_Input_Octets),\n    AcctOutputOctets = (Acct_Output_Octets - Prev_Acct_Output_Octets),\n    AcctTerminateCause = Acct_Terminate_Cause,\n    AcctStopDelay = Acct_Delay_Time,\n    ConnectInfo_stop = Connect_Info\n    WHERE AcctSessionId = Acct_Session_Id\n    AND UserName = SQL_User_Name\n    AND NASIPAddress = NAS_IP_Address\n    AND (AcctStopTime IS NULL OR AcctStopTime=0);\nEND;\n\/\/\ndelimiter ;<\/code><\/pre>\n\n\n\n<p><br>C&rsquo;est la m\u00eame que la requ\u00eate originale \u00e0 part qu&rsquo;elle r\u00e9cup\u00e8re le trafic pr\u00e9c\u00e9dent. Si vous n&rsquo;utilisez pas les updates accounting, le comportement sera le m\u00eame qu&rsquo;avant.<\/p>\n\n\n\n<h3>Mise \u00e0 jour de sql.conf<\/h3>\n\n\n\n<p>La derni\u00e8re \u00e9tape est de remplacer le code SQL dans sql.conf, pour appeler les 2 proc\u00e9dures ci-dessus.<br>Remplacez <i>accounting_update_query<\/i> avec<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"sql\" class=\"language-sql\">accounting_update_query = \" \\\n          CALL acct_update( \\\n          '%S', \\\n          '%{Acct-Session-Time}', \\\n          '%{%{Acct-Input-Gigawords}:-0}'  &lt;&lt; 32 | '%{%{Acct-Input-Octets}:-0}', \\\n          '%{%{Acct-Output-Gigawords}:-0}' &lt;&lt; 32 | '%{%{Acct-Output-Octets}:-0}', \\\n          'Acct-Update', \\\n          '%{Acct-Session-Id}', \\\n          '%{SQL-User-Name}', \\\n          '%{NAS-IP-Address}', \\\n          '%{Acct-Unique-Session-Id}', \\\n          '%{Realm}', \\\n          '%{NAS-Port}', \\\n          '%{NAS-Port-Type}', \\\n          '%{Acct-Authentic}', \\\n          '%{Called-Station-Id}', \\\n          '%{Calling-Station-Id}', \\\n          '%{Service-Type}', \\\n          '%{Framed-Protocol}', \\\n          '%{Framed-IP-Address}')\"<\/code><\/pre>\n\n\n\n<p>&nbsp;<br>et <i>accounting_stop_query<\/i> avec<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"sql\" class=\"language-sql\">accounting_stop_query = \" \\\n          CALL acct_stop( \\\n          '%S', \\\n          '%{Acct-Session-Time}', \\\n          '%{%{Acct-Input-Gigawords}:-0}' &lt;&lt; 32 | '%{%{Acct-Input-Octets}:-0}', \\\n          '%{%{Acct-Output-Gigawords}:-0}' &lt;&lt; 32 | '%{%{Acct-Output-Octets}:-0}', \\\n          '%{Acct-Terminate-Cause}', \\\n          '%{%{Acct-Delay-Time}:-0}', \\\n          '%{Connect-Info}', \\\n          '%{Acct-Session-Id}', \\\n          '%{SQL-User-Name}', \\\n          '%{NAS-IP-Address}')\"<\/code><\/pre>\n\n\n\n<p>Rebootez le serveur Radius pour appliquer les nouveaux changements, et voil\u00e0!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>J&rsquo;ai d\u00e9j\u00e0 vu plusieurs posts sur la liste d&rsquo;utilisateurs Freeradius et autres forums demandant comment r\u00e9cup\u00e9rer l&rsquo;accounting de chaque utilisateur \u00e0 intervalles r\u00e9guliers. Le protocole Radius fournit l&rsquo;accounting mais pas exactement de la fa\u00e7on d\u00e9sir\u00e9e. Voici une petite liste de choses que j&rsquo;aimerais modifier ou am\u00e9liorer: Le traffic n&rsquo;est pas collect\u00e9 \u00e0 intervalles r\u00e9guliersIl en [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_mi_skip_tracking":false},"categories":[20,3],"tags":[16,408,403,404,7],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v19.13 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Netexpertise - Accounting journalier avec Freeradius et Mysql<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"http:\/\/www.netexpertise.eu\/fr\/reseau\/freeradius\/accounting-journalier.html\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Netexpertise - Accounting journalier avec Freeradius et Mysql\" \/>\n<meta property=\"og:description\" content=\"J&rsquo;ai d\u00e9j\u00e0 vu plusieurs posts sur la liste d&rsquo;utilisateurs Freeradius et autres forums demandant comment r\u00e9cup\u00e9rer l&rsquo;accounting de chaque utilisateur \u00e0 intervalles r\u00e9guliers. Le protocole Radius fournit l&rsquo;accounting mais pas exactement de la fa\u00e7on d\u00e9sir\u00e9e. Voici une petite liste de choses que j&rsquo;aimerais modifier ou am\u00e9liorer: Le traffic n&rsquo;est pas collect\u00e9 \u00e0 intervalles r\u00e9guliersIl en [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"http:\/\/www.netexpertise.eu\/fr\/reseau\/freeradius\/accounting-journalier.html\" \/>\n<meta property=\"og:site_name\" content=\"Netexpertise\" \/>\n<meta property=\"article:published_time\" content=\"2009-05-31T08:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-10-06T20:49:11+00:00\" \/>\n<meta name=\"author\" content=\"dave\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@netexpertise\" \/>\n<meta name=\"twitter:site\" content=\"@netexpertise\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"http:\/\/www.netexpertise.eu\/fr\/reseau\/freeradius\/accounting-journalier.html\",\"url\":\"http:\/\/www.netexpertise.eu\/fr\/reseau\/freeradius\/accounting-journalier.html\",\"name\":\"Netexpertise - Accounting journalier avec Freeradius et Mysql\",\"isPartOf\":{\"@id\":\"http:\/\/www.netexpertise.eu\/fr\/#website\"},\"datePublished\":\"2009-05-31T08:00:00+00:00\",\"dateModified\":\"2021-10-06T20:49:11+00:00\",\"author\":{\"@id\":\"http:\/\/www.netexpertise.eu\/fr\/#\/schema\/person\/e398f0307e2b167f6b884c4953be2632\"},\"breadcrumb\":{\"@id\":\"http:\/\/www.netexpertise.eu\/fr\/reseau\/freeradius\/accounting-journalier.html#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"http:\/\/www.netexpertise.eu\/fr\/reseau\/freeradius\/accounting-journalier.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"http:\/\/www.netexpertise.eu\/fr\/reseau\/freeradius\/accounting-journalier.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"http:\/\/www.netexpertise.eu\/fr\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Accounting journalier avec Freeradius et Mysql\"}]},{\"@type\":\"WebSite\",\"@id\":\"http:\/\/www.netexpertise.eu\/fr\/#website\",\"url\":\"http:\/\/www.netexpertise.eu\/fr\/\",\"name\":\"Netexpertise\",\"description\":\"Syst\u00e8mes \/ R\u00e9seaux \/ DevOps\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"http:\/\/www.netexpertise.eu\/fr\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Person\",\"@id\":\"http:\/\/www.netexpertise.eu\/fr\/#\/schema\/person\/e398f0307e2b167f6b884c4953be2632\",\"name\":\"dave\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"http:\/\/www.netexpertise.eu\/fr\/#\/schema\/person\/image\/\",\"url\":\"http:\/\/1.gravatar.com\/avatar\/1129916e1f4955bd632f27f836f64e55?s=96&d=mm&r=g\",\"contentUrl\":\"http:\/\/1.gravatar.com\/avatar\/1129916e1f4955bd632f27f836f64e55?s=96&d=mm&r=g\",\"caption\":\"dave\"},\"sameAs\":[\"http:\/\/www.netexpertise.eu\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Netexpertise - Accounting journalier avec Freeradius et Mysql","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"http:\/\/www.netexpertise.eu\/fr\/reseau\/freeradius\/accounting-journalier.html","og_locale":"fr_FR","og_type":"article","og_title":"Netexpertise - Accounting journalier avec Freeradius et Mysql","og_description":"J&rsquo;ai d\u00e9j\u00e0 vu plusieurs posts sur la liste d&rsquo;utilisateurs Freeradius et autres forums demandant comment r\u00e9cup\u00e9rer l&rsquo;accounting de chaque utilisateur \u00e0 intervalles r\u00e9guliers. Le protocole Radius fournit l&rsquo;accounting mais pas exactement de la fa\u00e7on d\u00e9sir\u00e9e. Voici une petite liste de choses que j&rsquo;aimerais modifier ou am\u00e9liorer: Le traffic n&rsquo;est pas collect\u00e9 \u00e0 intervalles r\u00e9guliersIl en [&hellip;]","og_url":"http:\/\/www.netexpertise.eu\/fr\/reseau\/freeradius\/accounting-journalier.html","og_site_name":"Netexpertise","article_published_time":"2009-05-31T08:00:00+00:00","article_modified_time":"2021-10-06T20:49:11+00:00","author":"dave","twitter_card":"summary_large_image","twitter_creator":"@netexpertise","twitter_site":"@netexpertise","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"http:\/\/www.netexpertise.eu\/fr\/reseau\/freeradius\/accounting-journalier.html","url":"http:\/\/www.netexpertise.eu\/fr\/reseau\/freeradius\/accounting-journalier.html","name":"Netexpertise - Accounting journalier avec Freeradius et Mysql","isPartOf":{"@id":"http:\/\/www.netexpertise.eu\/fr\/#website"},"datePublished":"2009-05-31T08:00:00+00:00","dateModified":"2021-10-06T20:49:11+00:00","author":{"@id":"http:\/\/www.netexpertise.eu\/fr\/#\/schema\/person\/e398f0307e2b167f6b884c4953be2632"},"breadcrumb":{"@id":"http:\/\/www.netexpertise.eu\/fr\/reseau\/freeradius\/accounting-journalier.html#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["http:\/\/www.netexpertise.eu\/fr\/reseau\/freeradius\/accounting-journalier.html"]}]},{"@type":"BreadcrumbList","@id":"http:\/\/www.netexpertise.eu\/fr\/reseau\/freeradius\/accounting-journalier.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"http:\/\/www.netexpertise.eu\/fr"},{"@type":"ListItem","position":2,"name":"Accounting journalier avec Freeradius et Mysql"}]},{"@type":"WebSite","@id":"http:\/\/www.netexpertise.eu\/fr\/#website","url":"http:\/\/www.netexpertise.eu\/fr\/","name":"Netexpertise","description":"Syst\u00e8mes \/ R\u00e9seaux \/ DevOps","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"http:\/\/www.netexpertise.eu\/fr\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"fr-FR"},{"@type":"Person","@id":"http:\/\/www.netexpertise.eu\/fr\/#\/schema\/person\/e398f0307e2b167f6b884c4953be2632","name":"dave","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"http:\/\/www.netexpertise.eu\/fr\/#\/schema\/person\/image\/","url":"http:\/\/1.gravatar.com\/avatar\/1129916e1f4955bd632f27f836f64e55?s=96&d=mm&r=g","contentUrl":"http:\/\/1.gravatar.com\/avatar\/1129916e1f4955bd632f27f836f64e55?s=96&d=mm&r=g","caption":"dave"},"sameAs":["http:\/\/www.netexpertise.eu"]}]}},"_links":{"self":[{"href":"http:\/\/www.netexpertise.eu\/fr\/wp-json\/wp\/v2\/posts\/16"}],"collection":[{"href":"http:\/\/www.netexpertise.eu\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.netexpertise.eu\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.netexpertise.eu\/fr\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/www.netexpertise.eu\/fr\/wp-json\/wp\/v2\/comments?post=16"}],"version-history":[{"count":0,"href":"http:\/\/www.netexpertise.eu\/fr\/wp-json\/wp\/v2\/posts\/16\/revisions"}],"wp:attachment":[{"href":"http:\/\/www.netexpertise.eu\/fr\/wp-json\/wp\/v2\/media?parent=16"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.netexpertise.eu\/fr\/wp-json\/wp\/v2\/categories?post=16"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.netexpertise.eu\/fr\/wp-json\/wp\/v2\/tags?post=16"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}