[Logs Platform] GELF / Monolog / Symfony 2

Bonjour,

Est-ce que quelqu'un est parvenu à configurer Logs Platform sur Symfony 2 ?

Je n'ai pas d'erreur et je vois bien des paquets UDP partir vers laas.runabove.com sur le port 12202 mais je ne vois rien dans graylog.

Je pense que le problème vient de la transmission du _X-OVH-TOKEN. J'utilise pour cela un processor Monolog spécifique :

```php
namespace RP\CoreBundle;

class OvhLogsProcessor
{
public function __construct()
{
}
public function processRecord(array $record)
{
$record['extra']['_X-OVH-TOKEN'] = 'xxxx';

return $record;
}
}
```

et un service :
```
rp_ovh_logs:
class: RP\CoreBundle\OvhLogsProcessor
tags:
- { name: monolog.processor, method: processRecord, handler: "gelf" }
```

Si quelqu'un peut m'aider…

Bonjour,
Tout d'abord, merci pour l'intêret que vous portez à Logs Data Platform.
Le port à utiliser pour le transport UDP sur Logs Data Platform est le port 2202.

Vous pouvez retrouver la liste des ports des points d'entrée sur la page "à propos" du manager Sunrise.

Accédez y directement en utilisant l'onglet dédié ou l'icone "i" située en haut à gauche sur la page principale.

En effet, merci !
Malheureusement, cela ne résout pas le problème

Avez vous essayé ceci ?

$record['extra']['X-OVH-TOKEN'] = 'xxxx';

Je pense que monolog préfixe tous les extras automatiquement.

Dans le doute, j'avais essayé les deux en effet.

J'y suis arrivé avec cette lib: https://github.com/bzikarsky/gelf-php

./composer.phar require graylog2/gelf-php

puis le code suivant:


require DIR . '/vendor/autoload.php';

// We need a transport - TCP via port 12201 is standard.
$transport = new Gelf\Transport\TcpTransport("laas.runabove.com", 2202);
// While the TCP transport is itself a publisher, we wrap it in a real Publisher for convenience
// A publisher allows for message validation before transmission, and it calso supports to send messages
// to multiple backends at once
$publisher = new Gelf\Publisher();
$publisher->addTransport($transport);
// Now we can create custom messages and publish them
$message = new Gelf\Message();
$message->setShortMessage("It works in TCP!")
->setLevel(\Psr\Log\LogLevel::ALERT)
->setFullMessage("There was a foo in bar")
->setAdditional("X-OVH-TOKEN", "***********")
->setFacility("local8")
;
$publisher->publish($message);

Je suis persuadé que ça doit marcher avec le handler gelf de base de monolog si les logs sont publiés en TCP, mais cela me demande un peu plus d'investigation.

Bonjour Paul,

J'ai déjà regardé pour envoyer mes logs dans Logs Plateform depuis symfony2 via monolog.

En creusant, je me suis rendu compte que le format de Gelf n'envoit pas les données correctement. De mémoire, il manque une metadata envoyée.
https://stfalcon.com/en/blog/post/symfony-with-graylog

Je vais essayer de regarder ce soir de nouveau.
Cordialement,
Vincent

C'est bien le transport en UDP qui pose problème ! En forçant en TCP ça marche.

Et effectivement, en passant le tcpdump en verbose, il y a cette erreur sur les paquets UDP :

bad udp cksum

Merci pour votre aide. Je vais quand même essayer de debugger la version UDP, je pense que ce choix est pas déconnant…

Bonjour, la dernière version de la bibliothèque de transport UDP utilisée par Monolog utilise par défaut la compression en UDP, ce qui n'est aujourd'hui pas supporté sur le point d'entrée UDP de Logs Data Platform. Il est possible que ce soit cela qui empêche la transmission de vos messages.

Salut,

La compression est maintenant supportée sur le transport UDP.
Pourriez-vous retester votre librairie monolog ?

Merci

Bonjour,

Je confirme, ça fonctionne nickel désormais en UDP avec les paramétrages de base de Monolog (testé uniquement sur laas.runabove.com pour le moment, pas encore en prod).
Merci beaucoup pour vos investigations, j'espère que cela servira à d'autres utilisateurs de Symfony…